MENU navbar-image

Introduction

This documentation aims to provide all the information you need to work with our API.

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty".

All authenticated endpoints are marked with a requires authentication badge in the documentation below.

You can retrieve your API token by sending POST request to v1/auth/login (See docs).

Few tokens to use:
Admin: 1|4AI27ybFZZg0G1GARE65HdvJqoLtMXSSaoVXGc1G
Author: 2|Uwdd4odgSa6QXbMQCy7U6xxKGGw9R5wkflicHnpA
Fan: 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Authentication

Check email

Check if email is available for the registration

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/auth/check/email?email=joe%40example.com" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/auth/check/email"
);

const params = {
    "email": "joe@example.com",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/auth/check/email';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'email' => 'joe@example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
x-ratelimit-limit: 300
x-ratelimit-remaining: 299
access-control-allow-origin: *
set-cookie: qplet_core_service_session=OogwB9nQxF0JRdoKi8cHg3u0NyJzJXnYujtIhYIw; expires=Fri, 28 Nov 2025 16:53:40 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "is_available": false
    }
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

GET v1/auth/check/email

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

email   string   

Must be a valid email address. Example: joe@example.com

Register

Endpoint for registering new users

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/auth/register" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"Joe Shmoe\",
    \"email\": \"another.joe@example.com\",
    \"type\": \"fan\",
    \"password\": \"Ye4oKoEa3Ro9ll\",
    \"password_repeat\": \"Ye4oKoEa3Ro9ll\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/auth/register"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "Joe Shmoe",
    "email": "another.joe@example.com",
    "type": "fan",
    "password": "Ye4oKoEa3Ro9ll",
    "password_repeat": "Ye4oKoEa3Ro9ll"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/auth/register';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'Joe Shmoe',
            'email' => 'another.joe@example.com',
            'type' => 'fan',
            'password' => 'Ye4oKoEa3Ro9ll',
            'password_repeat' => 'Ye4oKoEa3Ro9ll',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
x-ratelimit-limit: 300
x-ratelimit-remaining: 298
access-control-allow-origin: *
set-cookie: qplet_core_service_session=FceWGw5JWPQPkpBdZ3xEIdfivDJNNtng20Q9bCOL; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "name": "Joe Shmoe",
        "email": "another.joe@example.com",
        "type": "fan"
    }
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/auth/register

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

name   string   

Must be a full name of the user. Example: Joe Shmoe

email   string   

Must be a valid email address. Example: another.joe@example.com

type   string   

Example: fan

Must be one of:
  • author
  • fan
password   string   

Must be at least 8 characters. Example: Ye4oKoEa3Ro9ll

password_repeat   string   

The password_repeat and password must match. The value and password must match. Example: Ye4oKoEa3Ro9ll

Authenticate

Authenticate user

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/auth/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"email\": \"joe@example.com\",
    \"password\": \"Ye4oKoEa3Ro9ll\",
    \"device\": \"IPhone 14\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/auth/login"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "email": "joe@example.com",
    "password": "Ye4oKoEa3Ro9ll",
    "device": "IPhone 14"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/auth/login';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'email' => 'joe@example.com',
            'password' => 'Ye4oKoEa3Ro9ll',
            'device' => 'IPhone 14',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
x-ratelimit-limit: 300
x-ratelimit-remaining: 297
access-control-allow-origin: *
set-cookie: qplet_core_service_session=gtDXSZbhDaWfQEotWHdjLgHJxqyf1o2K9TwrAPz4; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "token": "1691|gBgoqNPIADXargBH3JEl5I5wd2zIZ3dHNWcPfdUmf668b1ae"
    }
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/auth/login

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

email   string   

Email address. Must be a valid email address. Example: joe@example.com

password   string   

User Password. Example: Ye4oKoEa3Ro9ll

device   string  optional  

Device name user is authenticating with. Example: IPhone 14

Request password reset

Request a password reset mail

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/auth/password-reset?email=joe%40example.com" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/auth/password-reset"
);

const params = {
    "email": "joe@example.com",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/auth/password-reset';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'email' => 'joe@example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/auth/password-reset

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

email   string   

Must be a valid email address. Example: joe@example.com

Reset password

Set new password for the account

Example request:
curl --request PUT \
    "https://api.qplet.dev/v1/auth/password-reset/ut" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"email\": \"joe@example.com\",
    \"password\": \"Ye4oKoEa3Ro9ll\",
    \"password_repeat\": \"Ye4oKoEa3Ro9ll\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/auth/password-reset/ut"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "email": "joe@example.com",
    "password": "Ye4oKoEa3Ro9ll",
    "password_repeat": "Ye4oKoEa3Ro9ll"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/auth/password-reset/ut';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'email' => 'joe@example.com',
            'password' => 'Ye4oKoEa3Ro9ll',
            'password_repeat' => 'Ye4oKoEa3Ro9ll',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (404):


{
    "type": "PasswordReset",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PUT v1/auth/password-reset/{token}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

token   string   

Example: ut

Body Parameters

email   string   

Must be a valid email address. Example: joe@example.com

password   string   

Must be at least 8 characters. Example: Ye4oKoEa3Ro9ll

password_repeat   string   

The password_repeat and password must match. The value and password must match. Example: Ye4oKoEa3Ro9ll

Validate password request code

Check validation code before asking for filling in the password

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/auth/password-reset/iste/validate?email=joe%40example.com" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/auth/password-reset/iste/validate"
);

const params = {
    "email": "joe@example.com",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/auth/password-reset/iste/validate';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'email' => 'joe@example.com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
x-ratelimit-limit: 300
x-ratelimit-remaining: 296
access-control-allow-origin: *
set-cookie: qplet_core_service_session=06UqRTZKx4Ba4M6krYdLTOtKBlGBulMG4yT2QsHK; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "is_valid": false
    }
}
 

Request      

POST v1/auth/password-reset/{token}/validate

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

token   string   

Example: iste

Query Parameters

email   string   

Must be a valid email address. Example: joe@example.com

Users

Show

Current user

requires authentication

Endpoint for fetching details about logged in user

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/me" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=SoZnANTpgRrLYIngfNZjHZJAhCdLFcq4U5TWe3Dl; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-df85-4307-a069-68612c4471e3",
        "name": "Admin Test Country",
        "email": "admin@qplet.ru",
        "is_subscribed": false,
        "analytics": {
            "tracks": 100,
            "albums": 5,
            "subscribers": 126
        },
        "type": "admin"
    }
}
 

Request      

GET v1/users/me

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

By ID

Endpoint for fetching user details

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=7BQbxnvG9qknkvgLhjDgQuuzvPDJuo3yFbSnegOh; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-df85-4307-a069-68612c4471e1",
        "name": "Fan Test Country",
        "is_subscribed": false,
        "analytics": {
            "tracks": 46,
            "albums": 4,
            "subscribers": 208
        }
    }
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Request      

GET v1/users/{user_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Delete

requires authentication

Soft deletes own account

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/users/me" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Request      

DELETE v1/users/me

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Update

requires authentication

Update currently logged in user

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/users/me" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"Joe Shmoe\",
    \"password\": \"Ye4oKoEa3Ro9ll\",
    \"password_repeat\": \"Ye4oKoEa3Ro9ll\",
    \"profile\": {
        \"gender\": \"male\",
        \"nickname\": \"joe_shmoe\",
        \"website\": \"https:\\/\\/qplet.ru\",
        \"about\": \"I`m Joe Shmoe\\n\\n I love singing and dancing.\",
        \"avatar_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
        \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
        \"birthdate\": \"2000-01-01\"
    }
}"
const url = new URL(
    "https://api.qplet.dev/v1/users/me"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "Joe Shmoe",
    "password": "Ye4oKoEa3Ro9ll",
    "password_repeat": "Ye4oKoEa3Ro9ll",
    "profile": {
        "gender": "male",
        "nickname": "joe_shmoe",
        "website": "https:\/\/qplet.ru",
        "about": "I`m Joe Shmoe\n\n I love singing and dancing.",
        "avatar_id": "00000000-422e-41ff-a266-2b0a093307e6",
        "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
        "birthdate": "2000-01-01"
    }
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'Joe Shmoe',
            'password' => 'Ye4oKoEa3Ro9ll',
            'password_repeat' => 'Ye4oKoEa3Ro9ll',
            'profile' => [
                'gender' => 'male',
                'nickname' => 'joe_shmoe',
                'website' => 'https://qplet.ru',
                'about' => 'I`m Joe Shmoe'."\n"
                    ."\n"
                    .' I love singing and dancing.',
                'avatar_id' => '00000000-422e-41ff-a266-2b0a093307e6',
                'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
                'birthdate' => '2000-01-01',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=0g6tuCJ86kfQX5qUk75xe3WG5iMLOQmgVFf3PYj5; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Request      

PATCH v1/users/me

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

name   string  optional  

Must be a full name of the user. Example: Joe Shmoe

password   string  optional  

Must be at least 8 characters. Example: Ye4oKoEa3Ro9ll

password_repeat   string  optional  

The password_repeat and password must match. This field is required when password is present. The value and password must match. Example: Ye4oKoEa3Ro9ll

profile   object  optional  
gender   string  optional  

Example: male

Must be one of:
  • male
  • female
nickname   string  optional  

Must be unique. Must match the regex /^[A-Za-z0-9_-]+$/. Must be between 6 and 20 characters. Example: joe_shmoe

website   string  optional  

Fully qualified URL. Must be a valid URL. Example: https://qplet.ru

about   string  optional  

Freeform multiline input. Example: Im Joe Shmoe

I love singing and dancing.`

avatar_id   string  optional  

MediaAssets ID that belongs to the user. Example: 00000000-422e-41ff-a266-2b0a093307e6

cover_id   string  optional  

MediaAssets ID that belongs to the user. Example: 00000000-422e-41ff-a266-2b0a093307e6

birthdate   string  optional  

Must be a valid date in the format Y-m-d. Example: 2000-01-01

List

Endpoint for fetching list of users

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users?filters[name]=Joe+Shmoe&filters[type]=author&filters[genres]=%5B%22a03ed1ae-33ff-43d6-9968-c3beac81b364%22%2C%22a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8%22%5D&filters[subscribed]=&per_page=20&page=1&pagination_type=page" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users"
);

const params = {
    "filters[name]": "Joe Shmoe",
    "filters[type]": "author",
    "filters[genres]": "["a03ed1ae-33ff-43d6-9968-c3beac81b364","a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8"]",
    "filters[subscribed]": "",
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[name]' => 'Joe Shmoe',
            'filters[type]' => 'author',
            'filters[genres]' => '["a03ed1ae-33ff-43d6-9968-c3beac81b364","a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8"]',
            'filters[subscribed]' => '',
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=EiI5BhHHHiolraIVWvNW4aXOdQnQqt6rAolLZFHj; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/users",
        "per_page": 20,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/users

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.name   string  optional  

Example: Joe Shmoe

filters.type   string   

Example: author

Must be one of:
  • author
  • fan
filters.genres   string  optional  

List of genre IDs. Must be a valid JSON string. Example: ["a03ed1ae-33ff-43d6-9968-c3beac81b364","a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8"]

filters.subscribed   boolean  optional  

Example: false

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Access

Blocked users

requires authentication

Users being blocked by the currently logged-in user

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/users/me/blocked?per_page=20&page=1&pagination_type=page&sort[by]=created_at&sort[order]=asc" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/blocked"
);

const params = {
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
    "sort[by]": "created_at",
    "sort[order]": "asc",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/blocked';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
            'sort[by]' => 'created_at',
            'sort[order]' => 'asc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Request      

POST v1/users/me/blocked

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page
sort   object  optional  
sort.by   string  optional  

Example: created_at

Must be one of:
  • created_at
sort.order   string  optional  

Example: asc

Must be one of:
  • asc
  • desc

Block

requires authentication

Block a user

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/block" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/block"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/block';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/users/{user_id}/block

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Unblock

requires authentication

Unblock a user

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/block" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/block"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/block';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Request      

DELETE v1/users/{user_id}/block

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Subscriptions

Subscribe

requires authentication

Subscribe to a user

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribe" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribe"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribe';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Request      

POST v1/users/{user_id}/subscribe

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Unsubscribe

requires authentication

Unsubscribe from a user

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribe" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribe"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribe';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Request      

DELETE v1/users/{user_id}/subscribe

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Subscriptions

requires authentication

List of users that the user is subscribed to

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscriptions?per_page=20&page=1&pagination_type=page&sort[by]=created_at&sort[order]=asc" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscriptions"
);

const params = {
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
    "sort[by]": "created_at",
    "sort[order]": "asc",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscriptions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
            'sort[by]' => 'created_at',
            'sort[order]' => 'asc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Request      

GET v1/users/{user_id}/subscriptions

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Query Parameters

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page
sort   object  optional  
sort.by   string  optional  

Example: created_at

Must be one of:
  • created_at
sort.order   string  optional  

Example: asc

Must be one of:
  • asc
  • desc

Subscribers

requires authentication

List of users that are subscribed to the user

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribers?per_page=20&page=1&pagination_type=page&sort[by]=created_at&sort[order]=asc" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribers"
);

const params = {
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
    "sort[by]": "created_at",
    "sort[order]": "asc",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/subscribers';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
            'sort[by]' => 'created_at',
            'sort[order]' => 'asc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Request      

GET v1/users/{user_id}/subscribers

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Query Parameters

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page
sort   object  optional  
sort.by   string  optional  

Example: created_at

Must be one of:
  • created_at
sort.order   string  optional  

Example: asc

Must be one of:
  • asc
  • desc

Posts

Store

requires authentication

Create a post with optionally shared entity

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/posts" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"content\": \"My Post content\",
    \"share\": {
        \"entity\": \"post\",
        \"id\": \"00000000-fdb0-43ce-b555-e0a26ed563ac\"
    }
}"
const url = new URL(
    "https://api.qplet.dev/v1/posts"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "content": "My Post content",
    "share": {
        "entity": "post",
        "id": "00000000-fdb0-43ce-b555-e0a26ed563ac"
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/posts';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'content' => 'My Post content',
            'share' => [
                'entity' => 'post',
                'id' => '00000000-fdb0-43ce-b555-e0a26ed563ac',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=NkNrXRoNp2rKFiRQ0LX0AGhdfm2Zfmklhsg9wATO; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a077478c-ba9b-43f8-81f8-3a02f4645686",
        "author": {
            "id": "00000000-df85-4307-a069-68612c4471e3",
            "name": "Admin Test Country",
            "avatar_url": null
        },
        "content": "My Post content",
        "created_at": 1764341619,
        "share": {
            "id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
            "type": "post"
        },
        "analytics": {
            "views": 0,
            "likes": 0,
            "comments": 0,
            "shares": 0
        },
        "is_liked": 0
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/posts

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

content   string   

Example: My Post content

share   object  optional  
entity   string  optional  

This field is required when share is present. Example: post

Must be one of:
  • album
  • event
  • playlist
  • post
  • track
  • media_asset
id   string  optional  

This field is required when share is present. Must be a valid UUID. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Update

requires authentication

Update own post

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"content\": \"My Post content updated\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "content": "My Post content updated"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'content' => 'My Post content updated',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=hLY6uQDLaoLwLDNZZTO32JplHFBH7XgMu8MRR38O; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
        "author": {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "avatar_url": null
        },
        "content": "My Post content updated",
        "created_at": 1761916670,
        "updated_at": 1764341619,
        "analytics": {
            "views": 0,
            "likes": 0,
            "comments": 0,
            "shares": 0
        },
        "is_liked": 0
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Post",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/posts/{post_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

post_id   string   

The ID of the post. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Body Parameters

content   string   

Example: My Post content updated

Delete

requires authentication

Delete own post

Admin can remove any post

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=kuda9LohH81mFF2aurP47UKtgUYYE6R2S2TQTEJw; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Post",
    "message": "No query results"
}
 

Request      

DELETE v1/posts/{post_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

post_id   string   

The ID of the post. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

List

Endpoint for fetching list of posts

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/posts?filters[author_id]=00000000-df85-4307-a069-68612c4471e2&filters[subscribed]=&per_page=20&page=1&pagination_type=page&sort[by]=created_at&sort[order]=asc" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/posts"
);

const params = {
    "filters[author_id]": "00000000-df85-4307-a069-68612c4471e2",
    "filters[subscribed]": "",
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
    "sort[by]": "created_at",
    "sort[order]": "asc",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/posts';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[author_id]' => '00000000-df85-4307-a069-68612c4471e2',
            'filters[subscribed]' => '',
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
            'sort[by]' => 'created_at',
            'sort[order]' => 'asc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=5QR4ksqA5TbaRcmpdwZCU1seybnGrszxzkvszc4a; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/posts",
        "per_page": 20,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/posts

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.author_id   string  optional  

Must be a valid UUID. Example: 00000000-df85-4307-a069-68612c4471e2

filters.subscribed   boolean  optional  

Example: false

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page
sort   object  optional  
sort.by   string  optional  

Example: created_at

Must be one of:
  • created_at
sort.order   string  optional  

Example: asc

Must be one of:
  • asc
  • desc

Show

Returns single post

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/posts/00000000-fdb0-43ce-b555-e0a26ed563ac';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=54hlhNPz9ktxxXQApBpVxlhBEDzoeQNWXVSpRJnY; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
        "author": {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "avatar_url": null
        },
        "content": "Saepe debitis omnis accusamus ex et et non. Officia velit totam eum. Iste et minima autem quis sit error.",
        "created_at": 1761916670,
        "analytics": {
            "views": 0,
            "likes": 0,
            "comments": 0,
            "shares": 0
        },
        "is_liked": 0
    }
}
 

Example response (404):


{
    "type": "Post",
    "message": "No query results"
}
 

Request      

GET v1/posts/{post_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

post_id   string   

The ID of the post. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Comments

Store

requires authentication

Create a comment in association to an entity

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/comments" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"entity\": {
        \"type\": \"post\",
        \"id\": \"00000000-53f7-4a5b-8c34-e171172c8ba8\"
    },
    \"content\": \"My comment to the post\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/comments"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "entity": {
        "type": "post",
        "id": "00000000-53f7-4a5b-8c34-e171172c8ba8"
    },
    "content": "My comment to the post"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/comments';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'entity' => [
                'type' => 'post',
                'id' => '00000000-53f7-4a5b-8c34-e171172c8ba8',
            ],
            'content' => 'My comment to the post',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=yluKLAwbuZVp72DrEMOruTsDOUDF6S4CA1H4ckrr; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a0774789-7025-45b5-96f0-07da4fc0adf5",
        "entity": {
            "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
            "type": "post"
        },
        "attachments": [],
        "content": "My comment to the post",
        "created_at": 1764341617
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/comments

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

entity   object   
type   string   

Example: post

Must be one of:
  • album
  • event
  • playlist
  • post
  • track
  • media_asset
id   string   

Must be a valid UUID. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

content   string   

Example: My comment to the post

Update

requires authentication

Update own comment

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"content\": \"My comment to the post\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "content": "My comment to the post"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'content' => 'My comment to the post',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=wdsIanPUVt9ir2jJUmNVkweOxKuxOVkn91SpqjYv; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-4113-4f04-bf25-cbca8546be74",
        "entity": {
            "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
            "type": "post"
        },
        "attachments": [
            null
        ],
        "content": "My comment to the post",
        "created_at": 1761916670,
        "updated_at": 1764341617
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Comment",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/comments/{comment_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

comment_id   string   

The ID of the comment. Example: 00000000-4113-4f04-bf25-cbca8546be74

Body Parameters

content   string   

Example: My comment to the post

Delete

requires authentication

Delete own comment

Admin can remove any comment

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=FuCIXR9gUF4VQMKXxobXS5zJh3y0GFzcX1Mr0mYK; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Comment",
    "message": "No query results"
}
 

Request      

DELETE v1/comments/{comment_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

comment_id   string   

The ID of the comment. Example: 00000000-4113-4f04-bf25-cbca8546be74

List

Endpoint for fetching list of comments

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/comments?filters[entity_type]=post&filters[entity_id]=00000000-53f7-4a5b-8c34-e171172c8ba8&per_page=20&page=1&pagination_type=page" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/comments"
);

const params = {
    "filters[entity_type]": "post",
    "filters[entity_id]": "00000000-53f7-4a5b-8c34-e171172c8ba8",
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/comments';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[entity_type]' => 'post',
            'filters[entity_id]' => '00000000-53f7-4a5b-8c34-e171172c8ba8',
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=znWmwRikiIOt5vnfFgzSS2A0beZHwOHinkUtCKBt; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "00000000-4113-4f04-bf25-cbca8546be74",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [
                null
            ],
            "content": "Quis magni ut blanditiis explicabo aut sed. Vel quia dolorem voluptatem.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9acd-43a0-9a95-e1194fade735",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Inventore officia enim sequi qui exercitationem. Minus quia sit aperiam enim sint. Nam nostrum exercitationem maiores ipsam et totam. Quia ut sunt neque consequatur odio.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9b5c-4d9a-9e45-013935db3823",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Necessitatibus consequatur pariatur dolore eum et. Quod quis dolorum sit laboriosam porro magnam. Rerum aut nesciunt asperiores aliquam nemo laborum. Placeat mollitia nemo libero velit minus itaque.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9bf7-4bd7-80e8-981742cb4ee6",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Pariatur maiores minima et numquam laboriosam amet. Natus voluptatibus iusto dolore quis ea. Rem aliquam dicta non adipisci deserunt pariatur aut. Facere dolore quidem omnis consequatur et mollitia.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9c86-4634-a229-d2bfc19eed6c",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Id et id numquam non voluptatum labore. Nulla est aut rerum enim. Doloremque labore quisquam dolorem veniam cum.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9d22-4a7a-90ac-346eddd20a04",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Magnam eligendi qui ratione. Aperiam cumque omnis autem. Voluptate aliquam voluptatum quia incidunt vel sit est. Quas inventore temporibus nam dolorem.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9daa-4a2f-997e-e9581e246a4a",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Dolores est non molestiae fugiat optio et accusamus quod. Ipsa nostrum et ullam. Optio maiores illo consequatur consectetur.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9e62-4f16-b869-fd65585c4ae0",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Ipsam quia facilis velit sit asperiores. Aut optio est repellendus. Illo mollitia quibusdam autem. Molestiae cupiditate consectetur sequi.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9ee5-4e8e-84b8-6618cdd20744",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Est porro nesciunt est animi blanditiis rem repudiandae. Eaque amet similique eum dignissimos. Quasi ducimus vitae deleniti autem et. Fuga doloremque qui minus quis quidem dolores.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-9fa7-449f-9deb-8a90a949d4fc",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Voluptates veritatis cum omnis. Et non quas ex iusto. Quod sapiente consequatur quasi excepturi enim iusto quos. Dolorem numquam consequatur qui ducimus eligendi.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a025-4cdb-8aa2-ff91703437c9",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Est est excepturi rerum. Placeat omnis rem odio. Eos odio alias a magnam temporibus dignissimos est ut. Tenetur provident quo fugiat voluptatem. Nobis sunt laboriosam temporibus.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a0d3-430f-b122-c8387c919751",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Omnis mollitia dolorem voluptatem culpa ducimus. Non a animi doloremque vel rem nobis temporibus. Minima quidem optio mollitia et voluptas.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a161-41f3-9f12-f87d256e62af",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Autem repellat ex maiores earum et qui. Molestias qui repudiandae laboriosam consequuntur aut. Et incidunt perferendis quisquam molestiae et.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a211-4779-9f8d-55f550a83451",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Itaque cumque cumque et. Voluptatem deleniti voluptas ex quibusdam. Eveniet commodi quia qui tempora. Voluptatum quis ut quis sit qui tempora temporibus.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a295-433f-b8ba-6fc0fae52011",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Necessitatibus qui sequi aut ut quibusdam expedita. At aut optio nemo provident omnis temporibus quibusdam ut.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a33d-4f7a-8884-3618aa8b5bbb",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Eum esse neque iure tempore sunt possimus. Quo ipsam molestiae ullam similique aut voluptas. Nesciunt corrupti perspiciatis quia suscipit nisi eos at.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a3d2-4995-99cb-b9c981d567e6",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Cupiditate pariatur in occaecati maxime sequi unde praesentium deserunt. Omnis veniam rerum voluptas. Non esse vero laudantium accusantium. Quia quis cumque rem non est et.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a45a-4b8a-b994-1cbf71262706",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Perferendis inventore dolores eum. Placeat blanditiis explicabo ullam ipsum et possimus. Soluta quo voluptatem quam facere.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a4e5-4f4b-bc7a-04cffb680912",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Quasi totam ea optio in eaque. Necessitatibus ad tenetur molestias enim accusamus esse. Voluptas et repellendus et eum voluptatem. Fuga et provident quas aut neque beatae est.",
            "created_at": 1761916670
        },
        {
            "id": "a03ed1b9-a588-41a9-8427-619331b8a77f",
            "entity": {
                "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
                "type": "post"
            },
            "attachments": [],
            "content": "Fugiat officiis rem magni corporis autem optio. Corrupti molestiae neque natus hic distinctio. Blanditiis aut asperiores ducimus eum.",
            "created_at": 1761916670
        }
    ],
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 3,
        "path": "http://localhost:8083/v1/comments",
        "per_page": 20,
        "to": 20,
        "total": 51
    }
}
 

Request      

GET v1/comments

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object   
filters.entity_type   string   

Example: post

Must be one of:
  • album
  • event
  • playlist
  • post
  • track
  • media_asset
filters.entity_id   string   

Must be a valid UUID. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Show

Returns single comment

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/comments/00000000-4113-4f04-bf25-cbca8546be74';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=i79Fy37LjSlsljQut6xISLrgrCIcotzyrbLNAYlm; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-4113-4f04-bf25-cbca8546be74",
        "entity": {
            "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
            "type": "post"
        },
        "attachments": [
            {
                "type": "image",
                "id": "00000000-422e-41ff-a266-2b0a093307e6",
                "filename": "et-dolores-aliquid-atdll",
                "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll",
                "extension": "dll",
                "created_at": "2025-10-31T13:17:49.000000Z"
            }
        ],
        "content": "Quis magni ut blanditiis explicabo aut sed. Vel quia dolorem voluptatem.",
        "created_at": 1761916670
    }
}
 

Example response (404):


{
    "type": "Comment",
    "message": "No query results"
}
 

Request      

GET v1/comments/{comment_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

comment_id   string   

The ID of the comment. Example: 00000000-4113-4f04-bf25-cbca8546be74

Albums

Create

requires authentication

Add new Album

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/albums" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"My favourite\",
    \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
    \"description\": \"Write short or long description about your album in here ...\",
    \"tracks\": [
        \"00000000-a791-4783-9845-4b571a9e579f\"
    ]
}"
const url = new URL(
    "https://api.qplet.dev/v1/albums"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "My favourite",
    "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
    "description": "Write short or long description about your album in here ...",
    "tracks": [
        "00000000-a791-4783-9845-4b571a9e579f"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/albums';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'My favourite',
            'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
            'description' => 'Write short or long description about your album in here ...',
            'tracks' => [
                '00000000-a791-4783-9845-4b571a9e579f',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=SNFk34AGCZ1gOIBlMzPanfO2UQmulCQSMKWkiIVG; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a077478c-9ddf-4123-980d-e21f24238ae3",
        "name": "My favourite",
        "description": "Write short or long description about your album in here ...",
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll",
            "filename": "et-dolores-aliquid-atdll",
            "created_at": "2025-10-31T13:17:49+00:00",
            "type": "image",
            "analytics": {
                "views": 543,
                "likes": 0,
                "comments": 0,
                "shares": 10
            }
        },
        "owner": {
            "id": "00000000-df85-4307-a069-68612c4471e3",
            "name": "Admin Test Country",
            "avatar_url": null
        },
        "tracks_count": 1,
        "tracks": [
            {
                "id": "00000000-a791-4783-9845-4b571a9e579f",
                "title": "Rolling in the Deep",
                "media_asset": {
                    "id": "a03ed1ba-42fa-47c4-80d1-ad691774032f",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1ba-42fa-47c4-80d1-ad691774032f.ssf"
                },
                "owner": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 2,
                    "likes": 0,
                    "comments": 14,
                    "shares": 7
                },
                "is_liked": 0
            }
        ],
        "created_at": 1764341619
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/albums

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

name   string   

Example: My favourite

cover_id   string  optional  

Media Asset UUID. Must be a valid UUID. Example: 00000000-422e-41ff-a266-2b0a093307e6

description   string  optional  

Example: Write short or long description about your album in here ...

tracks   string[]   

Media Asset ID. Must be a valid UUID.

Update

requires authentication

Update a Album

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"My favourite\",
    \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
    \"description\": \"Write short or long description about your album in here ...\",
    \"tracks\": [
        \"00000000-a791-4783-9845-4b571a9e579f\"
    ]
}"
const url = new URL(
    "https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "My favourite",
    "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
    "description": "Write short or long description about your album in here ...",
    "tracks": [
        "00000000-a791-4783-9845-4b571a9e579f"
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'My favourite',
            'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
            'description' => 'Write short or long description about your album in here ...',
            'tracks' => [
                '00000000-a791-4783-9845-4b571a9e579f',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=YPekAj0AZmkuWiAxk8WSYY4s13fqR84VC7Q4ffRC; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-b7fa-4324-b250-a3c6c78b65c4",
        "name": "My favourite",
        "description": "Write short or long description about your album in here ...",
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll",
            "filename": "et-dolores-aliquid-atdll",
            "created_at": "2025-10-31T13:17:49+00:00",
            "type": "image",
            "analytics": {
                "views": 2966,
                "likes": 0,
                "comments": 0,
                "shares": 11
            }
        },
        "owner": {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "avatar_url": null
        },
        "tracks_count": 1,
        "tracks": [
            {
                "id": "00000000-a791-4783-9845-4b571a9e579f",
                "title": "Rolling in the Deep",
                "media_asset": {
                    "id": "a03ed1ba-42fa-47c4-80d1-ad691774032f",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1ba-42fa-47c4-80d1-ad691774032f.ssf"
                },
                "owner": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 13,
                    "likes": 0,
                    "comments": 5,
                    "shares": 15
                },
                "is_liked": 0
            }
        ],
        "created_at": 1761916710
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Album",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/albums/{album_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

album_id   string   

The ID of the album. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

Body Parameters

name   string   

Example: My favourite

cover_id   string  optional  

Media Asset UUID. Must be a valid UUID. Example: 00000000-422e-41ff-a266-2b0a093307e6

description   string  optional  

Example: Write short or long description about your album in here ...

tracks   string[]   

Media Asset ID. Must be a valid UUID.

Delete

requires authentication

Delete a Album

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=HbxeCdY7dWYMR7fGw8OdDUV3ooBaQlsAJQcao3fz; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Album",
    "message": "No query results"
}
 

Request      

DELETE v1/albums/{album_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

album_id   string   

The ID of the album. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

List

Endpoint for fetching all available albums.

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/albums?filters[name]=&filters[owner]=&per_page=5&page=64&cursor=repellendus&pagination_type=page&sort[by]=created_at&sort[order]=asc" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/albums"
);

const params = {
    "filters[name]": "",
    "filters[owner]": "",
    "per_page": "5",
    "page": "64",
    "cursor": "repellendus",
    "pagination_type": "page",
    "sort[by]": "created_at",
    "sort[order]": "asc",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/albums';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[name]' => '',
            'filters[owner]' => '',
            'per_page' => '5',
            'page' => '64',
            'cursor' => 'repellendus',
            'pagination_type' => 'page',
            'sort[by]' => 'created_at',
            'sort[order]' => 'asc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=0V8wCo7UAATrpxiJQ6NBfyOMRxRDH9OlgxMBRJnt; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 64,
        "from": null,
        "last_page": 11,
        "path": "http://localhost:8083/v1/albums",
        "per_page": 5,
        "to": null,
        "total": 55
    }
}
 

Request      

GET v1/albums

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.name   string  optional  
filters.owner   string  optional  

Must be a valid UUID.

per_page   integer  optional  

Must be between 5 and 100. Example: 5

page   integer  optional  

Must be at least 1. Example: 64

cursor   string  optional  

Example: repellendus

pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page
sort   object  optional  
sort.by   string  optional  

Example: created_at

Must be one of:
  • created_at
  • name
sort.order   string  optional  

Example: asc

Must be one of:
  • asc
  • desc

Show

requires authentication

Endpoint for fetching album details

When album is private it can only be viewed by admin

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/albums/00000000-b7fa-4324-b250-a3c6c78b65c4';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=PByUDqaflzXgKqnQleFxllZ4DpW4mXA9GFp1s7pX; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-b7fa-4324-b250-a3c6c78b65c4",
        "name": "My favourite",
        "description": null,
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll",
            "filename": "et-dolores-aliquid-atdll",
            "created_at": "2025-10-31T13:17:49+00:00",
            "type": "image",
            "analytics": {
                "views": 2038,
                "likes": 0,
                "comments": 0,
                "shares": 9
            }
        },
        "owner": {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "avatar_url": null
        },
        "tracks_count": 21,
        "tracks": [
            {
                "id": "00000000-a791-4783-9845-4b571a9e579f",
                "title": "Rolling in the Deep",
                "media_asset": {
                    "id": "a03ed1ba-42fa-47c4-80d1-ad691774032f",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1ba-42fa-47c4-80d1-ad691774032f.ssf"
                },
                "cover": {
                    "id": "a03ed1ba-448d-418b-8980-60336e0bdf37",
                    "url": "https://via.placeholder.com/640x480.png/00eeee?text=debitis"
                },
                "owner": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 6,
                    "likes": 0,
                    "comments": 12,
                    "shares": 10
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-12bf-4029-9480-c13f020cd7c4",
                "title": "Iusto sit omnis assumenda quia.",
                "media_asset": {
                    "id": "a03ed1f7-a3e8-458d-ac99-4d86528237e3",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-a3e8-458d-ac99-4d86528237e3.vcf"
                },
                "cover": {
                    "id": "a03ed1f7-a5ce-45b7-862b-ac8a35fa7a35",
                    "url": "https://via.placeholder.com/640x480.png/00ff88?text=quia"
                },
                "owner": {
                    "id": "a03ed1f7-a11a-4df9-a8ab-e64f197f8500",
                    "name": "Hailee Boyer",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 4,
                    "likes": 0,
                    "comments": 4,
                    "shares": 7
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-13a3-4060-bd33-c513956ca1fa",
                "title": "Velit doloribus et officia deserunt placeat ipsa soluta.",
                "media_asset": {
                    "id": "a03ed1f7-a8cc-4a42-a8a4-679c219ead5f",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-a8cc-4a42-a8a4-679c219ead5f.chm"
                },
                "cover": {
                    "id": "a03ed1f7-aa20-49b7-b8fe-440079bcb8fc",
                    "url": "https://via.placeholder.com/640x480.png/009922?text=rerum"
                },
                "owner": {
                    "id": "a03ed1f7-a771-4f2d-97a8-2a4665ad78de",
                    "name": "Shemar Will",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 6,
                    "likes": 0,
                    "comments": 3,
                    "shares": 13
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-147d-4195-aed1-247984210634",
                "title": "Quod debitis exercitationem odit earum sed quaerat.",
                "media_asset": {
                    "id": "a03ed1f7-ad67-4e3d-9326-88c1390c72d4",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-ad67-4e3d-9326-88c1390c72d4.pre"
                },
                "cover": {
                    "id": "a03ed1f7-aec6-4765-b349-589cfc81e68e",
                    "url": "https://via.placeholder.com/640x480.png/005566?text=et"
                },
                "owner": {
                    "id": "a03ed1f7-ab9a-432e-8955-5616b70d3a7d",
                    "name": "Vivienne Rosenbaum I",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 15,
                    "likes": 0,
                    "comments": 0,
                    "shares": 1
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-156f-43a0-85f2-9917b98b46d5",
                "title": "Voluptatum in quia tempore quaerat repudiandae culpa non et.",
                "media_asset": {
                    "id": "a03ed1f7-b199-4b82-8888-5d2a094dabc5",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-b199-4b82-8888-5d2a094dabc5.uvvv"
                },
                "cover": {
                    "id": "a03ed1f7-b2f8-475b-a09d-0ada7aa65973",
                    "url": "https://via.placeholder.com/640x480.png/005533?text=nobis"
                },
                "owner": {
                    "id": "a03ed1f7-b037-498d-bf50-e9b9fadad771",
                    "name": "Dr. Jakob Beahan",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 7,
                    "likes": 0,
                    "comments": 10,
                    "shares": 5
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1655-41ff-9508-021f88c009a8",
                "title": "Inventore quo non quia maxime et repellendus.",
                "media_asset": {
                    "id": "a03ed1f7-b6cc-48c9-a75e-518117605105",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-b6cc-48c9-a75e-518117605105.mmf"
                },
                "cover": {
                    "id": "a03ed1f7-b87f-4894-b12c-7d5a9d873ad3",
                    "url": "https://via.placeholder.com/640x480.png/00ee11?text=qui"
                },
                "owner": {
                    "id": "a03ed1f7-b4f6-41bd-bfdf-8d4401c017d8",
                    "name": "Mabelle Crooks",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 3,
                    "likes": 0,
                    "comments": 7,
                    "shares": 8
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-17bb-4c68-b27d-2ec4cfdad4f3",
                "title": "Et qui non mollitia sunt et sed reprehenderit aut.",
                "media_asset": {
                    "id": "a03ed1f7-bb50-4e20-94a5-2403d734c16e",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-bb50-4e20-94a5-2403d734c16e.avi"
                },
                "cover": {
                    "id": "a03ed1f7-bcc1-4dcb-a998-96d50d9c28dc",
                    "url": "https://via.placeholder.com/640x480.png/0000dd?text=cumque"
                },
                "owner": {
                    "id": "a03ed1f7-b9f1-42cf-9251-460d48ddb1bc",
                    "name": "Caleigh Kshlerin II",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 0,
                    "likes": 0,
                    "comments": 11,
                    "shares": 12
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1951-452c-a78c-f6632effe7e6",
                "title": "Ut ut ipsam dolore harum.",
                "media_asset": {
                    "id": "a03ed1f7-bfee-437a-97e7-d2f1b7ef1bac",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-bfee-437a-97e7-d2f1b7ef1bac.xspf"
                },
                "cover": {
                    "id": "a03ed1f7-c15c-4c40-be2e-ebf5f4c5b38b",
                    "url": "https://via.placeholder.com/640x480.png/0044cc?text=ipsam"
                },
                "owner": {
                    "id": "a03ed1f7-be52-436f-bbde-005561f12a46",
                    "name": "Trevor Konopelski",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 6,
                    "likes": 0,
                    "comments": 8,
                    "shares": 7
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1a65-4bc8-8bfd-be3038278ce2",
                "title": "Quis et molestias quam sed.",
                "media_asset": {
                    "id": "a03ed1f7-c426-4ca0-ba66-746c08dd5234",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-c426-4ca0-ba66-746c08dd5234.igs"
                },
                "cover": {
                    "id": "a03ed1f7-c574-4b00-acfc-be342284a200",
                    "url": "https://via.placeholder.com/640x480.png/002211?text=quas"
                },
                "owner": {
                    "id": "a03ed1f7-c2ca-4d20-9ab8-04ba3f4f77d6",
                    "name": "Clotilde Trantow",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 7,
                    "likes": 0,
                    "comments": 4,
                    "shares": 11
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1b74-4598-8a05-82382f0b3cdd",
                "title": "Ullam repellat architecto accusantium ab exercitationem.",
                "media_asset": {
                    "id": "a03ed1f7-c861-4248-bc89-8497f0fc2cb5",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-c861-4248-bc89-8497f0fc2cb5.ahead"
                },
                "cover": {
                    "id": "a03ed1f7-c9b5-4fbb-be0e-31636d3bf364",
                    "url": "https://via.placeholder.com/640x480.png/00aa11?text=consequatur"
                },
                "owner": {
                    "id": "a03ed1f7-c6fc-4530-ac7d-94fcea1bd637",
                    "name": "Eloisa Sanford",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 10,
                    "likes": 0,
                    "comments": 14,
                    "shares": 10
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1ccb-4149-8518-b0859a7a9e14",
                "title": "Quam voluptas repellat nesciunt amet veritatis quia eos consectetur.",
                "media_asset": {
                    "id": "a03ed1f7-cc90-41a3-858a-c4ecebafbc8a",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-cc90-41a3-858a-c4ecebafbc8a.rmvb"
                },
                "cover": {
                    "id": "a03ed1f7-cdf1-4d1a-94ef-898c8d8d88f0",
                    "url": "https://via.placeholder.com/640x480.png/00aaee?text=maxime"
                },
                "owner": {
                    "id": "a03ed1f7-cb30-46ce-b41e-8d9019cf7e1a",
                    "name": "Elza Jenkins",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 11,
                    "likes": 0,
                    "comments": 8,
                    "shares": 15
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1dab-46a5-ac77-6da86a072dce",
                "title": "Et expedita corrupti consectetur facilis.",
                "media_asset": {
                    "id": "a03ed1f7-d72e-4948-94d8-97d554b8ede2",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-d72e-4948-94d8-97d554b8ede2.vxml"
                },
                "cover": {
                    "id": "a03ed1f7-da7e-4395-a5f4-2afa2a289bff",
                    "url": "https://via.placeholder.com/640x480.png/001188?text=qui"
                },
                "owner": {
                    "id": "a03ed1f7-d539-4bbd-817b-cd30ec7f9f8b",
                    "name": "Dawn West",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 1,
                    "likes": 0,
                    "comments": 5,
                    "shares": 0
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1e54-460a-848b-5625ecff388c",
                "title": "Inventore vel aut neque quia tempora distinctio ea.",
                "media_asset": {
                    "id": "a03ed1f7-df3d-4c55-87a8-099a5b4836dc",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-df3d-4c55-87a8-099a5b4836dc.ics"
                },
                "cover": {
                    "id": "a03ed1f7-e0c2-4bc1-9ea7-27dddd232548",
                    "url": "https://via.placeholder.com/640x480.png/00aa99?text=nihil"
                },
                "owner": {
                    "id": "a03ed1f7-dd8e-49a1-a3b6-0e65b5cacea0",
                    "name": "Mr. Gennaro Nikolaus",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 5,
                    "likes": 0,
                    "comments": 4,
                    "shares": 10
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1ef5-4d4e-b409-cd38518efa66",
                "title": "Vel voluptatum sunt sint pariatur.",
                "media_asset": {
                    "id": "a03ed1f7-e3ec-43ae-bde2-8d44f83ef38b",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-e3ec-43ae-bde2-8d44f83ef38b.ez2"
                },
                "cover": {
                    "id": "a03ed1f7-e56b-4018-a0a2-bf73865bbd31",
                    "url": "https://via.placeholder.com/640x480.png/0055cc?text=a"
                },
                "owner": {
                    "id": "a03ed1f7-e25c-4bde-bf74-a9c809ead685",
                    "name": "Prof. Deven Tremblay",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 0,
                    "likes": 0,
                    "comments": 12,
                    "shares": 3
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-1f91-42e3-a820-f1fdc4c8f815",
                "title": "Et voluptate officia quia atque.",
                "media_asset": {
                    "id": "a03ed1f7-e847-4b52-9733-f1b12ceebf55",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-e847-4b52-9733-f1b12ceebf55.fvt"
                },
                "cover": {
                    "id": "a03ed1f7-e9bf-42df-96b1-8ac0bb71889b",
                    "url": "https://via.placeholder.com/640x480.png/00dd99?text=consequatur"
                },
                "owner": {
                    "id": "a03ed1f7-e6eb-45c5-9f69-ae2e734c0a86",
                    "name": "Broderick Kemmer",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 7,
                    "likes": 0,
                    "comments": 10,
                    "shares": 3
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-2071-44b5-a6cb-d8c62ca7a4fc",
                "title": "Corrupti dolorem corrupti est sit sunt amet atque ut.",
                "media_asset": {
                    "id": "a03ed1f7-ec9c-45dd-8ada-ce1da8029bea",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-ec9c-45dd-8ada-ce1da8029bea.otp"
                },
                "cover": {
                    "id": "a03ed1f7-edf9-4177-9131-15a4361dffdb",
                    "url": "https://via.placeholder.com/640x480.png/00ee33?text=veniam"
                },
                "owner": {
                    "id": "a03ed1f7-eb2f-4207-b4b0-11b32f5d2029",
                    "name": "Roger Lynch",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 11,
                    "likes": 0,
                    "comments": 5,
                    "shares": 0
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-2150-4b3f-b799-31c345fe045b",
                "title": "Amet natus expedita placeat libero alias.",
                "media_asset": {
                    "id": "a03ed1f7-f4f1-479c-b9a0-9427c2efa445",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-f4f1-479c-b9a0-9427c2efa445.potx"
                },
                "cover": {
                    "id": "a03ed1f7-f8c1-4bdd-ad76-d16e7f6d0cb1",
                    "url": "https://via.placeholder.com/640x480.png/0077ee?text=cumque"
                },
                "owner": {
                    "id": "a03ed1f7-f216-4cc6-b48c-bc7378b68cba",
                    "name": "Shakira Mosciski PhD",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 9,
                    "likes": 0,
                    "comments": 11,
                    "shares": 0
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-22a5-4ed7-85c5-df0fc04ab88e",
                "title": "Facilis quis voluptatum nihil consequuntur cumque.",
                "media_asset": {
                    "id": "a03ed1f7-ff0c-40d8-861b-0fb54c536106",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f7-ff0c-40d8-861b-0fb54c536106.wmd"
                },
                "cover": {
                    "id": "a03ed1f8-01d8-4f40-98ce-c5363918b050",
                    "url": "https://via.placeholder.com/640x480.png/00aa99?text=asperiores"
                },
                "owner": {
                    "id": "a03ed1f7-fbc0-4bac-a444-98c3eccee817",
                    "name": "Kadin Volkman III",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 1,
                    "likes": 0,
                    "comments": 15,
                    "shares": 10
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-238c-4254-9ae1-8fab3ca2e182",
                "title": "Tempore earum cum deserunt facilis.",
                "media_asset": {
                    "id": "a03ed1f8-0646-4c82-a98a-de28ab2bac3d",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f8-0646-4c82-a98a-de28ab2bac3d.xm"
                },
                "cover": {
                    "id": "a03ed1f8-08a3-442e-9713-49acb9ee0a3a",
                    "url": "https://via.placeholder.com/640x480.png/0077aa?text=accusantium"
                },
                "owner": {
                    "id": "a03ed1f8-04ba-487b-ba3e-2bbc451bce34",
                    "name": "Marina Jenkins",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 0,
                    "likes": 0,
                    "comments": 8,
                    "shares": 11
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-2483-443e-a625-59ef851298d0",
                "title": "Soluta unde distinctio labore explicabo.",
                "media_asset": {
                    "id": "a03ed1f8-0b7f-4d43-b2ec-3c11dca50214",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f8-0b7f-4d43-b2ec-3c11dca50214.igs"
                },
                "cover": {
                    "id": "a03ed1f8-0cda-4bfc-8bd2-8dd90cc81a0e",
                    "url": "https://via.placeholder.com/640x480.png/00eecc?text=fugiat"
                },
                "owner": {
                    "id": "a03ed1f8-0a1e-4e5a-89de-6ca88a9cce24",
                    "name": "Julio Hartmann DVM",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 12,
                    "likes": 0,
                    "comments": 12,
                    "shares": 1
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f8-2553-4d24-927d-45f8eb795513",
                "title": "Animi unde voluptas itaque amet.",
                "media_asset": {
                    "id": "a03ed1f8-0fa4-4d89-b54c-fb82c56d1266",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f8-0fa4-4d89-b54c-fb82c56d1266.stw"
                },
                "cover": {
                    "id": "a03ed1f8-114a-4e07-942a-c14e81d438ae",
                    "url": "https://via.placeholder.com/640x480.png/00dd99?text=nemo"
                },
                "owner": {
                    "id": "a03ed1f8-0e49-4b79-ae66-526dcf9c7c38",
                    "name": "Miss Claudine Eichmann",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 3,
                    "likes": 0,
                    "comments": 5,
                    "shares": 13
                },
                "is_liked": 0
            }
        ],
        "created_at": 1761916710
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Album",
    "message": "No query results"
}
 

Request      

GET v1/albums/{album_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

album_id   string   

The ID of the album. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

Playlists

System

New tracks

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/playlists/new" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/new"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/new';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=AbxA0lW1wdLMokw7gfpyiur4sN4nslrcQjzFGykB; expires=Fri, 28 Nov 2025 16:53:36 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Request      

GET v1/playlists/new

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/playlists/popular" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/popular"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/popular';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=1v6j2Unezvg9TPIMUgY32hKC1BNsvHTYyIRI4MT3; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/playlists/recommended" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/recommended"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/recommended';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=fgLQDsTS8vdl5d3vVJHL5MZubC2REV90oN1NLDWo; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Show

requires authentication

Endpoint for fetching playlist details

When playlist is private it can only be viewed by admin

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=rEgxq2XyE6Hw2kbQeDZAV5LRgaJzxwPCxiKuKDrY; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-b7fa-4324-b250-a3c6c78b65c4",
        "name": "My favourite",
        "description": null,
        "cover": null,
        "tracks_count": 21,
        "tracks": [
            {
                "id": "00000000-a791-4783-9845-4b571a9e579f",
                "title": "Rolling in the Deep",
                "media_asset": {
                    "id": "a03ed1ba-42fa-47c4-80d1-ad691774032f",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1ba-42fa-47c4-80d1-ad691774032f.ssf"
                },
                "owner": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 13,
                    "likes": 0,
                    "comments": 8,
                    "shares": 5
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-c50e-43b8-b658-c18c367b4e02",
                "title": "Quia nesciunt quisquam veritatis facilis.",
                "media_asset": {
                    "id": "a03ed1f3-61f6-439a-a4ed-da6c1c426eec",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-61f6-439a-a4ed-da6c1c426eec.doc"
                },
                "owner": {
                    "id": "a03ed1f3-605f-41cc-8567-75ff68c7d0be",
                    "name": "Korbin Corwin",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 2,
                    "likes": 0,
                    "comments": 15,
                    "shares": 6
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-c62a-47d9-add0-2056e1fb12d2",
                "title": "Eius eos illum saepe delectus nihil quis.",
                "media_asset": {
                    "id": "a03ed1f3-6687-46f6-b888-097ae1e0491b",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-6687-46f6-b888-097ae1e0491b.tmo"
                },
                "owner": {
                    "id": "a03ed1f3-6557-4cb5-9cb3-708b81363614",
                    "name": "Dr. Dejah Graham",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 10,
                    "likes": 0,
                    "comments": 2,
                    "shares": 4
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-c717-434f-9995-062ace0f3669",
                "title": "Explicabo accusantium accusamus maxime minus sunt sint corporis.",
                "media_asset": {
                    "id": "a03ed1f3-6ae1-4557-b76c-9439ef613e98",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-6ae1-4557-b76c-9439ef613e98.tmo"
                },
                "owner": {
                    "id": "a03ed1f3-694f-4807-bd46-b42551951c3b",
                    "name": "Dave Daugherty",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 11,
                    "likes": 0,
                    "comments": 13,
                    "shares": 9
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-c84f-4d06-a44f-7b2758451cb4",
                "title": "Autem voluptas minima ad aut assumenda sit.",
                "media_asset": {
                    "id": "a03ed1f3-72da-473d-aab6-004cdb14be5d",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-72da-473d-aab6-004cdb14be5d.class"
                },
                "owner": {
                    "id": "a03ed1f3-708f-4139-bbc8-ed9ef22fc439",
                    "name": "Winifred Lubowitz I",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 5,
                    "likes": 0,
                    "comments": 10,
                    "shares": 15
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-c94e-4500-b2a4-8535dff730c8",
                "title": "Enim quaerat iste totam excepturi incidunt hic quam.",
                "media_asset": {
                    "id": "a03ed1f3-7999-42d9-bb23-652473e0400c",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-7999-42d9-bb23-652473e0400c.sv4crc"
                },
                "owner": {
                    "id": "a03ed1f3-779f-4f00-a311-1918bdfb5ca7",
                    "name": "Dr. Everardo Gulgowski IV",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 11,
                    "likes": 0,
                    "comments": 0,
                    "shares": 14
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-cab7-4345-ac2b-8d1e99114033",
                "title": "Voluptas eum aut omnis incidunt quaerat unde omnis.",
                "media_asset": {
                    "id": "a03ed1f3-8197-40a2-9ec1-afbf4f137b70",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-8197-40a2-9ec1-afbf4f137b70.gtw"
                },
                "owner": {
                    "id": "a03ed1f3-7f46-4d57-94a8-08ee636c7bd0",
                    "name": "Parker Tremblay II",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 6,
                    "likes": 0,
                    "comments": 7,
                    "shares": 15
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-cb8c-4c8d-b48b-43d609ac6660",
                "title": "Quia officiis dolore pariatur aut ex asperiores ea.",
                "media_asset": {
                    "id": "a03ed1f3-85cf-4ad4-8c0b-e28741c55ddb",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-85cf-4ad4-8c0b-e28741c55ddb.wgt"
                },
                "owner": {
                    "id": "a03ed1f3-848f-4311-99b5-73cf2651da12",
                    "name": "Deven Schamberger",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 5,
                    "likes": 0,
                    "comments": 1,
                    "shares": 14
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-cc25-4dff-be08-3d185f0d3bad",
                "title": "Ex iure nulla aut sint.",
                "media_asset": {
                    "id": "a03ed1f3-89da-456a-b77f-7cc92b238ffd",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-89da-456a-b77f-7cc92b238ffd.ppm"
                },
                "owner": {
                    "id": "a03ed1f3-8865-4f6e-8185-c7574521e70c",
                    "name": "Maye Tillman Sr.",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 4,
                    "likes": 0,
                    "comments": 9,
                    "shares": 1
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-ccea-48fa-a7da-774874ec535f",
                "title": "Numquam rem sapiente nesciunt est possimus architecto.",
                "media_asset": {
                    "id": "a03ed1f3-8fa5-4a91-8069-ec3129701de0",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-8fa5-4a91-8069-ec3129701de0.sema"
                },
                "owner": {
                    "id": "a03ed1f3-8df9-4a07-8d50-f48219bfa32c",
                    "name": "Tod Gaylord",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 4,
                    "likes": 0,
                    "comments": 15,
                    "shares": 4
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-cd74-492c-9dbd-cc4d41f61485",
                "title": "Praesentium vel deserunt repellendus reprehenderit molestiae voluptas quia.",
                "media_asset": {
                    "id": "a03ed1f3-9485-40dd-a106-41615d6859ae",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-9485-40dd-a106-41615d6859ae.mobi"
                },
                "owner": {
                    "id": "a03ed1f3-9326-4a9d-84c9-c15c88892447",
                    "name": "Donna Morar",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 12,
                    "likes": 0,
                    "comments": 9,
                    "shares": 12
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-cdfd-4cee-8c3b-126c56b1cfc6",
                "title": "Voluptates asperiores ut voluptas dolorem non nisi et minima.",
                "media_asset": {
                    "id": "a03ed1f3-98c3-4e33-9e49-f2f051f53543",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-98c3-4e33-9e49-f2f051f53543.xslt"
                },
                "owner": {
                    "id": "a03ed1f3-975d-4bbc-9777-6454740b8014",
                    "name": "Clovis Leffler",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 10,
                    "likes": 0,
                    "comments": 6,
                    "shares": 10
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-ce84-45a6-afcc-ea2bc4eb3353",
                "title": "Quia necessitatibus quam consequatur et ex rerum dolorum.",
                "media_asset": {
                    "id": "a03ed1f3-9d2d-4e06-bed3-121bcc5d69eb",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-9d2d-4e06-bed3-121bcc5d69eb.mus"
                },
                "owner": {
                    "id": "a03ed1f3-9bc8-4ac4-82c8-526d7fd4589f",
                    "name": "Freddie Thompson",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 10,
                    "likes": 0,
                    "comments": 4,
                    "shares": 3
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-cf77-4c5a-9431-ca5e4790a4d0",
                "title": "Sed debitis voluptas provident.",
                "media_asset": {
                    "id": "a03ed1f3-a1bc-447c-b861-df80d762d280",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-a1bc-447c-b861-df80d762d280.h264"
                },
                "owner": {
                    "id": "a03ed1f3-a03d-496f-a055-96dd35d42f11",
                    "name": "Yoshiko Kuphal",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 0,
                    "likes": 0,
                    "comments": 4,
                    "shares": 5
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-d02b-48ef-a144-84e0b1611793",
                "title": "Temporibus unde nesciunt voluptates.",
                "media_asset": {
                    "id": "a03ed1f3-a650-41b9-b8cb-31502edb2eed",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-a650-41b9-b8cb-31502edb2eed.odp"
                },
                "owner": {
                    "id": "a03ed1f3-a504-43f5-8a35-9f308ba82a2b",
                    "name": "Bettye Heidenreich",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 4,
                    "likes": 0,
                    "comments": 13,
                    "shares": 15
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-d0b3-4ff7-beab-52c8dcce618f",
                "title": "Quam omnis ut et dicta iste.",
                "media_asset": {
                    "id": "a03ed1f3-aa79-4455-b3c0-8a503ba3210c",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-aa79-4455-b3c0-8a503ba3210c.bdm"
                },
                "owner": {
                    "id": "a03ed1f3-a90e-4251-97e6-deb91445a6d1",
                    "name": "Devyn Mayert",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 4,
                    "likes": 0,
                    "comments": 10,
                    "shares": 8
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-d158-4a85-a608-2c5ac40e4e54",
                "title": "Vel quibusdam exercitationem quidem ut.",
                "media_asset": {
                    "id": "a03ed1f3-ae7d-4fc4-ad32-5cd3290bb56e",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-ae7d-4fc4-ad32-5cd3290bb56e.karbon"
                },
                "owner": {
                    "id": "a03ed1f3-ad2c-4ea0-a831-e3eb1d8e692c",
                    "name": "Savannah Gusikowski V",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 4,
                    "likes": 0,
                    "comments": 7,
                    "shares": 3
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-d1e3-4d18-8dab-dac94a44872b",
                "title": "Nihil quibusdam qui doloremque ipsa et et voluptas.",
                "media_asset": {
                    "id": "a03ed1f3-b2a8-4ee1-8ae9-7a09ebb8676e",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-b2a8-4ee1-8ae9-7a09ebb8676e.js"
                },
                "owner": {
                    "id": "a03ed1f3-b156-4319-8e84-f9cb5202ee19",
                    "name": "Florine O'Hara IV",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 3,
                    "likes": 0,
                    "comments": 14,
                    "shares": 13
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-d26f-446f-bf54-b1cae1195a38",
                "title": "Laborum assumenda hic pariatur illo suscipit et.",
                "media_asset": {
                    "id": "a03ed1f3-b733-46dd-8f25-01ee8f7e6691",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-b733-46dd-8f25-01ee8f7e6691.docm"
                },
                "owner": {
                    "id": "a03ed1f3-b57f-45b2-a5e1-caaebff12916",
                    "name": "Colby Feeney",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 10,
                    "likes": 0,
                    "comments": 13,
                    "shares": 5
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-d31f-4052-a2dc-c7b98f40f190",
                "title": "Enim dolorum dolorem et et sapiente voluptatum.",
                "media_asset": {
                    "id": "a03ed1f3-bb3f-4412-84ac-e61f541534a1",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-bb3f-4412-84ac-e61f541534a1.fig"
                },
                "owner": {
                    "id": "a03ed1f3-b9f5-4570-980d-1ba5b2419826",
                    "name": "Hattie Gerhold",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 10,
                    "likes": 0,
                    "comments": 2,
                    "shares": 3
                },
                "is_liked": 0
            },
            {
                "id": "a03ed1f3-d3a5-40cc-91d8-fb0cd7221663",
                "title": "Quia nostrum ut possimus praesentium vel blanditiis.",
                "media_asset": {
                    "id": "a03ed1f3-bfa9-4c15-9369-095f2cf2dc9d",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1f3-bfa9-4c15-9369-095f2cf2dc9d.sxd"
                },
                "owner": {
                    "id": "a03ed1f3-bde7-45d9-9271-8e32cf9ff84e",
                    "name": "Louie Krajcik I",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 0,
                    "likes": 0,
                    "comments": 2,
                    "shares": 2
                },
                "is_liked": 0
            }
        ],
        "is_editable": true
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Playlist",
    "message": "No query results"
}
 

Request      

GET v1/playlists/{playlist_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

playlist_id   string   

The ID of the playlist. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

Create

requires authentication

Add new Playlist

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/playlists" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"My favourite\",
    \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
    \"description\": \"Write short or long description about your album in here ...\",
    \"tracks\": [
        \"00000000-a791-4783-9845-4b571a9e579f\"
    ]
}"
const url = new URL(
    "https://api.qplet.dev/v1/playlists"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "My favourite",
    "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
    "description": "Write short or long description about your album in here ...",
    "tracks": [
        "00000000-a791-4783-9845-4b571a9e579f"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'My favourite',
            'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
            'description' => 'Write short or long description about your album in here ...',
            'tracks' => [
                '00000000-a791-4783-9845-4b571a9e579f',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=JI6KbXm6gnVajkjVahNXJlbqFek6jeWIhREp8Q9V; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a077478b-7308-425d-b5a1-64e9a809646b",
        "name": "My favourite",
        "description": "Write short or long description about your album in here ...",
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll",
            "filename": "et-dolores-aliquid-atdll",
            "created_at": "2025-10-31T13:17:49+00:00",
            "type": "image",
            "analytics": {
                "views": 1761,
                "likes": 0,
                "comments": 0,
                "shares": 2
            }
        },
        "tracks_count": 1,
        "tracks": [
            {
                "id": "00000000-a791-4783-9845-4b571a9e579f",
                "title": "Rolling in the Deep",
                "media_asset": {
                    "id": "a03ed1ba-42fa-47c4-80d1-ad691774032f",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1ba-42fa-47c4-80d1-ad691774032f.ssf"
                },
                "owner": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 8,
                    "likes": 0,
                    "comments": 4,
                    "shares": 13
                },
                "is_liked": 0
            }
        ],
        "is_editable": true
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/playlists

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

name   string   

Example: My favourite

cover_id   string  optional  

Media Asset ID. Must be a valid UUID. Example: 00000000-422e-41ff-a266-2b0a093307e6

description   string  optional  

Example: Write short or long description about your album in here ...

tracks   string[]   

Media Asset ID. Must be a valid UUID.

Update

requires authentication

Update a Playlist

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"My favourite\",
    \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
    \"description\": \"Write short or long description about your album in here ...\",
    \"tracks\": [
        \"00000000-a791-4783-9845-4b571a9e579f\"
    ]
}"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "My favourite",
    "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
    "description": "Write short or long description about your album in here ...",
    "tracks": [
        "00000000-a791-4783-9845-4b571a9e579f"
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'My favourite',
            'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
            'description' => 'Write short or long description about your album in here ...',
            'tracks' => [
                '00000000-a791-4783-9845-4b571a9e579f',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=xmaQgonaOfCpX4VDzaAn3WbeYwC2ubtbWQ7xdyE5; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-b7fa-4324-b250-a3c6c78b65c4",
        "name": "My favourite",
        "description": "Write short or long description about your album in here ...",
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll",
            "filename": "et-dolores-aliquid-atdll",
            "created_at": "2025-10-31T13:17:49+00:00",
            "type": "image",
            "analytics": {
                "views": 1867,
                "likes": 0,
                "comments": 0,
                "shares": 14
            }
        },
        "tracks_count": 1,
        "tracks": [
            {
                "id": "00000000-a791-4783-9845-4b571a9e579f",
                "title": "Rolling in the Deep",
                "media_asset": {
                    "id": "a03ed1ba-42fa-47c4-80d1-ad691774032f",
                    "url": "http://localhost:8083/v1/media-assets/a03ed1ba-42fa-47c4-80d1-ad691774032f.ssf"
                },
                "owner": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "genres": [],
                "analytics": {
                    "playbacks": 13,
                    "likes": 0,
                    "comments": 2,
                    "shares": 8
                },
                "is_liked": 0
            }
        ],
        "is_editable": true
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Playlist",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/playlists/{playlist_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

playlist_id   string   

The ID of the playlist. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

Body Parameters

name   string   

Example: My favourite

cover_id   string  optional  

Media Asset UUID. Must be a valid UUID. Example: 00000000-422e-41ff-a266-2b0a093307e6

description   string  optional  

Example: Write short or long description about your album in here ...

tracks   string[]   

Media Asset ID. Must be a valid UUID.

Delete

requires authentication

Delete a Playlist

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=oWL98d1w0InaxzMmk7BRIdgEMwqhh3XTsPVXyUlE; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Playlist",
    "message": "No query results"
}
 

Request      

DELETE v1/playlists/{playlist_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

playlist_id   string   

The ID of the playlist. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

List

Endpoint for fetching all available playlists.

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/playlists?filters[name]=" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists"
);

const params = {
    "filters[name]": "",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[name]' => '',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=G480OGr7SOVjPi8lo3tsUrdJ8hx2fRqpac70O11r; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "a5bd1de4-1bee-427b-9288-e832f254bd8a",
            "name": "New",
            "description": null,
            "cover": null,
            "tracks_count": 0,
            "tracks": [],
            "is_editable": false
        },
        {
            "id": "a5bd1de4-1bee-427b-9288-e832f254bd8b",
            "name": "Popular",
            "description": null,
            "cover": null,
            "tracks_count": 0,
            "tracks": [],
            "is_editable": false
        },
        {
            "id": "a5bd1de4-1bee-427b-9288-e832f254bd8c",
            "name": "Recommended",
            "description": null,
            "cover": null,
            "tracks_count": 0,
            "tracks": [],
            "is_editable": false
        },
        {
            "id": "a03ed1f2-5ca4-4afc-b0c0-43f5723eb205",
            "name": "Earum",
            "description": null,
            "cover": null,
            "tracks_count": 0,
            "tracks": [],
            "is_editable": true
        },
        {
            "id": "a03ed1f2-5d75-4349-bf88-2a60bcaf90aa",
            "name": "Expedita",
            "description": null,
            "cover": null,
            "tracks_count": 0,
            "tracks": [],
            "is_editable": true
        },
        {
            "id": "a03ed1f2-5e31-4847-957d-eb849fbf5152",
            "name": "Sed",
            "description": null,
            "cover": null,
            "tracks_count": 0,
            "tracks": [],
            "is_editable": true
        }
    ]
}
 

Request      

GET v1/playlists

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.name   string  optional  

Tracks

Add track

requires authentication

Add track to the playlist

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4/00000000-a791-4783-9845-4b571a9e579f" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4/00000000-a791-4783-9845-4b571a9e579f"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4/00000000-a791-4783-9845-4b571a9e579f';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=wXJrxXpTYgquSdIviyfFsOX4UJOzX2M1KL2tpyHu; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Playlist",
    "message": "No query results"
}
 

Example response (404):


{
    "type": "Track",
    "message": "No query results"
}
 

Request      

POST v1/playlists/{playlist_id}/{track_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

playlist_id   string   

The ID of the playlist. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

track_id   string   

The ID of the track. Example: 00000000-a791-4783-9845-4b571a9e579f

Remove track

requires authentication

Remove track from the playlist

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4/00000000-a791-4783-9845-4b571a9e579f" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4/00000000-a791-4783-9845-4b571a9e579f"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4/00000000-a791-4783-9845-4b571a9e579f';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=VqOuihxOTZB6XNYnY6rDzHQnSmrq2wGeEvqkRpeH; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Playlist",
    "message": "No query results"
}
 

Example response (404):


{
    "type": "Track",
    "message": "No query results"
}
 

Request      

DELETE v1/playlists/{playlist_id}/{track_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

playlist_id   string   

The ID of the playlist. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

track_id   string   

The ID of the track. Example: 00000000-a791-4783-9845-4b571a9e579f

Tracks

Store

requires authentication

Create a track in association to an entity

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/tracks" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"media_asset_id\": \"00000000-422e-41ff-a266-2b0a093307e7\",
    \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
    \"album_id\": \"00000000-b7fa-4324-b250-a3c6c78b65c4\",
    \"title\": \"Rolling in the Deep\",
    \"genres\": [
        \"3784b94e-7206-3999-8f4b-f16e184c8131\"
    ],
    \"lyrics\": {
        \"is_own\": false,
        \"author\": \"Hubby Bobby\",
        \"content\": \"Lorem ipsum dolor sit amet\\\\nconsectetur adipiscing elit\\\\nPhasellus consectetur\\\\nfelis eu pretium accumsan\"
    },
    \"music\": {
        \"is_own\": false,
        \"author\": \"Bobby Hubby\"
    }
}"
const url = new URL(
    "https://api.qplet.dev/v1/tracks"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "media_asset_id": "00000000-422e-41ff-a266-2b0a093307e7",
    "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
    "album_id": "00000000-b7fa-4324-b250-a3c6c78b65c4",
    "title": "Rolling in the Deep",
    "genres": [
        "3784b94e-7206-3999-8f4b-f16e184c8131"
    ],
    "lyrics": {
        "is_own": false,
        "author": "Hubby Bobby",
        "content": "Lorem ipsum dolor sit amet\\nconsectetur adipiscing elit\\nPhasellus consectetur\\nfelis eu pretium accumsan"
    },
    "music": {
        "is_own": false,
        "author": "Bobby Hubby"
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/tracks';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'media_asset_id' => '00000000-422e-41ff-a266-2b0a093307e7',
            'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
            'album_id' => '00000000-b7fa-4324-b250-a3c6c78b65c4',
            'title' => 'Rolling in the Deep',
            'genres' => [
                '3784b94e-7206-3999-8f4b-f16e184c8131',
            ],
            'lyrics' => [
                'is_own' => false,
                'author' => 'Hubby Bobby',
                'content' => 'Lorem ipsum dolor sit amet\\nconsectetur adipiscing elit\\nPhasellus consectetur\\nfelis eu pretium accumsan',
            ],
            'music' => [
                'is_own' => false,
                'author' => 'Bobby Hubby',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=4gYTqd6xGpkAvvqavgcrrqLYZFpS9dvky5588Xot; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a077478c-ac8c-4fd9-ba38-3a6282d1504c",
        "title": "Rolling in the Deep",
        "media_asset": {
            "id": "00000000-422e-41ff-a266-2b0a093307e7",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e7.pgp"
        },
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "https://via.placeholder.com/640x480.png/000044?text=eveniet"
        },
        "owner": {
            "id": "00000000-df85-4307-a069-68612c4471e3",
            "name": "Admin Test Country",
            "avatar_url": null
        },
        "genres": [],
        "analytics": {
            "playbacks": 6,
            "likes": 0,
            "comments": 13,
            "shares": 15
        },
        "is_liked": 0,
        "lyrics": {
            "is_own": false,
            "author": "Hubby Bobby",
            "content": "Lorem ipsum dolor sit amet\\nconsectetur adipiscing elit\\nPhasellus consectetur\\nfelis eu pretium accumsan"
        },
        "music": {
            "is_own": false,
            "author": "Bobby Hubby"
        }
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/tracks

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

media_asset_id   string   

Must be a valid UUID. Example: 00000000-422e-41ff-a266-2b0a093307e7

cover_id   string  optional  

Must be a valid UUID. Example: 00000000-422e-41ff-a266-2b0a093307e6

album_id   string  optional  

Must be a valid UUID. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

title   string   

Example: Rolling in the Deep

genres   string[]  optional  

Must be a valid UUID.

lyrics   object   
is_own   boolean   

Example: false

author   string  optional  

Example: Hubby Bobby

content   string  optional  

Example: Lorem ipsum dolor sit amet\nconsectetur adipiscing elit\nPhasellus consectetur\nfelis eu pretium accumsan

music   object   
is_own   boolean   

Example: false

author   string  optional  

Example: Bobby Hubby

Update

requires authentication

Update own track

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"media_asset_id\": \"00000000-422e-41ff-a266-2b0a093307e7\",
    \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
    \"album_id\": \"00000000-b7fa-4324-b250-a3c6c78b65c4\",
    \"title\": \"Rolling in the Deep (Updated)\",
    \"genres\": [
        \"f4a42dc3-72ce-337f-9beb-d6033b80ab28\"
    ],
    \"lyrics\": {
        \"is_own\": false,
        \"author\": \"Hubby Bobby\",
        \"content\": \"Lorem ipsum dolor sit amet\\\\nconsectetur adipiscing elit\\\\nPhasellus consectetur\\\\nfelis eu pretium accumsan\"
    },
    \"music\": {
        \"is_own\": false,
        \"author\": \"Bobby Hubby\"
    }
}"
const url = new URL(
    "https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "media_asset_id": "00000000-422e-41ff-a266-2b0a093307e7",
    "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
    "album_id": "00000000-b7fa-4324-b250-a3c6c78b65c4",
    "title": "Rolling in the Deep (Updated)",
    "genres": [
        "f4a42dc3-72ce-337f-9beb-d6033b80ab28"
    ],
    "lyrics": {
        "is_own": false,
        "author": "Hubby Bobby",
        "content": "Lorem ipsum dolor sit amet\\nconsectetur adipiscing elit\\nPhasellus consectetur\\nfelis eu pretium accumsan"
    },
    "music": {
        "is_own": false,
        "author": "Bobby Hubby"
    }
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'media_asset_id' => '00000000-422e-41ff-a266-2b0a093307e7',
            'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
            'album_id' => '00000000-b7fa-4324-b250-a3c6c78b65c4',
            'title' => 'Rolling in the Deep (Updated)',
            'genres' => [
                'f4a42dc3-72ce-337f-9beb-d6033b80ab28',
            ],
            'lyrics' => [
                'is_own' => false,
                'author' => 'Hubby Bobby',
                'content' => 'Lorem ipsum dolor sit amet\\nconsectetur adipiscing elit\\nPhasellus consectetur\\nfelis eu pretium accumsan',
            ],
            'music' => [
                'is_own' => false,
                'author' => 'Bobby Hubby',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=rT6jH2u7eWZCPRF5Rq0SNilWQ4uLWBfetgfCrUGC; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-a791-4783-9845-4b571a9e579f",
        "title": "Rolling in the Deep (Updated)",
        "media_asset": {
            "id": "a03ed1ba-42fa-47c4-80d1-ad691774032f",
            "url": "http://localhost:8083/v1/media-assets/a03ed1ba-42fa-47c4-80d1-ad691774032f.ssf"
        },
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "https://via.placeholder.com/640x480.png/000044?text=eveniet"
        },
        "owner": {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "avatar_url": null
        },
        "genres": [],
        "analytics": {
            "playbacks": 2,
            "likes": 0,
            "comments": 10,
            "shares": 7
        },
        "is_liked": 0,
        "lyrics": {
            "is_own": false,
            "author": "Hubby Bobby",
            "content": "Lorem ipsum dolor sit amet\\nconsectetur adipiscing elit\\nPhasellus consectetur\\nfelis eu pretium accumsan"
        },
        "music": {
            "is_own": false,
            "author": "Bobby Hubby"
        }
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Track",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/tracks/{track_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

track_id   string   

The ID of the track. Example: 00000000-a791-4783-9845-4b571a9e579f

Body Parameters

media_asset_id   string   

Must be a valid UUID. Example: 00000000-422e-41ff-a266-2b0a093307e7

cover_id   string  optional  

Must be a valid UUID. Example: 00000000-422e-41ff-a266-2b0a093307e6

album_id   string  optional  

Must be a valid UUID. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

title   string   

Example: Rolling in the Deep (Updated)

genres   string[]  optional  

Must be a valid UUID.

lyrics   object   
is_own   boolean   

Example: false

author   string  optional  

Example: Hubby Bobby

content   string  optional  

Example: Lorem ipsum dolor sit amet\nconsectetur adipiscing elit\nPhasellus consectetur\nfelis eu pretium accumsan

music   object   
is_own   boolean   

Example: false

author   string  optional  

Example: Bobby Hubby

Delete

requires authentication

Delete own track

Admin can remove any track

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=ZxRrJwiDZocgGFN6UBZWeW5BlXIizyJgmiB5qghI; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Track",
    "message": "No query results"
}
 

Request      

DELETE v1/tracks/{track_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

track_id   string   

The ID of the track. Example: 00000000-a791-4783-9845-4b571a9e579f

List

Endpoint for fetching list of tracks

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/tracks?filters[title]=Rolling+in+the+Deep&filters[owner]=Joe+Shmoe&filters[owner_id]=00000000-df85-4307-a069-68612c4471e2&filters[genres]=%5B%22a03ed1ae-33ff-43d6-9968-c3beac81b364%22%2C%22a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8%22%5D&filters[subscribed]=&per_page=20&page=1&pagination_type=page" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/tracks"
);

const params = {
    "filters[title]": "Rolling in the Deep",
    "filters[owner]": "Joe Shmoe",
    "filters[owner_id]": "00000000-df85-4307-a069-68612c4471e2",
    "filters[genres]": "["a03ed1ae-33ff-43d6-9968-c3beac81b364","a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8"]",
    "filters[subscribed]": "",
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/tracks';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[title]' => 'Rolling in the Deep',
            'filters[owner]' => 'Joe Shmoe',
            'filters[owner_id]' => '00000000-df85-4307-a069-68612c4471e2',
            'filters[genres]' => '["a03ed1ae-33ff-43d6-9968-c3beac81b364","a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8"]',
            'filters[subscribed]' => '',
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=dS8TfPEGb6PFFKEkwKHLnWmLzwzFv8Ao1da9R5eE; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/tracks",
        "per_page": 20,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/tracks

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.title   string  optional  

Example: Rolling in the Deep

filters.owner   string  optional  

Example: Joe Shmoe

filters.owner_id   string  optional  

Must be a valid UUID. Example: 00000000-df85-4307-a069-68612c4471e2

filters.genres   string  optional  

List of genre IDs. Must be a valid JSON string. Example: ["a03ed1ae-33ff-43d6-9968-c3beac81b364","a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8"]

filters.subscribed   boolean  optional  

Example: false

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Show

Returns single track

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/tracks/00000000-a791-4783-9845-4b571a9e579f';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=4d4J1wVwTuU48Zmr3uoEAKyWrAidEKf0A1jUnxbB; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-a791-4783-9845-4b571a9e579f",
        "title": "Rolling in the Deep",
        "media_asset": {
            "id": "a03ed1ba-42fa-47c4-80d1-ad691774032f",
            "url": "http://localhost:8083/v1/media-assets/a03ed1ba-42fa-47c4-80d1-ad691774032f.ssf"
        },
        "cover": {
            "id": "a03ed1ba-448d-418b-8980-60336e0bdf37",
            "url": "https://via.placeholder.com/640x480.png/00eeee?text=debitis"
        },
        "owner": {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "avatar_url": null
        },
        "genres": [],
        "analytics": {
            "playbacks": 13,
            "likes": 0,
            "comments": 3,
            "shares": 7
        },
        "is_liked": 0,
        "lyrics": {
            "is_own": 0,
            "author": "Dereck Bergnaum",
            "content": "Autem dolores ut est est. Dolorem et dolorem ab sequi. Illum vitae omnis quidem neque aut."
        },
        "music": {
            "is_own": 1,
            "author": null
        }
    }
}
 

Example response (404):


{
    "type": "Track",
    "message": "No query results"
}
 

Request      

GET v1/tracks/{track_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

track_id   string   

The ID of the track. Example: 00000000-a791-4783-9845-4b571a9e579f

Data

MediaAssets

Own assets

requires authentication

Endpoint for fetching own MediaAssets.

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/media-assets/my?filters[type]=image&per_page=100&page=1&pagination_type=page" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/media-assets/my"
);

const params = {
    "filters[type]": "image",
    "per_page": "100",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/media-assets/my';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[type]' => 'image',
            'per_page' => '100',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=bZp0G9vH7oPiEnYpNslOvK9rloXWc3mmtwCqrc2k; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/media-assets/my",
        "per_page": 100,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/media-assets/my

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.type   string  optional  

Example: image

Must be one of:
  • image
  • audio
  • video
per_page   integer  optional  

Must be between 5 and 100. Example: 100

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Create

requires authentication

Add new MediaAsset

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/media-assets" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --form "is_public="\
    --form "file=@/var/www/html/storage/app/public/logo.png" 
const url = new URL(
    "https://api.qplet.dev/v1/media-assets"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

const body = new FormData();
body.append('is_public', '');
body.append('file', document.querySelector('input[name="file"]').files[0]);

fetch(url, {
    method: "POST",
    headers,
    body,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/media-assets';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'multipart/form-data',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'multipart' => [
            [
                'name' => 'is_public',
                'contents' => ''
            ],
            [
                'name' => 'file',
                'contents' => fopen('/var/www/html/storage/app/public/logo.png', 'r')
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=AMumwcKXvBdCvlLj0RIApd5LDPsLYgehNpABbAkv; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "b015a0bf-44d9-4743-8939-dcfce8048f99",
        "url": "http://localhost:8083/v1/media-assets/b015a0bf-44d9-4743-8939-dcfce8048f99.png",
        "filename": "logo.png",
        "created_at": "2025-11-28T14:53:39+00:00",
        "type": "image",
        "analytics": {
            "views": 2628,
            "likes": 0,
            "comments": 0,
            "shares": 13
        }
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/media-assets

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: multipart/form-data

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

file   file   

Must be a file. Must not be greater than 50000 kilobytes. Example: storage/app/public/logo.png

is_public   boolean  optional  

Example: false

Delete

requires authentication

Delete a MediaAsset

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/media-assets/commodi" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/media-assets/commodi"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/media-assets/commodi';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "MediaAsset",
    "message": "No query results"
}
 

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=JksGQZ1ZERPgfpTDr9nhsmg0AUv2Dm2SxAtZTPdu; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Unable to find the media asset you requested."
}
 

Request      

DELETE v1/media-assets/{media_asset_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

media_asset_id   string   

The ID of the media asset. Example: commodi

List

Endpoint for fetching all available MediaAssets.

In order to list non-public MediaAssets { filters.is_public: false } you'll need an Admin role.

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/media-assets?filters[type]=image&filters[is_public]=1&filters[owner_id]=00000000-df85-4307-a069-68612c4471e2&per_page=100&page=1&pagination_type=page" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/media-assets"
);

const params = {
    "filters[type]": "image",
    "filters[is_public]": "1",
    "filters[owner_id]": "00000000-df85-4307-a069-68612c4471e2",
    "per_page": "100",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/media-assets';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[type]' => 'image',
            'filters[is_public]' => '1',
            'filters[owner_id]' => '00000000-df85-4307-a069-68612c4471e2',
            'per_page' => '100',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=vff0uwH7L7Gs1uZ5hnUdYGQtc9tNS0PL51ZGRPbG; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/media-assets",
        "per_page": 100,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/media-assets

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.type   string  optional  

Example: image

Must be one of:
  • image
  • audio
  • video
filters.is_public   boolean  optional  

Example: true

filters.owner_id   string  optional  

Must be a valid UUID. Example: 00000000-df85-4307-a069-68612c4471e2

per_page   integer  optional  

Must be between 5 and 100. Example: 100

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Get file

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/media-assets/in.omnis" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/media-assets/in.omnis"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/media-assets/in.omnis';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "File",
    "message": "No query results"
}
 

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=ULf6AZgl00q2Kv9UXmr3zkkDLSNmaxkYHyVP05uS; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Unable to find the media asset you requested."
}
 

Request      

GET v1/media-assets/{media_asset_id}.{extension}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

media_asset_id   string   

The ID of the media asset. Example: in

extension   string   

Example: omnis

Get file

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/media-assets/download/et.laudantium" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/media-assets/download/et.laudantium"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/media-assets/download/et.laudantium';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "File",
    "message": "No query results"
}
 

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=pO1TG5x8uWS8RpKs8piN0ECFiQcFi1NybNInzKwv; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Unable to find the media asset you requested."
}
 

Request      

GET v1/media-assets/download/{media_asset_id}.{extension}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

media_asset_id   string   

The ID of the media asset. Example: et

extension   string   

Example: laudantium

Show

Endpoint for fetching MediaAsset details

When MediaAsset is private it can only be viewed by admin or owner

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/media-assets/rem" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/media-assets/rem"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/media-assets/rem';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "MediaAsset",
    "message": "No query results"
}
 

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=F9WcorD4HA3ANLEHg5p2EMlhBmEFgDnnWrShqfZf; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Unable to find the media asset you requested."
}
 

Request      

GET v1/media-assets/{media_asset_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

media_asset_id   string   

The ID of the media asset. Example: rem

Genres

List

Endpoint for fetching all available genres.

In order to list non-public genres { filters.is_public: false } you'll need an Admin role.

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/data/genres?filters[name]=Alternative&filters[is_public]=1&per_page=100&page=1&pagination_type=page" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/data/genres"
);

const params = {
    "filters[name]": "Alternative",
    "filters[is_public]": "1",
    "per_page": "100",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/data/genres';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[name]' => 'Alternative',
            'filters[is_public]' => '1',
            'per_page' => '100',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=grHM7fa2fhS7ENOTH5kes7O4O0k91RCMJNBtRwLC; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "a03ed1ae-33ff-43d6-9968-c3beac81b364",
            "name": "Alternative",
            "tracks": 791415
        }
    ],
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "path": "http://localhost:8083/v1/data/genres",
        "per_page": 100,
        "to": 1,
        "total": 1
    }
}
 

Request      

GET v1/data/genres

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.name   string  optional  

Example: Alternative

filters.is_public   boolean  optional  

Example: true

per_page   integer  optional  

Must be between 5 and 100. Example: 100

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Show

Endpoint for fetching genre details

When genre is private it can only be viewed by admin

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/data/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/data/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/data/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=clMryjQMsQNx6P1DRhvyLhDiXmn6f5kuWnZai8Ae; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a03ed1ae-33ff-43d6-9968-c3beac81b364",
        "name": "Alternative",
        "tracks": 791415
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Genre",
    "message": "No query results"
}
 

Request      

GET v1/data/genres/{genre_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

genre_id   string   

The ID of the genre. Example: a03ed1ae-33ff-43d6-9968-c3beac81b364

Countries

Endpoint for fetching list of countries

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/data/countries" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/data/countries"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/data/countries';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=01PrWSVNkLDYrF5m9kQ0ZgMgHv4mpYfjFoEHMBKm; expires=Fri, 28 Nov 2025 16:53:42 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "AF",
            "name": "Afghanistan"
        },
        {
            "id": "AX",
            "name": "Åland Islands"
        },
        {
            "id": "AL",
            "name": "Albania"
        },
        {
            "id": "DZ",
            "name": "Algeria"
        },
        {
            "id": "AS",
            "name": "American Samoa"
        },
        {
            "id": "AD",
            "name": "Andorra"
        },
        {
            "id": "AO",
            "name": "Angola"
        },
        {
            "id": "AI",
            "name": "Anguilla"
        },
        {
            "id": "AQ",
            "name": "Antarctica"
        },
        {
            "id": "AG",
            "name": "Antigua and Barbuda"
        },
        {
            "id": "AR",
            "name": "Argentina"
        },
        {
            "id": "AM",
            "name": "Armenia"
        },
        {
            "id": "AW",
            "name": "Aruba"
        },
        {
            "id": "AU",
            "name": "Australia"
        },
        {
            "id": "AT",
            "name": "Austria"
        },
        {
            "id": "AZ",
            "name": "Azerbaijan"
        },
        {
            "id": "BS",
            "name": "Bahamas"
        },
        {
            "id": "BH",
            "name": "Bahrain"
        },
        {
            "id": "BD",
            "name": "Bangladesh"
        },
        {
            "id": "BB",
            "name": "Barbados"
        },
        {
            "id": "BY",
            "name": "Belarus"
        },
        {
            "id": "BE",
            "name": "Belgium"
        },
        {
            "id": "BZ",
            "name": "Belize"
        },
        {
            "id": "BJ",
            "name": "Benin"
        },
        {
            "id": "BM",
            "name": "Bermuda"
        },
        {
            "id": "BT",
            "name": "Bhutan"
        },
        {
            "id": "BO",
            "name": "Bolivia, Plurinational State of"
        },
        {
            "id": "BQ",
            "name": "Bonaire, Sint Eustatius and Saba"
        },
        {
            "id": "BA",
            "name": "Bosnia and Herzegovina"
        },
        {
            "id": "BW",
            "name": "Botswana"
        },
        {
            "id": "BV",
            "name": "Bouvet Island"
        },
        {
            "id": "BR",
            "name": "Brazil"
        },
        {
            "id": "IO",
            "name": "British Indian Ocean Territory"
        },
        {
            "id": "BN",
            "name": "Brunei Darussalam"
        },
        {
            "id": "BG",
            "name": "Bulgaria"
        },
        {
            "id": "BF",
            "name": "Burkina Faso"
        },
        {
            "id": "BI",
            "name": "Burundi"
        },
        {
            "id": "KH",
            "name": "Cambodia"
        },
        {
            "id": "CM",
            "name": "Cameroon"
        },
        {
            "id": "CA",
            "name": "Canada"
        },
        {
            "id": "CV",
            "name": "Cape Verde"
        },
        {
            "id": "KY",
            "name": "Cayman Islands"
        },
        {
            "id": "CF",
            "name": "Central African Republic"
        },
        {
            "id": "TD",
            "name": "Chad"
        },
        {
            "id": "CL",
            "name": "Chile"
        },
        {
            "id": "CN",
            "name": "China"
        },
        {
            "id": "CX",
            "name": "Christmas Island"
        },
        {
            "id": "CC",
            "name": "Cocos (Keeling) Islands"
        },
        {
            "id": "CO",
            "name": "Colombia"
        },
        {
            "id": "KM",
            "name": "Comoros"
        },
        {
            "id": "CG",
            "name": "Congo"
        },
        {
            "id": "CD",
            "name": "Congo, the Democratic Republic of the"
        },
        {
            "id": "CK",
            "name": "Cook Islands"
        },
        {
            "id": "CR",
            "name": "Costa Rica"
        },
        {
            "id": "CI",
            "name": "Côte d'Ivoire"
        },
        {
            "id": "HR",
            "name": "Croatia"
        },
        {
            "id": "CU",
            "name": "Cuba"
        },
        {
            "id": "CW",
            "name": "Curaçao"
        },
        {
            "id": "CY",
            "name": "Cyprus"
        },
        {
            "id": "CZ",
            "name": "Czech Republic"
        },
        {
            "id": "DK",
            "name": "Denmark"
        },
        {
            "id": "DJ",
            "name": "Djibouti"
        },
        {
            "id": "DM",
            "name": "Dominica"
        },
        {
            "id": "DO",
            "name": "Dominican Republic"
        },
        {
            "id": "EC",
            "name": "Ecuador"
        },
        {
            "id": "EG",
            "name": "Egypt"
        },
        {
            "id": "SV",
            "name": "El Salvador"
        },
        {
            "id": "GQ",
            "name": "Equatorial Guinea"
        },
        {
            "id": "ER",
            "name": "Eritrea"
        },
        {
            "id": "EE",
            "name": "Estonia"
        },
        {
            "id": "ET",
            "name": "Ethiopia"
        },
        {
            "id": "FK",
            "name": "Falkland Islands (Malvinas)"
        },
        {
            "id": "FO",
            "name": "Faroe Islands"
        },
        {
            "id": "FJ",
            "name": "Fiji"
        },
        {
            "id": "FI",
            "name": "Finland"
        },
        {
            "id": "FR",
            "name": "France"
        },
        {
            "id": "GF",
            "name": "French Guiana"
        },
        {
            "id": "PF",
            "name": "French Polynesia"
        },
        {
            "id": "TF",
            "name": "French Southern Territories"
        },
        {
            "id": "GA",
            "name": "Gabon"
        },
        {
            "id": "GM",
            "name": "Gambia"
        },
        {
            "id": "GE",
            "name": "Georgia"
        },
        {
            "id": "DE",
            "name": "Germany"
        },
        {
            "id": "GH",
            "name": "Ghana"
        },
        {
            "id": "GI",
            "name": "Gibraltar"
        },
        {
            "id": "GR",
            "name": "Greece"
        },
        {
            "id": "GL",
            "name": "Greenland"
        },
        {
            "id": "GD",
            "name": "Grenada"
        },
        {
            "id": "GP",
            "name": "Guadeloupe"
        },
        {
            "id": "GU",
            "name": "Guam"
        },
        {
            "id": "GT",
            "name": "Guatemala"
        },
        {
            "id": "GG",
            "name": "Guernsey"
        },
        {
            "id": "GN",
            "name": "Guinea"
        },
        {
            "id": "GW",
            "name": "Guinea-Bissau"
        },
        {
            "id": "GY",
            "name": "Guyana"
        },
        {
            "id": "HT",
            "name": "Haiti"
        },
        {
            "id": "HM",
            "name": "Heard Island and McDonald Mcdonald Islands"
        },
        {
            "id": "VA",
            "name": "Holy See (Vatican City State)"
        },
        {
            "id": "HN",
            "name": "Honduras"
        },
        {
            "id": "HK",
            "name": "Hong Kong"
        },
        {
            "id": "HU",
            "name": "Hungary"
        },
        {
            "id": "IS",
            "name": "Iceland"
        },
        {
            "id": "IN",
            "name": "India"
        },
        {
            "id": "ID",
            "name": "Indonesia"
        },
        {
            "id": "IR",
            "name": "Iran, Islamic Republic of"
        },
        {
            "id": "IQ",
            "name": "Iraq"
        },
        {
            "id": "IE",
            "name": "Ireland"
        },
        {
            "id": "IM",
            "name": "Isle of Man"
        },
        {
            "id": "IL",
            "name": "Israel"
        },
        {
            "id": "IT",
            "name": "Italy"
        },
        {
            "id": "JM",
            "name": "Jamaica"
        },
        {
            "id": "JP",
            "name": "Japan"
        },
        {
            "id": "JE",
            "name": "Jersey"
        },
        {
            "id": "JO",
            "name": "Jordan"
        },
        {
            "id": "KZ",
            "name": "Kazakhstan"
        },
        {
            "id": "KE",
            "name": "Kenya"
        },
        {
            "id": "KI",
            "name": "Kiribati"
        },
        {
            "id": "KP",
            "name": "Korea, Democratic People's Republic of"
        },
        {
            "id": "KR",
            "name": "Korea, Republic of"
        },
        {
            "id": "KW",
            "name": "Kuwait"
        },
        {
            "id": "KG",
            "name": "Kyrgyzstan"
        },
        {
            "id": "LA",
            "name": "Lao People's Democratic Republic"
        },
        {
            "id": "LV",
            "name": "Latvia"
        },
        {
            "id": "LB",
            "name": "Lebanon"
        },
        {
            "id": "LS",
            "name": "Lesotho"
        },
        {
            "id": "LR",
            "name": "Liberia"
        },
        {
            "id": "LY",
            "name": "Libya"
        },
        {
            "id": "LI",
            "name": "Liechtenstein"
        },
        {
            "id": "LT",
            "name": "Lithuania"
        },
        {
            "id": "LU",
            "name": "Luxembourg"
        },
        {
            "id": "MO",
            "name": "Macao"
        },
        {
            "id": "MK",
            "name": "Macedonia, the Former Yugoslav Republic of"
        },
        {
            "id": "MG",
            "name": "Madagascar"
        },
        {
            "id": "MW",
            "name": "Malawi"
        },
        {
            "id": "MY",
            "name": "Malaysia"
        },
        {
            "id": "MV",
            "name": "Maldives"
        },
        {
            "id": "ML",
            "name": "Mali"
        },
        {
            "id": "MT",
            "name": "Malta"
        },
        {
            "id": "MH",
            "name": "Marshall Islands"
        },
        {
            "id": "MQ",
            "name": "Martinique"
        },
        {
            "id": "MR",
            "name": "Mauritania"
        },
        {
            "id": "MU",
            "name": "Mauritius"
        },
        {
            "id": "YT",
            "name": "Mayotte"
        },
        {
            "id": "MX",
            "name": "Mexico"
        },
        {
            "id": "FM",
            "name": "Micronesia, Federated States of"
        },
        {
            "id": "MD",
            "name": "Moldova, Republic of"
        },
        {
            "id": "MC",
            "name": "Monaco"
        },
        {
            "id": "MN",
            "name": "Mongolia"
        },
        {
            "id": "ME",
            "name": "Montenegro"
        },
        {
            "id": "MS",
            "name": "Montserrat"
        },
        {
            "id": "MA",
            "name": "Morocco"
        },
        {
            "id": "MZ",
            "name": "Mozambique"
        },
        {
            "id": "MM",
            "name": "Myanmar"
        },
        {
            "id": "NA",
            "name": "Namibia"
        },
        {
            "id": "NR",
            "name": "Nauru"
        },
        {
            "id": "NP",
            "name": "Nepal"
        },
        {
            "id": "NL",
            "name": "Netherlands"
        },
        {
            "id": "NC",
            "name": "New Caledonia"
        },
        {
            "id": "NZ",
            "name": "New Zealand"
        },
        {
            "id": "NI",
            "name": "Nicaragua"
        },
        {
            "id": "NE",
            "name": "Niger"
        },
        {
            "id": "NG",
            "name": "Nigeria"
        },
        {
            "id": "NU",
            "name": "Niue"
        },
        {
            "id": "NF",
            "name": "Norfolk Island"
        },
        {
            "id": "MP",
            "name": "Northern Mariana Islands"
        },
        {
            "id": "NO",
            "name": "Norway"
        },
        {
            "id": "OM",
            "name": "Oman"
        },
        {
            "id": "PK",
            "name": "Pakistan"
        },
        {
            "id": "PW",
            "name": "Palau"
        },
        {
            "id": "PS",
            "name": "Palestine, State of"
        },
        {
            "id": "PA",
            "name": "Panama"
        },
        {
            "id": "PG",
            "name": "Papua New Guinea"
        },
        {
            "id": "PY",
            "name": "Paraguay"
        },
        {
            "id": "PE",
            "name": "Peru"
        },
        {
            "id": "PH",
            "name": "Philippines"
        },
        {
            "id": "PN",
            "name": "Pitcairn"
        },
        {
            "id": "PL",
            "name": "Poland"
        },
        {
            "id": "PT",
            "name": "Portugal"
        },
        {
            "id": "PR",
            "name": "Puerto Rico"
        },
        {
            "id": "QA",
            "name": "Qatar"
        },
        {
            "id": "RE",
            "name": "Réunion"
        },
        {
            "id": "RO",
            "name": "Romania"
        },
        {
            "id": "RU",
            "name": "Russian Federation"
        },
        {
            "id": "RW",
            "name": "Rwanda"
        },
        {
            "id": "BL",
            "name": "Saint Barthélemy"
        },
        {
            "id": "SH",
            "name": "Saint Helena, Ascension and Tristan da Cunha"
        },
        {
            "id": "KN",
            "name": "Saint Kitts and Nevis"
        },
        {
            "id": "LC",
            "name": "Saint Lucia"
        },
        {
            "id": "MF",
            "name": "Saint Martin (French part)"
        },
        {
            "id": "PM",
            "name": "Saint Pierre and Miquelon"
        },
        {
            "id": "VC",
            "name": "Saint Vincent and the Grenadines"
        },
        {
            "id": "WS",
            "name": "Samoa"
        },
        {
            "id": "SM",
            "name": "San Marino"
        },
        {
            "id": "ST",
            "name": "Sao Tome and Principe"
        },
        {
            "id": "SA",
            "name": "Saudi Arabia"
        },
        {
            "id": "SN",
            "name": "Senegal"
        },
        {
            "id": "RS",
            "name": "Serbia"
        },
        {
            "id": "SC",
            "name": "Seychelles"
        },
        {
            "id": "SL",
            "name": "Sierra Leone"
        },
        {
            "id": "SG",
            "name": "Singapore"
        },
        {
            "id": "SX",
            "name": "Sint Maarten (Dutch part)"
        },
        {
            "id": "SK",
            "name": "Slovakia"
        },
        {
            "id": "SI",
            "name": "Slovenia"
        },
        {
            "id": "SB",
            "name": "Solomon Islands"
        },
        {
            "id": "SO",
            "name": "Somalia"
        },
        {
            "id": "ZA",
            "name": "South Africa"
        },
        {
            "id": "GS",
            "name": "South Georgia and the South Sandwich Islands"
        },
        {
            "id": "SS",
            "name": "South Sudan"
        },
        {
            "id": "ES",
            "name": "Spain"
        },
        {
            "id": "LK",
            "name": "Sri Lanka"
        },
        {
            "id": "SD",
            "name": "Sudan"
        },
        {
            "id": "SR",
            "name": "Suriname"
        },
        {
            "id": "SJ",
            "name": "Svalbard and Jan Mayen"
        },
        {
            "id": "SZ",
            "name": "Swaziland"
        },
        {
            "id": "SE",
            "name": "Sweden"
        },
        {
            "id": "CH",
            "name": "Switzerland"
        },
        {
            "id": "SY",
            "name": "Syrian Arab Republic"
        },
        {
            "id": "TW",
            "name": "Taiwan"
        },
        {
            "id": "TJ",
            "name": "Tajikistan"
        },
        {
            "id": "TZ",
            "name": "Tanzania, United Republic of"
        },
        {
            "id": "TH",
            "name": "Thailand"
        },
        {
            "id": "TL",
            "name": "Timor-Leste"
        },
        {
            "id": "TG",
            "name": "Togo"
        },
        {
            "id": "TK",
            "name": "Tokelau"
        },
        {
            "id": "TO",
            "name": "Tonga"
        },
        {
            "id": "TT",
            "name": "Trinidad and Tobago"
        },
        {
            "id": "TN",
            "name": "Tunisia"
        },
        {
            "id": "TR",
            "name": "Turkey"
        },
        {
            "id": "TM",
            "name": "Turkmenistan"
        },
        {
            "id": "TC",
            "name": "Turks and Caicos Islands"
        },
        {
            "id": "TV",
            "name": "Tuvalu"
        },
        {
            "id": "UG",
            "name": "Uganda"
        },
        {
            "id": "UA",
            "name": "Ukraine"
        },
        {
            "id": "AE",
            "name": "United Arab Emirates"
        },
        {
            "id": "GB",
            "name": "United Kingdom"
        },
        {
            "id": "US",
            "name": "United States"
        },
        {
            "id": "UM",
            "name": "United States Minor Outlying Islands"
        },
        {
            "id": "UY",
            "name": "Uruguay"
        },
        {
            "id": "UZ",
            "name": "Uzbekistan"
        },
        {
            "id": "VU",
            "name": "Vanuatu"
        },
        {
            "id": "VE",
            "name": "Venezuela, Bolivarian Republic of"
        },
        {
            "id": "VN",
            "name": "Viet Nam"
        },
        {
            "id": "VG",
            "name": "Virgin Islands, British"
        },
        {
            "id": "VI",
            "name": "Virgin Islands, U.S."
        },
        {
            "id": "WF",
            "name": "Wallis and Futuna"
        },
        {
            "id": "EH",
            "name": "Western Sahara"
        },
        {
            "id": "YE",
            "name": "Yemen"
        },
        {
            "id": "ZM",
            "name": "Zambia"
        },
        {
            "id": "ZW",
            "name": "Zimbabwe"
        }
    ]
}
 

Request      

GET v1/data/countries

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

WIP

Routes that are still in progress

Missing Implementation

POST v1/playlists/{playlist}/{media}

requires authentication

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/playlists/at/illo" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/at/illo"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/at/illo';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=NTXlyyOP7vPZjPY3VZalnp5lx835YF9zRjl2xIB5; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Unable to find the playlist you requested."
}
 

Request      

POST v1/playlists/{playlist}/{media}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

playlist   string   

The playlist. Example: at

media   string   

Example: illo

DELETE v1/playlists/{playlist}/{media}

requires authentication

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/playlists/porro/culpa" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/playlists/porro/culpa"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/playlists/porro/culpa';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=dbItxOPXOwDyEXSzksalSBJq5tfxYr2WjOOk7rgP; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Unable to find the playlist you requested."
}
 

Request      

DELETE v1/playlists/{playlist}/{media}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

playlist   string   

The playlist. Example: porro

media   string   

Example: culpa

POST v1/interest/{entity}/{id}

requires authentication

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/interest/nisi/qui" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/interest/nisi/qui"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/interest/nisi/qui';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=HvLAb9KtUtbsV6HhNcgXWuGFyQSTwseS8j3OAF58; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 


 

Request      

POST v1/interest/{entity}/{id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

entity   string   

Example: nisi

id   string   

The ID of the {entity}. Example: qui

DELETE v1/interest/{entity}/{id}

requires authentication

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/interest/provident/ut" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/interest/provident/ut"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/interest/provident/ut';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=eYJVoT2vnE0wEceYQI6XlsYwORgLEOBEB0SbTJ5C; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 


 

Request      

DELETE v1/interest/{entity}/{id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

entity   string   

Example: provident

id   string   

The ID of the {entity}. Example: ut

GET v1/notifications

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/notifications" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/notifications"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/notifications';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=4iOJBF5Nw8D0BjhR4gRYwOgsN77a361qHSmvzze0; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 


 

Request      

GET v1/notifications

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

GET v1/notifications/{notification}/read

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/notifications/quasi/read" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/notifications/quasi/read"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/notifications/quasi/read';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=DsZcA66scByBV9zcQxRfGHsQxwxoaLfKX1njEwCr; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 


 

Request      

GET v1/notifications/{notification}/read

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

notification   string   

The notification. Example: quasi

GET v1/settings

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/settings" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/settings"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/settings';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=yX4bPMojSC6OwBHFgft40zUhCV6BPHU75jQHJz2X; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 


 

Request      

GET v1/settings

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

PATCH v1/settings

requires authentication

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/settings" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/settings"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/settings';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=q57QgRzHADzbb6q3VxsdKqBFUE0P3kVWgu2KqAcv; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 


 

Request      

PATCH v1/settings

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Development

Refresh DB

Runs the migrations from scratch + runs dev seeders after

Equal to: php artisan migrate:fresh --seed

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/dev/db/fresh" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/dev/db/fresh"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/dev/db/fresh';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Request      

POST v1/dev/db/fresh

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Admin

Contains all the routes that are supposed to be used for managing the application from Admin-panel

Health

Show

requires authentication

Provides the most basic details about the health of the services

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/health" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/health"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/health';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=FHlpi1d8nLgcZcU3yznkOTqAr8FrO6MHFSzll2yn; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "api": {
        "version": 1
    },
    "statuses": {
        "database": "healthy"
    },
    "env": "docs",
    "debug": false
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Request      

GET v1/health

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Genres

Create

requires authentication

Add new Genre

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/genres" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"molestiae\",
    \"is_public\": false
}"
const url = new URL(
    "https://api.qplet.dev/v1/genres"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "molestiae",
    "is_public": false
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/genres';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'molestiae',
            'is_public' => false,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=EunXGDpilk3fDxHZdi55WdKp2xt1UI4V0UGfqlX8; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a0774789-8133-4319-a733-9b340b07c464",
        "name": "molestiae",
        "tracks": 0
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/genres

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

name   string   

Example: molestiae

is_public   boolean   

Example: false

Update

requires authentication

Update a Genre

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"quia\",
    \"is_public\": false
}"
const url = new URL(
    "https://api.qplet.dev/v1/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "quia",
    "is_public": false
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'quia',
            'is_public' => false,
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=N6vp161Dsvl9NausBX7MVwHGt2QIgdztdp9tsQZm; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a03ed1ae-33ff-43d6-9968-c3beac81b364",
        "name": "quia",
        "tracks": 791415
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Genre",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/genres/{genre_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

genre_id   string   

The ID of the genre. Example: a03ed1ae-33ff-43d6-9968-c3beac81b364

Body Parameters

name   string   

Example: quia

is_public   boolean   

Example: false

Delete

requires authentication

Delete a Genre

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/genres/a03ed1ae-33ff-43d6-9968-c3beac81b364';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=ST8QvGXhFTY0eVhlLEFaAjEoAZ2aMAW5kQ2OqotG; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Genre",
    "message": "No query results"
}
 

Request      

DELETE v1/genres/{genre_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

genre_id   string   

The ID of the genre. Example: a03ed1ae-33ff-43d6-9968-c3beac81b364

User

Update user

requires authentication

Update user details using user ID

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"Joe Shmoe\",
    \"password\": \"Ye4oKoEa3Ro9ll\",
    \"password_repeat\": \"Ye4oKoEa3Ro9ll\",
    \"profile\": {
        \"gender\": \"male\",
        \"nickname\": \"joe_shmoe\",
        \"website\": \"https:\\/\\/qplet.ru\",
        \"about\": \"I`m Joe Shmoe\\n\\n I love singing and dancing.\",
        \"avatar_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
        \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
        \"birthdate\": \"2000-01-01\"
    }
}"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "Joe Shmoe",
    "password": "Ye4oKoEa3Ro9ll",
    "password_repeat": "Ye4oKoEa3Ro9ll",
    "profile": {
        "gender": "male",
        "nickname": "joe_shmoe",
        "website": "https:\/\/qplet.ru",
        "about": "I`m Joe Shmoe\n\n I love singing and dancing.",
        "avatar_id": "00000000-422e-41ff-a266-2b0a093307e6",
        "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
        "birthdate": "2000-01-01"
    }
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'Joe Shmoe',
            'password' => 'Ye4oKoEa3Ro9ll',
            'password_repeat' => 'Ye4oKoEa3Ro9ll',
            'profile' => [
                'gender' => 'male',
                'nickname' => 'joe_shmoe',
                'website' => 'https://qplet.ru',
                'about' => 'I`m Joe Shmoe'."\n"
                    ."\n"
                    .' I love singing and dancing.',
                'avatar_id' => '00000000-422e-41ff-a266-2b0a093307e6',
                'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
                'birthdate' => '2000-01-01',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):


{}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/users/{user_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Body Parameters

name   string  optional  

Must be a full name of the user. Example: Joe Shmoe

password   string  optional  

Must be at least 8 characters. Example: Ye4oKoEa3Ro9ll

password_repeat   string  optional  

The password_repeat and password must match. This field is required when password is present. The value and password must match. Example: Ye4oKoEa3Ro9ll

profile   object  optional  
gender   string  optional  

Example: male

Must be one of:
  • male
  • female
nickname   string  optional  

Must be unique. Must match the regex /^[A-Za-z0-9_-]+$/. Must be between 6 and 20 characters. Example: joe_shmoe

website   string  optional  

Fully qualified URL. Must be a valid URL. Example: https://qplet.ru

about   string  optional  

Freeform multiline input. Example: Im Joe Shmoe

I love singing and dancing.`

avatar_id   string  optional  

MediaAssets ID that belongs to the user. Example: 00000000-422e-41ff-a266-2b0a093307e6

cover_id   string  optional  

MediaAssets ID that belongs to the user. Example: 00000000-422e-41ff-a266-2b0a093307e6

birthdate   string  optional  

Must be a valid date in the format Y-m-d. Example: 2000-01-01

Ban

requires authentication

Disable user account

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/ban" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"until\": \"2025-12-28T14:53:38+00:00\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/ban"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "until": "2025-12-28T14:53:38+00:00"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/ban';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'until' => '2025-12-28T14:53:38+00:00',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/users/{user_id}/ban

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Body Parameters

until   string  optional  

Must be a valid date in the format Y-m-d\TH:i:sP. Example: 2025-12-28T14:53:38+00:00

Unban

requires authentication

Activate user account

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/ban" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/ban"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1/ban';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

DELETE v1/users/{user_id}/ban

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Delete

requires authentication

Soft delete user from database

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/00000000-df85-4307-a069-68612c4471e1';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "User",
    "message": "No query results"
}
 

Request      

DELETE v1/users/{user_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Complaints

Show

requires authentication

Returns single Complaint

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/complaints/sint" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/complaints/sint"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/complaints/sint';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (404):


{
    "type": "Complaint",
    "message": "No query results"
}
 

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=oACaRf0jCg4f2IhVesYN7btPeCY0dQFldhuAr0aP; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Unable to find the complaint you requested."
}
 

Request      

GET v1/complaints/{complaint}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

complaint   string   

The complaint. Example: sint

List

requires authentication

Endpoint for fetching list of complaints

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/complaints?filters[author_id]=00000000-df85-4307-a069-68612c4471e1&per_page=20&page=1&pagination_type=page" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/complaints"
);

const params = {
    "filters[author_id]": "00000000-df85-4307-a069-68612c4471e1",
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/complaints';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[author_id]' => '00000000-df85-4307-a069-68612c4471e1',
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=xfSmws1elQ4Nh8rUZlkQn49TLOU2x54ksDii3YfR; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/complaints",
        "per_page": 20,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/complaints

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.author_id   string  optional  

Must be a valid UUID. Example: 00000000-df85-4307-a069-68612c4471e1

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Analytics

Country

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/analytics/users/00000000-df85-4307-a069-68612c4471e1" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/analytics/users/00000000-df85-4307-a069-68612c4471e1"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/analytics/users/00000000-df85-4307-a069-68612c4471e1';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=tytHRQKG3DBjNt6jtsSZmyMuHgWOxp3AT835rfd7; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "views": 602,
        "subscriptions": 983,
        "subscribers": 571,
        "events": 605,
        "tracks": 386,
        "playlists": 983,
        "albums": 185
    }
}
 

Request      

GET v1/analytics/users/{user_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

user_id   string   

The ID of the user. Example: 00000000-df85-4307-a069-68612c4471e1

Playlist

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/analytics/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/analytics/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/analytics/playlists/00000000-b7fa-4324-b250-a3c6c78b65c4';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=qCLEgEjVCb5HXQD1NBbEPevAw9oMmo4HEuH8yXIz; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Request      

GET v1/analytics/playlists/{playlist_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

playlist_id   string   

The ID of the playlist. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

Album

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/analytics/albums/00000000-b7fa-4324-b250-a3c6c78b65c4" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/analytics/albums/00000000-b7fa-4324-b250-a3c6c78b65c4"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/analytics/albums/00000000-b7fa-4324-b250-a3c6c78b65c4';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=a0wTDj2RwsRo8ufV2o19T4NL1lSXxKAAggiAQ9QG; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "tracks": 0,
        "likes": 0
    }
}
 

Request      

GET v1/analytics/albums/{album_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

album_id   string   

The ID of the album. Example: 00000000-b7fa-4324-b250-a3c6c78b65c4

Track

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/analytics/tracks/00000000-a791-4783-9845-4b571a9e579f" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/analytics/tracks/00000000-a791-4783-9845-4b571a9e579f"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/analytics/tracks/00000000-a791-4783-9845-4b571a9e579f';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=uGpGdN1SGT6XTFOJR4qYvqEZb6wW6A7poxqzMjug; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "likes": 0,
        "playbacks": 171,
        "playlists": 939
    }
}
 

Request      

GET v1/analytics/tracks/{track_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

track_id   string   

The ID of the track. Example: 00000000-a791-4783-9845-4b571a9e579f

Post

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/analytics/posts/00000000-fdb0-43ce-b555-e0a26ed563ac" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/analytics/posts/00000000-fdb0-43ce-b555-e0a26ed563ac"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/analytics/posts/00000000-fdb0-43ce-b555-e0a26ed563ac';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=9eRzESxrXks1tiDxAfFIqj8nOyDGNUPB636OC8jP; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "likes": 0,
        "comments": 0,
        "views": 230
    }
}
 

Request      

GET v1/analytics/posts/{post_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

post_id   string   

The ID of the post. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Complaints

List types

Endpoint for fetching list of complaint types

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/complaints/types" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/complaints/types"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/complaints/types';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=clfP8tVRW9ilLhvP0ChhSnFR3kqja3B4HfGgLwml; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "name": "album"
        },
        {
            "name": "event"
        },
        {
            "name": "comment"
        },
        {
            "name": "playlist"
        },
        {
            "name": "post"
        },
        {
            "name": "track"
        },
        {
            "name": "user"
        },
        {
            "name": "message"
        },
        {
            "name": "conversation"
        }
    ]
}
 

Request      

GET v1/complaints/types

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

List reasons

Endpoint for fetching list of complaint types

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/complaints/types/quibusdam/reasons" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/complaints/types/quibusdam/reasons"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/complaints/types/quibusdam/reasons';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=JP5wGZRGJXWrbdPKA2y9Gy5B4Ywn6duWcHyxT2jq; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Request      

GET v1/complaints/types/{type}/reasons

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

type   string   

The type. Example: quibusdam

Store

requires authentication

Create a Complaint

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/complaints" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"reason_id\": \"00000000-a24e-421f-94b4-c12974b3a0d9\",
    \"entity\": \"post\",
    \"entity_id\": \"00000000-fdb0-43ce-b555-e0a26ed563ac\",
    \"message\": \"Post contains inappropriate wording.\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/complaints"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "reason_id": "00000000-a24e-421f-94b4-c12974b3a0d9",
    "entity": "post",
    "entity_id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
    "message": "Post contains inappropriate wording."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/complaints';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'reason_id' => '00000000-a24e-421f-94b4-c12974b3a0d9',
            'entity' => 'post',
            'entity_id' => '00000000-fdb0-43ce-b555-e0a26ed563ac',
            'message' => 'Post contains inappropriate wording.',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=56WSVfqcnBTqyz2k1iQulCuckLiuHf2P9r7sN4LT; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a077478c-8b18-4b44-915d-f0014b83966d",
        "author": {
            "id": "00000000-df85-4307-a069-68612c4471e3",
            "name": "Admin Test Country",
            "avatar_url": null
        },
        "message": "Post contains inappropriate wording.",
        "type": "post",
        "entity_id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
        "reason": {
            "id": "00000000-a24e-421f-94b4-c12974b3a0d9",
            "title": "Other",
            "description": "Repellendus consequuntur sint fuga eveniet neque. Ad sunt magnam harum sint. Est rerum vero sit culpa perferendis eveniet."
        }
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/complaints

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

reason_id   string   

Example: 00000000-a24e-421f-94b4-c12974b3a0d9

entity   string   

Example: post

Must be one of:
  • album
  • event
  • comment
  • playlist
  • post
  • track
  • user
  • message
  • conversation
entity_id   string   

Must be a valid UUID. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

message   string  optional  

Example: Post contains inappropriate wording.

Delete

requires authentication

Delete own Complaint

Admin can remove any Complaint

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/complaints/et" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/complaints/et"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/complaints/et';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Complaint",
    "message": "No query results"
}
 

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=JWD3FtmaHmlOB0oZuJ4MVeHB1Q1PdJqQoRuggIWK; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Unable to find the complaint you requested."
}
 

Request      

DELETE v1/complaints/{complaint}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

complaint   string   

The complaint. Example: et

Contacts

Show

requires authentication

Returns single contact

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/contact/voluptatibus" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/contact/voluptatibus"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/contact/voluptatibus';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=ec0rFOL6JOc3R64Jm7JKFY3LsaZ8GG20pn7BBhaS; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": null,
        "name": null,
        "email": null,
        "message": null
    }
}
 

Example response (404):


{
    "type": "Contact",
    "message": "No query results"
}
 

Request      

GET v1/contact/{complaint}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

complaint   string   

Example: voluptatibus

List

requires authentication

Endpoint for fetching list of contacts

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/contact?per_page=20&page=1&pagination_type=page" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/contact"
);

const params = {
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/contact';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=RnNc4gQskjVCTgtA3Elt4BdAVnuAu4mJltc4mEO8; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/contact",
        "per_page": 20,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/contact

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Delete

requires authentication

Delete own contact

Admin can remove any contact

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/contact/nisi" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/contact/nisi"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/contact/nisi';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=JCKwibEysnhLRiDUFcOdOhQeMZqjpzbxOMkF37uJ; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Contact",
    "message": "No query results"
}
 

Request      

DELETE v1/contact/{complaint}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

complaint   string   

Example: nisi

Store

Create a contact with optionally shared entity

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/contact" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"Mrs. Hope Botsford\",
    \"email\": \"erik86@durgan.com\",
    \"message\": \"Laborum sequi voluptatem velit quia tempora omnis. Sit consectetur perferendis veniam unde sit deleniti. Et amet quod aliquam. Quia velit hic velit voluptatibus sapiente.\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/contact"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "Mrs. Hope Botsford",
    "email": "erik86@durgan.com",
    "message": "Laborum sequi voluptatem velit quia tempora omnis. Sit consectetur perferendis veniam unde sit deleniti. Et amet quod aliquam. Quia velit hic velit voluptatibus sapiente."
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/contact';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'Mrs. Hope Botsford',
            'email' => 'erik86@durgan.com',
            'message' => 'Laborum sequi voluptatem velit quia tempora omnis. Sit consectetur perferendis veniam unde sit deleniti. Et amet quod aliquam. Quia velit hic velit voluptatibus sapiente.',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=tbeKOI6dukKBceWqdbbJLA1JGXR9Wi36oYZ501yy; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a0774792-bfa6-4657-a2d7-07930c371255",
        "name": "Mrs. Hope Botsford",
        "email": "erik86@durgan.com",
        "message": "Laborum sequi voluptatem velit quia tempora omnis. Sit consectetur perferendis veniam unde sit deleniti. Et amet quod aliquam. Quia velit hic velit voluptatibus sapiente."
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/contact

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

name   string   

Example: Mrs. Hope Botsford

email   string   

Must be a valid email address. Example: erik86@durgan.com

message   string   

Example: Laborum sequi voluptatem velit quia tempora omnis. Sit consectetur perferendis veniam unde sit deleniti. Et amet quod aliquam. Quia velit hic velit voluptatibus sapiente.

Conversations

Chats

List

requires authentication

Endpoint for fetching a list of conversations

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/conversations?per_page=20&page=1&pagination_type=page" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/conversations"
);

const params = {
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=AIknP9SGTtKfOaiv4AeVqB9qFeHsVWSPhe55ORRQ; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "a03ed1f5-5df1-47fb-af27-0388084242ed",
            "name": "Author Test Country",
            "unread_count": 1,
            "latest_message": {
                "id": "a03ed1f5-a37c-42ac-878b-a62e9bd59920",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Est maiores sed deserunt voluptatum dolorem. Quam iusto deserunt ut est similique. Fugiat aperiam minus velit sed eligendi.",
                "created_at": 1761916702
            },
            "participants": [
                {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                }
            ]
        },
        {
            "id": "a03ed1f5-c803-4e2f-9219-1a78fb0d520a",
            "name": "Fan Test Country",
            "unread_count": 0,
            "latest_message": {
                "id": "a03ed1f6-1210-46a8-a3b2-f5347c6117ec",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Quos quia soluta quis veniam quia. Inventore ea sunt sequi dolorum. Blanditiis ipsum reiciendis voluptas et modi et.",
                "created_at": 1761916702
            },
            "participants": [
                {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                }
            ]
        },
        {
            "id": "a03ed1f6-12c4-4d3a-aa35-fa1cf9244e47",
            "name": "Author Test Country",
            "unread_count": 2,
            "latest_message": {
                "id": "a03ed1f6-6228-47e6-a905-fd1732e6fbcf",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Consequatur ut nisi molestias quam commodi quo eos. Est recusandae ut nihil veniam qui dolor amet et. Reprehenderit eligendi aut alias sunt. At ab beatae eaque odio ipsa.",
                "created_at": 1761916703
            },
            "participants": [
                {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                }
            ]
        },
        {
            "id": "a03ed1f4-b1dc-4399-9420-510892ac9ef9",
            "name": "Fan Test Country",
            "unread_count": 2,
            "latest_message": {
                "id": "a03ed1f4-f63d-4cc7-ad35-58f41c1b5181",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Tenetur voluptates voluptatem eos aliquid repudiandae. Fuga alias provident cum itaque error ipsum. Dolorem eum eum corporis similique dolorem eos sed. Laudantium ex explicabo minima laudantium quas.",
                "created_at": 1761916702
            },
            "participants": [
                {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                }
            ]
        },
        {
            "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
            "name": "Fan Test Country, Author Test Country",
            "unread_count": 2,
            "latest_message": {
                "id": "a03ed1f5-c761-448c-90b6-ddf95beeb2b1",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Necessitatibus cum quo culpa aut ipsam perferendis velit. Et sit sint omnis cum qui quo. Est eos velit dolores eos. Doloribus doloribus dolor saepe voluptatibus vero adipisci est.",
                "created_at": 1761916702
            },
            "participants": [
                {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                }
            ]
        }
    ],
    "meta": {
        "path": "http://localhost:8083/v1/conversations",
        "per_page": 20,
        "next_cursor": null,
        "prev_cursor": null
    }
}
 

Request      

GET v1/conversations

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

requires authentication

Global search across conversations

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/conversations/search" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/search"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/search';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=HZuF3AW2aqk81raT6nWt18tu3Mhc3DOfOOXRL0PG; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "7ac8ab55-6731-40b8-84ba-d0b63191a8c3",
            "type": "message",
            "match": "This is a sample message containing the search term."
        },
        {
            "id": "7aae5b91-3e71-4255-bb02-4eb8fecf0c80",
            "type": "participant",
            "match": "Anita"
        },
        {
            "id": "024384a8-d462-46d9-a05c-a39d09fafbc8",
            "type": "participant",
            "match": "User with name matching the search term."
        }
    ]
}
 

Show

requires authentication

Returns single conversation with a list of recent messages

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=AcQGaNBS4KaaFXeX7VTYc1HNhoDmmBdaqsUihWpl; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
        "name": "Fan Test Country, Author Test Country",
        "unread_count": 2,
        "participants": [
            {
                "id": "00000000-df85-4307-a069-68612c4471e1",
                "name": "Fan Test Country",
                "avatar_url": null
            },
            {
                "id": "00000000-df85-4307-a069-68612c4471e2",
                "name": "Author Test Country",
                "avatar_url": null
            },
            {
                "id": "00000000-df85-4307-a069-68612c4471e3",
                "name": "Admin Test Country",
                "avatar_url": null
            }
        ],
        "messages": [
            {
                "id": "a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Qui dolorem fuga veniam voluptatibus. Harum harum modi unde quisquam omnis. Saepe voluptatem doloremque magnam aliquam molestiae consequuntur ut possimus.",
                "created_at": 1761916603
            },
            {
                "id": "a03ed1f4-4c2a-4801-a381-0adc3791f8c8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Tenetur sit iure mollitia qui minus. Iure neque et sit. Sint est magni neque. Iste optio voluptates voluptatem id dolorum quam.",
                "created_at": 1761916610
            },
            {
                "id": "a03ed1f4-4e3b-461b-abc8-2ba4b17b9a2e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Deserunt animi quia autem fugiat. Et expedita ducimus sit doloribus. Aperiam est magni vel repudiandae sed sequi. Dolorem laborum nam doloremque deserunt consequatur.",
                "created_at": 1761916617
            },
            {
                "id": "a03ed1f4-5020-4177-bb5c-c549689c6af4",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Vel voluptas nesciunt quidem dolorum molestiae ut. Sunt iusto aperiam in distinctio. Ducimus autem recusandae officiis veniam nam ut consequatur.",
                "created_at": 1761916624
            },
            {
                "id": "a03ed1f4-5257-47aa-8532-8418628aa2ba",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Iure est ut quae sit et. Veniam neque accusantium libero quam quia labore. Aut inventore consectetur porro velit in atque enim quasi. Vero voluptatem quibusdam autem minus.",
                "created_at": 1761916631
            },
            {
                "id": "a03ed1f4-544d-4fd1-8196-599c1adc75c7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Id iusto magnam suscipit quas repudiandae ex. Magni ut non eius eveniet. Error magnam mollitia et velit repellat quasi. Id est quod ipsa ipsam est et.",
                "created_at": 1761916638
            },
            {
                "id": "a03ed1f4-569a-48c2-bbae-817960a0635f",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Eos consequatur cum numquam officia vero molestiae nihil. Omnis nihil neque iure. Sapiente incidunt quo ratione aut porro adipisci. Est molestiae autem alias laboriosam rerum.",
                "created_at": 1761916645
            },
            {
                "id": "a03ed1f4-58a6-4db3-b84d-cbfc5117dd19",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Facilis minima eligendi corporis deserunt. Impedit ut facere assumenda voluptate est quis. Et rerum blanditiis exercitationem et. Dolor sit numquam voluptatum et.",
                "created_at": 1761916652
            },
            {
                "id": "a03ed1f4-5ac3-4046-a679-85eecc1bebe6",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Illo ratione ut rerum repellendus nostrum neque. Porro exercitationem quos quia non corrupti magnam. Voluptas deserunt omnis quod ut aliquid sequi et.",
                "created_at": 1761916659
            },
            {
                "id": "a03ed1f4-5cd2-4414-8239-ce96e8ecf4e7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Harum veritatis perspiciatis doloremque ex distinctio qui magni sint. Quos sed autem officiis asperiores error velit unde.",
                "created_at": 1761916666
            },
            {
                "id": "a03ed1f4-5ebf-43a7-9536-bd197dc9a7a8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Id vitae voluptates ut magni molestiae quo quasi. Hic aut dicta qui est earum eaque ut. Veritatis atque quidem maxime minima perferendis cumque dolorem aut.",
                "created_at": 1761916673
            },
            {
                "id": "a03ed1f4-607d-45fa-bf75-a84530f41570",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Aut enim commodi quo eveniet eligendi autem magni. Aut sit in sint eos in. Ut reprehenderit sunt deleniti earum qui quisquam eum. Libero accusamus officia vero sint impedit.",
                "created_at": 1761916680
            },
            {
                "id": "a03ed1f4-62c9-4323-8e93-fc6a0351ac7b",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Est reiciendis quia quas non quam corrupti nihil. Sit earum aut unde qui sapiente. Quo et non quam vero iusto. Libero laborum sed tempora voluptatibus assumenda porro in qui.",
                "created_at": 1761916687
            },
            {
                "id": "a03ed1f4-64d6-4bbc-80f1-3f6f6ae7dd38",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Aut deserunt odio vel repudiandae. Natus qui voluptatem est. Quis et qui id repudiandae qui non dolor. Voluptate quibusdam numquam enim illo et ipsum qui.",
                "created_at": 1761916694
            },
            {
                "id": "a03ed1f4-669e-45c7-83b5-4e5889d6d99d",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Ut alias deleniti eum ea ipsa. Autem provident minima omnis aut consequuntur reprehenderit. Recusandae error corrupti sit natus nihil dicta.",
                "created_at": 1761916701
            },
            {
                "id": "a03ed1f4-fa29-4a87-858d-85815b43f610",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Rem non in dolorum ut minima est facilis. Dolor hic consectetur magni praesentium officia porro.",
                "created_at": 1761916604
            },
            {
                "id": "a03ed1f4-fbf3-427a-ade8-48aad834b6f2",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Atque et commodi quia qui consequatur et. Laborum saepe dolor sequi explicabo velit et. Eum consequatur veritatis inventore ut.",
                "created_at": 1761916611
            },
            {
                "id": "a03ed1f4-fe10-42bc-ab18-7ea912a49743",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Dolore in et aliquam tenetur consequatur ea. Perspiciatis vel deserunt sed. Fuga ea inventore id sunt. Dicta nisi et perspiciatis numquam voluptatem dignissimos laborum velit.",
                "created_at": 1761916618
            },
            {
                "id": "a03ed1f4-ffde-4426-a300-131495fd6ef4",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Veniam dolorem facilis qui quisquam at libero et. Mollitia aliquam amet quas facilis nam quidem. Cumque et corporis quis molestias consectetur rem omnis. Delectus labore vel quia non.",
                "created_at": 1761916625
            },
            {
                "id": "a03ed1f5-0273-4b16-8ad2-87649b752c60",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Perspiciatis quia aut sed voluptas natus quibusdam accusamus. Eligendi voluptates omnis aut soluta dolor. Aperiam consequatur rerum id amet.",
                "created_at": 1761916632
            },
            {
                "id": "a03ed1f5-055c-4892-9479-317d97200d43",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Earum deserunt sunt reprehenderit quibusdam perferendis aut. Eaque tempore ut tempore qui ipsa vel. Reiciendis reprehenderit dolor praesentium perferendis. Laboriosam eveniet ipsa non omnis.",
                "created_at": 1761916639
            },
            {
                "id": "a03ed1f5-0767-41f6-959c-aa118f101d21",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Earum molestiae quo temporibus non non. Placeat perferendis atque ea molestiae laborum sint necessitatibus. Ea mollitia ipsam itaque similique rerum.",
                "created_at": 1761916646
            },
            {
                "id": "a03ed1f5-099e-4542-8b20-f9df155f7fe6",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Assumenda molestiae aut voluptatem qui quis natus. Unde totam ut vel numquam. Consectetur quibusdam aperiam repudiandae. Consequatur placeat quis eum qui.",
                "created_at": 1761916653
            },
            {
                "id": "a03ed1f5-0b9d-4629-8f8e-4630b62c1a4b",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Nihil corrupti non quam est cupiditate omnis. Voluptatem ut perspiciatis corporis qui.",
                "created_at": 1761916660
            },
            {
                "id": "a03ed1f5-0d98-46fb-9e54-01ee46462d44",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Qui quia vel ea minima explicabo commodi et. Et vero voluptatum similique aliquam. Quaerat nam aut est omnis vel.",
                "created_at": 1761916667
            },
            {
                "id": "a03ed1f5-0fa2-43b8-ae6c-2dc060e34544",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Aspernatur dolore non aut iusto impedit aut. Ea est veritatis nihil eos sit unde. Necessitatibus cumque quisquam deleniti magni sunt ut.",
                "created_at": 1761916674
            },
            {
                "id": "a03ed1f5-11f7-4ff6-8db0-8a6ad85b62b9",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Veniam ipsam consequuntur nemo harum omnis. Consequuntur exercitationem voluptatum cum sapiente. Omnis neque sint nesciunt aperiam autem possimus. Aut voluptatum totam laboriosam.",
                "created_at": 1761916681
            },
            {
                "id": "a03ed1f5-141f-45cd-a6e8-e30a2119b4b9",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Eveniet illum est quis dignissimos officia aut. Aliquam aut officiis quia similique optio. Recusandae est pariatur et ut cum.",
                "created_at": 1761916688
            },
            {
                "id": "a03ed1f5-1616-4053-9a63-9aa503e20a53",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Modi et earum provident est omnis. Cum excepturi enim aut id. Sapiente sit recusandae sed est sit fugit.",
                "created_at": 1761916695
            },
            {
                "id": "a03ed1f5-17d4-48b0-96b3-32906185e01e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Animi quidem doloribus perferendis quaerat a. Hic nihil nemo voluptates qui aut in. Beatae numquam sapiente in culpa.",
                "created_at": 1761916702
            },
            {
                "id": "a03ed1f5-a81f-4df3-ae76-92e970438660",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Asperiores ut asperiores ea praesentium autem ratione cupiditate delectus. Provident provident veritatis minima incidunt. Rem laboriosam reprehenderit architecto illo. Ullam veritatis sunt enim ut.",
                "created_at": 1761916604
            },
            {
                "id": "a03ed1f5-aa7c-40fe-a7d2-efb5b7e031d0",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Non quia expedita ut eos nisi laboriosam distinctio aliquid. Similique aut eius maxime nostrum. Ad explicabo ut qui vitae dolorem.",
                "created_at": 1761916611
            },
            {
                "id": "a03ed1f5-acfc-4308-b816-63503756bd6a",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Dolor qui sit nam ut. Ratione repudiandae est odit. Placeat accusamus reiciendis sed nihil assumenda et accusantium. Qui eveniet quia modi ipsam corporis consequuntur.",
                "created_at": 1761916618
            },
            {
                "id": "a03ed1f5-af58-46a6-9023-9c4dd10cade7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "In eius fugit deserunt voluptas perspiciatis molestias. Ipsum quas rerum omnis eligendi veniam accusantium esse qui. Corporis et reprehenderit vitae amet fugit at dicta perspiciatis.",
                "created_at": 1761916625
            },
            {
                "id": "a03ed1f5-b15a-467b-a7f8-56e0ad98e999",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Quaerat veritatis dicta in dolores quia. Aut officia nesciunt dolor quo. Omnis qui dolorum dolorem omnis autem voluptatem quam.",
                "created_at": 1761916632
            },
            {
                "id": "a03ed1f5-b385-46e9-8417-dbe01d95aa8e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Ab voluptatem rerum ut culpa architecto exercitationem aspernatur. Adipisci numquam voluptate deleniti incidunt. Et facere numquam rerum et et. Mollitia voluptas suscipit recusandae quia qui.",
                "created_at": 1761916639
            },
            {
                "id": "a03ed1f5-b625-49ee-8e41-b5a94ea617ee",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Repellat reprehenderit sed perspiciatis. Voluptas eos cumque soluta exercitationem tempora quia placeat. Rem amet dignissimos odit recusandae sapiente a eaque.",
                "created_at": 1761916646
            },
            {
                "id": "a03ed1f5-b892-4c9c-b3c0-f40c2c911a23",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Eaque quo nam vitae repellendus facilis exercitationem. Reiciendis eos dicta exercitationem excepturi. Qui veniam eligendi maxime nihil tempora qui assumenda sed. Ut velit rerum accusamus nihil.",
                "created_at": 1761916653
            },
            {
                "id": "a03ed1f5-baf9-4fb9-95c6-f426c7070787",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Et occaecati laudantium aut non soluta inventore ducimus. Consequatur molestiae sint corrupti eum fuga quaerat nihil reprehenderit. Et sit vero dolorem earum nisi et.",
                "created_at": 1761916660
            },
            {
                "id": "a03ed1f5-bcea-4e93-9c75-6654e29a81a1",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Autem nisi vero voluptate ea dolores incidunt quam. Vitae assumenda quia temporibus voluptates perferendis aliquid ipsa. Dolorum et et quis et sequi dolor rerum. Amet vero quaerat et ut.",
                "created_at": 1761916667
            },
            {
                "id": "a03ed1f5-bee3-4fdf-8fd2-78814ba7f874",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Adipisci enim fugit impedit. Ipsum dicta iste molestias et suscipit aut. Modi impedit reiciendis earum ex qui soluta recusandae ullam. Ut est voluptatibus sequi natus iure. Qui a dolore ut.",
                "created_at": 1761916674
            },
            {
                "id": "a03ed1f5-c0f0-4387-87d6-4dd67f5653af",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Modi architecto in praesentium vel. Dolore est non aliquid autem ea sed dolor. Voluptates sit tempore vel sit assumenda perspiciatis sed.",
                "created_at": 1761916681
            },
            {
                "id": "a03ed1f5-c2d5-4867-a662-3612e0e2faa7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Quod corrupti eveniet vero tenetur et et et molestiae. Nesciunt omnis rem ut. Facere tempora velit accusamus iure beatae occaecati inventore expedita. Repellat quia omnis qui quidem rem a qui.",
                "created_at": 1761916688
            },
            {
                "id": "a03ed1f5-c566-49e3-b708-a4d1636ff3db",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Et qui totam soluta dolor. Vitae unde eligendi itaque cum. Fuga mollitia officiis ut autem.",
                "created_at": 1761916695
            },
            {
                "id": "a03ed1f5-c761-448c-90b6-ddf95beeb2b1",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Necessitatibus cum quo culpa aut ipsam perferendis velit. Et sit sint omnis cum qui quo. Est eos velit dolores eos. Doloribus doloribus dolor saepe voluptatibus vero adipisci est.",
                "created_at": 1761916702
            }
        ]
    }
}
 

Example response (404):


{
    "type": "Conversation",
    "message": "No query results"
}
 

Request      

GET v1/conversations/{conversation_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation_id   string   

The ID of the conversation. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

Store

requires authentication

Create a conversation in association to an entity

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/conversations" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"Name\",
    \"type\": \"private\",
    \"participants\": [
        [
            \"00000000-df85-4307-a069-68612c4471e3\",
            \"00000000-df85-4307-a069-68612c4471e2\"
        ]
    ]
}"
const url = new URL(
    "https://api.qplet.dev/v1/conversations"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "Name",
    "type": "private",
    "participants": [
        [
            "00000000-df85-4307-a069-68612c4471e3",
            "00000000-df85-4307-a069-68612c4471e2"
        ]
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'Name',
            'type' => 'private',
            'participants' => [
                [
                    '00000000-df85-4307-a069-68612c4471e3',
                    '00000000-df85-4307-a069-68612c4471e2',
                ],
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Example response (422):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=PB2MkylzkpTRyrqiWImtovXMxAfaGEhXhFJ8Q9eG; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "The participants must have at least 2 items. (and 1 more error)",
    "errors": {
        "participants": [
            "The participants must have at least 2 items."
        ],
        "participants.0": [
            "The participants.0 must be a valid UUID."
        ]
    }
}
 

Request      

POST v1/conversations

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

name   string  optional  

This field is required when type or group is present. Example: Name

type   string   

Example: private

Must be one of:
  • private
  • group
participants   string[]   

Must be a valid UUID.

Update

requires authentication

Update own conversation

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"New name\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "New name"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'New name',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=Jvu3LltPYbbADFqx8LF3nPABK8d2Fufj2X7wlOY3; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
        "name": "Fan Test Country, Author Test Country",
        "unread_count": 3,
        "participants": [
            {
                "id": "00000000-df85-4307-a069-68612c4471e1",
                "name": "Fan Test Country",
                "avatar_url": null
            },
            {
                "id": "00000000-df85-4307-a069-68612c4471e2",
                "name": "Author Test Country",
                "avatar_url": null
            },
            {
                "id": "00000000-df85-4307-a069-68612c4471e3",
                "name": "Admin Test Country",
                "avatar_url": null
            }
        ]
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Conversation",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/conversations/{conversation_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation_id   string   

The ID of the conversation. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

Body Parameters

name   string  optional  

This field is required when type or group is present. Example: New name

Delete

requires authentication

Delete own conversation

Admin can remove any conversation

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=n4OyWIuS2h1NCstx3TAAgiHXoOoCBLkeeHoyPE2A; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Conversation",
    "message": "No query results"
}
 

Request      

DELETE v1/conversations/{conversation_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation_id   string   

The ID of the conversation. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

Settings

requires authentication

Returns settings for specific conversation

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/settings" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/settings"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/settings';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=GuJrB7aKjLRRsV7Y6Gywc13jt9ae3EKtxz8dkKJA; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
        "name": "Fan Test Country, Author Test Country",
        "unread_count": 0,
        "participants": [
            {
                "id": "00000000-df85-4307-a069-68612c4471e1",
                "name": "Fan Test Country",
                "avatar_url": null
            },
            {
                "id": "00000000-df85-4307-a069-68612c4471e2",
                "name": "Author Test Country",
                "avatar_url": null
            },
            {
                "id": "00000000-df85-4307-a069-68612c4471e3",
                "name": "Admin Test Country",
                "avatar_url": null
            }
        ],
        "messages": [
            {
                "id": "a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Qui dolorem fuga veniam voluptatibus. Harum harum modi unde quisquam omnis. Saepe voluptatem doloremque magnam aliquam molestiae consequuntur ut possimus.",
                "created_at": 1761916603
            },
            {
                "id": "a03ed1f4-4c2a-4801-a381-0adc3791f8c8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Tenetur sit iure mollitia qui minus. Iure neque et sit. Sint est magni neque. Iste optio voluptates voluptatem id dolorum quam.",
                "created_at": 1761916610
            },
            {
                "id": "a03ed1f4-4e3b-461b-abc8-2ba4b17b9a2e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Deserunt animi quia autem fugiat. Et expedita ducimus sit doloribus. Aperiam est magni vel repudiandae sed sequi. Dolorem laborum nam doloremque deserunt consequatur.",
                "created_at": 1761916617
            },
            {
                "id": "a03ed1f4-5020-4177-bb5c-c549689c6af4",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Vel voluptas nesciunt quidem dolorum molestiae ut. Sunt iusto aperiam in distinctio. Ducimus autem recusandae officiis veniam nam ut consequatur.",
                "created_at": 1761916624
            },
            {
                "id": "a03ed1f4-5257-47aa-8532-8418628aa2ba",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Iure est ut quae sit et. Veniam neque accusantium libero quam quia labore. Aut inventore consectetur porro velit in atque enim quasi. Vero voluptatem quibusdam autem minus.",
                "created_at": 1761916631
            },
            {
                "id": "a03ed1f4-544d-4fd1-8196-599c1adc75c7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Id iusto magnam suscipit quas repudiandae ex. Magni ut non eius eveniet. Error magnam mollitia et velit repellat quasi. Id est quod ipsa ipsam est et.",
                "created_at": 1761916638
            },
            {
                "id": "a03ed1f4-569a-48c2-bbae-817960a0635f",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Eos consequatur cum numquam officia vero molestiae nihil. Omnis nihil neque iure. Sapiente incidunt quo ratione aut porro adipisci. Est molestiae autem alias laboriosam rerum.",
                "created_at": 1761916645
            },
            {
                "id": "a03ed1f4-58a6-4db3-b84d-cbfc5117dd19",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Facilis minima eligendi corporis deserunt. Impedit ut facere assumenda voluptate est quis. Et rerum blanditiis exercitationem et. Dolor sit numquam voluptatum et.",
                "created_at": 1761916652
            },
            {
                "id": "a03ed1f4-5ac3-4046-a679-85eecc1bebe6",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Illo ratione ut rerum repellendus nostrum neque. Porro exercitationem quos quia non corrupti magnam. Voluptas deserunt omnis quod ut aliquid sequi et.",
                "created_at": 1761916659
            },
            {
                "id": "a03ed1f4-5cd2-4414-8239-ce96e8ecf4e7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Harum veritatis perspiciatis doloremque ex distinctio qui magni sint. Quos sed autem officiis asperiores error velit unde.",
                "created_at": 1761916666
            },
            {
                "id": "a03ed1f4-5ebf-43a7-9536-bd197dc9a7a8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Id vitae voluptates ut magni molestiae quo quasi. Hic aut dicta qui est earum eaque ut. Veritatis atque quidem maxime minima perferendis cumque dolorem aut.",
                "created_at": 1761916673
            },
            {
                "id": "a03ed1f4-607d-45fa-bf75-a84530f41570",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Aut enim commodi quo eveniet eligendi autem magni. Aut sit in sint eos in. Ut reprehenderit sunt deleniti earum qui quisquam eum. Libero accusamus officia vero sint impedit.",
                "created_at": 1761916680
            },
            {
                "id": "a03ed1f4-62c9-4323-8e93-fc6a0351ac7b",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Est reiciendis quia quas non quam corrupti nihil. Sit earum aut unde qui sapiente. Quo et non quam vero iusto. Libero laborum sed tempora voluptatibus assumenda porro in qui.",
                "created_at": 1761916687
            },
            {
                "id": "a03ed1f4-64d6-4bbc-80f1-3f6f6ae7dd38",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Aut deserunt odio vel repudiandae. Natus qui voluptatem est. Quis et qui id repudiandae qui non dolor. Voluptate quibusdam numquam enim illo et ipsum qui.",
                "created_at": 1761916694
            },
            {
                "id": "a03ed1f4-669e-45c7-83b5-4e5889d6d99d",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Ut alias deleniti eum ea ipsa. Autem provident minima omnis aut consequuntur reprehenderit. Recusandae error corrupti sit natus nihil dicta.",
                "created_at": 1761916701
            },
            {
                "id": "a03ed1f4-fa29-4a87-858d-85815b43f610",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Rem non in dolorum ut minima est facilis. Dolor hic consectetur magni praesentium officia porro.",
                "created_at": 1761916604
            },
            {
                "id": "a03ed1f4-fbf3-427a-ade8-48aad834b6f2",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Atque et commodi quia qui consequatur et. Laborum saepe dolor sequi explicabo velit et. Eum consequatur veritatis inventore ut.",
                "created_at": 1761916611
            },
            {
                "id": "a03ed1f4-fe10-42bc-ab18-7ea912a49743",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Dolore in et aliquam tenetur consequatur ea. Perspiciatis vel deserunt sed. Fuga ea inventore id sunt. Dicta nisi et perspiciatis numquam voluptatem dignissimos laborum velit.",
                "created_at": 1761916618
            },
            {
                "id": "a03ed1f4-ffde-4426-a300-131495fd6ef4",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Veniam dolorem facilis qui quisquam at libero et. Mollitia aliquam amet quas facilis nam quidem. Cumque et corporis quis molestias consectetur rem omnis. Delectus labore vel quia non.",
                "created_at": 1761916625
            },
            {
                "id": "a03ed1f5-0273-4b16-8ad2-87649b752c60",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Perspiciatis quia aut sed voluptas natus quibusdam accusamus. Eligendi voluptates omnis aut soluta dolor. Aperiam consequatur rerum id amet.",
                "created_at": 1761916632
            },
            {
                "id": "a03ed1f5-055c-4892-9479-317d97200d43",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Earum deserunt sunt reprehenderit quibusdam perferendis aut. Eaque tempore ut tempore qui ipsa vel. Reiciendis reprehenderit dolor praesentium perferendis. Laboriosam eveniet ipsa non omnis.",
                "created_at": 1761916639
            },
            {
                "id": "a03ed1f5-0767-41f6-959c-aa118f101d21",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Earum molestiae quo temporibus non non. Placeat perferendis atque ea molestiae laborum sint necessitatibus. Ea mollitia ipsam itaque similique rerum.",
                "created_at": 1761916646
            },
            {
                "id": "a03ed1f5-099e-4542-8b20-f9df155f7fe6",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Assumenda molestiae aut voluptatem qui quis natus. Unde totam ut vel numquam. Consectetur quibusdam aperiam repudiandae. Consequatur placeat quis eum qui.",
                "created_at": 1761916653
            },
            {
                "id": "a03ed1f5-0b9d-4629-8f8e-4630b62c1a4b",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Nihil corrupti non quam est cupiditate omnis. Voluptatem ut perspiciatis corporis qui.",
                "created_at": 1761916660
            },
            {
                "id": "a03ed1f5-0d98-46fb-9e54-01ee46462d44",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Qui quia vel ea minima explicabo commodi et. Et vero voluptatum similique aliquam. Quaerat nam aut est omnis vel.",
                "created_at": 1761916667
            },
            {
                "id": "a03ed1f5-0fa2-43b8-ae6c-2dc060e34544",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Aspernatur dolore non aut iusto impedit aut. Ea est veritatis nihil eos sit unde. Necessitatibus cumque quisquam deleniti magni sunt ut.",
                "created_at": 1761916674
            },
            {
                "id": "a03ed1f5-11f7-4ff6-8db0-8a6ad85b62b9",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Veniam ipsam consequuntur nemo harum omnis. Consequuntur exercitationem voluptatum cum sapiente. Omnis neque sint nesciunt aperiam autem possimus. Aut voluptatum totam laboriosam.",
                "created_at": 1761916681
            },
            {
                "id": "a03ed1f5-141f-45cd-a6e8-e30a2119b4b9",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Eveniet illum est quis dignissimos officia aut. Aliquam aut officiis quia similique optio. Recusandae est pariatur et ut cum.",
                "created_at": 1761916688
            },
            {
                "id": "a03ed1f5-1616-4053-9a63-9aa503e20a53",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Modi et earum provident est omnis. Cum excepturi enim aut id. Sapiente sit recusandae sed est sit fugit.",
                "created_at": 1761916695
            },
            {
                "id": "a03ed1f5-17d4-48b0-96b3-32906185e01e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Animi quidem doloribus perferendis quaerat a. Hic nihil nemo voluptates qui aut in. Beatae numquam sapiente in culpa.",
                "created_at": 1761916702
            },
            {
                "id": "a03ed1f5-a81f-4df3-ae76-92e970438660",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Asperiores ut asperiores ea praesentium autem ratione cupiditate delectus. Provident provident veritatis minima incidunt. Rem laboriosam reprehenderit architecto illo. Ullam veritatis sunt enim ut.",
                "created_at": 1761916604
            },
            {
                "id": "a03ed1f5-aa7c-40fe-a7d2-efb5b7e031d0",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Non quia expedita ut eos nisi laboriosam distinctio aliquid. Similique aut eius maxime nostrum. Ad explicabo ut qui vitae dolorem.",
                "created_at": 1761916611
            },
            {
                "id": "a03ed1f5-acfc-4308-b816-63503756bd6a",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Dolor qui sit nam ut. Ratione repudiandae est odit. Placeat accusamus reiciendis sed nihil assumenda et accusantium. Qui eveniet quia modi ipsam corporis consequuntur.",
                "created_at": 1761916618
            },
            {
                "id": "a03ed1f5-af58-46a6-9023-9c4dd10cade7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "In eius fugit deserunt voluptas perspiciatis molestias. Ipsum quas rerum omnis eligendi veniam accusantium esse qui. Corporis et reprehenderit vitae amet fugit at dicta perspiciatis.",
                "created_at": 1761916625
            },
            {
                "id": "a03ed1f5-b15a-467b-a7f8-56e0ad98e999",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Quaerat veritatis dicta in dolores quia. Aut officia nesciunt dolor quo. Omnis qui dolorum dolorem omnis autem voluptatem quam.",
                "created_at": 1761916632
            },
            {
                "id": "a03ed1f5-b385-46e9-8417-dbe01d95aa8e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Ab voluptatem rerum ut culpa architecto exercitationem aspernatur. Adipisci numquam voluptate deleniti incidunt. Et facere numquam rerum et et. Mollitia voluptas suscipit recusandae quia qui.",
                "created_at": 1761916639
            },
            {
                "id": "a03ed1f5-b625-49ee-8e41-b5a94ea617ee",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Repellat reprehenderit sed perspiciatis. Voluptas eos cumque soluta exercitationem tempora quia placeat. Rem amet dignissimos odit recusandae sapiente a eaque.",
                "created_at": 1761916646
            },
            {
                "id": "a03ed1f5-b892-4c9c-b3c0-f40c2c911a23",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Eaque quo nam vitae repellendus facilis exercitationem. Reiciendis eos dicta exercitationem excepturi. Qui veniam eligendi maxime nihil tempora qui assumenda sed. Ut velit rerum accusamus nihil.",
                "created_at": 1761916653
            },
            {
                "id": "a03ed1f5-baf9-4fb9-95c6-f426c7070787",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Et occaecati laudantium aut non soluta inventore ducimus. Consequatur molestiae sint corrupti eum fuga quaerat nihil reprehenderit. Et sit vero dolorem earum nisi et.",
                "created_at": 1761916660
            },
            {
                "id": "a03ed1f5-bcea-4e93-9c75-6654e29a81a1",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Autem nisi vero voluptate ea dolores incidunt quam. Vitae assumenda quia temporibus voluptates perferendis aliquid ipsa. Dolorum et et quis et sequi dolor rerum. Amet vero quaerat et ut.",
                "created_at": 1761916667
            },
            {
                "id": "a03ed1f5-bee3-4fdf-8fd2-78814ba7f874",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Adipisci enim fugit impedit. Ipsum dicta iste molestias et suscipit aut. Modi impedit reiciendis earum ex qui soluta recusandae ullam. Ut est voluptatibus sequi natus iure. Qui a dolore ut.",
                "created_at": 1761916674
            },
            {
                "id": "a03ed1f5-c0f0-4387-87d6-4dd67f5653af",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Modi architecto in praesentium vel. Dolore est non aliquid autem ea sed dolor. Voluptates sit tempore vel sit assumenda perspiciatis sed.",
                "created_at": 1761916681
            },
            {
                "id": "a03ed1f5-c2d5-4867-a662-3612e0e2faa7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Quod corrupti eveniet vero tenetur et et et molestiae. Nesciunt omnis rem ut. Facere tempora velit accusamus iure beatae occaecati inventore expedita. Repellat quia omnis qui quidem rem a qui.",
                "created_at": 1761916688
            },
            {
                "id": "a03ed1f5-c566-49e3-b708-a4d1636ff3db",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Et qui totam soluta dolor. Vitae unde eligendi itaque cum. Fuga mollitia officiis ut autem.",
                "created_at": 1761916695
            },
            {
                "id": "a03ed1f5-c761-448c-90b6-ddf95beeb2b1",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Necessitatibus cum quo culpa aut ipsam perferendis velit. Et sit sint omnis cum qui quo. Est eos velit dolores eos. Doloribus doloribus dolor saepe voluptatibus vero adipisci est.",
                "created_at": 1761916702
            }
        ]
    }
}
 

Example response (404):


{
    "type": "Conversation",
    "message": "No query results"
}
 

Request      

GET v1/conversations/{conversation_id}/settings

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation_id   string   

The ID of the conversation. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

Messages

requires authentication

Search within a specific conversation

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/search" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/search"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/search';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=g1UonTnBA1NQhUeyXaxcvvbmHAOKjvIjqL74pSAa; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "7ac8ab55-6731-40b8-84ba-d0b63191a8c3",
            "type": "message",
            "match": "This is a sample message containing the search term."
        },
        {
            "id": "7aae5b91-3e71-4255-bb02-4eb8fecf0c80",
            "type": "message",
            "match": "User with name matching the search term."
        }
    ]
}
 

Example response (404):


{
    "type": "Conversation",
    "message": "No query results"
}
 

Store

requires authentication

Send a message to user or conversation

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"content\": \"My message to the private chat\",
    \"attachments\": [
        \"6aa921cf-590a-34f8-83b9-fa723ffa6887\"
    ]
}"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "content": "My message to the private chat",
    "attachments": [
        "6aa921cf-590a-34f8-83b9-fa723ffa6887"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'content' => 'My message to the private chat',
            'attachments' => [
                '6aa921cf-590a-34f8-83b9-fa723ffa6887',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Example response (422):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=2650QoDN3yOQsda3JDb8moZjSnwy81mnFqSAaMkb; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "The selected attachments.0 is invalid.",
    "errors": {
        "attachments.0": [
            "The selected attachments.0 is invalid."
        ]
    }
}
 

Request      

POST v1/conversations/{conversation_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation_id   string   

The ID of the conversation. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

Body Parameters

content   string   

Example: My message to the private chat

attachments   string[]   

Must be a valid UUID.

Update

requires authentication

Update own message

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/conversations/nulla/a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"content\": \"My conversation to the private\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/nulla/a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "content": "My conversation to the private"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/nulla/a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'content' => 'My conversation to the private',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Message",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=Ajrr2e5dajKebammFWhKoOFBFxd4gHRd0chVy0zn; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Request      

PATCH v1/conversations/{conversation}/{message_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation   string   

The conversation. Example: nulla

message_id   string   

The ID of the message. Example: a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8

Body Parameters

content   string   

Example: My conversation to the private

Delete

requires authentication

Delete own message

Admin can remove any message

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/conversations/incidunt/a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/incidunt/a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/incidunt/a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Message",
    "message": "No query results"
}
 

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=NmwnTYtQraz5iOTTaUI4I4F9PhN8oWbVWW8HoRO7; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Request      

DELETE v1/conversations/{conversation}/{message_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation   string   

The conversation. Example: incidunt

message_id   string   

The ID of the message. Example: a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8

Participants

List participants

requires authentication

Get a list of users participating in this conversation.

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=F1ZkHj44yUDgNH7qOVPSgqMEQ0043bU78RrT6DZa; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "analytics": {
                "tracks": 17,
                "albums": 4,
                "subscribers": 348
            }
        },
        {
            "id": "00000000-df85-4307-a069-68612c4471e2",
            "name": "Author Test Country",
            "analytics": {
                "tracks": 40,
                "albums": 5,
                "subscribers": 356
            }
        },
        {
            "id": "00000000-df85-4307-a069-68612c4471e3",
            "name": "Admin Test Country",
            "email": "admin@qplet.ru",
            "analytics": {
                "tracks": 32,
                "albums": 2,
                "subscribers": 127
            }
        }
    ]
}
 

Request      

GET v1/conversations/{conversation_id}/participants

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation_id   string   

The ID of the conversation. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

Add participants

requires authentication

Add one or more existing users to the conversation.

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"participants\": [
        \"00000000-df85-4307-a069-68612c4471e2\"
    ]
}"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "participants": [
        "00000000-df85-4307-a069-68612c4471e2"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'participants' => [
                '00000000-df85-4307-a069-68612c4471e2',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=OEyf2uhXNW2EB5EvNyvGHbMMPhlIuViwnMKXFIFf; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-53f7-4a5b-8c34-e171172c8ba8",
        "name": "Fan Test Country, Author Test Country",
        "unread_count": 3,
        "participants": [
            {
                "id": "00000000-df85-4307-a069-68612c4471e1",
                "name": "Fan Test Country",
                "avatar_url": null
            },
            {
                "id": "00000000-df85-4307-a069-68612c4471e2",
                "name": "Author Test Country",
                "avatar_url": null
            },
            {
                "id": "00000000-df85-4307-a069-68612c4471e3",
                "name": "Admin Test Country",
                "avatar_url": null
            }
        ],
        "messages": [
            {
                "id": "a03ed1f4-4a3f-418d-94d1-4fdcc3c0bfa8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Qui dolorem fuga veniam voluptatibus. Harum harum modi unde quisquam omnis. Saepe voluptatem doloremque magnam aliquam molestiae consequuntur ut possimus.",
                "created_at": 1761916603
            },
            {
                "id": "a03ed1f4-4c2a-4801-a381-0adc3791f8c8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Tenetur sit iure mollitia qui minus. Iure neque et sit. Sint est magni neque. Iste optio voluptates voluptatem id dolorum quam.",
                "created_at": 1761916610
            },
            {
                "id": "a03ed1f4-4e3b-461b-abc8-2ba4b17b9a2e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Deserunt animi quia autem fugiat. Et expedita ducimus sit doloribus. Aperiam est magni vel repudiandae sed sequi. Dolorem laborum nam doloremque deserunt consequatur.",
                "created_at": 1761916617
            },
            {
                "id": "a03ed1f4-5020-4177-bb5c-c549689c6af4",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Vel voluptas nesciunt quidem dolorum molestiae ut. Sunt iusto aperiam in distinctio. Ducimus autem recusandae officiis veniam nam ut consequatur.",
                "created_at": 1761916624
            },
            {
                "id": "a03ed1f4-5257-47aa-8532-8418628aa2ba",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Iure est ut quae sit et. Veniam neque accusantium libero quam quia labore. Aut inventore consectetur porro velit in atque enim quasi. Vero voluptatem quibusdam autem minus.",
                "created_at": 1761916631
            },
            {
                "id": "a03ed1f4-544d-4fd1-8196-599c1adc75c7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Id iusto magnam suscipit quas repudiandae ex. Magni ut non eius eveniet. Error magnam mollitia et velit repellat quasi. Id est quod ipsa ipsam est et.",
                "created_at": 1761916638
            },
            {
                "id": "a03ed1f4-569a-48c2-bbae-817960a0635f",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Eos consequatur cum numquam officia vero molestiae nihil. Omnis nihil neque iure. Sapiente incidunt quo ratione aut porro adipisci. Est molestiae autem alias laboriosam rerum.",
                "created_at": 1761916645
            },
            {
                "id": "a03ed1f4-58a6-4db3-b84d-cbfc5117dd19",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Facilis minima eligendi corporis deserunt. Impedit ut facere assumenda voluptate est quis. Et rerum blanditiis exercitationem et. Dolor sit numquam voluptatum et.",
                "created_at": 1761916652
            },
            {
                "id": "a03ed1f4-5ac3-4046-a679-85eecc1bebe6",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Illo ratione ut rerum repellendus nostrum neque. Porro exercitationem quos quia non corrupti magnam. Voluptas deserunt omnis quod ut aliquid sequi et.",
                "created_at": 1761916659
            },
            {
                "id": "a03ed1f4-5cd2-4414-8239-ce96e8ecf4e7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Harum veritatis perspiciatis doloremque ex distinctio qui magni sint. Quos sed autem officiis asperiores error velit unde.",
                "created_at": 1761916666
            },
            {
                "id": "a03ed1f4-5ebf-43a7-9536-bd197dc9a7a8",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Id vitae voluptates ut magni molestiae quo quasi. Hic aut dicta qui est earum eaque ut. Veritatis atque quidem maxime minima perferendis cumque dolorem aut.",
                "created_at": 1761916673
            },
            {
                "id": "a03ed1f4-607d-45fa-bf75-a84530f41570",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Aut enim commodi quo eveniet eligendi autem magni. Aut sit in sint eos in. Ut reprehenderit sunt deleniti earum qui quisquam eum. Libero accusamus officia vero sint impedit.",
                "created_at": 1761916680
            },
            {
                "id": "a03ed1f4-62c9-4323-8e93-fc6a0351ac7b",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Est reiciendis quia quas non quam corrupti nihil. Sit earum aut unde qui sapiente. Quo et non quam vero iusto. Libero laborum sed tempora voluptatibus assumenda porro in qui.",
                "created_at": 1761916687
            },
            {
                "id": "a03ed1f4-64d6-4bbc-80f1-3f6f6ae7dd38",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Aut deserunt odio vel repudiandae. Natus qui voluptatem est. Quis et qui id repudiandae qui non dolor. Voluptate quibusdam numquam enim illo et ipsum qui.",
                "created_at": 1761916694
            },
            {
                "id": "a03ed1f4-669e-45c7-83b5-4e5889d6d99d",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e1",
                    "name": "Fan Test Country",
                    "avatar_url": null
                },
                "content": "Ut alias deleniti eum ea ipsa. Autem provident minima omnis aut consequuntur reprehenderit. Recusandae error corrupti sit natus nihil dicta.",
                "created_at": 1761916701
            },
            {
                "id": "a03ed1f4-fa29-4a87-858d-85815b43f610",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Rem non in dolorum ut minima est facilis. Dolor hic consectetur magni praesentium officia porro.",
                "created_at": 1761916604
            },
            {
                "id": "a03ed1f4-fbf3-427a-ade8-48aad834b6f2",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Atque et commodi quia qui consequatur et. Laborum saepe dolor sequi explicabo velit et. Eum consequatur veritatis inventore ut.",
                "created_at": 1761916611
            },
            {
                "id": "a03ed1f4-fe10-42bc-ab18-7ea912a49743",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Dolore in et aliquam tenetur consequatur ea. Perspiciatis vel deserunt sed. Fuga ea inventore id sunt. Dicta nisi et perspiciatis numquam voluptatem dignissimos laborum velit.",
                "created_at": 1761916618
            },
            {
                "id": "a03ed1f4-ffde-4426-a300-131495fd6ef4",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Veniam dolorem facilis qui quisquam at libero et. Mollitia aliquam amet quas facilis nam quidem. Cumque et corporis quis molestias consectetur rem omnis. Delectus labore vel quia non.",
                "created_at": 1761916625
            },
            {
                "id": "a03ed1f5-0273-4b16-8ad2-87649b752c60",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Perspiciatis quia aut sed voluptas natus quibusdam accusamus. Eligendi voluptates omnis aut soluta dolor. Aperiam consequatur rerum id amet.",
                "created_at": 1761916632
            },
            {
                "id": "a03ed1f5-055c-4892-9479-317d97200d43",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Earum deserunt sunt reprehenderit quibusdam perferendis aut. Eaque tempore ut tempore qui ipsa vel. Reiciendis reprehenderit dolor praesentium perferendis. Laboriosam eveniet ipsa non omnis.",
                "created_at": 1761916639
            },
            {
                "id": "a03ed1f5-0767-41f6-959c-aa118f101d21",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Earum molestiae quo temporibus non non. Placeat perferendis atque ea molestiae laborum sint necessitatibus. Ea mollitia ipsam itaque similique rerum.",
                "created_at": 1761916646
            },
            {
                "id": "a03ed1f5-099e-4542-8b20-f9df155f7fe6",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Assumenda molestiae aut voluptatem qui quis natus. Unde totam ut vel numquam. Consectetur quibusdam aperiam repudiandae. Consequatur placeat quis eum qui.",
                "created_at": 1761916653
            },
            {
                "id": "a03ed1f5-0b9d-4629-8f8e-4630b62c1a4b",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Nihil corrupti non quam est cupiditate omnis. Voluptatem ut perspiciatis corporis qui.",
                "created_at": 1761916660
            },
            {
                "id": "a03ed1f5-0d98-46fb-9e54-01ee46462d44",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Qui quia vel ea minima explicabo commodi et. Et vero voluptatum similique aliquam. Quaerat nam aut est omnis vel.",
                "created_at": 1761916667
            },
            {
                "id": "a03ed1f5-0fa2-43b8-ae6c-2dc060e34544",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Aspernatur dolore non aut iusto impedit aut. Ea est veritatis nihil eos sit unde. Necessitatibus cumque quisquam deleniti magni sunt ut.",
                "created_at": 1761916674
            },
            {
                "id": "a03ed1f5-11f7-4ff6-8db0-8a6ad85b62b9",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Veniam ipsam consequuntur nemo harum omnis. Consequuntur exercitationem voluptatum cum sapiente. Omnis neque sint nesciunt aperiam autem possimus. Aut voluptatum totam laboriosam.",
                "created_at": 1761916681
            },
            {
                "id": "a03ed1f5-141f-45cd-a6e8-e30a2119b4b9",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Eveniet illum est quis dignissimos officia aut. Aliquam aut officiis quia similique optio. Recusandae est pariatur et ut cum.",
                "created_at": 1761916688
            },
            {
                "id": "a03ed1f5-1616-4053-9a63-9aa503e20a53",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Modi et earum provident est omnis. Cum excepturi enim aut id. Sapiente sit recusandae sed est sit fugit.",
                "created_at": 1761916695
            },
            {
                "id": "a03ed1f5-17d4-48b0-96b3-32906185e01e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e2",
                    "name": "Author Test Country",
                    "avatar_url": null
                },
                "content": "Animi quidem doloribus perferendis quaerat a. Hic nihil nemo voluptates qui aut in. Beatae numquam sapiente in culpa.",
                "created_at": 1761916702
            },
            {
                "id": "a03ed1f5-a81f-4df3-ae76-92e970438660",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Asperiores ut asperiores ea praesentium autem ratione cupiditate delectus. Provident provident veritatis minima incidunt. Rem laboriosam reprehenderit architecto illo. Ullam veritatis sunt enim ut.",
                "created_at": 1761916604
            },
            {
                "id": "a03ed1f5-aa7c-40fe-a7d2-efb5b7e031d0",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Non quia expedita ut eos nisi laboriosam distinctio aliquid. Similique aut eius maxime nostrum. Ad explicabo ut qui vitae dolorem.",
                "created_at": 1761916611
            },
            {
                "id": "a03ed1f5-acfc-4308-b816-63503756bd6a",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Dolor qui sit nam ut. Ratione repudiandae est odit. Placeat accusamus reiciendis sed nihil assumenda et accusantium. Qui eveniet quia modi ipsam corporis consequuntur.",
                "created_at": 1761916618
            },
            {
                "id": "a03ed1f5-af58-46a6-9023-9c4dd10cade7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "In eius fugit deserunt voluptas perspiciatis molestias. Ipsum quas rerum omnis eligendi veniam accusantium esse qui. Corporis et reprehenderit vitae amet fugit at dicta perspiciatis.",
                "created_at": 1761916625
            },
            {
                "id": "a03ed1f5-b15a-467b-a7f8-56e0ad98e999",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Quaerat veritatis dicta in dolores quia. Aut officia nesciunt dolor quo. Omnis qui dolorum dolorem omnis autem voluptatem quam.",
                "created_at": 1761916632
            },
            {
                "id": "a03ed1f5-b385-46e9-8417-dbe01d95aa8e",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Ab voluptatem rerum ut culpa architecto exercitationem aspernatur. Adipisci numquam voluptate deleniti incidunt. Et facere numquam rerum et et. Mollitia voluptas suscipit recusandae quia qui.",
                "created_at": 1761916639
            },
            {
                "id": "a03ed1f5-b625-49ee-8e41-b5a94ea617ee",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Repellat reprehenderit sed perspiciatis. Voluptas eos cumque soluta exercitationem tempora quia placeat. Rem amet dignissimos odit recusandae sapiente a eaque.",
                "created_at": 1761916646
            },
            {
                "id": "a03ed1f5-b892-4c9c-b3c0-f40c2c911a23",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Eaque quo nam vitae repellendus facilis exercitationem. Reiciendis eos dicta exercitationem excepturi. Qui veniam eligendi maxime nihil tempora qui assumenda sed. Ut velit rerum accusamus nihil.",
                "created_at": 1761916653
            },
            {
                "id": "a03ed1f5-baf9-4fb9-95c6-f426c7070787",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Et occaecati laudantium aut non soluta inventore ducimus. Consequatur molestiae sint corrupti eum fuga quaerat nihil reprehenderit. Et sit vero dolorem earum nisi et.",
                "created_at": 1761916660
            },
            {
                "id": "a03ed1f5-bcea-4e93-9c75-6654e29a81a1",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Autem nisi vero voluptate ea dolores incidunt quam. Vitae assumenda quia temporibus voluptates perferendis aliquid ipsa. Dolorum et et quis et sequi dolor rerum. Amet vero quaerat et ut.",
                "created_at": 1761916667
            },
            {
                "id": "a03ed1f5-bee3-4fdf-8fd2-78814ba7f874",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Adipisci enim fugit impedit. Ipsum dicta iste molestias et suscipit aut. Modi impedit reiciendis earum ex qui soluta recusandae ullam. Ut est voluptatibus sequi natus iure. Qui a dolore ut.",
                "created_at": 1761916674
            },
            {
                "id": "a03ed1f5-c0f0-4387-87d6-4dd67f5653af",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Modi architecto in praesentium vel. Dolore est non aliquid autem ea sed dolor. Voluptates sit tempore vel sit assumenda perspiciatis sed.",
                "created_at": 1761916681
            },
            {
                "id": "a03ed1f5-c2d5-4867-a662-3612e0e2faa7",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Quod corrupti eveniet vero tenetur et et et molestiae. Nesciunt omnis rem ut. Facere tempora velit accusamus iure beatae occaecati inventore expedita. Repellat quia omnis qui quidem rem a qui.",
                "created_at": 1761916688
            },
            {
                "id": "a03ed1f5-c566-49e3-b708-a4d1636ff3db",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Et qui totam soluta dolor. Vitae unde eligendi itaque cum. Fuga mollitia officiis ut autem.",
                "created_at": 1761916695
            },
            {
                "id": "a03ed1f5-c761-448c-90b6-ddf95beeb2b1",
                "author": {
                    "id": "00000000-df85-4307-a069-68612c4471e3",
                    "name": "Admin Test Country",
                    "avatar_url": null
                },
                "content": "Necessitatibus cum quo culpa aut ipsam perferendis velit. Et sit sint omnis cum qui quo. Est eos velit dolores eos. Doloribus doloribus dolor saepe voluptatibus vero adipisci est.",
                "created_at": 1761916702
            }
        ]
    }
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/conversations/{conversation_id}/participants

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation_id   string   

The ID of the conversation. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

Body Parameters

participants   string[]   

Array of User UUIDs to add.

Remove participant

requires authentication

Remove a user from the conversation.

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"user_id\": \"00000000-df85-4307-a069-68612c4471e2\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "user_id": "00000000-df85-4307-a069-68612c4471e2"
};

fetch(url, {
    method: "DELETE",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/conversations/00000000-53f7-4a5b-8c34-e171172c8ba8/participants';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'user_id' => '00000000-df85-4307-a069-68612c4471e2',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Empty response
 

Request      

DELETE v1/conversations/{conversation_id}/participants

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

conversation_id   string   

The ID of the conversation. Example: 00000000-53f7-4a5b-8c34-e171172c8ba8

Body Parameters

user_id   string   

The UUID of the user to remove. Example: 00000000-df85-4307-a069-68612c4471e2

Events

Store

requires authentication

Create a event with optionally shared entity

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/events" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"title\": \"My Event content\",
    \"date\": \"2025-12-28\",
    \"time\": \"18:00\",
    \"type\": \"online\",
    \"location\": \"Metro Manila\",
    \"seats\": 500,
    \"website\": \"https:\\/\\/www.example.com\",
    \"content\": \"Some information about My Event. So this is the content.\",
    \"banner_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
    \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/events"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "title": "My Event content",
    "date": "2025-12-28",
    "time": "18:00",
    "type": "online",
    "location": "Metro Manila",
    "seats": 500,
    "website": "https:\/\/www.example.com",
    "content": "Some information about My Event. So this is the content.",
    "banner_id": "00000000-422e-41ff-a266-2b0a093307e6",
    "cover_id": "00000000-422e-41ff-a266-2b0a093307e6"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'title' => 'My Event content',
            'date' => '2025-12-28',
            'time' => '18:00',
            'type' => 'online',
            'location' => 'Metro Manila',
            'seats' => 500,
            'website' => 'https://www.example.com',
            'content' => 'Some information about My Event. So this is the content.',
            'banner_id' => '00000000-422e-41ff-a266-2b0a093307e6',
            'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=EVDFF7QBb3hoYcJMnBUxl1j7zXivaxIZ5MnMlwQ2; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "a077478a-d276-4ab8-a01f-552fc970f03d",
        "author": {
            "id": "00000000-df85-4307-a069-68612c4471e3",
            "name": "Admin Test Country",
            "avatar_url": null
        },
        "title": "My Event content",
        "content": "Some information about My Event. So this is the content.",
        "date": "2025-12-28",
        "time": "18:00:00",
        "type": "online",
        "location": "Metro Manila",
        "seats": 500,
        "free_seats": 500,
        "website": "https://www.example.com",
        "banner": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll"
        },
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll"
        },
        "media": null,
        "tags": null,
        "created_at": 1764341618,
        "analytics": {
            "interested": 0,
            "subscribed": 0,
            "views": 0,
            "likes": 0,
            "comments": 0,
            "shares": 0
        }
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/events

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

title   string   

Example: My Event content

date   string   

Must be a valid date in the format Y-m-d. Example: 2025-12-28

time   string  optional  

Must be a valid date in the format H:i:s. Example: 18:00

type   string  optional  

Example: online

Must be one of:
  • online
  • onsite
  • hybrid
location   string  optional  

Example: Metro Manila

seats   integer  optional  

Example: 500

website   string  optional  

Must be a valid URL. Example: https://www.example.com

content   string  optional  

Example: Some information about My Event. So this is the content.

banner_id   string  optional  

Example: 00000000-422e-41ff-a266-2b0a093307e6

cover_id   string  optional  

Example: 00000000-422e-41ff-a266-2b0a093307e6

media   object  optional  
tags   object  optional  

Update

requires authentication

Update own event

Example request:
curl --request PATCH \
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"title\": \"My Event content\",
    \"date\": \"2025-12-28\",
    \"time\": \"18:00\",
    \"type\": \"online\",
    \"location\": \"Metro Manila\",
    \"seats\": 500,
    \"website\": \"https:\\/\\/www.example.com\",
    \"content\": \"Some information about My Event. So this is the content.\",
    \"banner_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
    \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "title": "My Event content",
    "date": "2025-12-28",
    "time": "18:00",
    "type": "online",
    "location": "Metro Manila",
    "seats": 500,
    "website": "https:\/\/www.example.com",
    "content": "Some information about My Event. So this is the content.",
    "banner_id": "00000000-422e-41ff-a266-2b0a093307e6",
    "cover_id": "00000000-422e-41ff-a266-2b0a093307e6"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac';
$response = $client->patch(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'title' => 'My Event content',
            'date' => '2025-12-28',
            'time' => '18:00',
            'type' => 'online',
            'location' => 'Metro Manila',
            'seats' => 500,
            'website' => 'https://www.example.com',
            'content' => 'Some information about My Event. So this is the content.',
            'banner_id' => '00000000-422e-41ff-a266-2b0a093307e6',
            'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=vOHHsvJPMffakifMOKP6Alk4uQlfxHRckBkmKE3L; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
        "author": {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "avatar_url": null
        },
        "title": "My Event content",
        "content": "Some information about My Event. So this is the content.",
        "date": "2025-12-28",
        "time": "18:00:00",
        "type": "online",
        "location": "Metro Manila",
        "seats": 500,
        "free_seats": 497,
        "website": "https://www.example.com",
        "banner": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll"
        },
        "cover": {
            "id": "00000000-422e-41ff-a266-2b0a093307e6",
            "url": "http://localhost:8083/v1/media-assets/00000000-422e-41ff-a266-2b0a093307e6.dll"
        },
        "media": null,
        "tags": null,
        "created_at": 1761916708,
        "updated_at": 1764341618,
        "analytics": {
            "interested": 0,
            "subscribed": 3,
            "views": 4041,
            "likes": 0,
            "comments": 0,
            "shares": 0
        }
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Event",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PATCH v1/events/{event_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

event_id   string   

The ID of the event. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Body Parameters

title   string   

Example: My Event content

date   string   

Must be a valid date in the format Y-m-d. Example: 2025-12-28

time   string  optional  

Must be a valid date in the format H:i:s. Example: 18:00

type   string  optional  

Example: online

Must be one of:
  • online
  • onsite
  • hybrid
location   string  optional  

Example: Metro Manila

seats   integer  optional  

Example: 500

website   string  optional  

Must be a valid URL. Example: https://www.example.com

content   string  optional  

Example: Some information about My Event. So this is the content.

banner_id   string  optional  

Example: 00000000-422e-41ff-a266-2b0a093307e6

cover_id   string  optional  

Example: 00000000-422e-41ff-a266-2b0a093307e6

media   object  optional  
tags   object  optional  

Delete

requires authentication

Delete own event

Admin can remove any event

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=X2HcJhdDc2306CGd6QJJkn7qsSzOQDZdNPvhe9e6; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Event",
    "message": "No query results"
}
 

Request      

DELETE v1/events/{event_id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

event_id   string   

The ID of the event. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

List

Endpoint for fetching list of events

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/events?filters[title]=party&filters[author_id]=00000000-df85-4307-a069-68612c4471e1&filters[is_available]=1&filters[participant][id]=00000000-df85-4307-a069-68612c4471e1&filters[participant][inclusive]=&filters[subscribed_to_organiser]=&filters[date][from]=2025-12-08&filters[date][to]=2025-12-28&per_page=20&page=1&pagination_type=page" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events"
);

const params = {
    "filters[title]": "party",
    "filters[author_id]": "00000000-df85-4307-a069-68612c4471e1",
    "filters[is_available]": "1",
    "filters[participant][id]": "00000000-df85-4307-a069-68612c4471e1",
    "filters[participant][inclusive]": "",
    "filters[subscribed_to_organiser]": "",
    "filters[date][from]": "2025-12-08",
    "filters[date][to]": "2025-12-28",
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'filters[title]' => 'party',
            'filters[author_id]' => '00000000-df85-4307-a069-68612c4471e1',
            'filters[is_available]' => '1',
            'filters[participant][id]' => '00000000-df85-4307-a069-68612c4471e1',
            'filters[participant][inclusive]' => '',
            'filters[subscribed_to_organiser]' => '',
            'filters[date][from]' => '2025-12-08',
            'filters[date][to]' => '2025-12-28',
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=cmrFYVpyz3qohTAa91GRbrDqriTBkzIrxSS3ZU7s; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/events",
        "per_page": 20,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/events

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

filters   object  optional  
filters.title   string  optional  

Example: party

filters.author_id   string  optional  

Must be a valid UUID. Example: 00000000-df85-4307-a069-68612c4471e1

filters.is_available   boolean  optional  

Example: true

filters.participant   object  optional  
filters.participant.id   string  optional  

Must be a valid UUID. Example: 00000000-df85-4307-a069-68612c4471e1

filters.participant.inclusive   boolean  optional  

Example: false

filters.subscribed_to_organiser   boolean  optional  

Example: false

filters.date   object  optional  
filters.date.from   string  optional  

Must be a valid date in the format Y-m-d. Example: 2025-12-08

filters.date.to   string  optional  

Must be a valid date in the format Y-m-d. Example: 2025-12-28

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Show

Returns single event

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=0yLxlAvLvSne2Q93XIjDusFlj8GrLuTGEpfFgcZ5; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
        "author": {
            "id": "00000000-df85-4307-a069-68612c4471e1",
            "name": "Fan Test Country",
            "avatar_url": null
        },
        "title": "Eum laboriosam voluptatibus voluptatibus inventore voluptate nobis et.",
        "content": "At veniam porro dicta consectetur. Non et ipsum quia repudiandae doloremque labore. Fuga dolor et provident quae.",
        "date": "2013-03-18",
        "time": "04:27:27",
        "type": "offline",
        "location": "9974 Leann Meadows\nSouth Boydstad, GA 78113",
        "seats": "60",
        "free_seats": 57,
        "website": "https://www.rau.org/consequuntur-fuga-sit-dolorem-quibusdam-ducimus",
        "media": null,
        "tags": null,
        "is_subscribed": true,
        "created_at": 1761916708,
        "analytics": {
            "interested": 0,
            "subscribed": 3,
            "views": 4041,
            "likes": 0,
            "comments": 0,
            "shares": 0
        }
    }
}
 

Example response (404):


{
    "type": "Event",
    "message": "No query results"
}
 

Request      

GET v1/events/{event_id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

event_id   string   

The ID of the event. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

List user subscriptions

Endpoint for fetching list of events user is subscribed to

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/events/subscribed/00000000-df85-4307-a069-68612c4471e3?per_page=20&page=1&pagination_type=page" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/subscribed/00000000-df85-4307-a069-68612c4471e3"
);

const params = {
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/subscribed/00000000-df85-4307-a069-68612c4471e3';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=66r8n8ccCNmApVq8cZfXngVNoIPU1uTQ3oH7kKWK; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
            "author": {
                "id": "00000000-df85-4307-a069-68612c4471e1",
                "name": "Fan Test Country",
                "avatar_url": null
            },
            "title": "Eum laboriosam voluptatibus voluptatibus inventore voluptate nobis et.",
            "content": "At veniam porro dicta consectetur. Non et ipsum quia repudiandae doloremque labore. Fuga dolor et provident quae.",
            "date": "2013-03-18",
            "time": "04:27:27",
            "type": "offline",
            "location": "9974 Leann Meadows\nSouth Boydstad, GA 78113",
            "seats": "60",
            "free_seats": 57,
            "website": "https://www.rau.org/consequuntur-fuga-sit-dolorem-quibusdam-ducimus",
            "media": null,
            "tags": null,
            "is_subscribed": true,
            "created_at": 1761916708,
            "analytics": {
                "interested": 0,
                "subscribed": 3,
                "views": 4041,
                "likes": 0,
                "comments": 0,
                "shares": 0
            }
        }
    ],
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "path": "http://localhost:8083/v1/events/subscribed/00000000-df85-4307-a069-68612c4471e3",
        "per_page": 20,
        "to": 1,
        "total": 1
    }
}
 

Request      

GET v1/events/subscribed/{id}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

id   string  optional  

Country ID. Example: 00000000-df85-4307-a069-68612c4471e3

Query Parameters

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Subscriptions

Subscribe

requires authentication

Subscribe signed in user to an event

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/subscribe" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/subscribe"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/subscribe';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=JhFmItk2E4gRZp5EPvGb1WcSJDonaaOr5kARYtLD; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (404):


{
    "type": "Event",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/events/{event_id}/subscribe

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

event_id   string   

The ID of the event. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Unsubscribe

requires authentication

Unsubscribe signed in user from an event

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/subscribe" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/subscribe"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/subscribe';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=ZreoSRLtLJ5yhLBXRJjldudgJsPgrWaN73wbIlcv; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (404):


{
    "type": "Event",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

DELETE v1/events/{event_id}/subscribe

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

event_id   string   

The ID of the event. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Show interest

requires authentication

Show interest of signed in user to an event

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/show-interest" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/show-interest"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/show-interest';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=tx0WzBNLPEz5LKVxltWBOoDbqwhP7Asf9atA9Ell; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (404):


{
    "type": "Event",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/events/{event_id}/show-interest

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

event_id   string   

The ID of the event. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Remove interest

requires authentication

Remove interest of the signed in user from an event

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/show-interest" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/show-interest"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/00000000-fdb0-43ce-b555-e0a26ed563ac/show-interest';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (204):

Show headers
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=Gq3JSKir0Qc8yrY88j1YvsrHUnJLOsRgdSyQsTmk; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 
Empty response
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (404):


{
    "type": "Event",
    "message": "No query results"
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

DELETE v1/events/{event_id}/show-interest

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

event_id   string   

The ID of the event. Example: 00000000-fdb0-43ce-b555-e0a26ed563ac

Own

Created by me

requires authentication

List of events created by currently logged-in user

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/events/my?per_page=20&page=1&pagination_type=page" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/my"
);

const params = {
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/my';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=cByr5irG0YzLAKd8xMqmRQV3WMJn6RDJryKFGBGa; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [],
    "meta": {
        "current_page": 1,
        "from": null,
        "last_page": 1,
        "path": "http://localhost:8083/v1/events/my",
        "per_page": 20,
        "to": null,
        "total": 0
    }
}
 

Request      

GET v1/events/my

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

My subscriptions

requires authentication

List of events currently logged-in user is subscribed to

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/events/my/subscriptions?per_page=20&page=1&pagination_type=page" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/events/my/subscriptions"
);

const params = {
    "per_page": "20",
    "page": "1",
    "pagination_type": "page",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/events/my/subscriptions';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'query' => [
            'per_page' => '20',
            'page' => '1',
            'pagination_type' => 'page',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=LTnz6R2mutx4wRSNnVtBvTyP1FKxJwTaCxSFWSrC; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "00000000-fdb0-43ce-b555-e0a26ed563ac",
            "author": {
                "id": "00000000-df85-4307-a069-68612c4471e1",
                "name": "Fan Test Country",
                "avatar_url": null
            },
            "title": "Eum laboriosam voluptatibus voluptatibus inventore voluptate nobis et.",
            "content": "At veniam porro dicta consectetur. Non et ipsum quia repudiandae doloremque labore. Fuga dolor et provident quae.",
            "date": "2013-03-18",
            "time": "04:27:27",
            "type": "offline",
            "location": "9974 Leann Meadows\nSouth Boydstad, GA 78113",
            "seats": "60",
            "free_seats": 57,
            "website": "https://www.rau.org/consequuntur-fuga-sit-dolorem-quibusdam-ducimus",
            "media": null,
            "tags": null,
            "is_subscribed": true,
            "created_at": 1761916708,
            "analytics": {
                "interested": 0,
                "subscribed": 3,
                "views": 4041,
                "likes": 0,
                "comments": 0,
                "shares": 0
            }
        }
    ],
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "path": "http://localhost:8083/v1/events/my/subscriptions",
        "per_page": 20,
        "to": 1,
        "total": 1
    }
}
 

Request      

GET v1/events/my/subscriptions

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Query Parameters

per_page   integer  optional  

Must be between 5 and 100. Example: 20

page   integer  optional  

Must be at least 1. Example: 1

cursor   string  optional  
pagination_type   string  optional  

Example: page

Must be one of:
  • cursor
  • page

Likes

Store

requires authentication

Add like to an entity

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/like/post/inventore" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/like/post/inventore"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/like/post/inventore';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=kfJICYZ35RZeyvKj4hdrXnkTwVG9ApcynqjADLOT; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "likes": 1
    }
}
 

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

POST v1/like/{entity}/{id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

entity   Entity name the like is for   

Example: post

Must be one of:
  • post
  • album
  • event
  • playlist
  • track
id   string   

ID of the entity Example: inventore

Delete

requires authentication

Delete own like

Example request:
curl --request DELETE \
    "https://api.qplet.dev/v1/like/expedita/in" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/like/expedita/in"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/like/expedita/in';
$response = $client->delete(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (401):


{
    "message": "Unauthenticated."
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (404):


{
    "type": "Like",
    "message": "No query results"
}
 

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=6eqXzP2YsGYv4JemMI1SAqVGsy2cImhh2KYpHtcR; expires=Fri, 28 Nov 2025 16:53:39 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Request      

DELETE v1/like/{entity}/{id}

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

entity   string   

Example: expedita

id   string   

The ID of the {entity}. Example: in

Other

GET v1/deploy

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/deploy" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/deploy"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/deploy';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
content-type: text/html; charset=UTF-8
cache-control: no-cache, private
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=kgZdw8Y4HcOiol17UKBTW3ESWORCm5z2YGkKUDRn; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

<pre>
All done!
</pre>

 

Request      

GET v1/deploy

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Search

Search

Find relevant entities of type: albums, talents and tracks

Example request:
curl --request POST \
    "https://api.qplet.dev/v1/search/expedita" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/search/expedita"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/search/expedita';
$response = $client->post(
    $url,
    [
        'headers' => [
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=WbSR9XTRmWDmjiw6OAqAF9AfKUb9cRJ5w6BTNvWB; expires=Fri, 28 Nov 2025 16:53:43 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": [
        {
            "id": "a03ed1bd-eb2a-4ccf-bc7f-ee369c721948",
            "title": "Minima est numquam vitae sequi natus.",
            "media_asset": {
                "id": "a03ed1bd-e130-4601-acca-6385cea99e67",
                "url": "http://localhost:8083/v1/media-assets/a03ed1bd-e130-4601-acca-6385cea99e67.skd"
            },
            "owner": {
                "id": "a03ed1af-1790-44c2-9aff-3e74a03dd406",
                "name": "Mr. Gaetano Leffler I",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-5270-4bc8-b2f8-b3dc6d5c92f1",
                    "name": "Instrumental",
                    "tracks": 805707
                },
                {
                    "id": "a03ed1ae-5cb8-4bc8-829c-1374c942a7c2",
                    "name": "Reggae",
                    "tracks": 969797
                },
                {
                    "id": "a03ed1ae-5f53-40aa-b2c4-04faef02b4cc",
                    "name": "Vocal",
                    "tracks": 245235
                }
            ],
            "analytics": {
                "playbacks": 15,
                "likes": 0,
                "comments": 11,
                "shares": 13
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1dc-379a-4c3a-b04f-f90516974f21",
            "name": "Mr. Braulio Lindgren III",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1df-d513-425c-833c-33d4b7f3b78b",
            "name": "Mikayla Howe",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1c2-8178-4fe6-86f5-b15b8eec3d19",
            "title": "Nesciunt aut odio pariatur aut aliquid.",
            "media_asset": {
                "id": "a03ed1c2-41d0-42c2-85e3-8a01a4cb40f9",
                "url": "http://localhost:8083/v1/media-assets/a03ed1c2-41d0-42c2-85e3-8a01a4cb40f9.cod"
            },
            "owner": {
                "id": "a03ed1af-44d5-4388-af5d-bc870d1f4b16",
                "name": "Ansel Gutmann",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-3e40-486f-be84-bc2ca4e2b5d8",
                    "name": "Anime",
                    "tracks": 839941
                },
                {
                    "id": "a03ed1ae-4fb9-4988-904b-67e48ea6428f",
                    "name": "Workout",
                    "tracks": 65801
                },
                {
                    "id": "a03ed1ae-57e4-45ab-a354-bd02e454a5a5",
                    "name": "Metal",
                    "tracks": 289291
                }
            ],
            "analytics": {
                "playbacks": 7,
                "likes": 0,
                "comments": 9,
                "shares": 10
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1e5-0b33-419c-a993-ea78b5eb0fdf",
            "name": "Alfonzo Carroll",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1d6-bab2-49b4-a94f-e38e838a81cb",
            "title": "Impedit provident ipsam enim porro nesciunt vitae qui.",
            "media_asset": {
                "id": "a03ed1d6-b14a-4f70-aa1c-f941a3af0f6c",
                "url": "http://localhost:8083/v1/media-assets/a03ed1d6-b14a-4f70-aa1c-f941a3af0f6c.xsl"
            },
            "owner": {
                "id": "a03ed1af-fc82-4e2d-9bde-887c2cb157b4",
                "name": "Lila Fadel",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-512b-4bd9-a72e-0a848a0afa2a",
                    "name": "Indie",
                    "tracks": 633888
                },
                {
                    "id": "a03ed1ae-588b-4bd5-a459-741efc7c5d31",
                    "name": "New Age",
                    "tracks": 358498
                }
            ],
            "analytics": {
                "playbacks": 11,
                "likes": 0,
                "comments": 13,
                "shares": 6
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1c7-362b-4141-8617-47c85ccb28dc",
            "name": "Christop Howell",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1d1-cb64-44d2-b064-ff49f8e88df2",
            "name": "Arvilla Hills",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1ed-160b-4643-bb8d-4f657ff29162",
            "title": "Aliquid odit mollitia odio voluptatibus aut ratione.",
            "media_asset": {
                "id": "a03ed1ed-0abe-4b50-b51f-5c9bb9f5473d",
                "url": "http://localhost:8083/v1/media-assets/a03ed1ed-0abe-4b50-b51f-5c9bb9f5473d.hal"
            },
            "owner": {
                "id": "a03ed1b9-cbcb-4a14-a64d-52736c8954ad",
                "name": "Prof. Paula Emard I",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-512b-4bd9-a72e-0a848a0afa2a",
                    "name": "Indie",
                    "tracks": 633888
                }
            ],
            "analytics": {
                "playbacks": 4,
                "likes": 0,
                "comments": 12,
                "shares": 12
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1af-e5ed-4895-ac36-0579f5b35c13",
            "name": "Linwood Kunze",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1f6-8f95-4c71-95c4-e2a6a4ca9bb7",
            "name": "Magnam",
            "description": null,
            "is_liked": 0,
            "entity": "album"
        },
        {
            "id": "a03ed1d3-dbde-4bd1-9958-723d329c5a04",
            "title": "Accusamus quod cupiditate non ipsa.",
            "media_asset": {
                "id": "a03ed1d3-cacf-49a7-a832-561c3d0c0dd0",
                "url": "http://localhost:8083/v1/media-assets/a03ed1d3-cacf-49a7-a832-561c3d0c0dd0.pptx"
            },
            "owner": {
                "id": "a03ed1af-e241-4e2c-9133-a71975aa0027",
                "name": "Dr. Bertha Gorczany I",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-5919-4022-bc9f-37b10aa1a291",
                    "name": "Opera",
                    "tracks": 753094
                }
            ],
            "analytics": {
                "playbacks": 7,
                "likes": 0,
                "comments": 1,
                "shares": 0
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1d1-e43c-43a6-bac2-e77b326dbd6b",
            "name": "Myah Lang PhD",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1dd-24d7-49a2-9856-1e0d73909352",
            "title": "Ut quo quibusdam est dolore quam dolorem officiis.",
            "media_asset": {
                "id": "a03ed1dc-fd0b-4cb4-a21f-accc585c03ba",
                "url": "http://localhost:8083/v1/media-assets/a03ed1dc-fd0b-4cb4-a21f-accc585c03ba.uvs"
            },
            "owner": {
                "id": "a03ed1b0-22a5-4621-bb3d-3dc9dbeeb9f6",
                "name": "Mellie Schinner",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-5a55-4dcf-95d1-7e9023cc6797",
                    "name": "Post-Disco",
                    "tracks": 608971
                }
            ],
            "analytics": {
                "playbacks": 10,
                "likes": 0,
                "comments": 1,
                "shares": 6
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1d5-f325-4e27-93e4-e58e9cd55809",
            "name": "Hudson Parisian Sr.",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1ca-a0a1-425e-9566-ae47cda14047",
            "title": "In suscipit exercitationem et earum temporibus ratione.",
            "media_asset": {
                "id": "a03ed1ca-86a2-4775-bc0e-d47a2ad541e4",
                "url": "http://localhost:8083/v1/media-assets/a03ed1ca-86a2-4775-bc0e-d47a2ad541e4.aif"
            },
            "owner": {
                "id": "a03ed1af-8659-4b06-9e34-83e751a5f216",
                "name": "Lukas Kessler",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-421f-4a87-802c-b98ed3a7e25a",
                    "name": "Classical",
                    "tracks": 639582
                },
                {
                    "id": "a03ed1ae-56b3-48ca-8737-d4586f9cfcd0",
                    "name": "Kayokyoku",
                    "tracks": 958435
                }
            ],
            "analytics": {
                "playbacks": 15,
                "likes": 0,
                "comments": 8,
                "shares": 5
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1e1-d409-4f86-940e-52813d2f8b46",
            "title": "Dolore officia quae beatae rem sit est.",
            "media_asset": {
                "id": "a03ed1e1-acf3-4f0d-95bb-e68e2a956e06",
                "url": "http://localhost:8083/v1/media-assets/a03ed1e1-acf3-4f0d-95bb-e68e2a956e06.otc"
            },
            "owner": {
                "id": "a03ed1b0-421f-4008-aa27-6d0ce74f49ee",
                "name": "Donna Rodriguez",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-4666-4ab1-9f85-9706fd6b8922",
                    "name": "Country",
                    "tracks": 362657
                },
                {
                    "id": "a03ed1ae-588b-4bd5-a459-741efc7c5d31",
                    "name": "New Age",
                    "tracks": 358498
                },
                {
                    "id": "a03ed1ae-5b8d-48a7-b4bb-b5d63b39c415",
                    "name": "R&B",
                    "tracks": 953452
                }
            ],
            "analytics": {
                "playbacks": 10,
                "likes": 0,
                "comments": 8,
                "shares": 3
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1e8-9755-4be1-9006-95dc3a8578dc",
            "title": "Labore et reiciendis error voluptas est sed.",
            "media_asset": {
                "id": "a03ed1e8-8dc8-416a-915f-a69dc84ec777",
                "url": "http://localhost:8083/v1/media-assets/a03ed1e8-8dc8-416a-915f-a69dc84ec777.yang"
            },
            "owner": {
                "id": "a03ed1b9-7b9c-405c-ba92-0b1b306670ff",
                "name": "Prof. Eliseo Schaefer",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-4d04-4c82-80c0-c9ed57677dba",
                    "name": "Electronic",
                    "tracks": 369562
                },
                {
                    "id": "a03ed1ae-5b8d-48a7-b4bb-b5d63b39c415",
                    "name": "R&B",
                    "tracks": 953452
                }
            ],
            "analytics": {
                "playbacks": 5,
                "likes": 0,
                "comments": 15,
                "shares": 11
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1c6-e05e-42b7-8c93-99aa22aa89a4",
            "title": "Dolor neque accusamus ducimus molestias ut dolorem inventore.",
            "media_asset": {
                "id": "a03ed1c6-c430-4f73-b665-871ec5396698",
                "url": "http://localhost:8083/v1/media-assets/a03ed1c6-c430-4f73-b665-871ec5396698.uvh"
            },
            "owner": {
                "id": "a03ed1af-6359-4d10-9570-d35aa6c10672",
                "name": "Prof. Tyra Blanda II",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-5ae4-48aa-b285-bc84738f8abb",
                    "name": "Progressive",
                    "tracks": 137860
                }
            ],
            "analytics": {
                "playbacks": 3,
                "likes": 0,
                "comments": 7,
                "shares": 15
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1cf-bca3-48d8-aed8-bcf4c1d6a54d",
            "name": "Darrick Hegmann",
            "avatar_url": null,
            "entity": "user"
        },
        {
            "id": "a03ed1f6-894e-44eb-b74a-227598e2f5d6",
            "name": "Suscipit",
            "description": null,
            "is_liked": 0,
            "entity": "album"
        },
        {
            "id": "a03ed1f6-6eb1-4d54-9832-046d7d0f5c69",
            "name": "Nobis",
            "description": null,
            "is_liked": 0,
            "entity": "album"
        },
        {
            "id": "a03ed1c0-6e3f-4d82-bbcf-f8c5284adc25",
            "title": "Maxime iure quisquam molestias nesciunt.",
            "media_asset": {
                "id": "a03ed1c0-53f6-485c-b894-b8ed6e63513f",
                "url": "http://localhost:8083/v1/media-assets/a03ed1c0-53f6-485c-b894-b8ed6e63513f.scurl"
            },
            "owner": {
                "id": "a03ed1af-33c6-4dbf-a778-e632b566624d",
                "name": "Barry Medhurst",
                "avatar_url": null
            },
            "genres": [
                {
                    "id": "a03ed1ae-5590-4bd6-b984-6573c91056d1",
                    "name": "K-Pop",
                    "tracks": 966847
                }
            ],
            "analytics": {
                "playbacks": 8,
                "likes": 0,
                "comments": 1,
                "shares": 3
            },
            "is_liked": 0,
            "entity": "track"
        },
        {
            "id": "a03ed1ca-0ee0-4c0e-8f2b-19cf7f7ddf6c",
            "name": "Mr. Pablo Nolan IV",
            "avatar_url": null,
            "entity": "user"
        }
    ]
}
 

Request      

POST v1/search/{term}

Headers

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

URL Parameters

term   string   

Example: expedita

User Settings

List

requires authentication

Endpoint for all the user settings

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/me/settings" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=Bhjctvkwff4hOlV0uYuhAxsVWkf7b1T1eC9S2AJm; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "profile": null,
        "contact": null,
        "social": null,
        "notifications": null,
        "system": null
    }
}
 

Request      

GET v1/users/me/settings

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Profile

Show

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/me/settings/profile" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/profile"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/profile';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=qopx6cQcNnULOPqJ0IGAQO2Zxs2Q3zVW0EJm1tVN; expires=Fri, 28 Nov 2025 16:53:37 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "id": "00000000-df85-4307-a069-68612c4471e3",
        "name": "Joe Shmoe",
        "email": "admin@qplet.ru",
        "is_subscribed": false,
        "analytics": {
            "tracks": 22,
            "albums": 2,
            "subscribers": 177
        }
    }
}
 

Request      

GET v1/users/me/settings/profile

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Update

requires authentication

Example request:
curl --request PUT \
    "https://api.qplet.dev/v1/users/me/settings/profile" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"name\": \"Joe Shmoe\",
    \"password\": \"Ye4oKoEa3Ro9ll\",
    \"password_repeat\": \"Ye4oKoEa3Ro9ll\",
    \"profile\": {
        \"gender\": \"male\",
        \"nickname\": \"joe_shmoe\",
        \"website\": \"https:\\/\\/qplet.ru\",
        \"about\": \"I`m Joe Shmoe\\n\\n I love singing and dancing.\",
        \"avatar_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
        \"cover_id\": \"00000000-422e-41ff-a266-2b0a093307e6\",
        \"birthdate\": \"2000-01-01\"
    }
}"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/profile"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "name": "Joe Shmoe",
    "password": "Ye4oKoEa3Ro9ll",
    "password_repeat": "Ye4oKoEa3Ro9ll",
    "profile": {
        "gender": "male",
        "nickname": "joe_shmoe",
        "website": "https:\/\/qplet.ru",
        "about": "I`m Joe Shmoe\n\n I love singing and dancing.",
        "avatar_id": "00000000-422e-41ff-a266-2b0a093307e6",
        "cover_id": "00000000-422e-41ff-a266-2b0a093307e6",
        "birthdate": "2000-01-01"
    }
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/profile';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'name' => 'Joe Shmoe',
            'password' => 'Ye4oKoEa3Ro9ll',
            'password_repeat' => 'Ye4oKoEa3Ro9ll',
            'profile' => [
                'gender' => 'male',
                'nickname' => 'joe_shmoe',
                'website' => 'https://qplet.ru',
                'about' => 'I`m Joe Shmoe'."\n"
                    ."\n"
                    .' I love singing and dancing.',
                'avatar_id' => '00000000-422e-41ff-a266-2b0a093307e6',
                'cover_id' => '00000000-422e-41ff-a266-2b0a093307e6',
                'birthdate' => '2000-01-01',
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Example response (500):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=wuC6miweGj8gROpZC9OvZahnYSuBKxVPiSKOU4ni; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "message": "Server Error"
}
 

Request      

PUT v1/users/me/settings/profile

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

name   string  optional  

Must be a full name of the user. Example: Joe Shmoe

password   string  optional  

Must be at least 8 characters. Example: Ye4oKoEa3Ro9ll

password_repeat   string  optional  

The password_repeat and password must match. This field is required when password is present. The value and password must match. Example: Ye4oKoEa3Ro9ll

profile   object  optional  
gender   string  optional  

Example: male

Must be one of:
  • male
  • female
nickname   string  optional  

Must be unique. Must match the regex /^[A-Za-z0-9_-]+$/. Must be between 6 and 20 characters. Example: joe_shmoe

website   string  optional  

Fully qualified URL. Must be a valid URL. Example: https://qplet.ru

about   string  optional  

Freeform multiline input. Example: Im Joe Shmoe

I love singing and dancing.`

avatar_id   string  optional  

MediaAssets ID that belongs to the user. Example: 00000000-422e-41ff-a266-2b0a093307e6

cover_id   string  optional  

MediaAssets ID that belongs to the user. Example: 00000000-422e-41ff-a266-2b0a093307e6

birthdate   string  optional  

Must be a valid date in the format Y-m-d. Example: 2000-01-01

Contact

Show

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/me/settings/contact" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/contact"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/contact';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=87nvw5ID8V9m1IuV6YQ1GIuTWhfgr326tZUgPbXA; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "country": {
            "id": null,
            "name": null
        }
    }
}
 

Request      

GET v1/users/me/settings/contact

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Update

requires authentication

Example request:
curl --request PUT \
    "https://api.qplet.dev/v1/users/me/settings/contact" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"email\": \"another.joe@example.com\",
    \"phone\": \"+7911 123456\",
    \"country_id\": \"ru\",
    \"city\": \"Moscow\",
    \"zipcode\": \"101000\",
    \"address\": \"Leninstreet 18\",
    \"address_additional\": \"ut\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/contact"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "email": "another.joe@example.com",
    "phone": "+7911 123456",
    "country_id": "ru",
    "city": "Moscow",
    "zipcode": "101000",
    "address": "Leninstreet 18",
    "address_additional": "ut"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/contact';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'email' => 'another.joe@example.com',
            'phone' => '+7911 123456',
            'country_id' => 'ru',
            'city' => 'Moscow',
            'zipcode' => '101000',
            'address' => 'Leninstreet 18',
            'address_additional' => 'ut',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=Aqpi5kbk12r3WESA1swttb3Unqw7iLcN6gLRHka7; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "phone": "+7911 123456",
        "country": {
            "id": "ru",
            "name": "Russian Federation"
        },
        "city": "Moscow",
        "zipcode": "101000",
        "address": "Leninstreet 18",
        "address_additional": "ut"
    }
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PUT v1/users/me/settings/contact

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

email   string  optional  

Must be a valid email address. Example: another.joe@example.com

phone   string  optional  

Example: +7911 123456

country_id   string  optional  

Example: ru

city   string  optional  

Example: Moscow

zipcode   string  optional  

Example: 101000

address   string  optional  

Example: Leninstreet 18

address_additional   string  optional  

Example: ut

Social

Show

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/me/settings/social" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/social"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/social';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=60BCEirrlPCbP68lJfcWntbp8Y4EoTBAYxLH1kEr; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "facebook_com": null,
        "instagram_com": null,
        "youtube_com": null,
        "twitter_com": null,
        "tiktok_com": null,
        "vk_ru": null,
        "ok_ru": null,
        "discord_com": null,
        "snapchat_com": null,
        "telegram_org": null,
        "whatsapp_com": null,
        "viber_com": null,
        "skype_com": null,
        "pinterest_com": null
    }
}
 

Request      

GET v1/users/me/settings/social

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Update

requires authentication

Example request:
curl --request PUT \
    "https://api.qplet.dev/v1/users/me/settings/social" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"facebook_com\": \"facebook_com\",
    \"instagram_com\": \"instagram_com\",
    \"youtube_com\": \"youtube_com\",
    \"twitter_com\": \"twitter_com\",
    \"tiktok_com\": \"tiktok_com\",
    \"vk_ru\": \"vk_ru\",
    \"ok_ru\": \"ok_ru\",
    \"discord_com\": \"discord_com\",
    \"snapchat_com\": \"snapchat_com\",
    \"telegram_org\": \"telegram_org\",
    \"whatsapp_com\": \"whatsapp_com\",
    \"viber_com\": \"viber_com\",
    \"skype_com\": \"skype_com\",
    \"pinterest_com\": \"pinterest_com\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/social"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "facebook_com": "facebook_com",
    "instagram_com": "instagram_com",
    "youtube_com": "youtube_com",
    "twitter_com": "twitter_com",
    "tiktok_com": "tiktok_com",
    "vk_ru": "vk_ru",
    "ok_ru": "ok_ru",
    "discord_com": "discord_com",
    "snapchat_com": "snapchat_com",
    "telegram_org": "telegram_org",
    "whatsapp_com": "whatsapp_com",
    "viber_com": "viber_com",
    "skype_com": "skype_com",
    "pinterest_com": "pinterest_com"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/social';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'facebook_com' => 'facebook_com',
            'instagram_com' => 'instagram_com',
            'youtube_com' => 'youtube_com',
            'twitter_com' => 'twitter_com',
            'tiktok_com' => 'tiktok_com',
            'vk_ru' => 'vk_ru',
            'ok_ru' => 'ok_ru',
            'discord_com' => 'discord_com',
            'snapchat_com' => 'snapchat_com',
            'telegram_org' => 'telegram_org',
            'whatsapp_com' => 'whatsapp_com',
            'viber_com' => 'viber_com',
            'skype_com' => 'skype_com',
            'pinterest_com' => 'pinterest_com',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=EGm9SktVCb1yYV5MzEmcPjN2e0tfbYFX97ajFiB0; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "facebook_com": "facebook_com",
        "instagram_com": "instagram_com",
        "youtube_com": "youtube_com",
        "twitter_com": "twitter_com",
        "tiktok_com": "tiktok_com",
        "vk_ru": "vk_ru",
        "ok_ru": "ok_ru",
        "discord_com": "discord_com",
        "snapchat_com": "snapchat_com",
        "telegram_org": "telegram_org",
        "whatsapp_com": "whatsapp_com",
        "viber_com": "viber_com",
        "skype_com": "skype_com",
        "pinterest_com": "pinterest_com"
    }
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PUT v1/users/me/settings/social

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

facebook_com   string  optional  

Example: facebook_com

instagram_com   string  optional  

Example: instagram_com

youtube_com   string  optional  

Example: youtube_com

twitter_com   string  optional  

Example: twitter_com

tiktok_com   string  optional  

Example: tiktok_com

vk_ru   string  optional  

Example: vk_ru

ok_ru   string  optional  

Example: ok_ru

discord_com   string  optional  

Example: discord_com

snapchat_com   string  optional  

Example: snapchat_com

telegram_org   string  optional  

Example: telegram_org

whatsapp_com   string  optional  

Example: whatsapp_com

viber_com   string  optional  

Example: viber_com

skype_com   string  optional  

Example: skype_com

pinterest_com   string  optional  

Example: pinterest_com

System

Show

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/me/settings/system" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/system"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/system';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=WohIasOkS6BKb6FsacxcnntuB4KTbnQhyZM39wVr; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "language": null,
        "first_screen": null
    }
}
 

Request      

GET v1/users/me/settings/system

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Update

requires authentication

Example request:
curl --request PUT \
    "https://api.qplet.dev/v1/users/me/settings/system" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"language\": \"ru\",
    \"first_screen\": \"wall\"
}"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/system"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "language": "ru",
    "first_screen": "wall"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/system';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'language' => 'ru',
            'first_screen' => 'wall',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=NC4vrWKUP5EMllCrIKLomdGtkf0ug1LTJP5kZy8I; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "language": "ru",
        "first_screen": "wall"
    }
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PUT v1/users/me/settings/system

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

language   string   

Example: ru

Must be one of:
  • ru
  • en
first_screen   string   

Example: wall

Must be one of:
  • wall
  • profile
  • player
  • albums

Notifications

Show

requires authentication

Example request:
curl --request GET \
    --get "https://api.qplet.dev/v1/users/me/settings/notifications" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/notifications"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/notifications';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=nHXSWLGFOUww9WTyDukoYPPwgvkLvk4ecDtPpto9; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "sound": null,
        "profile": {
            "view": null,
            "subscription": null,
            "subscribers": null
        },
        "event": {
            "new": null,
            "like": null,
            "view": null,
            "subscription": null,
            "comment": null,
            "updated": null
        },
        "post": {
            "new": null,
            "like": null,
            "share": null,
            "comment": null
        },
        "track": {
            "new": null,
            "like": null,
            "comment": null
        },
        "album": {
            "new": null,
            "like": null,
            "comment": null
        },
        "message": {
            "new": null
        }
    }
}
 

Request      

GET v1/users/me/settings/notifications

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Update

requires authentication

Example request:
curl --request PUT \
    "https://api.qplet.dev/v1/users/me/settings/notifications" \
    --header "Authorization: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --header "Accept-Language: en-US" \
    --data "{
    \"sound\": true,
    \"profile\": {
        \"view\": true,
        \"subscription\": true,
        \"subscribers\": true
    },
    \"event\": {
        \"new\": true,
        \"like\": true,
        \"view\": true,
        \"subscription\": true,
        \"comment\": true,
        \"updated\": true
    },
    \"post\": {
        \"new\": true,
        \"like\": true,
        \"share\": true,
        \"comment\": true
    },
    \"track\": {
        \"new\": true,
        \"like\": true,
        \"comment\": true
    },
    \"album\": {
        \"new\": true,
        \"like\": true,
        \"comment\": true
    },
    \"message\": {
        \"new\": true
    }
}"
const url = new URL(
    "https://api.qplet.dev/v1/users/me/settings/notifications"
);

const headers = {
    "Authorization": "Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty",
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Accept-Language": "en-US",
};

let body = {
    "sound": true,
    "profile": {
        "view": true,
        "subscription": true,
        "subscribers": true
    },
    "event": {
        "new": true,
        "like": true,
        "view": true,
        "subscription": true,
        "comment": true,
        "updated": true
    },
    "post": {
        "new": true,
        "like": true,
        "share": true,
        "comment": true
    },
    "track": {
        "new": true,
        "like": true,
        "comment": true
    },
    "album": {
        "new": true,
        "like": true,
        "comment": true
    },
    "message": {
        "new": true
    }
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());
$client = new \GuzzleHttp\Client();
$url = 'https://api.qplet.dev/v1/users/me/settings/notifications';
$response = $client->put(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty',
            'Content-Type' => 'application/json',
            'Accept' => 'application/json',
            'Accept-Language' => 'en-US',
        ],
        'json' => [
            'sound' => true,
            'profile' => [
                'view' => true,
                'subscription' => true,
                'subscribers' => true,
            ],
            'event' => [
                'new' => true,
                'like' => true,
                'view' => true,
                'subscription' => true,
                'comment' => true,
                'updated' => true,
            ],
            'post' => [
                'new' => true,
                'like' => true,
                'share' => true,
                'comment' => true,
            ],
            'track' => [
                'new' => true,
                'like' => true,
                'comment' => true,
            ],
            'album' => [
                'new' => true,
                'like' => true,
                'comment' => true,
            ],
            'message' => [
                'new' => true,
            ],
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));

Example response (201):

Show headers
cache-control: no-cache, private
content-type: application/json
api-version: 20230101-000000
access-control-allow-origin: *
set-cookie: qplet_core_service_session=la4A0R72IfhdEY8pN6CdHNsFmNLRVJU4QtD5hD4P; expires=Fri, 28 Nov 2025 16:53:38 GMT; Max-Age=7200; path=/; httponly; samesite=lax
 

{
    "data": {
        "sound": true,
        "profile": {
            "view": true,
            "subscription": true,
            "subscribers": true
        },
        "event": {
            "new": true,
            "like": true,
            "view": true,
            "subscription": true,
            "comment": true,
            "updated": true
        },
        "post": {
            "new": true,
            "like": true,
            "share": true,
            "comment": true
        },
        "track": {
            "new": true,
            "like": true,
            "comment": true
        },
        "album": {
            "new": true,
            "like": true,
            "comment": true
        },
        "message": {
            "new": true
        }
    }
}
 

Example response (403):


{
    "message": "This action is unauthorized."
}
 

Example response (422):


{
    "message": "Validation Exception"
}
 

Request      

PUT v1/users/me/settings/notifications

Headers

Authorization      

Example: Bearer 3|lnvo4g0zUDVYTM6tqvVwUxP3jrt8ci8Nv8zpAbty

Content-Type      

Example: application/json

Accept      

Example: application/json

Accept-Language      

Example: en-US

Body Parameters

sound   boolean   

Example: true

profile   object   

Example: 1

view   boolean   

Example: true

subscription   boolean   

Example: true

subscribers   boolean   

Example: true

event   object   

Example: 1

new   boolean   

Example: true

like   boolean   

Example: true

view   boolean   

Example: true

subscription   boolean   

Example: true

comment   boolean   

Example: true

updated   boolean   

Example: true

post   object   

Example: 1

new   boolean   

Example: true

like   boolean   

Example: true

share   boolean   

Example: true

comment   boolean   

Example: true

track   object   

Example: 1

new   boolean   

Example: true

like   boolean   

Example: true

comment   boolean   

Example: true

album   object   

Example: 1

new   boolean   

Example: true

like   boolean   

Example: true

comment   boolean   

Example: true

message   object  optional  
new   boolean   

Example: true