Introduction
You can use our ProductLift's API to smoothly integrate ProductLift with other services.
This documentation aims to provide all the information you need to work with our API.
Base URL
{YOUR_PORTAL_URL}
Authenticating requests
To authenticate requests, include an Authorization
header with the value "Bearer {YOUR_AUTH_KEY}"
.
All authenticated endpoints are marked with a requires authentication
badge in the documentation below.
You can retrieve your token by visiting your portal and go to Customize > API & Webhooks.
Anonymous Votes
Manage anonymous votes on posts and comments.
Vote anonymously
requires authentication
Add an anonymous vote to a post or comment.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/anonymous_votes/ad" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/anonymous_votes/ad"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/anonymous_votes/ad',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/anonymous_votes/ad'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"created_at": "2024-11-08T15:15:01.000000Z",
"voter": null
}
}
Example response (404):
{
"message": "No query results for model ..."
}
Example response (422):
{
"message": "Item is not voteable."
}
Example response (422):
{
"message": "Anonymous user has already voted for this item."
}
Received response:
Request failed with error:
Revoke anonymous vote
requires authentication
Revoke an anonymous vote for a post or comment.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/anonymous_votes/in" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/anonymous_votes/in"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/anonymous_votes/in',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/anonymous_votes/in'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{}
Example response (404):
{
"message": "No query results for model ..."
}
Example response (422):
{
"message": "Item is not voteable."
}
Example response (422):
{
"message": "Anonymous user has not voted yet."
}
Received response:
Request failed with error:
Categories
Categories (e.g. Bug, Integration) can be used to organize and group posts. Categories are visible for your users. Posts can have multiple categories.
List categories
requires authentication
Lists all categories of your portal.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/categories" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/categories"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/categories',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/categories'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": 1,
"name": "Bug",
"color": "#ABDEE6"
},
{
"id": 1,
"name": "Bug",
"color": "#ABDEE6"
}
]
}
Received response:
Request failed with error:
Create category
requires authentication
Creates a new category in your portal.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/categories" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/categories"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/categories',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/categories'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": 1,
"name": "Bug",
"color": "#ABDEE6"
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The name has already been taken."
]
}
Received response:
Request failed with error:
Delete category
requires authentication
Deletes a specified category.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/categories/18" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/categories/18"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/categories/18',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/categories/18'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{
"message": "Category deleted successfully"
}
Example response (404):
{
"message": "Category not found"
}
Example response (403):
{
"message": "You do not have permission to delete this category"
}
Received response:
Request failed with error:
Update category
requires authentication
Updates the details of a category.
Example request:
curl --request PATCH \
"{YOUR_PORTAL_URL}/api/v1/categories/11" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"cywovtfwvqwcqqrsxyjanddbppxdcbbjhjazzht\",
\"color\": \"#fe5c77$\\/m\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/categories/11"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"name": "cywovtfwvqwcqqrsxyjanddbppxdcbbjhjazzht",
"color": "#fe5c77$\/m"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
'{YOUR_PORTAL_URL}/api/v1/categories/11',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'name' => 'cywovtfwvqwcqqrsxyjanddbppxdcbbjhjazzht',
'color' => '#fe5c77$/m',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/categories/11'
payload = {
"name": "cywovtfwvqwcqqrsxyjanddbppxdcbbjhjazzht",
"color": "#fe5c77$\/m"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": 1,
"name": "Bug",
"color": "#ABDEE6"
}
}
Example response (404):
{
"message": "Category not found."
}
Example response (403):
{
"message": "You do not have permission to update this category."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The name has already been taken.",
"The name must be at least 2 characters.",
"The name may not be greater than 60 characters."
],
"color": [
"The color format is invalid. It should be a valid hex color code (e.g., #FF5733)."
]
}
}
Received response:
Request failed with error:
Comments
Comments can be added to posts. Each post can have multiple comments.
List comments
requires authentication
Retrieves all comments for a specific post.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/posts/abc123/comments" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/abc123/comments"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/posts/abc123/comments',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/abc123/comments'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": null,
"comment": "Yes 😍",
"author": {
"id": "4d47819a-fa99-4319-95f4-f4c30c7e86e4",
"name": "oubiha mohamed",
"email": "mohaoubiha@gmail.com",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/13e445aeb61694eb2109326d7e611bcb?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/oubiha+mohamed/60/8FCACA/003434",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2023-03-28T15:25:31.000000Z",
"is_blocked": 0,
"verified": true,
"admin_accepted": 0,
"sso_uid": "74899",
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
},
"pinned_to_top": false,
"tagged_for_changelog": false,
"parent_id": null,
"created_at": null,
"updated_at": null,
"url": "{YOUR-PORTAL-URL}/p/example-slug-123456#comment_123"
},
{
"id": null,
"comment": "When can this be available?",
"author": {
"id": "fff9da8d-5f5d-45f8-a530-4fa23e9676c2",
"name": "Bruce Wayne",
"email": "dioman.ko@gmail.com",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/82dab8351e0c037ba871fb4a25b06c39?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Bruce+Wayne/60/FFC8A2/69320c",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-04-26T19:44:06.000000Z",
"is_blocked": 0,
"verified": false,
"admin_accepted": 1,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
},
"pinned_to_top": false,
"tagged_for_changelog": false,
"parent_id": null,
"created_at": null,
"updated_at": null,
"url": "{YOUR-PORTAL-URL}/p/example-slug-123456#comment_123"
}
]
}
Example response (404):
{
"message": "No query results for model [App\\Post] ..."
}
Received response:
Request failed with error:
Create comment
requires authentication
Adds a new comment to a specific post.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/posts/abc123/comments" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user_id\": \"ad80d9df-d5e4-3b3b-b8b4-cc4599aa64dc\",
\"comment\": \"This is a new comment\",
\"parent_id\": 1,
\"tagged_for_changelog\": \"true\",
\"pinned_to_top\": \"true\",
\"created_at\": \"2023-08-11 14:30:00\",
\"use_for_changelog\": false,
\"pin_to_top\": false
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/abc123/comments"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user_id": "ad80d9df-d5e4-3b3b-b8b4-cc4599aa64dc",
"comment": "This is a new comment",
"parent_id": 1,
"tagged_for_changelog": "true",
"pinned_to_top": "true",
"created_at": "2023-08-11 14:30:00",
"use_for_changelog": false,
"pin_to_top": false
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/posts/abc123/comments',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user_id' => 'ad80d9df-d5e4-3b3b-b8b4-cc4599aa64dc',
'comment' => 'This is a new comment',
'parent_id' => 1,
'tagged_for_changelog' => 'true',
'pinned_to_top' => 'true',
'created_at' => '2023-08-11 14:30:00',
'use_for_changelog' => false,
'pin_to_top' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/abc123/comments'
payload = {
"user_id": "ad80d9df-d5e4-3b3b-b8b4-cc4599aa64dc",
"comment": "This is a new comment",
"parent_id": 1,
"tagged_for_changelog": "true",
"pinned_to_top": "true",
"created_at": "2023-08-11 14:30:00",
"use_for_changelog": false,
"pin_to_top": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": null,
"comment": "Nice! This sounds good :)",
"author": {
"id": "773e7602-fdfb-4a33-bd09-9b743ff3986d",
"name": "Bruce Wayne",
"email": "joelbrgal@yahoo.com",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/1ab56f4055fb400aee2f37224ffe079d?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Bruce+Wayne/60/FFC8A2/69320c",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-04-26T10:41:04.000000Z",
"is_blocked": 0,
"verified": false,
"admin_accepted": 1,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
},
"pinned_to_top": false,
"tagged_for_changelog": false,
"parent_id": null,
"created_at": null,
"updated_at": null,
"url": "{YOUR-PORTAL-URL}/p/example-slug-123456#comment_123"
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"comment": [
"The comment field is required."
]
}
}
Received response:
Request failed with error:
Update comment
requires authentication
Updates the details of a comment.
Example request:
curl --request PUT \
"{YOUR_PORTAL_URL}/api/v1/comments/17" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"comment\": \"This is an updated comment\",
\"parent_id\": 1,
\"tagged_for_changelog\": \"1\",
\"pinned_to_top\": \"0\",
\"created_at\": \"2023-08-11 14:30:00\",
\"use_for_changelog\": false,
\"pin_to_top\": false
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/comments/17"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"comment": "This is an updated comment",
"parent_id": 1,
"tagged_for_changelog": "1",
"pinned_to_top": "0",
"created_at": "2023-08-11 14:30:00",
"use_for_changelog": false,
"pin_to_top": false
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
'{YOUR_PORTAL_URL}/api/v1/comments/17',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'comment' => 'This is an updated comment',
'parent_id' => 1,
'tagged_for_changelog' => '1',
'pinned_to_top' => '0',
'created_at' => '2023-08-11 14:30:00',
'use_for_changelog' => false,
'pin_to_top' => false,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/comments/17'
payload = {
"comment": "This is an updated comment",
"parent_id": 1,
"tagged_for_changelog": "1",
"pinned_to_top": "0",
"created_at": "2023-08-11 14:30:00",
"use_for_changelog": false,
"pin_to_top": false
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": null,
"comment": "Yes 😍",
"author": {
"id": "54c08278-692d-4d27-a500-c1787cc9d32b",
"name": "Bruce Wayne",
"email": "clchandre@premiercollections.be",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/b6101e392410bae54f59163678332d19?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Bruce+Wayne/60/FFC8A2/69320c",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-04-19T08:29:32.000000Z",
"is_blocked": 0,
"verified": false,
"admin_accepted": 1,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
},
"pinned_to_top": false,
"tagged_for_changelog": false,
"parent_id": null,
"created_at": null,
"updated_at": null,
"url": "{YOUR-PORTAL-URL}/p/example-slug-123456#comment_123"
}
}
Example response (404):
{
"message": "No query results for model [App\\Comment] ..."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"comment": [
"The comment field is required."
]
}
}
Received response:
Request failed with error:
Delete comment
requires authentication
Deletes a specified comment.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/comments/16" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/comments/16"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/comments/16',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/comments/16'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{}
Example response (404):
{
"message": "No query results for model [App\\Comment] ..."
}
Received response:
Request failed with error:
Feedback
Handles operations related to user feedback including listing, creating, updating, deleting, and analyzing feedback.
List feedback
requires authentication
Retrieves a collection of all feedback entries, ordered by creation date in descending order.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/feedback" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/feedback"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/feedback',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/feedback'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 59
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Create feedback
requires authentication
Stores a new feedback entry in the database.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/feedback" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"type\": \"deleniti\",
\"feedback\": \"totam\",
\"user_id\": \"190a6b17-3a7d-3b22-a61d-a92c3af6bcc4\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/feedback"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"type": "deleniti",
"feedback": "totam",
"user_id": "190a6b17-3a7d-3b22-a61d-a92c3af6bcc4"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/feedback',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'type' => 'deleniti',
'feedback' => 'totam',
'user_id' => '190a6b17-3a7d-3b22-a61d-a92c3af6bcc4',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/feedback'
payload = {
"type": "deleniti",
"feedback": "totam",
"user_id": "190a6b17-3a7d-3b22-a61d-a92c3af6bcc4"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"feedback": [
"The feedback field is required."
]
}
}
Received response:
Request failed with error:
Update feedback
requires authentication
Updates an existing feedback entry.
Example request:
curl --request PUT \
"{YOUR_PORTAL_URL}/api/v1/feedback/et" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"feedback\": \"et\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/feedback/et"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"feedback": "et"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
'{YOUR_PORTAL_URL}/api/v1/feedback/et',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'feedback' => 'et',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/feedback/et'
payload = {
"feedback": "et"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (404):
{
"message": "No query results for model [App\\Models\\Feedback] ..."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"feedback": [
"The feedback field must be given."
]
}
}
Received response:
Request failed with error:
Delete feedback
requires authentication
Removes a specified feedback entry from the database.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/feedback/consequatur" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/feedback/consequatur"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/feedback/consequatur',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/feedback/consequatur'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{}
Example response (404):
{
"message": "No query results for model [App\\Models\\Feedback] ..."
}
Received response:
Request failed with error:
Summarize feedback
requires authentication
Generates a summary of filtered feedback using AI analysis.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/feedback/summarize" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"sentiment\": \"positive\",
\"focus\": \"functionality\",
\"source\": \"commodi\",
\"widget\": \"150bb1c8-0c18-31de-ac3a-d421fd7e6e5f\",
\"created_from\": \"2024-11-23T22:11:29\",
\"created_to\": \"2024-11-23T22:11:29\",
\"keyword\": \"ea\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/feedback/summarize"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"sentiment": "positive",
"focus": "functionality",
"source": "commodi",
"widget": "150bb1c8-0c18-31de-ac3a-d421fd7e6e5f",
"created_from": "2024-11-23T22:11:29",
"created_to": "2024-11-23T22:11:29",
"keyword": "ea"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/feedback/summarize',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'sentiment' => 'positive',
'focus' => 'functionality',
'source' => 'commodi',
'widget' => '150bb1c8-0c18-31de-ac3a-d421fd7e6e5f',
'created_from' => '2024-11-23T22:11:29',
'created_to' => '2024-11-23T22:11:29',
'keyword' => 'ea',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/feedback/summarize'
payload = {
"sentiment": "positive",
"focus": "functionality",
"source": "commodi",
"widget": "150bb1c8-0c18-31de-ac3a-d421fd7e6e5f",
"created_from": "2024-11-23T22:11:29",
"created_to": "2024-11-23T22:11:29",
"keyword": "ea"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Received response:
Request failed with error:
Groups
Group management lets you organize users, control access, and customize experiences. Use it for focus groups, beta tests, customer segments, or team organization. After creating groups, you can set tab visibility for specific groups and choose who can access them.
List groups
requires authentication
Lists all groups.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/groups',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/groups'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": "024fbe81-0c1c-4b7e-81d2-d89659c9d6b1",
"portal_id": 3674,
"name": "Sureders",
"description": null,
"created_at": "2024-10-21T17:15:47.000000Z",
"updated_at": "2024-10-21T17:15:47.000000Z"
},
{
"id": "024fbe81-0c1c-4b7e-81d2-d89659c9d6b1",
"portal_id": 3674,
"name": "Sureders",
"description": null,
"created_at": "2024-10-21T17:15:47.000000Z",
"updated_at": "2024-10-21T17:15:47.000000Z"
}
]
}
Received response:
Request failed with error:
Create group
requires authentication
Creates a new group.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/groups" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"description\": \"occaecati\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/groups"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"description": "occaecati"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/groups',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'description' => 'occaecati',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/groups'
payload = {
"description": "occaecati"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": "024fbe81-0c1c-4b7e-81d2-d89659c9d6b1",
"portal_id": 3674,
"name": "Sureders",
"description": null,
"created_at": "2024-10-21T17:15:47.000000Z",
"updated_at": "2024-10-21T17:15:47.000000Z"
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The name has already been taken."
]
}
}
Received response:
Request failed with error:
Show group
requires authentication
Displays details of a specific group.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/groups/9" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/groups/9"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/groups/9',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/groups/9'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": "024fbe81-0c1c-4b7e-81d2-d89659c9d6b1",
"portal_id": 3674,
"name": "Sureders",
"description": null,
"created_at": "2024-10-21T17:15:47.000000Z",
"updated_at": "2024-10-21T17:15:47.000000Z"
}
}
Example response (404):
{
"message": "No query results for model [App\\Group] ..."
}
Received response:
Request failed with error:
Update group
requires authentication
Updates the details of a group.
Example request:
curl --request PUT \
"{YOUR_PORTAL_URL}/api/v1/groups/2" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"description\": \"quibusdam\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/groups/2"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"description": "quibusdam"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
'{YOUR_PORTAL_URL}/api/v1/groups/2',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'description' => 'quibusdam',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/groups/2'
payload = {
"description": "quibusdam"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": "024fbe81-0c1c-4b7e-81d2-d89659c9d6b1",
"portal_id": 3674,
"name": "Sureders",
"description": null,
"created_at": "2024-10-21T17:15:47.000000Z",
"updated_at": "2024-10-21T17:15:47.000000Z"
}
}
Example response (404):
{
"message": "No query results for model [App\\Group] ..."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The name has already been taken."
]
}
}
Received response:
Request failed with error:
Delete group
requires authentication
Deletes a specified group.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/groups/13" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/groups/13"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/groups/13',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/groups/13'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{
"message": "Group deleted successfully"
}
Example response (404):
{
"message": "No query results for model [App\\Group] ..."
}
Received response:
Request failed with error:
Add user to group
requires authentication
Adds a user to the specified group.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/groups/soluta/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user_id\": 20
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/groups/soluta/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user_id": 20
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/groups/soluta/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user_id' => 20,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/groups/soluta/users'
payload = {
"user_id": 20
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"message": "User added to group successfully"
}
Example response (404):
{
"message": "Group or User not found"
}
Example response (422):
{
"message": "User is already in the group"
}
Received response:
Request failed with error:
Remove user from group
requires authentication
Removes a user from the specified group.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/groups/dignissimos/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"user_id\": 4
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/groups/dignissimos/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"user_id": 4
};
fetch(url, {
method: "DELETE",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/groups/dignissimos/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'user_id' => 4,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/groups/dignissimos/users'
payload = {
"user_id": 4
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"message": "User removed from group successfully"
}
Example response (404):
{
"message": "Group or User not found"
}
Example response (422):
{
"message": "User is not in the group"
}
Received response:
Request failed with error:
Get users in group
requires authentication
Retrieves all users belonging to a specific group.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/groups/et/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/groups/et/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/groups/et/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/groups/et/users'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": "83d3c512-9e0a-4369-b8b3-a9fc01165712",
"name": "Mortimer",
"email": "oran65@example.org",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/329f3191dd442618247b279b9c272cbb?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Mortimer/60/8FCACA/003434",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-11-23T22:11:29.000000Z",
"is_blocked": null,
"verified": null,
"admin_accepted": null,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
},
{
"id": "69a7a6d0-cd52-4844-a4a7-01e3fd89a68f",
"name": "Vicky",
"email": "carter.feeney@example.net",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/58167300da9283ed3274171644260c29?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Vicky/60/FFAEA5/69180f",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-11-23T22:11:29.000000Z",
"is_blocked": null,
"verified": null,
"admin_accepted": null,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
]
}
Example response (200):
{
"data": [
{
"id": 1,
"name": "John Doe",
"email": "john@example.com",
// ... other user attributes
},
// ... more users
]
}
Example response (404):
{
"message": "No query results for model [App\\Group] ..."
}
Received response:
Request failed with error:
Moderation
Handles operations related to post and comment moderation including listing pending and rejected items, approving, and rejecting them.
Get pending items
requires authentication
Retrieves all posts and comments with a moderation status of 'pending'.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/moderation/pending" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/moderation/pending"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/moderation/pending',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/moderation/pending'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 58
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Get rejected items
requires authentication
Retrieves all posts and comments with a moderation status of 'rejected'.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/moderation/rejected" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/moderation/rejected"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/moderation/rejected',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/moderation/rejected'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 57
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Reject item (post or comment)
requires authentication
Updates the specified post or comment's moderation status to 'rejected'.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/moderation/reject/quam/dolor" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/moderation/reject/quam/dolor"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/moderation/reject/quam/dolor',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/moderation/reject/quam/dolor'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Received response:
Request failed with error:
Approve item (post or comment)
requires authentication
Updates the specified post or comment's moderation status to 'approved'.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/moderation/approve/quisquam/iste" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/moderation/approve/quisquam/iste"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/moderation/approve/quisquam/iste',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/moderation/approve/quisquam/iste'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Received response:
Request failed with error:
Other endpoints
PUT api/v1/posts/{key}/toggle-publish
requires authentication
Example request:
curl --request PUT \
"{YOUR_PORTAL_URL}/api/v1/posts/17/toggle-publish" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/17/toggle-publish"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "PUT",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
'{YOUR_PORTAL_URL}/api/v1/posts/17/toggle-publish',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/17/toggle-publish'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers)
response.json()
Received response:
Request failed with error:
Portal
You should see a portal as a single project for your product or service. It can consist of roadmaps, changelogs, voting boards, etc.
Get portal
requires authentication
Retrieves the details of your portal.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/portal" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/portal"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/portal',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/portal'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"guid": "c94866a3-253c-45c3-8190-334241949587",
"title": "velit quo",
"localization": "en"
}
}
Received response:
Request failed with error:
Posts
Manage posts.
Find duplicates
requires authentication
Searches the database for duplicate posts.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/posts/search_duplicates" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/search_duplicates"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/posts/search_duplicates',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/search_duplicates'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"count": 0,
}
Example response (200):
{
"count": 1,
"posts": {
{
"id": "d8QEXH",
"title": "Open links in new window",
"description": "Option to open links in a new window."
}
}
}
Received response:
Request failed with error:
Create post
requires authentication
Creates a new post in your portal.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/posts" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: multipart/form-data" \
--header "Accept: application/json" \
--form "title=herudolklrwthpogazynkwerfttygmfaggwopamcriznpc" \
--form "description=quia" \
--form "category_id=18" \
--form "status_id=8" \
--form "section_id=8" \
--form "user_id=9c79235a-348c-3e71-8441-3a89f5fb5a69" \
--form "allow_comments=1" \
--form "jira_key=omnis" \
--form "azure_boards_key=doloribus" \
--form "estimated_date=2024-11-23T22:11:28" \
--form "tags[]=rrzvryhjgnfazebketscvgitfvlvdttitulnovlukkpajssvhezzuoc" \
--form "created_at=2024-11-23T22:11:28" \
--form "prioritization_impact=1" \
--form "prioritization_confidence=74" \
--form "prioritization_ease=92" \
--form "prioritization_reach=37" \
--form "moscow_priority=W" \
--form "prioritization_color=sbvw" \
--form "manual_bonus_votes=7" \
--form "is_published=0" \
--form "image=@/tmp/phpJLGPya" \
--form "attachment=@/tmp/phpRnEd47"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "multipart/form-data",
"Accept": "application/json",
};
const body = new FormData();
body.append('title', 'herudolklrwthpogazynkwerfttygmfaggwopamcriznpc');
body.append('description', 'quia');
body.append('category_id', '18');
body.append('status_id', '8');
body.append('section_id', '8');
body.append('user_id', '9c79235a-348c-3e71-8441-3a89f5fb5a69');
body.append('allow_comments', '1');
body.append('jira_key', 'omnis');
body.append('azure_boards_key', 'doloribus');
body.append('estimated_date', '2024-11-23T22:11:28');
body.append('tags[]', 'rrzvryhjgnfazebketscvgitfvlvdttitulnovlukkpajssvhezzuoc');
body.append('created_at', '2024-11-23T22:11:28');
body.append('prioritization_impact', '1');
body.append('prioritization_confidence', '74');
body.append('prioritization_ease', '92');
body.append('prioritization_reach', '37');
body.append('moscow_priority', 'W');
body.append('prioritization_color', 'sbvw');
body.append('manual_bonus_votes', '7');
body.append('is_published', '0');
body.append('image', document.querySelector('input[name="image"]').files[0]);
body.append('attachment', document.querySelector('input[name="attachment"]').files[0]);
fetch(url, {
method: "POST",
headers,
body,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/posts',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'multipart/form-data',
'Accept' => 'application/json',
],
'multipart' => [
[
'name' => 'title',
'contents' => 'herudolklrwthpogazynkwerfttygmfaggwopamcriznpc'
],
[
'name' => 'description',
'contents' => 'quia'
],
[
'name' => 'category_id',
'contents' => '18'
],
[
'name' => 'status_id',
'contents' => '8'
],
[
'name' => 'section_id',
'contents' => '8'
],
[
'name' => 'user_id',
'contents' => '9c79235a-348c-3e71-8441-3a89f5fb5a69'
],
[
'name' => 'allow_comments',
'contents' => '1'
],
[
'name' => 'jira_key',
'contents' => 'omnis'
],
[
'name' => 'azure_boards_key',
'contents' => 'doloribus'
],
[
'name' => 'estimated_date',
'contents' => '2024-11-23T22:11:28'
],
[
'name' => 'tags[]',
'contents' => 'rrzvryhjgnfazebketscvgitfvlvdttitulnovlukkpajssvhezzuoc'
],
[
'name' => 'created_at',
'contents' => '2024-11-23T22:11:28'
],
[
'name' => 'prioritization_impact',
'contents' => '1'
],
[
'name' => 'prioritization_confidence',
'contents' => '74'
],
[
'name' => 'prioritization_ease',
'contents' => '92'
],
[
'name' => 'prioritization_reach',
'contents' => '37'
],
[
'name' => 'moscow_priority',
'contents' => 'W'
],
[
'name' => 'prioritization_color',
'contents' => 'sbvw'
],
[
'name' => 'manual_bonus_votes',
'contents' => '7'
],
[
'name' => 'is_published',
'contents' => '0'
],
[
'name' => 'image',
'contents' => fopen('/tmp/phpJLGPya', 'r')
],
[
'name' => 'attachment',
'contents' => fopen('/tmp/phpRnEd47', 'r')
],
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts'
files = {
'image': open('/tmp/phpJLGPya', 'rb'),
'attachment': open('/tmp/phpRnEd47', 'rb')
}
payload = {
"title": "herudolklrwthpogazynkwerfttygmfaggwopamcriznpc",
"description": "quia",
"category_id": 18,
"status_id": 8,
"section_id": 8,
"user_id": "9c79235a-348c-3e71-8441-3a89f5fb5a69",
"allow_comments": "1",
"jira_key": "omnis",
"azure_boards_key": "doloribus",
"estimated_date": "2024-11-23T22:11:28",
"tags": [
"rrzvryhjgnfazebketscvgitfvlvdttitulnovlukkpajssvhezzuoc"
],
"created_at": "2024-11-23T22:11:28",
"prioritization_impact": 1,
"prioritization_confidence": 74,
"prioritization_ease": 92,
"prioritization_reach": 37,
"moscow_priority": "W",
"prioritization_color": "sbvw",
"manual_bonus_votes": 7,
"is_published": "0"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'multipart/form-data',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, files=files, data=payload)
response.json()
Example response (404):
{
"message": "No query results for model [App\\User] ..."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"user_id": [
"The user id must be a valid UUID."
]
}
Example response (200):
{
"data": {
"id": "WEukJy",
"uid": "WEukJy-uid",
"title": "Photo upload",
"description_short": "It would be great if I can upload a photo.",
"description": "It would be great if I can upload a photo. This feature would allow users to share visual content directly within the platform.",
"description_changelog": "Added photo upload functionality to enhance user experience.",
"clean_description_changelog": "Added photo upload functionality to enhance user experience.",
"image_main": "https://example.com/images/photo-upload.jpg",
"votes_count": 15,
"comments_count": 3,
"views_count": 100,
"url": "https://your-portal-url.com/p/photo-upload-WEukJy",
"url_edit": "https://your-portal-url.com/admin/posts/edit/WEukJy",
"url_delete": "https://your-portal-url.com/admin/posts/delete/WEukJy",
"created_at": "2023-05-15T10:00:00Z",
"updated_at": "2023-05-16T14:30:00Z",
"latest_status_change_at": "2023-05-16T14:30:00Z",
"latest_status_change_at_formatted": "16 May 2023",
"author": {
"id": "420b8cfb-2c3d-4df2-b6bd-7ac6aae1a14a",
"name": "Madalyn",
"email": "robyn.oconner@example.net",
"role": "member",
"counter_votes": 4,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0
},
"categories": [
{
"id": 3,
"name": "Integration",
"color": "#FFAEA5"
}
],
"status": {
"id": 3,
"name": "💪 Now available",
"color": "#FFCCB6",
"tab_name": "Updates"
},
"section_id": 2,
"moderation_status": "approved",
"conversion": 0.75,
"prioritization_impact": 8,
"prioritization_confidence": 7,
"prioritization_ease": 6,
"prioritization_reach": 9
}
}
Received response:
Request failed with error:
Get post
requires authentication
Retrieves the details of a specified post.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/posts/7" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/7"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/posts/7',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/7'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (404):
{
"message": "No query results for model [App\\Post] ..."
}
Example response (200):
{
"data": {
"id": "WEukJy",
"uid": "WEukJy-uid",
"title": "Photo upload",
"description_short": "It would be great if I can upload a photo.",
"description": "It would be great if I can upload a photo. This feature would allow users to share visual content directly within the platform.",
"description_changelog": "Added photo upload functionality to enhance user experience.",
"clean_description_changelog": "Added photo upload functionality to enhance user experience.",
"image_main": "https://example.com/images/photo-upload.jpg",
"votes_count": 15,
"comments_count": 3,
"views_count": 100,
"url": "https://your-portal-url.com/p/photo-upload-WEukJy",
"url_edit": "https://your-portal-url.com/admin/posts/edit/WEukJy",
"url_delete": "https://your-portal-url.com/admin/posts/delete/WEukJy",
"created_at": "2023-05-15T10:00:00Z",
"updated_at": "2023-05-16T14:30:00Z",
"latest_status_change_at": "2023-05-16T14:30:00Z",
"latest_status_change_at_formatted": "16 May 2023",
"author": {
"id": "420b8cfb-2c3d-4df2-b6bd-7ac6aae1a14a",
"name": "Madalyn",
"email": "robyn.oconner@example.net",
"role": "member",
"counter_votes": 4,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0
},
"categories": [
{
"id": 3,
"name": "Integration",
"color": "#FFAEA5"
}
],
"status": {
"id": 3,
"name": "💪 Now available",
"color": "#FFCCB6",
"tab_name": "Updates"
},
"section_id": 2,
"moderation_status": "approved",
"conversion": 0.75,
"prioritization_impact": 8,
"prioritization_confidence": 7,
"prioritization_ease": 6,
"prioritization_reach": 9
}
}
Received response:
Request failed with error:
Update post
requires authentication
Updates the specified post by setting the values of the parameters passed. Any parameters not provided will be left unchanged. This endpoint allows for updating the post's general attributes, status, and tags.
Example request:
curl --request PATCH \
"{YOUR_PORTAL_URL}/api/v1/posts/8" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"byzugcrzwdghemzmhzpvclnclqvvuajzphsznshsacthecumrcucdixwlzttwqrfjppxkcfiipifyvsidparxizskmpkouyfucwrlhshqhhajfxrgnzi\",
\"description\": \"culpa\",
\"user_id\": \"94fd1e45-81ca-3436-8248-761e96ef48bf\",
\"section_id\": 516373.20906,
\"allow_comments\": \"true\",
\"jira_key\": \"iste\",
\"azure_boards_key\": \"itaque\",
\"estimated_date\": \"2024-11-23T22:11:28\",
\"status\": 2.57134468,
\"status_update_email\": \"zmnborucbfrcbxymwsseciucrjsodghmzizxlljedulnzwyayvhtqmdofwvhwijncaeyyaqjrruobxdejiiqpxxjsbydrjllyonbrxgmefbhooppgnwwpvfymndqskklvntscimbmqqarjklchqvjuljadeqvmcjffikkizuazpofxwuaztalcydmoupaiosuozzzdgppgqomqjodkufkzcwnluuvyxqshuojpkxxqvfsjtwwrsixhhzfafogxhracucnctzsaxdddgtwukwpqpidwwxlvmuxrjpcwbhfctxjrymvyzexgsqqlhjjybes\",
\"status_update_comment\": \"cesqqewskgynmlyiorovdaspbmojknzoceejqeiekygacqllvucwvclqtxokmuxnmqbrdgqlgccfgkukphbaufcyrdixtwdrjeuflexuzdzgqatriiznlyigikyhbbagcktneaiukumcrnljomgkstsijsuternbynyfnoasxssrswdavorsxavbuydebidygqzqkxkmwwmlagodbktahcesszawcporhfjxbpvucmxiwjicoqbvbasccownkcaortfhkrauwrjllvactuqbivkxdiycvjdiqghzwiyjgoyxnvuysuuwykvfpimxbxrimzozedhioutwtjgjvvfbpkbjvolybzlfucgvvkdkbabjsyqthzofqjcfbjxynzjzemxplpgvkyrlqtfwvqamyinomjnfeccpdhmfltowbcpxfowzikhxqzgttkfcnkmbkmahckhhezwnzwscangzhvkyhddzjokcsrdzabwdcrwewyecnxjlvkmjvwqkwhwacabrfegbvxbqmqbvtxgsyzljlofawqkbaqqkwbgushjxovlmdwkifxcvgprommxohkmxzammvokglqpyhaajqnygsstazddaogquuswuokwuaabzxfzndxfadsarlnlwhemndnmsznrblmygdgogdhnvdaswwrmxffddgtjvhzasfpltwbpgprihapcojdczjtnqxepqprnjdgwstzymoexdsnqqpvgudwesmuhvwludznuqddypcjrqqrbuklvfotvjixkselopyorplpqujdpsqoaqextjcrgoysqjpxheiixmjadvtcrfubhcshrqbvatghsjeankuzidtqrxllywexmcqcvhidjxhomlohehkjqqtsjfeoubtrtcihtppdaichibhgsykzkysmehrlvenjqxhujhpeocxicbaugkbrkllkmcyrjubkuelggoxlneypdncsucfqhrmtsqlvyxlcewpsnvjxltcpkmdnpkgwrrrzrnicqdyiohvvuilfjzevoahbjttepercykmiskcqqksmyvrkluiqjxmqqthrsonttiqvpmvgaeqwihpsyfcgrdxmhjfstggakytobnvgkalksrtxmxeciwwqmgoxcsuubgzzaxhqzigxcslmruhnmcyeicgcwjhbyyihwvaiafiptjwaymrgnkgwgxtrmulzquulogjufievzbrdjbjrkdxudzledzareisemtqottilfeshwszjctlaaimlsulyuupjebjmiwvuutsgcnkzuknybkzaoliyqypyswgbgkdhqxdmraxxstweenfghdiawnffyxtbrrfplxggkkvvgsoyzfmgscchwawsdqictycpyffqdcwwcmkxnyryhajzndwbllkkckcpmeqojbaecaiaewurjepuktxxnmunruvqfmmtuggxjmwdwtytdtymizklofnpdzbhmvjledogltfkhuqzgsmcuggnvbxaqyfrgjoypdzwdfuextnqmgbnidbaeqvqcbpkrlpexunsfjkwofcosvhtpcuijajieqoaeoclirqwdphochtufxbohnnusiblcgltrmiqgfilcspgekakunxwcpcaeffmxdrpbhzzorczuiqjozlyslcatxffxgxrtmgcglxjwdforcdlapgfsnflpqtdhhntzcobabghnugjfamatojllfdpyhoktqmmqsjeozoasublvsdtioihbzzeahlfbywdosczvcvmdqldhqipmwfitswvvjdgwntegybfzdstdvqmhwbmkwfrqclfrkurjtsuinbpwnmvlmmdhmaaftlfpgjazhugbxmipaocbjlyhmwzrgmzmsasiyqrksztzekgtbdmcagvyoyfwebmrzdzksmynpquljuhyvckrnpjbvaprmeofbknqqaeflwjfqmmyahtduucxsthpiskysa\",
\"status_update_replace_prior\": \"debitis\",
\"status_update_comment_tagged_for_changelog\": \"false\",
\"status_update_comment_pinned_to_top\": \"0\",
\"tags\": [
\"waovhdjdsupwlxibgmntsydhzgdvtiafbow\"
],
\"category_id\": 11,
\"created_at\": \"2024-11-23T22:11:28\",
\"prioritization_impact\": 98,
\"prioritization_confidence\": 80,
\"prioritization_ease\": 38,
\"prioritization_reach\": 9,
\"moscow_priority\": \"W\",
\"prioritization_color\": \"\",
\"manual_bonus_votes\": 11,
\"is_published\": \"1\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/8"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"title": "byzugcrzwdghemzmhzpvclnclqvvuajzphsznshsacthecumrcucdixwlzttwqrfjppxkcfiipifyvsidparxizskmpkouyfucwrlhshqhhajfxrgnzi",
"description": "culpa",
"user_id": "94fd1e45-81ca-3436-8248-761e96ef48bf",
"section_id": 516373.20906,
"allow_comments": "true",
"jira_key": "iste",
"azure_boards_key": "itaque",
"estimated_date": "2024-11-23T22:11:28",
"status": 2.57134468,
"status_update_email": "zmnborucbfrcbxymwsseciucrjsodghmzizxlljedulnzwyayvhtqmdofwvhwijncaeyyaqjrruobxdejiiqpxxjsbydrjllyonbrxgmefbhooppgnwwpvfymndqskklvntscimbmqqarjklchqvjuljadeqvmcjffikkizuazpofxwuaztalcydmoupaiosuozzzdgppgqomqjodkufkzcwnluuvyxqshuojpkxxqvfsjtwwrsixhhzfafogxhracucnctzsaxdddgtwukwpqpidwwxlvmuxrjpcwbhfctxjrymvyzexgsqqlhjjybes",
"status_update_comment": "cesqqewskgynmlyiorovdaspbmojknzoceejqeiekygacqllvucwvclqtxokmuxnmqbrdgqlgccfgkukphbaufcyrdixtwdrjeuflexuzdzgqatriiznlyigikyhbbagcktneaiukumcrnljomgkstsijsuternbynyfnoasxssrswdavorsxavbuydebidygqzqkxkmwwmlagodbktahcesszawcporhfjxbpvucmxiwjicoqbvbasccownkcaortfhkrauwrjllvactuqbivkxdiycvjdiqghzwiyjgoyxnvuysuuwykvfpimxbxrimzozedhioutwtjgjvvfbpkbjvolybzlfucgvvkdkbabjsyqthzofqjcfbjxynzjzemxplpgvkyrlqtfwvqamyinomjnfeccpdhmfltowbcpxfowzikhxqzgttkfcnkmbkmahckhhezwnzwscangzhvkyhddzjokcsrdzabwdcrwewyecnxjlvkmjvwqkwhwacabrfegbvxbqmqbvtxgsyzljlofawqkbaqqkwbgushjxovlmdwkifxcvgprommxohkmxzammvokglqpyhaajqnygsstazddaogquuswuokwuaabzxfzndxfadsarlnlwhemndnmsznrblmygdgogdhnvdaswwrmxffddgtjvhzasfpltwbpgprihapcojdczjtnqxepqprnjdgwstzymoexdsnqqpvgudwesmuhvwludznuqddypcjrqqrbuklvfotvjixkselopyorplpqujdpsqoaqextjcrgoysqjpxheiixmjadvtcrfubhcshrqbvatghsjeankuzidtqrxllywexmcqcvhidjxhomlohehkjqqtsjfeoubtrtcihtppdaichibhgsykzkysmehrlvenjqxhujhpeocxicbaugkbrkllkmcyrjubkuelggoxlneypdncsucfqhrmtsqlvyxlcewpsnvjxltcpkmdnpkgwrrrzrnicqdyiohvvuilfjzevoahbjttepercykmiskcqqksmyvrkluiqjxmqqthrsonttiqvpmvgaeqwihpsyfcgrdxmhjfstggakytobnvgkalksrtxmxeciwwqmgoxcsuubgzzaxhqzigxcslmruhnmcyeicgcwjhbyyihwvaiafiptjwaymrgnkgwgxtrmulzquulogjufievzbrdjbjrkdxudzledzareisemtqottilfeshwszjctlaaimlsulyuupjebjmiwvuutsgcnkzuknybkzaoliyqypyswgbgkdhqxdmraxxstweenfghdiawnffyxtbrrfplxggkkvvgsoyzfmgscchwawsdqictycpyffqdcwwcmkxnyryhajzndwbllkkckcpmeqojbaecaiaewurjepuktxxnmunruvqfmmtuggxjmwdwtytdtymizklofnpdzbhmvjledogltfkhuqzgsmcuggnvbxaqyfrgjoypdzwdfuextnqmgbnidbaeqvqcbpkrlpexunsfjkwofcosvhtpcuijajieqoaeoclirqwdphochtufxbohnnusiblcgltrmiqgfilcspgekakunxwcpcaeffmxdrpbhzzorczuiqjozlyslcatxffxgxrtmgcglxjwdforcdlapgfsnflpqtdhhntzcobabghnugjfamatojllfdpyhoktqmmqsjeozoasublvsdtioihbzzeahlfbywdosczvcvmdqldhqipmwfitswvvjdgwntegybfzdstdvqmhwbmkwfrqclfrkurjtsuinbpwnmvlmmdhmaaftlfpgjazhugbxmipaocbjlyhmwzrgmzmsasiyqrksztzekgtbdmcagvyoyfwebmrzdzksmynpquljuhyvckrnpjbvaprmeofbknqqaeflwjfqmmyahtduucxsthpiskysa",
"status_update_replace_prior": "debitis",
"status_update_comment_tagged_for_changelog": "false",
"status_update_comment_pinned_to_top": "0",
"tags": [
"waovhdjdsupwlxibgmntsydhzgdvtiafbow"
],
"category_id": 11,
"created_at": "2024-11-23T22:11:28",
"prioritization_impact": 98,
"prioritization_confidence": 80,
"prioritization_ease": 38,
"prioritization_reach": 9,
"moscow_priority": "W",
"prioritization_color": "",
"manual_bonus_votes": 11,
"is_published": "1"
};
fetch(url, {
method: "PATCH",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->patch(
'{YOUR_PORTAL_URL}/api/v1/posts/8',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'title' => 'byzugcrzwdghemzmhzpvclnclqvvuajzphsznshsacthecumrcucdixwlzttwqrfjppxkcfiipifyvsidparxizskmpkouyfucwrlhshqhhajfxrgnzi',
'description' => 'culpa',
'user_id' => '94fd1e45-81ca-3436-8248-761e96ef48bf',
'section_id' => 516373.20906,
'allow_comments' => 'true',
'jira_key' => 'iste',
'azure_boards_key' => 'itaque',
'estimated_date' => '2024-11-23T22:11:28',
'status' => 2.57134468,
'status_update_email' => 'zmnborucbfrcbxymwsseciucrjsodghmzizxlljedulnzwyayvhtqmdofwvhwijncaeyyaqjrruobxdejiiqpxxjsbydrjllyonbrxgmefbhooppgnwwpvfymndqskklvntscimbmqqarjklchqvjuljadeqvmcjffikkizuazpofxwuaztalcydmoupaiosuozzzdgppgqomqjodkufkzcwnluuvyxqshuojpkxxqvfsjtwwrsixhhzfafogxhracucnctzsaxdddgtwukwpqpidwwxlvmuxrjpcwbhfctxjrymvyzexgsqqlhjjybes',
'status_update_comment' => 'cesqqewskgynmlyiorovdaspbmojknzoceejqeiekygacqllvucwvclqtxokmuxnmqbrdgqlgccfgkukphbaufcyrdixtwdrjeuflexuzdzgqatriiznlyigikyhbbagcktneaiukumcrnljomgkstsijsuternbynyfnoasxssrswdavorsxavbuydebidygqzqkxkmwwmlagodbktahcesszawcporhfjxbpvucmxiwjicoqbvbasccownkcaortfhkrauwrjllvactuqbivkxdiycvjdiqghzwiyjgoyxnvuysuuwykvfpimxbxrimzozedhioutwtjgjvvfbpkbjvolybzlfucgvvkdkbabjsyqthzofqjcfbjxynzjzemxplpgvkyrlqtfwvqamyinomjnfeccpdhmfltowbcpxfowzikhxqzgttkfcnkmbkmahckhhezwnzwscangzhvkyhddzjokcsrdzabwdcrwewyecnxjlvkmjvwqkwhwacabrfegbvxbqmqbvtxgsyzljlofawqkbaqqkwbgushjxovlmdwkifxcvgprommxohkmxzammvokglqpyhaajqnygsstazddaogquuswuokwuaabzxfzndxfadsarlnlwhemndnmsznrblmygdgogdhnvdaswwrmxffddgtjvhzasfpltwbpgprihapcojdczjtnqxepqprnjdgwstzymoexdsnqqpvgudwesmuhvwludznuqddypcjrqqrbuklvfotvjixkselopyorplpqujdpsqoaqextjcrgoysqjpxheiixmjadvtcrfubhcshrqbvatghsjeankuzidtqrxllywexmcqcvhidjxhomlohehkjqqtsjfeoubtrtcihtppdaichibhgsykzkysmehrlvenjqxhujhpeocxicbaugkbrkllkmcyrjubkuelggoxlneypdncsucfqhrmtsqlvyxlcewpsnvjxltcpkmdnpkgwrrrzrnicqdyiohvvuilfjzevoahbjttepercykmiskcqqksmyvrkluiqjxmqqthrsonttiqvpmvgaeqwihpsyfcgrdxmhjfstggakytobnvgkalksrtxmxeciwwqmgoxcsuubgzzaxhqzigxcslmruhnmcyeicgcwjhbyyihwvaiafiptjwaymrgnkgwgxtrmulzquulogjufievzbrdjbjrkdxudzledzareisemtqottilfeshwszjctlaaimlsulyuupjebjmiwvuutsgcnkzuknybkzaoliyqypyswgbgkdhqxdmraxxstweenfghdiawnffyxtbrrfplxggkkvvgsoyzfmgscchwawsdqictycpyffqdcwwcmkxnyryhajzndwbllkkckcpmeqojbaecaiaewurjepuktxxnmunruvqfmmtuggxjmwdwtytdtymizklofnpdzbhmvjledogltfkhuqzgsmcuggnvbxaqyfrgjoypdzwdfuextnqmgbnidbaeqvqcbpkrlpexunsfjkwofcosvhtpcuijajieqoaeoclirqwdphochtufxbohnnusiblcgltrmiqgfilcspgekakunxwcpcaeffmxdrpbhzzorczuiqjozlyslcatxffxgxrtmgcglxjwdforcdlapgfsnflpqtdhhntzcobabghnugjfamatojllfdpyhoktqmmqsjeozoasublvsdtioihbzzeahlfbywdosczvcvmdqldhqipmwfitswvvjdgwntegybfzdstdvqmhwbmkwfrqclfrkurjtsuinbpwnmvlmmdhmaaftlfpgjazhugbxmipaocbjlyhmwzrgmzmsasiyqrksztzekgtbdmcagvyoyfwebmrzdzksmynpquljuhyvckrnpjbvaprmeofbknqqaeflwjfqmmyahtduucxsthpiskysa',
'status_update_replace_prior' => 'debitis',
'status_update_comment_tagged_for_changelog' => 'false',
'status_update_comment_pinned_to_top' => '0',
'tags' => [
'waovhdjdsupwlxibgmntsydhzgdvtiafbow',
],
'category_id' => 11,
'created_at' => '2024-11-23T22:11:28',
'prioritization_impact' => 98,
'prioritization_confidence' => 80,
'prioritization_ease' => 38,
'prioritization_reach' => 9,
'moscow_priority' => 'W',
'prioritization_color' => '',
'manual_bonus_votes' => 11,
'is_published' => '1',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/8'
payload = {
"title": "byzugcrzwdghemzmhzpvclnclqvvuajzphsznshsacthecumrcucdixwlzttwqrfjppxkcfiipifyvsidparxizskmpkouyfucwrlhshqhhajfxrgnzi",
"description": "culpa",
"user_id": "94fd1e45-81ca-3436-8248-761e96ef48bf",
"section_id": 516373.20906,
"allow_comments": "true",
"jira_key": "iste",
"azure_boards_key": "itaque",
"estimated_date": "2024-11-23T22:11:28",
"status": 2.57134468,
"status_update_email": "zmnborucbfrcbxymwsseciucrjsodghmzizxlljedulnzwyayvhtqmdofwvhwijncaeyyaqjrruobxdejiiqpxxjsbydrjllyonbrxgmefbhooppgnwwpvfymndqskklvntscimbmqqarjklchqvjuljadeqvmcjffikkizuazpofxwuaztalcydmoupaiosuozzzdgppgqomqjodkufkzcwnluuvyxqshuojpkxxqvfsjtwwrsixhhzfafogxhracucnctzsaxdddgtwukwpqpidwwxlvmuxrjpcwbhfctxjrymvyzexgsqqlhjjybes",
"status_update_comment": "cesqqewskgynmlyiorovdaspbmojknzoceejqeiekygacqllvucwvclqtxokmuxnmqbrdgqlgccfgkukphbaufcyrdixtwdrjeuflexuzdzgqatriiznlyigikyhbbagcktneaiukumcrnljomgkstsijsuternbynyfnoasxssrswdavorsxavbuydebidygqzqkxkmwwmlagodbktahcesszawcporhfjxbpvucmxiwjicoqbvbasccownkcaortfhkrauwrjllvactuqbivkxdiycvjdiqghzwiyjgoyxnvuysuuwykvfpimxbxrimzozedhioutwtjgjvvfbpkbjvolybzlfucgvvkdkbabjsyqthzofqjcfbjxynzjzemxplpgvkyrlqtfwvqamyinomjnfeccpdhmfltowbcpxfowzikhxqzgttkfcnkmbkmahckhhezwnzwscangzhvkyhddzjokcsrdzabwdcrwewyecnxjlvkmjvwqkwhwacabrfegbvxbqmqbvtxgsyzljlofawqkbaqqkwbgushjxovlmdwkifxcvgprommxohkmxzammvokglqpyhaajqnygsstazddaogquuswuokwuaabzxfzndxfadsarlnlwhemndnmsznrblmygdgogdhnvdaswwrmxffddgtjvhzasfpltwbpgprihapcojdczjtnqxepqprnjdgwstzymoexdsnqqpvgudwesmuhvwludznuqddypcjrqqrbuklvfotvjixkselopyorplpqujdpsqoaqextjcrgoysqjpxheiixmjadvtcrfubhcshrqbvatghsjeankuzidtqrxllywexmcqcvhidjxhomlohehkjqqtsjfeoubtrtcihtppdaichibhgsykzkysmehrlvenjqxhujhpeocxicbaugkbrkllkmcyrjubkuelggoxlneypdncsucfqhrmtsqlvyxlcewpsnvjxltcpkmdnpkgwrrrzrnicqdyiohvvuilfjzevoahbjttepercykmiskcqqksmyvrkluiqjxmqqthrsonttiqvpmvgaeqwihpsyfcgrdxmhjfstggakytobnvgkalksrtxmxeciwwqmgoxcsuubgzzaxhqzigxcslmruhnmcyeicgcwjhbyyihwvaiafiptjwaymrgnkgwgxtrmulzquulogjufievzbrdjbjrkdxudzledzareisemtqottilfeshwszjctlaaimlsulyuupjebjmiwvuutsgcnkzuknybkzaoliyqypyswgbgkdhqxdmraxxstweenfghdiawnffyxtbrrfplxggkkvvgsoyzfmgscchwawsdqictycpyffqdcwwcmkxnyryhajzndwbllkkckcpmeqojbaecaiaewurjepuktxxnmunruvqfmmtuggxjmwdwtytdtymizklofnpdzbhmvjledogltfkhuqzgsmcuggnvbxaqyfrgjoypdzwdfuextnqmgbnidbaeqvqcbpkrlpexunsfjkwofcosvhtpcuijajieqoaeoclirqwdphochtufxbohnnusiblcgltrmiqgfilcspgekakunxwcpcaeffmxdrpbhzzorczuiqjozlyslcatxffxgxrtmgcglxjwdforcdlapgfsnflpqtdhhntzcobabghnugjfamatojllfdpyhoktqmmqsjeozoasublvsdtioihbzzeahlfbywdosczvcvmdqldhqipmwfitswvvjdgwntegybfzdstdvqmhwbmkwfrqclfrkurjtsuinbpwnmvlmmdhmaaftlfpgjazhugbxmipaocbjlyhmwzrgmzmsasiyqrksztzekgtbdmcagvyoyfwebmrzdzksmynpquljuhyvckrnpjbvaprmeofbknqqaeflwjfqmmyahtduucxsthpiskysa",
"status_update_replace_prior": "debitis",
"status_update_comment_tagged_for_changelog": "false",
"status_update_comment_pinned_to_top": "0",
"tags": [
"waovhdjdsupwlxibgmntsydhzgdvtiafbow"
],
"category_id": 11,
"created_at": "2024-11-23T22:11:28",
"prioritization_impact": 98,
"prioritization_confidence": 80,
"prioritization_ease": 38,
"prioritization_reach": 9,
"moscow_priority": "W",
"prioritization_color": "",
"manual_bonus_votes": 11,
"is_published": "1"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PATCH', url, headers=headers, json=payload)
response.json()
Example response (404):
{
"message": "No query results for model [App\\Post] ..."
}
Example response (404):
{
"message": "No query results for model [App\\User] ..."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"user_id": [
"The user id must be a valid UUID."
]
}
Example response (200):
{
"data": {
"id": "WEukJy",
"uid": "WEukJy-uid",
"title": "Photo upload",
"description_short": "It would be great if I can upload a photo.",
"description": "It would be great if I can upload a photo. This feature would allow users to share visual content directly within the platform.",
"description_changelog": "Added photo upload functionality to enhance user experience.",
"clean_description_changelog": "Added photo upload functionality to enhance user experience.",
"image_main": "https://example.com/images/photo-upload.jpg",
"votes_count": 15,
"comments_count": 3,
"views_count": 100,
"url": "https://your-portal-url.com/p/photo-upload-WEukJy",
"url_edit": "https://your-portal-url.com/admin/posts/edit/WEukJy",
"url_delete": "https://your-portal-url.com/admin/posts/delete/WEukJy",
"created_at": "2023-05-15T10:00:00Z",
"updated_at": "2023-05-16T14:30:00Z",
"latest_status_change_at": "2023-05-16T14:30:00Z",
"latest_status_change_at_formatted": "16 May 2023",
"author": {
"id": "420b8cfb-2c3d-4df2-b6bd-7ac6aae1a14a",
"name": "Madalyn",
"email": "robyn.oconner@example.net",
"role": "member",
"counter_votes": 4,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0
},
"categories": [
{
"id": 3,
"name": "Integration",
"color": "#FFAEA5"
}
],
"status": {
"id": 3,
"name": "💪 Now available",
"color": "#FFCCB6",
"tab_name": "Updates"
},
"section_id": 2,
"moderation_status": "approved",
"conversion": 0.75,
"prioritization_impact": 8,
"prioritization_confidence": 7,
"prioritization_ease": 6,
"prioritization_reach": 9
}
}
Received response:
Request failed with error:
Delete post
requires authentication
Deletes a specified post.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/posts/9" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/9"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/posts/9',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/9'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{}
Example response (404):
{
"message": "No query results for model [App\\Post] ..."
}
Received response:
Request failed with error:
List posts
requires authentication
Retrieves a complete list of posts from your portal. Includes a "hasMore" attribute indicating if additional posts exist beyond the specified query limit.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/posts" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"limit\": 15,
\"skip\": 9,
\"order_by\": \"order\",
\"order_direction\": \"asc\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"limit": 15,
"skip": 9,
"order_by": "order",
"order_direction": "asc"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/posts',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'limit' => 15,
'skip' => 9,
'order_by' => 'order',
'order_direction' => 'asc',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts'
payload = {
"limit": 15,
"skip": 9,
"order_by": "order",
"order_direction": "asc"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()
Example response (200, success):
{
"data": [
{
"id": "WEukJy",
"uid": "WEukJy-uid",
"title": "Photo upload",
"description_short": "It would be great if I can upload a photo.",
"description": "It would be great if I can upload a photo. This feature would allow users to share visual content directly within the platform.",
"description_changelog": "Added photo upload functionality to enhance user experience.",
"clean_description_changelog": "Added photo upload functionality to enhance user experience.",
"image_main": "https://example.com/images/photo-upload.jpg",
"votes_count": 15,
"comments_count": 3,
"views_count": 100,
"url": "https://your-portal-url.com/p/photo-upload-WEukJy",
"url_edit": "https://your-portal-url.com/admin/posts/edit/WEukJy",
"url_delete": "https://your-portal-url.com/admin/posts/delete/WEukJy",
"created_at": "2023-05-15T10:00:00Z",
"updated_at": "2023-05-16T14:30:00Z",
"latest_status_change_at": "2023-05-16T14:30:00Z",
"latest_status_change_at_formatted": "16 May 2023",
"author": {
"id": "420b8cfb-2c3d-4df2-b6bd-7ac6aae1a14a",
"name": "Madalyn",
"email": "robyn.oconner@example.net",
"role": "member",
"counter_votes": 4,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0
},
"categories": [
{
"id": 3,
"name": "Integration",
"color": "#FFAEA5"
}
],
"status": {
"id": 3,
"name": "💪 Now available",
"color": "#FFCCB6",
"tab_name": "Updates"
},
"section_id": 2,
"moderation_status": "approved",
"conversion": 0.75,
"prioritization_impact": 8,
"prioritization_confidence": 7,
"prioritization_ease": 6,
"prioritization_reach": 9
}
],
"hasMore": false,
"total": 1,
"skip": 0,
"limit": 10
}
Received response:
Request failed with error:
Product Vision
Handles operations related to product vision including viewing, creating, updating, deleting, and generating vision boards.
Get product vision
requires authentication
Retrieves the current product vision.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/product-vision" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/product-vision"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/product-vision',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/product-vision'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (401):
Show headers
cache-control: no-cache, private
content-type: application/json
x-ratelimit-limit: 60
x-ratelimit-remaining: 56
access-control-allow-origin: *
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Delete product vision
requires authentication
Removes the current product vision.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/product-vision" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/product-vision"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/product-vision',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/product-vision'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Received response:
Request failed with error:
Create or update product vision
requires authentication
Stores a new product vision or updates the existing one.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/product-vision" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/product-vision"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/product-vision',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/product-vision'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Received response:
Request failed with error:
Generate product vision
requires authentication
Creates a product vision board using AI based on the provided description.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/product-vision/generate" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/product-vision/generate"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/product-vision/generate',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/product-vision/generate'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Received response:
Request failed with error:
Sections
Manages operations related to sections within tabs, including creation, updating, deletion, and reordering.
Create section
requires authentication
Creates a new section within a specified tab.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/sections" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"hfehzwksvckfnvuvzxtyjxlsvhxhdwabfkgsglhf\",
\"description\": \"xlieyfdswkaxsgfcudyif\",
\"icon\": \"vxzlbexdpsmahdj\",
\"tab_id\": 1,
\"after_id\": 0,
\"color\": \"\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/sections"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"title": "hfehzwksvckfnvuvzxtyjxlsvhxhdwabfkgsglhf",
"description": "xlieyfdswkaxsgfcudyif",
"icon": "vxzlbexdpsmahdj",
"tab_id": 1,
"after_id": 0,
"color": ""
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'title' => 'hfehzwksvckfnvuvzxtyjxlsvhxhdwabfkgsglhf',
'description' => 'xlieyfdswkaxsgfcudyif',
'icon' => 'vxzlbexdpsmahdj',
'tab_id' => 1,
'after_id' => 0,
'color' => '',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/sections'
payload = {
"title": "hfehzwksvckfnvuvzxtyjxlsvhxhdwabfkgsglhf",
"description": "xlieyfdswkaxsgfcudyif",
"icon": "vxzlbexdpsmahdj",
"tab_id": 1,
"after_id": 0,
"color": ""
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": 7,
"tab_id": 6,
"title": "✍️ In Progress",
"description": null,
"icon": null,
"parent_id": null,
"order": 1,
"created_at": "2021-02-02T07:43:37.000000Z",
"updated_at": "2024-04-24T09:23:50.000000Z",
"is_hidden_for_users": 0,
"color": null
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"title": [
"The title has already been taken."
]
}
}
Received response:
Request failed with error:
Update Section
requires authentication
Modifies the details of an existing section.
Example request:
curl --request PUT \
"{YOUR_PORTAL_URL}/api/v1/sections/20" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"title\": \"urxcveofskdcqtlsuqsaotzohmh\",
\"description\": \"owlkjtiraybqpquigdpqjbsmhixjcqcmqhodietazkylzpwujiprexnu\",
\"icon\": \"bgiqslqbcesveohcznuzkuwtebeppvjcrvdv\",
\"is_hidden_for_users\": true,
\"color\": \"ueymndx\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/sections/20"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"title": "urxcveofskdcqtlsuqsaotzohmh",
"description": "owlkjtiraybqpquigdpqjbsmhixjcqcmqhodietazkylzpwujiprexnu",
"icon": "bgiqslqbcesveohcznuzkuwtebeppvjcrvdv",
"is_hidden_for_users": true,
"color": "ueymndx"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
'{YOUR_PORTAL_URL}/api/v1/sections/20',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'title' => 'urxcveofskdcqtlsuqsaotzohmh',
'description' => 'owlkjtiraybqpquigdpqjbsmhixjcqcmqhodietazkylzpwujiprexnu',
'icon' => 'bgiqslqbcesveohcznuzkuwtebeppvjcrvdv',
'is_hidden_for_users' => true,
'color' => 'ueymndx',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/sections/20'
payload = {
"title": "urxcveofskdcqtlsuqsaotzohmh",
"description": "owlkjtiraybqpquigdpqjbsmhixjcqcmqhodietazkylzpwujiprexnu",
"icon": "bgiqslqbcesveohcznuzkuwtebeppvjcrvdv",
"is_hidden_for_users": true,
"color": "ueymndx"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": 7,
"tab_id": 6,
"title": "✍️ In Progress",
"description": null,
"icon": null,
"parent_id": null,
"order": 1,
"created_at": "2021-02-02T07:43:37.000000Z",
"updated_at": "2024-04-24T09:23:50.000000Z",
"is_hidden_for_users": 0,
"color": null
}
}
Example response (404):
{
"message": "No query results for model [App\\Section] ..."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"title": [
"The title must be given."
]
}
}
Received response:
Request failed with error:
Delete Section
requires authentication
Removes a specified section from the database.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/sections/9" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/sections/9"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/sections/9',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/sections/9'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{}
Example response (404):
{
"message": "No query results for model [App\\Section] ..."
}
Received response:
Request failed with error:
List sections
requires authentication
Retrieves all sections for a specified tab.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/sections" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/sections"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/sections',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/sections'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": 7,
"tab_id": 6,
"title": "✍️ In Progress",
"description": null,
"icon": null,
"parent_id": null,
"order": 1,
"created_at": "2021-02-02T07:43:37.000000Z",
"updated_at": "2024-04-24T09:23:50.000000Z",
"is_hidden_for_users": 0,
"color": null
}
}
Received response:
Request failed with error:
Get Child Sections
requires authentication
Retrieves all child sections for a given parent section.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/sections/13/children" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/sections/13/children"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/sections/13/children',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/sections/13/children'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": 1,
"title": "Child Section 1",
"description": "This is a child section",
"icon": "folder",
"parent_id": 5,
"order": 1
},
{
"id": 2,
"title": "Child Section 2",
"description": "Another child section",
"icon": "file",
"parent_id": 5,
"order": 2
}
]
}
Received response:
Request failed with error:
Statuses
Statuses can be used to track the status of posts. Each post gets one status.
List statuses
requires authentication
Lists all statuses.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/statuses" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/statuses"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/statuses',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/statuses'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": 1,
"name": "Gathering votes",
"color": "#DCD9F8",
"order": 0,
"tab_id": 1,
"tab_name": "Wish list",
"text_color": "#464362"
},
{
"id": 1,
"name": "Gathering votes",
"color": "#DCD9F8",
"order": 0,
"tab_id": 1,
"tab_name": "Wish list",
"text_color": "#464362"
}
]
}
Received response:
Request failed with error:
Create status
requires authentication
Creates a new status.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/statuses" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"color\": \"#nN04qZ$\\/m\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/statuses"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"color": "#nN04qZ$\/m"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/statuses',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'color' => '#nN04qZ$/m',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/statuses'
payload = {
"color": "#nN04qZ$\/m"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": 1,
"name": "Gathering votes",
"color": "#DCD9F8",
"order": 0,
"tab_id": 1,
"tab_name": "Wish list",
"text_color": "#464362"
}
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The name has already been taken."
]
}
Received response:
Request failed with error:
Update status
requires authentication
Updates the details of a status.
Example request:
curl --request PUT \
"{YOUR_PORTAL_URL}/api/v1/statuses/16" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"color\": \"#72kztn$\\/m\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/statuses/16"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"color": "#72kztn$\/m"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
'{YOUR_PORTAL_URL}/api/v1/statuses/16',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'color' => '#72kztn$/m',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/statuses/16'
payload = {
"color": "#72kztn$\/m"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": 1,
"name": "Gathering votes",
"color": "#DCD9F8",
"order": 0,
"tab_id": 1,
"tab_name": "Wish list",
"text_color": "#464362"
}
}
Example response (404):
{
"message": "No query results for model [App\\Status] ..."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"name": [
"The name has already been taken."
]
}
Received response:
Request failed with error:
Delete status
requires authentication
Deletes a specified status.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/statuses/15" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/statuses/15"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/statuses/15',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/statuses/15'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{}
Example response (404):
{
"message": "No query results for model [App\\Status] ..."
}
Received response:
Request failed with error:
Tabs
API endpoints for managing tabs.
Get tab
requires authentication
Retrieves the details of a specific tab by its slug.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/tabs/0" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/tabs/0"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/tabs/0',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/tabs/0'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": 1,
"name": "General",
"slug": "general",
"created_at": "2023-01-01T00:00:00Z",
"updated_at": "2023-01-01T00:00:00Z"
}
}
Example response (404):
{
"message": "No query results for model [App\\Tab] general"
}
Received response:
Request failed with error:
List tabs
requires authentication
Retrieves a collection of all tabs.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/tabs" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/tabs"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/tabs',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/tabs'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": 1,
"name": "General",
"slug": "general",
"created_at": "2023-01-01T00:00:00Z",
"updated_at": "2023-01-01T00:00:00Z"
},
{
"id": 2,
"name": "Support",
"slug": "support",
"created_at": "2023-01-02T00:00:00Z",
"updated_at": "2023-01-02T00:00:00Z"
}
]
}
Received response:
Request failed with error:
Tags
Tags can be used to label and categorize posts. Tags are not visible for your users. Posts can have multiple tags.
List tags
requires authentication
Lists all tags of your portal.
Create tag
requires authentication
Creates a new tag in your portal.
Update tag
requires authentication
Updates the details of a tag.
Delete tag
requires authentication
Deletes a specified tag.
Users
Users can create posts, votes, and comments. You can create and manage users from the API.
Find by email
requires authentication
Retrieves the details of a specified user by email.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/users/find_by_email" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"bdmmvwjiuyomszjnrnuywtckdkmqkmrsuygsnqadravhhsomvpnozohnjhiyzguswttjwujmgxsltclejgydicmbknxvsetuovqrlwrijcazxyjiqoobnwaxfsplvjajqgiiyg\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/users/find_by_email"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "bdmmvwjiuyomszjnrnuywtckdkmqkmrsuygsnqadravhhsomvpnozohnjhiyzguswttjwujmgxsltclejgydicmbknxvsetuovqrlwrijcazxyjiqoobnwaxfsplvjajqgiiyg"
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/users/find_by_email',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'bdmmvwjiuyomszjnrnuywtckdkmqkmrsuygsnqadravhhsomvpnozohnjhiyzguswttjwujmgxsltclejgydicmbknxvsetuovqrlwrijcazxyjiqoobnwaxfsplvjajqgiiyg',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/users/find_by_email'
payload = {
"email": "bdmmvwjiuyomszjnrnuywtckdkmqkmrsuygsnqadravhhsomvpnozohnjhiyzguswttjwujmgxsltclejgydicmbknxvsetuovqrlwrijcazxyjiqoobnwaxfsplvjajqgiiyg"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": "216bbebd-1d84-4abb-9501-0dacd83ab62f",
"name": "Ignacio",
"email": "morar.wendell@example.net",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/57694393c9694887fb5944fd9ce7c79f?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Ignacio/60/A2E1DB/0c4b45",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-11-23T22:11:28.000000Z",
"is_blocked": null,
"verified": null,
"admin_accepted": null,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
}
Example response (404):
{
"message": "User not found"
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"role": [
"The email must be a valid email address."
]
}
Received response:
Request failed with error:
List users
requires authentication
Lists all users of your portal.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"limit\": 43,
\"skip\": 13
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"limit": 43,
"skip": 13
};
fetch(url, {
method: "GET",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'limit' => 43,
'skip' => 13,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/users'
payload = {
"limit": 43,
"skip": 13
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": [
{
"id": "d131b1bb-2084-4c36-81e7-542f247f5630",
"name": "Leatha",
"email": "greenholt.abel@example.com",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/e9a7e5ea633a40ed94bb5de7e4d5e280?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Leatha/60/97C1A9/012b13",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-11-23T22:11:28.000000Z",
"is_blocked": null,
"verified": null,
"admin_accepted": null,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
},
{
"id": "904c2ab3-62f1-40f6-a351-255363c88717",
"name": "Gregoria",
"email": "eokon@example.net",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/4984a115d305afb9964848b73cb5c2b8?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Gregoria/60/FFC8A2/69320c",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-11-23T22:11:28.000000Z",
"is_blocked": null,
"verified": null,
"admin_accepted": null,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
]
}
Received response:
Request failed with error:
Create user
requires authentication
Creates a new user in your portal. You can either provide a password, or you can invite the user.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/users" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"rhstytlkeziesompgzhtkevfypkrelfwkhswlkylyiacrnjcrppetbbcaahiruvqgmezdfdakipznrxrotgoctijzkibaapokqjryfteuorgenjhorfbazefiaygvwpuvtqhkwpolmslgsnziufqwjlfimkqbyqdzplrfpjzpdeudrmas\",
\"role\": \"admin\",
\"name\": \"fkpcpgbydmytzkirwnawcsmnjygbd\",
\"invitation_message\": \"yareuakquhklvkyclrrphppvzyoveymtokuavipfusrzdffexkqianenadzywzbrakgmrprxzwgvnfyswfewcxuldkzbsjydmoxsyndjeyzbfuktluuhelmivs\",
\"password\": \"\",
\"created_at\": \"2024-11-23T22:11:28\",
\"is_blocked\": \"false\",
\"verified\": \"1\",
\"admin_accepted\": \"true\",
\"sso_uid\": \"ldowcxljfown\",
\"sso_avatar_url\": \"rgabtrnltgtrsuhadhpayxasxfnsdrxsvosfaizdvwqlbrrrukkfsbddexniiudmeowpndujfmidazunzkpfyjtzrcrrjzggexqtbinmgsleypjvxwxesssxeandsuyvvbgnunstui\",
\"company\": \"kjnarojntmjeawxpjbpsssfpsvkpanhjrjtznjtvosdwnrqwvxhrrcfqfuvjnlygoohsnpydwjyncjhvqmgyvtpvwwqwshxksszkpzbelndvxdydpmjmirtldlgnyhbpzymhpyrkfhdxlehafwgduqexyrgivdmeuwvfcvijqyiisctwzfllkhgpniaknjkhxt\",
\"segment_1\": \"mshzwqjlnebczctpgmlescvwszvlzyvcilkiweldnvcglduynpcdjnpejgcaosdqpsnhnqzduhswlxjpvvynillqfjrxcewonnzyrghqatvgxhkthztyauaklczkmtlzjbdmoptaionpqlvlbrlajngvelzcvxzlghrocqyxxtdywpprkjsispwbguyrtftirytxqaffxjtkakjwdhqdm\",
\"segment_2\": \"mrfnlljrbgcqayszjobqgaasmqajuuz\",
\"segment_3\": \"hmobjvxcewndaiwekopzlrelkoqiyeqowjyrkljjlq\",
\"segment_4\": \"bupcwpxytupzsarjoymalmukqtkxrjsrdqujasdhqervqeregkmlgllavjxbvepehuvbsdznwwcbzbuwibxxbgkxiiyznwvwfooeyxjswmvutjafpmrfsddth\",
\"segment_5\": \"qjgyqkqlcksuvngnhgwubklmnwisyznxexmbkiemhrkujejcctcrsrsdfrjlyhulsqrbjdymskolnjnguxjekhnlspoopaumhjezagunpiaojhkyrpste\",
\"segment_6\": \"vyslpkiggfouopsbdwrlybrxpvlgmomxnfdwaqrhsrzzdhjgucmvkfyefuojdyjcloahbcxxzkfimoiqzyqigeezjxgqmzobduxehzjhafeeotvnkpbvjhlteqdgsfdurzpvzyuctkjdqwvpdwpfvzkhknctdvxnsieturkqufytpgrkoprxlbdmafnbvyxkyppxxnqyhbyngubtqsiynqqrugardnldtzmqxfmqgbvjdivnkkuocip\",
\"segment_7\": \"cetwojjsdtcqnibttnsmhrltjwbahkppbpaewmsdcqzeueihefhypuuybotysyplqcfoseosatldbfdtzfrpavmzziia\",
\"segment_8\": \"yqsdlxvrqrwjzgodhzwqraibakpadfgajxedzuyfyusli\",
\"segment_9\": \"poykzrionjzvxfchgypibppafgnnqbfpknkkojywxvuzarzdykodrzajiiqhtebpjjvpveixuyylbzkceyiixdevvyncsfkktgztqtjxzeygndttcdxykewhydxtldcvqvbqnrtbdwvnbxyxlidvyiocmvuribxabueheokosybvi\",
\"segment_10\": \"efwvoytmfkmpoxyjjzcpkkotldjqfxmemvyytcqcsqilrdmkqwlmepbsommdxmfsxpqnhmrtzrltfumcyxjnymjhxqbldtatqlhocmwtwvqqpchukyjvtxbtnxlgfcwolumpysqswokyhtlsd\",
\"segment_mrr\": 472946854,
\"segment_arr\": 1.06911,
\"segment_ltv\": 2.74,
\"email_unsubscribed_at\": \"2024-11-23T22:11:28\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/users"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "rhstytlkeziesompgzhtkevfypkrelfwkhswlkylyiacrnjcrppetbbcaahiruvqgmezdfdakipznrxrotgoctijzkibaapokqjryfteuorgenjhorfbazefiaygvwpuvtqhkwpolmslgsnziufqwjlfimkqbyqdzplrfpjzpdeudrmas",
"role": "admin",
"name": "fkpcpgbydmytzkirwnawcsmnjygbd",
"invitation_message": "yareuakquhklvkyclrrphppvzyoveymtokuavipfusrzdffexkqianenadzywzbrakgmrprxzwgvnfyswfewcxuldkzbsjydmoxsyndjeyzbfuktluuhelmivs",
"password": "",
"created_at": "2024-11-23T22:11:28",
"is_blocked": "false",
"verified": "1",
"admin_accepted": "true",
"sso_uid": "ldowcxljfown",
"sso_avatar_url": "rgabtrnltgtrsuhadhpayxasxfnsdrxsvosfaizdvwqlbrrrukkfsbddexniiudmeowpndujfmidazunzkpfyjtzrcrrjzggexqtbinmgsleypjvxwxesssxeandsuyvvbgnunstui",
"company": "kjnarojntmjeawxpjbpsssfpsvkpanhjrjtznjtvosdwnrqwvxhrrcfqfuvjnlygoohsnpydwjyncjhvqmgyvtpvwwqwshxksszkpzbelndvxdydpmjmirtldlgnyhbpzymhpyrkfhdxlehafwgduqexyrgivdmeuwvfcvijqyiisctwzfllkhgpniaknjkhxt",
"segment_1": "mshzwqjlnebczctpgmlescvwszvlzyvcilkiweldnvcglduynpcdjnpejgcaosdqpsnhnqzduhswlxjpvvynillqfjrxcewonnzyrghqatvgxhkthztyauaklczkmtlzjbdmoptaionpqlvlbrlajngvelzcvxzlghrocqyxxtdywpprkjsispwbguyrtftirytxqaffxjtkakjwdhqdm",
"segment_2": "mrfnlljrbgcqayszjobqgaasmqajuuz",
"segment_3": "hmobjvxcewndaiwekopzlrelkoqiyeqowjyrkljjlq",
"segment_4": "bupcwpxytupzsarjoymalmukqtkxrjsrdqujasdhqervqeregkmlgllavjxbvepehuvbsdznwwcbzbuwibxxbgkxiiyznwvwfooeyxjswmvutjafpmrfsddth",
"segment_5": "qjgyqkqlcksuvngnhgwubklmnwisyznxexmbkiemhrkujejcctcrsrsdfrjlyhulsqrbjdymskolnjnguxjekhnlspoopaumhjezagunpiaojhkyrpste",
"segment_6": "vyslpkiggfouopsbdwrlybrxpvlgmomxnfdwaqrhsrzzdhjgucmvkfyefuojdyjcloahbcxxzkfimoiqzyqigeezjxgqmzobduxehzjhafeeotvnkpbvjhlteqdgsfdurzpvzyuctkjdqwvpdwpfvzkhknctdvxnsieturkqufytpgrkoprxlbdmafnbvyxkyppxxnqyhbyngubtqsiynqqrugardnldtzmqxfmqgbvjdivnkkuocip",
"segment_7": "cetwojjsdtcqnibttnsmhrltjwbahkppbpaewmsdcqzeueihefhypuuybotysyplqcfoseosatldbfdtzfrpavmzziia",
"segment_8": "yqsdlxvrqrwjzgodhzwqraibakpadfgajxedzuyfyusli",
"segment_9": "poykzrionjzvxfchgypibppafgnnqbfpknkkojywxvuzarzdykodrzajiiqhtebpjjvpveixuyylbzkceyiixdevvyncsfkktgztqtjxzeygndttcdxykewhydxtldcvqvbqnrtbdwvnbxyxlidvyiocmvuribxabueheokosybvi",
"segment_10": "efwvoytmfkmpoxyjjzcpkkotldjqfxmemvyytcqcsqilrdmkqwlmepbsommdxmfsxpqnhmrtzrltfumcyxjnymjhxqbldtatqlhocmwtwvqqpchukyjvtxbtnxlgfcwolumpysqswokyhtlsd",
"segment_mrr": 472946854,
"segment_arr": 1.06911,
"segment_ltv": 2.74,
"email_unsubscribed_at": "2024-11-23T22:11:28"
};
fetch(url, {
method: "POST",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/users',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'rhstytlkeziesompgzhtkevfypkrelfwkhswlkylyiacrnjcrppetbbcaahiruvqgmezdfdakipznrxrotgoctijzkibaapokqjryfteuorgenjhorfbazefiaygvwpuvtqhkwpolmslgsnziufqwjlfimkqbyqdzplrfpjzpdeudrmas',
'role' => 'admin',
'name' => 'fkpcpgbydmytzkirwnawcsmnjygbd',
'invitation_message' => 'yareuakquhklvkyclrrphppvzyoveymtokuavipfusrzdffexkqianenadzywzbrakgmrprxzwgvnfyswfewcxuldkzbsjydmoxsyndjeyzbfuktluuhelmivs',
'password' => '',
'created_at' => '2024-11-23T22:11:28',
'is_blocked' => 'false',
'verified' => '1',
'admin_accepted' => 'true',
'sso_uid' => 'ldowcxljfown',
'sso_avatar_url' => 'rgabtrnltgtrsuhadhpayxasxfnsdrxsvosfaizdvwqlbrrrukkfsbddexniiudmeowpndujfmidazunzkpfyjtzrcrrjzggexqtbinmgsleypjvxwxesssxeandsuyvvbgnunstui',
'company' => 'kjnarojntmjeawxpjbpsssfpsvkpanhjrjtznjtvosdwnrqwvxhrrcfqfuvjnlygoohsnpydwjyncjhvqmgyvtpvwwqwshxksszkpzbelndvxdydpmjmirtldlgnyhbpzymhpyrkfhdxlehafwgduqexyrgivdmeuwvfcvijqyiisctwzfllkhgpniaknjkhxt',
'segment_1' => 'mshzwqjlnebczctpgmlescvwszvlzyvcilkiweldnvcglduynpcdjnpejgcaosdqpsnhnqzduhswlxjpvvynillqfjrxcewonnzyrghqatvgxhkthztyauaklczkmtlzjbdmoptaionpqlvlbrlajngvelzcvxzlghrocqyxxtdywpprkjsispwbguyrtftirytxqaffxjtkakjwdhqdm',
'segment_2' => 'mrfnlljrbgcqayszjobqgaasmqajuuz',
'segment_3' => 'hmobjvxcewndaiwekopzlrelkoqiyeqowjyrkljjlq',
'segment_4' => 'bupcwpxytupzsarjoymalmukqtkxrjsrdqujasdhqervqeregkmlgllavjxbvepehuvbsdznwwcbzbuwibxxbgkxiiyznwvwfooeyxjswmvutjafpmrfsddth',
'segment_5' => 'qjgyqkqlcksuvngnhgwubklmnwisyznxexmbkiemhrkujejcctcrsrsdfrjlyhulsqrbjdymskolnjnguxjekhnlspoopaumhjezagunpiaojhkyrpste',
'segment_6' => 'vyslpkiggfouopsbdwrlybrxpvlgmomxnfdwaqrhsrzzdhjgucmvkfyefuojdyjcloahbcxxzkfimoiqzyqigeezjxgqmzobduxehzjhafeeotvnkpbvjhlteqdgsfdurzpvzyuctkjdqwvpdwpfvzkhknctdvxnsieturkqufytpgrkoprxlbdmafnbvyxkyppxxnqyhbyngubtqsiynqqrugardnldtzmqxfmqgbvjdivnkkuocip',
'segment_7' => 'cetwojjsdtcqnibttnsmhrltjwbahkppbpaewmsdcqzeueihefhypuuybotysyplqcfoseosatldbfdtzfrpavmzziia',
'segment_8' => 'yqsdlxvrqrwjzgodhzwqraibakpadfgajxedzuyfyusli',
'segment_9' => 'poykzrionjzvxfchgypibppafgnnqbfpknkkojywxvuzarzdykodrzajiiqhtebpjjvpveixuyylbzkceyiixdevvyncsfkktgztqtjxzeygndttcdxykewhydxtldcvqvbqnrtbdwvnbxyxlidvyiocmvuribxabueheokosybvi',
'segment_10' => 'efwvoytmfkmpoxyjjzcpkkotldjqfxmemvyytcqcsqilrdmkqwlmepbsommdxmfsxpqnhmrtzrltfumcyxjnymjhxqbldtatqlhocmwtwvqqpchukyjvtxbtnxlgfcwolumpysqswokyhtlsd',
'segment_mrr' => 472946854.0,
'segment_arr' => 1.06911,
'segment_ltv' => 2.74,
'email_unsubscribed_at' => '2024-11-23T22:11:28',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/users'
payload = {
"email": "rhstytlkeziesompgzhtkevfypkrelfwkhswlkylyiacrnjcrppetbbcaahiruvqgmezdfdakipznrxrotgoctijzkibaapokqjryfteuorgenjhorfbazefiaygvwpuvtqhkwpolmslgsnziufqwjlfimkqbyqdzplrfpjzpdeudrmas",
"role": "admin",
"name": "fkpcpgbydmytzkirwnawcsmnjygbd",
"invitation_message": "yareuakquhklvkyclrrphppvzyoveymtokuavipfusrzdffexkqianenadzywzbrakgmrprxzwgvnfyswfewcxuldkzbsjydmoxsyndjeyzbfuktluuhelmivs",
"password": "",
"created_at": "2024-11-23T22:11:28",
"is_blocked": "false",
"verified": "1",
"admin_accepted": "true",
"sso_uid": "ldowcxljfown",
"sso_avatar_url": "rgabtrnltgtrsuhadhpayxasxfnsdrxsvosfaizdvwqlbrrrukkfsbddexniiudmeowpndujfmidazunzkpfyjtzrcrrjzggexqtbinmgsleypjvxwxesssxeandsuyvvbgnunstui",
"company": "kjnarojntmjeawxpjbpsssfpsvkpanhjrjtznjtvosdwnrqwvxhrrcfqfuvjnlygoohsnpydwjyncjhvqmgyvtpvwwqwshxksszkpzbelndvxdydpmjmirtldlgnyhbpzymhpyrkfhdxlehafwgduqexyrgivdmeuwvfcvijqyiisctwzfllkhgpniaknjkhxt",
"segment_1": "mshzwqjlnebczctpgmlescvwszvlzyvcilkiweldnvcglduynpcdjnpejgcaosdqpsnhnqzduhswlxjpvvynillqfjrxcewonnzyrghqatvgxhkthztyauaklczkmtlzjbdmoptaionpqlvlbrlajngvelzcvxzlghrocqyxxtdywpprkjsispwbguyrtftirytxqaffxjtkakjwdhqdm",
"segment_2": "mrfnlljrbgcqayszjobqgaasmqajuuz",
"segment_3": "hmobjvxcewndaiwekopzlrelkoqiyeqowjyrkljjlq",
"segment_4": "bupcwpxytupzsarjoymalmukqtkxrjsrdqujasdhqervqeregkmlgllavjxbvepehuvbsdznwwcbzbuwibxxbgkxiiyznwvwfooeyxjswmvutjafpmrfsddth",
"segment_5": "qjgyqkqlcksuvngnhgwubklmnwisyznxexmbkiemhrkujejcctcrsrsdfrjlyhulsqrbjdymskolnjnguxjekhnlspoopaumhjezagunpiaojhkyrpste",
"segment_6": "vyslpkiggfouopsbdwrlybrxpvlgmomxnfdwaqrhsrzzdhjgucmvkfyefuojdyjcloahbcxxzkfimoiqzyqigeezjxgqmzobduxehzjhafeeotvnkpbvjhlteqdgsfdurzpvzyuctkjdqwvpdwpfvzkhknctdvxnsieturkqufytpgrkoprxlbdmafnbvyxkyppxxnqyhbyngubtqsiynqqrugardnldtzmqxfmqgbvjdivnkkuocip",
"segment_7": "cetwojjsdtcqnibttnsmhrltjwbahkppbpaewmsdcqzeueihefhypuuybotysyplqcfoseosatldbfdtzfrpavmzziia",
"segment_8": "yqsdlxvrqrwjzgodhzwqraibakpadfgajxedzuyfyusli",
"segment_9": "poykzrionjzvxfchgypibppafgnnqbfpknkkojywxvuzarzdykodrzajiiqhtebpjjvpveixuyylbzkceyiixdevvyncsfkktgztqtjxzeygndttcdxykewhydxtldcvqvbqnrtbdwvnbxyxlidvyiocmvuribxabueheokosybvi",
"segment_10": "efwvoytmfkmpoxyjjzcpkkotldjqfxmemvyytcqcsqilrdmkqwlmepbsommdxmfsxpqnhmrtzrltfumcyxjnymjhxqbldtatqlhocmwtwvqqpchukyjvtxbtnxlgfcwolumpysqswokyhtlsd",
"segment_mrr": 472946854,
"segment_arr": 1.06911,
"segment_ltv": 2.74,
"email_unsubscribed_at": "2024-11-23T22:11:28"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": "0a141548-a277-45fb-8f37-d01de218af89",
"name": "Lawrence",
"email": "miller.lelah@example.org",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/20b61f91fcbe36e3413c90a644a44544?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Lawrence/60/F6EAC2/60542c",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-11-23T22:11:28.000000Z",
"is_blocked": null,
"verified": null,
"admin_accepted": null,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
}
Example response (422):
{
"message": "User already exists"
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"role": [
"The selected role is invalid."
]
}
Received response:
Request failed with error:
Get user
requires authentication
Retrieves the details of a specified user.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": "b7d98d63-5c96-4301-9863-afc61f7489c1",
"name": "Abdiel",
"email": "lolita.rolfson@example.net",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/44e1727b557cc995f0b10e98bdf31a40?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Abdiel/60/55CBCD/003537",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-11-23T22:11:28.000000Z",
"is_blocked": null,
"verified": null,
"admin_accepted": null,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
}
Example response (404):
{
"message": "No query results for model [App\\User] ..."
}
Received response:
Request failed with error:
Update user
requires authentication
Updates the details of a specified user.
Example request:
curl --request PUT \
"{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"email\": \"tvonrueden@example.net\",
\"role\": \"admin\",
\"name\": \"fwpmhzwl\",
\"password\": \"ddzagzxi\",
\"created_at\": \"2024-11-23T22:11:28\",
\"is_blocked\": \"1\",
\"verified\": \"0\",
\"admin_accepted\": \"true\",
\"sso_uid\": \"pcgmhtvqdyezgqaettqnnniediqpucbtmkmhjtqzzsqcwgonzeqggmuuvzorjgoxaeoajoucxriuicwrfdwurvfobsjwbwlqppbatxoealuayzrijmureujrqnsnppmbteplcopgotgklxuchbjozzgbmyudqwebnrljfphxntajczqsdndpkvrfgwcwkigpnqwedxwkliiywmtyrcmokuwhcawlvwbzqxirxfzg\",
\"sso_avatar_url\": \"vxxiikvwgiawmepjcczyptnywghdnthmiffexsehfykpyxqopxjzwebzsdnhaiyrddqccnuzsfvhchhjoijxeirvhhfeixfarumteythdmxszoopbmqsupibakuwjnkguoye\",
\"company\": \"mndvfbqfbkvgqxfjcuvfhjuwkbqthmtijbalvkqzjpwguxkvlf\",
\"segment_1\": \"rynmsjzqdzzsdquxnfapwgsxxhthgbuazhvfpeizdmkoqljrdizibtrvbsdjczvljexeuxjuljkjjchjgcjdppjavyulrbfhldsyzsekvskjywckbfhwcmlgxtsqvslneotucuwraklqnidonemlhaqlkdjezpinbnthdklqrccnorryagunpycvcytpzpebvytwdkwwpwpglqtetqisjkpdjtmngpgguhtadunijzhsvxykkflb\",
\"segment_2\": \"umbyrcrusrbgbeohrqnnpcwqknnsstqmpcyuhepzlncuplnounyanzsqybalrvkmrdvcllxmowevvswsjltcligskxjxkegtqvpvyqweipwqjjbhufnmzuaahiwkvdfuhivvfxmvgfh\",
\"segment_3\": \"rqleljodifsh\",
\"segment_4\": \"trhqewnaplhnrbmq\",
\"segment_5\": \"iikijeohnullxxvchqxglqlsicfnpliynzmkzovubjhurkncfkkywzifemwqgewdaoufidenbwhmcvdflbigqfvmqgyphxmhzyqarxxdinrhxwshjfdvdifydcuybhz\",
\"segment_6\": \"wsodtmnthxeriryewsnthcsutfmlnxeidxgjiybfzbvldwfdloxksavuycuzkouhyhkbzushga\",
\"segment_7\": \"shekjozovgqqedcrvamvgqwqfuxacaynxgpbxlnijuyqbxevwkvefpextaycgwceyrmdbxnjooxvulnzzinpwrplsgmlnohzgyerzdcdwvrntjgihxxukzajceupjftwzeaxufxvxw\",
\"segment_8\": \"wsuovmlwpxjrddsdkzlwcyjfowmwzoiqzbkicfhcdlnhksmlitowolqwklttjzwqcept\",
\"segment_9\": \"yssuqhtzdapofxlqynbrccleclgytkripgpdmhxhflsdyirtcilqloswlnqzznbzvtugkbsgrhivrrapacsbcyfvryuev\",
\"segment_10\": \"ezkgabnruirhpbjyfcjvwrrirviyhdxdwrbzquywvtommfdlkjvklxmdftdpyssivgugulavahuyepnxybgezxsoitdoyntmmolxupfvagrbwqmfnogznachurpakyirtjpucylffakhbgvkszliqgbkhemzquckjgapwqblydxnzlfzvmjrzrnbjbcjcgeqybysnlmrnitneqwzqmupnkynzonojpvjni\",
\"segment_mrr\": 33770.488740565,
\"segment_arr\": 1.5,
\"segment_ltv\": 11691396,
\"email_unsubscribed_at\": \"2024-11-23T22:11:28\"
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"email": "tvonrueden@example.net",
"role": "admin",
"name": "fwpmhzwl",
"password": "ddzagzxi",
"created_at": "2024-11-23T22:11:28",
"is_blocked": "1",
"verified": "0",
"admin_accepted": "true",
"sso_uid": "pcgmhtvqdyezgqaettqnnniediqpucbtmkmhjtqzzsqcwgonzeqggmuuvzorjgoxaeoajoucxriuicwrfdwurvfobsjwbwlqppbatxoealuayzrijmureujrqnsnppmbteplcopgotgklxuchbjozzgbmyudqwebnrljfphxntajczqsdndpkvrfgwcwkigpnqwedxwkliiywmtyrcmokuwhcawlvwbzqxirxfzg",
"sso_avatar_url": "vxxiikvwgiawmepjcczyptnywghdnthmiffexsehfykpyxqopxjzwebzsdnhaiyrddqccnuzsfvhchhjoijxeirvhhfeixfarumteythdmxszoopbmqsupibakuwjnkguoye",
"company": "mndvfbqfbkvgqxfjcuvfhjuwkbqthmtijbalvkqzjpwguxkvlf",
"segment_1": "rynmsjzqdzzsdquxnfapwgsxxhthgbuazhvfpeizdmkoqljrdizibtrvbsdjczvljexeuxjuljkjjchjgcjdppjavyulrbfhldsyzsekvskjywckbfhwcmlgxtsqvslneotucuwraklqnidonemlhaqlkdjezpinbnthdklqrccnorryagunpycvcytpzpebvytwdkwwpwpglqtetqisjkpdjtmngpgguhtadunijzhsvxykkflb",
"segment_2": "umbyrcrusrbgbeohrqnnpcwqknnsstqmpcyuhepzlncuplnounyanzsqybalrvkmrdvcllxmowevvswsjltcligskxjxkegtqvpvyqweipwqjjbhufnmzuaahiwkvdfuhivvfxmvgfh",
"segment_3": "rqleljodifsh",
"segment_4": "trhqewnaplhnrbmq",
"segment_5": "iikijeohnullxxvchqxglqlsicfnpliynzmkzovubjhurkncfkkywzifemwqgewdaoufidenbwhmcvdflbigqfvmqgyphxmhzyqarxxdinrhxwshjfdvdifydcuybhz",
"segment_6": "wsodtmnthxeriryewsnthcsutfmlnxeidxgjiybfzbvldwfdloxksavuycuzkouhyhkbzushga",
"segment_7": "shekjozovgqqedcrvamvgqwqfuxacaynxgpbxlnijuyqbxevwkvefpextaycgwceyrmdbxnjooxvulnzzinpwrplsgmlnohzgyerzdcdwvrntjgihxxukzajceupjftwzeaxufxvxw",
"segment_8": "wsuovmlwpxjrddsdkzlwcyjfowmwzoiqzbkicfhcdlnhksmlitowolqwklttjzwqcept",
"segment_9": "yssuqhtzdapofxlqynbrccleclgytkripgpdmhxhflsdyirtcilqloswlnqzznbzvtugkbsgrhivrrapacsbcyfvryuev",
"segment_10": "ezkgabnruirhpbjyfcjvwrrirviyhdxdwrbzquywvtommfdlkjvklxmdftdpyssivgugulavahuyepnxybgezxsoitdoyntmmolxupfvagrbwqmfnogznachurpakyirtjpucylffakhbgvkszliqgbkhemzquckjgapwqblydxnzlfzvmjrzrnbjbcjcgeqybysnlmrnitneqwzqmupnkynzonojpvjni",
"segment_mrr": 33770.488740565,
"segment_arr": 1.5,
"segment_ltv": 11691396,
"email_unsubscribed_at": "2024-11-23T22:11:28"
};
fetch(url, {
method: "PUT",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->put(
'{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'email' => 'tvonrueden@example.net',
'role' => 'admin',
'name' => 'fwpmhzwl',
'password' => 'ddzagzxi',
'created_at' => '2024-11-23T22:11:28',
'is_blocked' => '1',
'verified' => '0',
'admin_accepted' => 'true',
'sso_uid' => 'pcgmhtvqdyezgqaettqnnniediqpucbtmkmhjtqzzsqcwgonzeqggmuuvzorjgoxaeoajoucxriuicwrfdwurvfobsjwbwlqppbatxoealuayzrijmureujrqnsnppmbteplcopgotgklxuchbjozzgbmyudqwebnrljfphxntajczqsdndpkvrfgwcwkigpnqwedxwkliiywmtyrcmokuwhcawlvwbzqxirxfzg',
'sso_avatar_url' => 'vxxiikvwgiawmepjcczyptnywghdnthmiffexsehfykpyxqopxjzwebzsdnhaiyrddqccnuzsfvhchhjoijxeirvhhfeixfarumteythdmxszoopbmqsupibakuwjnkguoye',
'company' => 'mndvfbqfbkvgqxfjcuvfhjuwkbqthmtijbalvkqzjpwguxkvlf',
'segment_1' => 'rynmsjzqdzzsdquxnfapwgsxxhthgbuazhvfpeizdmkoqljrdizibtrvbsdjczvljexeuxjuljkjjchjgcjdppjavyulrbfhldsyzsekvskjywckbfhwcmlgxtsqvslneotucuwraklqnidonemlhaqlkdjezpinbnthdklqrccnorryagunpycvcytpzpebvytwdkwwpwpglqtetqisjkpdjtmngpgguhtadunijzhsvxykkflb',
'segment_2' => 'umbyrcrusrbgbeohrqnnpcwqknnsstqmpcyuhepzlncuplnounyanzsqybalrvkmrdvcllxmowevvswsjltcligskxjxkegtqvpvyqweipwqjjbhufnmzuaahiwkvdfuhivvfxmvgfh',
'segment_3' => 'rqleljodifsh',
'segment_4' => 'trhqewnaplhnrbmq',
'segment_5' => 'iikijeohnullxxvchqxglqlsicfnpliynzmkzovubjhurkncfkkywzifemwqgewdaoufidenbwhmcvdflbigqfvmqgyphxmhzyqarxxdinrhxwshjfdvdifydcuybhz',
'segment_6' => 'wsodtmnthxeriryewsnthcsutfmlnxeidxgjiybfzbvldwfdloxksavuycuzkouhyhkbzushga',
'segment_7' => 'shekjozovgqqedcrvamvgqwqfuxacaynxgpbxlnijuyqbxevwkvefpextaycgwceyrmdbxnjooxvulnzzinpwrplsgmlnohzgyerzdcdwvrntjgihxxukzajceupjftwzeaxufxvxw',
'segment_8' => 'wsuovmlwpxjrddsdkzlwcyjfowmwzoiqzbkicfhcdlnhksmlitowolqwklttjzwqcept',
'segment_9' => 'yssuqhtzdapofxlqynbrccleclgytkripgpdmhxhflsdyirtcilqloswlnqzznbzvtugkbsgrhivrrapacsbcyfvryuev',
'segment_10' => 'ezkgabnruirhpbjyfcjvwrrirviyhdxdwrbzquywvtommfdlkjvklxmdftdpyssivgugulavahuyepnxybgezxsoitdoyntmmolxupfvagrbwqmfnogznachurpakyirtjpucylffakhbgvkszliqgbkhemzquckjgapwqblydxnzlfzvmjrzrnbjbcjcgeqybysnlmrnitneqwzqmupnkynzonojpvjni',
'segment_mrr' => 33770.488740565,
'segment_arr' => 1.5,
'segment_ltv' => 11691396.0,
'email_unsubscribed_at' => '2024-11-23T22:11:28',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88'
payload = {
"email": "tvonrueden@example.net",
"role": "admin",
"name": "fwpmhzwl",
"password": "ddzagzxi",
"created_at": "2024-11-23T22:11:28",
"is_blocked": "1",
"verified": "0",
"admin_accepted": "true",
"sso_uid": "pcgmhtvqdyezgqaettqnnniediqpucbtmkmhjtqzzsqcwgonzeqggmuuvzorjgoxaeoajoucxriuicwrfdwurvfobsjwbwlqppbatxoealuayzrijmureujrqnsnppmbteplcopgotgklxuchbjozzgbmyudqwebnrljfphxntajczqsdndpkvrfgwcwkigpnqwedxwkliiywmtyrcmokuwhcawlvwbzqxirxfzg",
"sso_avatar_url": "vxxiikvwgiawmepjcczyptnywghdnthmiffexsehfykpyxqopxjzwebzsdnhaiyrddqccnuzsfvhchhjoijxeirvhhfeixfarumteythdmxszoopbmqsupibakuwjnkguoye",
"company": "mndvfbqfbkvgqxfjcuvfhjuwkbqthmtijbalvkqzjpwguxkvlf",
"segment_1": "rynmsjzqdzzsdquxnfapwgsxxhthgbuazhvfpeizdmkoqljrdizibtrvbsdjczvljexeuxjuljkjjchjgcjdppjavyulrbfhldsyzsekvskjywckbfhwcmlgxtsqvslneotucuwraklqnidonemlhaqlkdjezpinbnthdklqrccnorryagunpycvcytpzpebvytwdkwwpwpglqtetqisjkpdjtmngpgguhtadunijzhsvxykkflb",
"segment_2": "umbyrcrusrbgbeohrqnnpcwqknnsstqmpcyuhepzlncuplnounyanzsqybalrvkmrdvcllxmowevvswsjltcligskxjxkegtqvpvyqweipwqjjbhufnmzuaahiwkvdfuhivvfxmvgfh",
"segment_3": "rqleljodifsh",
"segment_4": "trhqewnaplhnrbmq",
"segment_5": "iikijeohnullxxvchqxglqlsicfnpliynzmkzovubjhurkncfkkywzifemwqgewdaoufidenbwhmcvdflbigqfvmqgyphxmhzyqarxxdinrhxwshjfdvdifydcuybhz",
"segment_6": "wsodtmnthxeriryewsnthcsutfmlnxeidxgjiybfzbvldwfdloxksavuycuzkouhyhkbzushga",
"segment_7": "shekjozovgqqedcrvamvgqwqfuxacaynxgpbxlnijuyqbxevwkvefpextaycgwceyrmdbxnjooxvulnzzinpwrplsgmlnohzgyerzdcdwvrntjgihxxukzajceupjftwzeaxufxvxw",
"segment_8": "wsuovmlwpxjrddsdkzlwcyjfowmwzoiqzbkicfhcdlnhksmlitowolqwklttjzwqcept",
"segment_9": "yssuqhtzdapofxlqynbrccleclgytkripgpdmhxhflsdyirtcilqloswlnqzznbzvtugkbsgrhivrrapacsbcyfvryuev",
"segment_10": "ezkgabnruirhpbjyfcjvwrrirviyhdxdwrbzquywvtommfdlkjvklxmdftdpyssivgugulavahuyepnxybgezxsoitdoyntmmolxupfvagrbwqmfnogznachurpakyirtjpucylffakhbgvkszliqgbkhemzquckjgapwqblydxnzlfzvmjrzrnbjbcjcgeqybysnlmrnitneqwzqmupnkynzonojpvjni",
"segment_mrr": 33770.488740565,
"segment_arr": 1.5,
"segment_ltv": 11691396,
"email_unsubscribed_at": "2024-11-23T22:11:28"
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('PUT', url, headers=headers, json=payload)
response.json()
Example response (200):
{
"data": {
"id": "00f47dbc-76a1-4844-a3e9-cee070e3e0df",
"name": "Ruthe",
"email": "kaden.kunde@example.org",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/a01516a7aee31aac7021e375fea0a1ba?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Ruthe/60/FFDBCC/694536",
"counter_votes": 0,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2024-11-23T22:11:28.000000Z",
"is_blocked": null,
"verified": null,
"admin_accepted": null,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
}
Example response (404):
{
"message": "No query results for model [App\\User] ..."
}
Example response (422):
{
"message": "The given data was invalid.",
"errors": {
"role": [
"The selected role is invalid."
]
}
Received response:
Request failed with error:
Delete user
requires authentication
Deletes a specified user.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"delete_all_data\": true
}"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
let body = {
"delete_all_data": true
};
fetch(url, {
method: "DELETE",
headers,
body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'json' => [
'delete_all_data' => true,
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/users/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88'
payload = {
"delete_all_data": true
}
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers, json=payload)
response.json()
Example response (200):
{}
Example response (404):
{
"message": "No query results for model [App\\User] ..."
}
Received response:
Request failed with error:
Votes
Manage votes on your posts.
List votes
requires authentication
Lists all votes of a post.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"created_at": "2020-06-09T14:40:38.000000Z",
"voter": {
"id": "2850e389-2827-4316-a50a-fcdcc6474b5d",
"name": "Jordi",
"email": "descubre@exploradoresdemartech.com",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/72802d9f5cd0781807579a89a3947b75?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Jordi/60/CCE2CB/364c35",
"counter_votes": 3,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2020-06-09T14:40:23.000000Z",
"is_blocked": 0,
"verified": false,
"admin_accepted": 1,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
},
{
"created_at": "2020-06-09T14:40:38.000000Z",
"voter": {
"id": "2850e389-2827-4316-a50a-fcdcc6474b5d",
"name": "Jordi",
"email": "descubre@exploradoresdemartech.com",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/72802d9f5cd0781807579a89a3947b75?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Jordi/60/CCE2CB/364c35",
"counter_votes": 3,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2020-06-09T14:40:23.000000Z",
"is_blocked": 0,
"verified": false,
"admin_accepted": 1,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
}
]
}
Received response:
Request failed with error:
Revoke vote
requires authentication
Revoke a user's vote for a post.
Example request:
curl --request DELETE \
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "DELETE",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->delete(
'{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('DELETE', url, headers=headers)
response.json()
Example response (200):
{}
Example response (404):
{
"message": "No query results for model [App\\User] ..."
}
Example response (404):
{
"message": "No query results for model [App\\Post] ..."
}
Example response (422):
{
"message": "Post is not voteable."
}
Example response (422):
{
"message": "User has not voted yet."
}
Received response:
Request failed with error:
Vote
requires authentication
Add the vote of a user to a post.
Example request:
curl --request POST \
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "POST",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->post(
'{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/posts/0UFQQh/votes/8cbfbfd6-ecc3-4ec3-8b31-ea76b11c1f88'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('POST', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"created_at": "2020-06-09T14:40:38.000000Z",
"voter": {
"id": "2850e389-2827-4316-a50a-fcdcc6474b5d",
"name": "Jordi",
"email": "descubre@exploradoresdemartech.com",
"role": "member",
"profile_url": "{YOUR-PORTAL-URL}/user/profile/123456",
"avatar_small_url": "https://www.gravatar.com/avatar/72802d9f5cd0781807579a89a3947b75?s=60&d=https%3A%2F%2Fui-avatars.com%2Fapi%2F/Jordi/60/CCE2CB/364c35",
"counter_votes": 3,
"counter_comments": 0,
"counter_posts": 0,
"counter_comment_votes": 0,
"created_at": "2020-06-09T14:40:23.000000Z",
"is_blocked": 0,
"verified": false,
"admin_accepted": 1,
"sso_uid": null,
"sso_avatar_url": null,
"company": null,
"segment_1": null,
"segment_2": null,
"segment_3": null,
"segment_4": null,
"segment_5": null,
"segment_6": null,
"segment_7": null,
"segment_8": null,
"segment_9": null,
"segment_10": null,
"segment_mrr": null,
"segment_arr": null,
"segment_ltv": null,
"email_unsubscribed_at": null
}
}
}
Example response (404):
{
"message": "No query results for model [App\\User] ..."
}
Example response (404):
{
"message": "No query results for model [App\\Post] ..."
}
Example response (422):
{
"message": "Post is not voteable."
}
Example response (422):
{
"message": "User has already voted for this post."
}
Received response:
Request failed with error:
Widgets
API endpoints for managing widgets in your portal.
List widgets
requires authentication
Retrieves a collection of all widgets in your portal.
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/widgets" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/widgets"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/widgets',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/widgets'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": [
{
"id": "widget1",
"name": "Feedback Widget",
"type": "feedback",
"created_at": "2023-01-01T00:00:00Z",
"updated_at": "2023-01-01T00:00:00Z"
},
{
"id": "widget2",
"name": "Survey Widget",
"type": "survey",
"created_at": "2023-01-02T00:00:00Z",
"updated_at": "2023-01-02T00:00:00Z"
}
]
}
Received response:
Request failed with error:
Get widget
requires authentication
Retrieves the details of a specific widget by its key (ID).
Example request:
curl --request GET \
--get "{YOUR_PORTAL_URL}/api/v1/widgets/widget1" \
--header "Authorization: Bearer {YOUR_AUTH_KEY}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"
const url = new URL(
"{YOUR_PORTAL_URL}/api/v1/widgets/widget1"
);
const headers = {
"Authorization": "Bearer {YOUR_AUTH_KEY}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$response = $client->get(
'{YOUR_PORTAL_URL}/api/v1/widgets/widget1',
[
'headers' => [
'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
import requests
import json
url = '{YOUR_PORTAL_URL}/api/v1/widgets/widget1'
headers = {
'Authorization': 'Bearer {YOUR_AUTH_KEY}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()
Example response (200):
{
"data": {
"id": "widget1",
"name": "Feedback Widget",
"type": "feedback",
"created_at": "2023-01-01T00:00:00Z",
"updated_at": "2023-01-01T00:00:00Z"
}
}
Example response (404):
{
"message": "No query results for model [App\\Widget] widget1"
}
Received response:
Request failed with error: