MENU navbar-image

Introduction

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

<aside>As you scroll, you'll see code examples for working with the API in different programming languages in the dark area to the right (or as part of the content on mobile).
You can switch the language used with the tabs at the top right (or from the nav menu at the top left on mobile).</aside>

Authenticating requests

To authenticate requests, include an Authorization header with the value "Bearer {YOUR_BEARER_TOKEN}".

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

Get a bearer token from the POST /v1/auth/login endpoint.

Authentication

Token Authentication

Register

Create a new account and issue a Sanctum bearer token.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/auth/register" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Jane Doe\",
    \"email\": \"[email protected]\",
    \"password\": \"password123\",
    \"device_name\": \"ios-app\",
    \"profile\": {
        \"handle\": \"jane_doe\",
        \"display_name\": \"Jane Doe\",
        \"bio\": \"architecto\",
        \"avatar_url\": \"http:\\/\\/www.bailey.biz\\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html\"
    },
    \"referral_code\": \"AbCdEfGhIjKlMnOpQrStUv\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/register"
);

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

let body = {
    "name": "Jane Doe",
    "email": "[email protected]",
    "password": "password123",
    "device_name": "ios-app",
    "profile": {
        "handle": "jane_doe",
        "display_name": "Jane Doe",
        "bio": "architecto",
        "avatar_url": "http:\/\/www.bailey.biz\/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html"
    },
    "referral_code": "AbCdEfGhIjKlMnOpQrStUv"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Registration succeeded.):


{
    "data": {
        "id": "",
        "type": "users",
        "attributes": {
            "name": "Mittie Considine",
            "email": "[email protected]",
            "email_verified_at": "2026-07-06T10:01:48+00:00",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    },
    "meta": {
        "token": "1|example-token",
        "token_type": "Bearer",
        "expires_at": null
    }
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid.",
    "errors": {
        "email": [
            "The email has already been taken."
        ]
    }
}
 

Request      

POST v1/auth/register

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Display name for the account. Example: Jane Doe

email   string     

Unique email address for login. Example: [email protected]

password   string     

Account password. Example: password123

device_name   string  optional    

Client device label for token tracking. Example: ios-app

profile   object     

Initial profile attributes.

handle   string     

Unique initial profile handle. Example: jane_doe

display_name   string  optional    

Initial profile display name. Example: Jane Doe

bio   string  optional    

Initial profile biography. Example: architecto

avatar_url   string  optional    

Initial profile avatar URL. Example: http://www.bailey.biz/quos-velit-et-fugiat-sunt-nihil-accusantium-harum.html

referral_code   string  optional    

Profile referral code. Required when referral-only signup is enabled. Example: AbCdEfGhIjKlMnOpQrStUv

Login

Authenticate a user and issue a Sanctum bearer token.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/auth/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\",
    \"password\": \"password123\",
    \"device_name\": \"ios-app\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/login"
);

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

let body = {
    "email": "[email protected]",
    "password": "password123",
    "device_name": "ios-app"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Login succeeded.):


{
    "data": {
        "id": "",
        "type": "users",
        "attributes": {
            "name": "Viva Marquardt",
            "email": "[email protected]",
            "email_verified_at": "2026-07-06T10:01:48+00:00",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    },
    "meta": {
        "token": "1|example-token",
        "token_type": "Bearer",
        "expires_at": null
    }
}
 

Example response (422, Credentials were invalid.):


{
    "message": "The given data was invalid.",
    "errors": {
        "email": [
            "The provided credentials are incorrect."
        ]
    }
}
 

Request      

POST v1/auth/login

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

User email address. Example: [email protected]

password   string     

User password. Example: password123

device_name   string     

Client device label for token tracking. Example: ios-app

Get Current User

requires authentication

Return the authenticated user for the current bearer token.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/auth/me" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/me"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Authenticated user profile.):


{
    "data": {
        "id": "",
        "type": "users",
        "attributes": {
            "name": "Morgan Hirthe",
            "email": "[email protected]",
            "email_verified_at": "2026-07-06T10:01:48+00:00",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Request      

GET v1/auth/me

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Logout

requires authentication

Revoke the current Sanctum token.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/auth/logout" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/logout"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (204, Token revoked.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Request      

POST v1/auth/logout

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

List Tokens

requires authentication

List personal access tokens for the authenticated user.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/auth/tokens" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/tokens"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Token list payload.):


{
    "data": [
        {
            "id": "1",
            "type": "personal-access-tokens",
            "attributes": {
                "name": "ios-app",
                "abilities": [
                    "auth:me",
                    "auth:logout"
                ],
                "last_used_at": null,
                "expires_at": "2026-02-24T12:00:00+00:00",
                "created_at": "2026-02-23T12:00:00+00:00",
                "updated_at": "2026-02-23T12:00:00+00:00",
                "is_current": true
            }
        }
    ]
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/auth/tokens

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Revoke All Tokens

requires authentication

Revoke all personal access tokens for the authenticated user.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/auth/tokens" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/tokens"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, All tokens revoked.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing required ability.):


{
    "message": "Forbidden."
}
 

Request      

DELETE v1/auth/tokens

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Revoke Token

requires authentication

Revoke one personal access token owned by the authenticated user.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/auth/tokens/42" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/tokens/42"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Token revoked.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Token does not belong to current user or no longer exists.):


{
    "message": "Token not found."
}
 

Request      

DELETE v1/auth/tokens/{token_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

token_id   integer     

Personal access token id. Example: 42

Registration

Registration Policy

Return the current referral requirement for registration.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/auth/registration-policy" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/registration-policy"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Registration policy.):


{
    "referral_required": false
}
 

Request      

GET v1/auth/registration-policy

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Password Reset

Request Password Reset

Send a password reset link to the provided email if an account exists.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/auth/password/forgot" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"[email protected]\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/password/forgot"
);

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

let body = {
    "email": "[email protected]"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Password reset request accepted.):


{
    "message": "If the account exists, a password reset link has been sent."
}
 

Request      

POST v1/auth/password/forgot

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

Account email address. Example: [email protected]

Reset Password

Reset the user password using a valid reset token.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/auth/password/reset" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"token\": \"reset-token-value\",
    \"email\": \"[email protected]\",
    \"password\": \"new-password123\",
    \"password_confirmation\": \"new-password123\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/password/reset"
);

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

let body = {
    "token": "reset-token-value",
    "email": "[email protected]",
    "password": "new-password123",
    "password_confirmation": "new-password123"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Password reset succeeded.):


{
    "message": "Your password has been reset."
}
 

Example response (422, Reset token or payload was invalid.):


{
    "message": "The given data was invalid.",
    "errors": {
        "email": [
            "This password reset token is invalid."
        ]
    }
}
 

Request      

POST v1/auth/password/reset

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

token   string     

Password reset token. Example: reset-token-value

email   string     

Account email associated with token. Example: [email protected]

password   string     

New account password. Example: new-password123

password_confirmation   string     

Must match password. Example: new-password123

Read Reset Token Payload

Return reset token and email payload for API clients handling email reset links.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/auth/password/reset/reset-token-value?email=jane%40example.com" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/password/reset/reset-token-value"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Reset payload data.):


{
    "token": "reset-token-value",
    "email": "[email protected]"
}
 

Request      

GET v1/auth/password/reset/{token}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

token   string     

Password reset token from reset link. Example: reset-token-value

Query Parameters

email   string  optional    

Account email from the reset link. Example: [email protected]

Email Verification

Verify Email

Verify a user email using the signed verification link parameters.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/auth/email/verify/01HZX3W3T4J8Q57XNZD5BPHJ92/8c4f4370e5db9b5be6d0f4c95495f49f998fa32a" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/email/verify/01HZX3W3T4J8Q57XNZD5BPHJ92/8c4f4370e5db9b5be6d0f4c95495f49f998fa32a"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Email was verified.):


{
    "message": "Email verified successfully."
}
 

Example response (403, Signed URL was invalid, expired, or mismatched.):


{
    "message": "Invalid verification link."
}
 

Request      

GET v1/auth/email/verify/{id}/{hash}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

User ULID from the signed verification link. Example: 01HZX3W3T4J8Q57XNZD5BPHJ92

hash   string     

SHA-1 hash of the email from the signed verification link. Example: 8c4f4370e5db9b5be6d0f4c95495f49f998fa32a

Send Verification Email

requires authentication

Send (or resend) an email verification link to the authenticated user.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/auth/email/verification-notification" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/auth/email/verification-notification"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Verification email queued/sent.):


{
    "message": "Verification link sent."
}
 

Example response (200, User already verified.):


{
    "message": "Email is already verified."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Request      

POST v1/auth/email/verification-notification

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Categories

List Categories

List categories ordered for client-side hierarchy rendering.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/categories" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/categories"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Category list.):


{
    "data": [
        {
            "id": "",
            "type": "categories",
            "attributes": {
                "name": "Eius Et",
                "slug": "eius-et",
                "parent_id": null,
                "path": "eius-et",
                "category_level": 1,
                "is_last": true
            }
        },
        {
            "id": "",
            "type": "categories",
            "attributes": {
                "name": "Animi Quos",
                "slug": "animi-quos",
                "parent_id": null,
                "path": "animi-quos",
                "category_level": 1,
                "is_last": true
            }
        }
    ]
}
 

Request      

GET v1/categories

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Collections

List Collections

List collections with filtering, sorting, pagination, and optional relationship includes.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/collections?filter%5Bsearch%5D=summer&filter%5Bslug%5D=summer-picks&filter%5Bowner_profile_id%5D=01ktwg1fhzq1dpagvermfbjzad&filter%5Bshared_with_profile_id%5D=01ktwg1fhzq1dpagvermfbjzad&filter%5Bitem_id%5D=01ktwg1fhzq1dpagvermfbjzad&filter%5Bshop_id%5D=01ktwg1fhzq1dpagvermfbjzad&filter%5Bvisibility%5D=Public&filter%5Bcontents%5D=items%2Cshops&filter%5Bmin_entries%5D=1&filter%5Bmax_entries%5D=10&sort=-created_at&per_page=20&include=ownerProfile%2CsharedWithProfiles%2Citems%2Cshops" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/collections"
);

const params = {
    "filter[search]": "summer",
    "filter[slug]": "summer-picks",
    "filter[owner_profile_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "filter[shared_with_profile_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "filter[item_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "filter[shop_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "filter[visibility]": "Public",
    "filter[contents]": "items,shops",
    "filter[min_entries]": "1",
    "filter[max_entries]": "10",
    "sort": "-created_at",
    "per_page": "20",
    "include": "ownerProfile,sharedWithProfiles,items,shops",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated collection list.):


{
    "data": [
        {
            "id": "",
            "type": "collections",
            "attributes": {
                "name": "Dolorem Mollitia Deleniti",
                "slug": "dolorem-mollitia-deleniti",
                "description": "Odit quia officia est dignissimos neque blanditiis odio.",
                "visibility": "Only me",
                "items_count": 0,
                "shops_count": 0,
                "preview_image_urls": [],
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            }
        },
        {
            "id": "",
            "type": "collections",
            "attributes": {
                "name": "Modi Rerum Ex",
                "slug": "modi-rerum-ex",
                "description": "Assumenda et tenetur ab reiciendis quia.",
                "visibility": "Only me",
                "items_count": 0,
                "shops_count": 0,
                "preview_image_urls": [],
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/collections

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

filter[search]   string  optional    

Search by name, slug, or description. Example: summer

filter[slug]   string  optional    

Filter by exact collection slug. Example: summer-picks

filter[owner_profile_id]   string  optional    

Filter collections owned by this profile ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

filter[shared_with_profile_id]   string  optional    

Filter collections shared with this profile ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

filter[item_id]   string  optional    

Filter collections containing this item ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

filter[shop_id]   string  optional    

Filter collections containing this shop ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

filter[visibility]   string  optional    

Filter by collection visibility. Example: Public

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public
filter[contents]   string  optional    

Comma-separated contents to match with OR semantics. Example: items,shops

filter[min_entries]   integer  optional    

Minimum combined item and shop entries. Example: 1

filter[max_entries]   integer  optional    

Maximum combined item and shop entries. Example: 10

sort   string  optional    

Sort column. Prefix with - for descending. Example: -created_at

Must be one of:
  • name
  • -name
  • popularity
  • -popularity
  • created_at
  • -created_at
  • updated_at
  • -updated_at
per_page   integer  optional    

Number of collections per page (1-100). Example: 20

include   string  optional    

Comma-separated relationships to include: ownerProfile, sharedWithProfiles, items, shops. Example: ownerProfile,sharedWithProfiles,items,shops

Show Collection

Fetch a single collection by ULID.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/collections/architecto?include=ownerProfile%2Citems%2Cshops" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/collections/architecto"
);

const params = {
    "include": "ownerProfile,items,shops",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Collection details.):


{
    "data": {
        "id": "",
        "type": "collections",
        "attributes": {
            "name": "Quos Velit Et",
            "slug": "quos-velit-et",
            "description": "Sunt nihil accusantium harum mollitia.",
            "visibility": "Only me",
            "items_count": 0,
            "shops_count": 0,
            "preview_image_urls": [],
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (404, Collection could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/collections/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the collection. Example: architecto

collection   string     

The ULID of the collection. Example: 01ktwg1fhzq1dpagvermfbjzad

Query Parameters

include   string  optional    

Comma-separated relationships to include: ownerProfile, sharedWithProfiles, items, shops. Example: ownerProfile,items,shops

Create Collection

requires authentication

Create a collection and optionally attach items and shops to it.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/collections" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Summer Picks\",
    \"slug\": \"summer-picks\",
    \"description\": \"Curated summer shops and items.\",
    \"visibility\": \"Only me\",
    \"owner_profile_id\": \"01ktwg1fhzq1dpagvermfbjzad\",
    \"shared_with_profile_ids\": [
        \"01ktwg1fhzq1dpagvermfbjzad\"
    ],
    \"item_ids\": [
        \"01ktwg1fhzq1dpagvermfbjzad\"
    ],
    \"shop_ids\": [
        \"01ktwg1fhzq1dpagvermfbjzad\"
    ]
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/collections"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Summer Picks",
    "slug": "summer-picks",
    "description": "Curated summer shops and items.",
    "visibility": "Only me",
    "owner_profile_id": "01ktwg1fhzq1dpagvermfbjzad",
    "shared_with_profile_ids": [
        "01ktwg1fhzq1dpagvermfbjzad"
    ],
    "item_ids": [
        "01ktwg1fhzq1dpagvermfbjzad"
    ],
    "shop_ids": [
        "01ktwg1fhzq1dpagvermfbjzad"
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Collection created.):


{
    "data": {
        "id": "",
        "type": "collections",
        "attributes": {
            "name": "Et Et Modi",
            "slug": "et-et-modi",
            "description": "Nostrum omnis autem et consequatur aut.",
            "visibility": "Only me",
            "items_count": 0,
            "shops_count": 0,
            "preview_image_urls": [],
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/collections

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Collection name. Example: Summer Picks

slug   string  optional    

URL slug. Generated from name when omitted. Example: summer-picks

description   string  optional    

Collection description. Example: Curated summer shops and items.

visibility   string  optional    

Collection visibility. Example: Only me

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public
owner_profile_id   string     

Profile ULID that owns the collection. Example: 01ktwg1fhzq1dpagvermfbjzad

shared_with_profile_ids   string[]  optional    

Profile ULIDs the collection is shared with.

item_ids   string[]  optional    

Item ULIDs to attach to the collection.

shop_ids   string[]  optional    

Shop ULIDs to attach to the collection.

Update Collection

requires authentication

Patch a collection by ULID and optionally replace its item and shop assignments.

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/collections/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Updated Summer Picks\",
    \"slug\": \"updated-summer-picks\",
    \"description\": \"Updated collection description.\",
    \"visibility\": \"Friends\",
    \"owner_profile_id\": \"01ktwg1fhzq1dpagvermfbjzad\",
    \"shared_with_profile_ids\": [
        \"01ktwg1fhzq1dpagvermfbjzad\"
    ],
    \"item_ids\": [
        \"01ktwg1fhzq1dpagvermfbjzad\"
    ],
    \"shop_ids\": [
        \"01ktwg1fhzq1dpagvermfbjzad\"
    ]
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/collections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Updated Summer Picks",
    "slug": "updated-summer-picks",
    "description": "Updated collection description.",
    "visibility": "Friends",
    "owner_profile_id": "01ktwg1fhzq1dpagvermfbjzad",
    "shared_with_profile_ids": [
        "01ktwg1fhzq1dpagvermfbjzad"
    ],
    "item_ids": [
        "01ktwg1fhzq1dpagvermfbjzad"
    ],
    "shop_ids": [
        "01ktwg1fhzq1dpagvermfbjzad"
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Collection updated.):


{
    "data": {
        "id": "",
        "type": "collections",
        "attributes": {
            "name": "Ipsum Nostrum Omnis",
            "slug": "ipsum-nostrum-omnis",
            "description": "Et consequatur aut dolores enim.",
            "visibility": "Only me",
            "items_count": 0,
            "shops_count": 0,
            "preview_image_urls": [],
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Collection could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

PATCH v1/collections/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the collection. Example: architecto

collection   string     

The ULID of the collection. Example: 01ktwg1fhzq1dpagvermfbjzad

Body Parameters

name   string  optional    

Collection name. Example: Updated Summer Picks

slug   string  optional    

New URL slug for the collection. Example: updated-summer-picks

description   string  optional    

Collection description. Example: Updated collection description.

visibility   string  optional    

Updated collection visibility. Example: Friends

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public
owner_profile_id   string  optional    

Updated owner profile ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

shared_with_profile_ids   string[]  optional    

Replacement profile ULIDs the collection is shared with.

item_ids   string[]  optional    

Replacement item ULIDs for the collection.

shop_ids   string[]  optional    

Replacement shop ULIDs for the collection.

Delete Collection

requires authentication

Delete a collection by ULID.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/collections/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/collections/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Collection deleted.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Collection could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/collections/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the collection. Example: architecto

collection   string     

The ULID of the collection. Example: 01ktwg1fhzq1dpagvermfbjzad

Comments

List Comments

requires authentication

List comments with filtering, sorting, pagination, and optional relationship includes.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/comments?filter%5Bsearch%5D=great+update&filter%5Bstatus%5D=published&filter%5Bcommentable_type%5D=post&filter%5Bcommentable_id%5D=01jabcxyz1234567890abcdefg&filter%5Bauthor_id%5D=01jabcxyz1234567890abcdefg&filter%5Bparent_comment_id%5D=01jabcxyz1234567890abcdefg&filter%5Bpublished_from%5D=2026-04-01T00%3A00%3A00Z&filter%5Bpublished_until%5D=2026-04-30T23%3A59%3A59Z&sort=-published_at&per_page=20&include=author%2Ccommentable" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/comments"
);

const params = {
    "filter[search]": "great update",
    "filter[status]": "published",
    "filter[commentable_type]": "post",
    "filter[commentable_id]": "01jabcxyz1234567890abcdefg",
    "filter[author_id]": "01jabcxyz1234567890abcdefg",
    "filter[parent_comment_id]": "01jabcxyz1234567890abcdefg",
    "filter[published_from]": "2026-04-01T00:00:00Z",
    "filter[published_until]": "2026-04-30T23:59:59Z",
    "sort": "-published_at",
    "per_page": "20",
    "include": "author,commentable",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated comment list.):


{
    "data": [
        {
            "id": "",
            "type": "comments",
            "attributes": {
                "body": "Adipisci quidem nostrum qui commodi incidunt iure.",
                "status": "draft",
                "like_count": 0,
                "reply_count": 0,
                "published_at": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            }
        },
        {
            "id": "",
            "type": "comments",
            "attributes": {
                "body": "Id aspernatur consectetur id a consectetur assumenda.",
                "status": "draft",
                "like_count": 0,
                "reply_count": 0,
                "published_at": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/comments

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

filter[search]   string  optional    

Search by comment body. Example: great update

filter[status]   string  optional    

Filter by comment status. Example: published

Must be one of:
  • draft
  • published
  • archived
filter[commentable_type]   string  optional    

Filter by commentable type alias. Example: post

Must be one of:
  • post
filter[commentable_id]   string  optional    

Filter by commentable ULID. Example: 01jabcxyz1234567890abcdefg

filter[author_id]   string  optional    

Filter by author ULID. Example: 01jabcxyz1234567890abcdefg

filter[parent_comment_id]   string  optional    

Filter by parent comment ULID. Example: 01jabcxyz1234567890abcdefg

filter[published_from]   string  optional    

Include comments published on or after this ISO 8601 timestamp. Example: 2026-04-01T00:00:00Z

filter[published_until]   string  optional    

Include comments published on or before this ISO 8601 timestamp. Example: 2026-04-30T23:59:59Z

sort   string  optional    

Sort column. Prefix with - for descending. Example: -published_at

Must be one of:
  • created_at
  • -created_at
  • updated_at
  • -updated_at
  • published_at
  • -published_at
  • like_count
  • -like_count
  • reply_count
  • -reply_count
per_page   integer  optional    

Number of comments per page (1-100). Example: 20

include   string  optional    

Comma-separated relationships to include: author, commentable, parentComment. Example: author,commentable

Show Comment

requires authentication

Fetch a single comment by ID.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/comments/architecto?include=author%2CparentComment" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/comments/architecto"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Comment details.):


{
    "data": {
        "id": "",
        "type": "comments",
        "attributes": {
            "body": "Adipisci quidem nostrum qui commodi incidunt iure.",
            "status": "draft",
            "like_count": 0,
            "reply_count": 0,
            "published_at": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Comment could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/comments/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the comment. Example: architecto

comment   string     

The ULID of the comment. Example: 01jabcxyz1234567890abcdefg

Query Parameters

include   string  optional    

Comma-separated relationships to include: author, commentable, parentComment. Example: author,parentComment

Create Comment

requires authentication

Create a new comment for the authenticated user.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/comments" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"commentable_type\": \"post\",
    \"commentable_id\": \"01jabcxyz1234567890abcdefg\",
    \"parent_comment_id\": \"01jabcxyz1234567890abcdefg\",
    \"body\": \"This launch looks solid.\",
    \"status\": \"draft\",
    \"like_count\": 0,
    \"reply_count\": 0,
    \"published_at\": \"2026-04-17T18:45:00Z\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/comments"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "commentable_type": "post",
    "commentable_id": "01jabcxyz1234567890abcdefg",
    "parent_comment_id": "01jabcxyz1234567890abcdefg",
    "body": "This launch looks solid.",
    "status": "draft",
    "like_count": 0,
    "reply_count": 0,
    "published_at": "2026-04-17T18:45:00Z"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Comment created.):


{
    "data": {
        "id": "",
        "type": "comments",
        "attributes": {
            "body": "Adipisci quidem nostrum qui commodi incidunt iure.",
            "status": "draft",
            "like_count": 0,
            "reply_count": 0,
            "published_at": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/comments

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

commentable_type   string     

Type alias of the model this comment belongs to. Example: post

Must be one of:
  • post
commentable_id   string     

ULID of the model this comment belongs to. Example: 01jabcxyz1234567890abcdefg

parent_comment_id   string  optional    

Parent comment ULID for threaded replies. Example: 01jabcxyz1234567890abcdefg

body   string  optional    

Comment body content. Example: This launch looks solid.

status   string  optional    

Comment status. Example: draft

Must be one of:
  • draft
  • published
  • archived
like_count   integer  optional    

Initial like count. Example: 0

reply_count   integer  optional    

Initial reply count. Example: 0

published_at   string  optional    

Publish timestamp. Required for published comments. Example: 2026-04-17T18:45:00Z

Update Comment

requires authentication

Patch a comment by ID.

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/comments/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"commentable_type\": \"post\",
    \"commentable_id\": \"01jabcxyz1234567890abcdefg\",
    \"parent_comment_id\": \"01jabcxyz1234567890abcdefg\",
    \"body\": \"Edited comment text.\",
    \"status\": \"published\",
    \"like_count\": 2,
    \"reply_count\": 1,
    \"published_at\": \"2026-04-17T18:45:00Z\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/comments/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "commentable_type": "post",
    "commentable_id": "01jabcxyz1234567890abcdefg",
    "parent_comment_id": "01jabcxyz1234567890abcdefg",
    "body": "Edited comment text.",
    "status": "published",
    "like_count": 2,
    "reply_count": 1,
    "published_at": "2026-04-17T18:45:00Z"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Comment updated.):


{
    "data": {
        "id": "",
        "type": "comments",
        "attributes": {
            "body": "Adipisci quidem nostrum qui commodi incidunt iure.",
            "status": "draft",
            "like_count": 0,
            "reply_count": 0,
            "published_at": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Comment could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

PATCH v1/comments/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the comment. Example: architecto

comment   string     

The ULID of the comment. Example: 01jabcxyz1234567890abcdefg

Body Parameters

commentable_type   string  optional    

Updated commentable type alias. Example: post

Must be one of:
  • post
commentable_id   string  optional    

Updated commentable ULID. Example: 01jabcxyz1234567890abcdefg

parent_comment_id   string  optional    

Updated parent comment ULID for threaded replies. Example: 01jabcxyz1234567890abcdefg

body   string  optional    

Updated comment body content. Example: Edited comment text.

status   string  optional    

Updated comment status. Example: published

Must be one of:
  • draft
  • published
  • archived
like_count   integer  optional    

Updated like count. Example: 2

reply_count   integer  optional    

Updated reply count. Example: 1

published_at   string  optional    

Publish timestamp. Required if the comment becomes published and does not already have one. Example: 2026-04-17T18:45:00Z

Delete Comment

requires authentication

Delete a comment by ID.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/comments/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/comments/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Comment deleted.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Comment could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/comments/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the comment. Example: architecto

comment   string     

The ULID of the comment. Example: 01jabcxyz1234567890abcdefg

Endpoints

GET v1/home-feed

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/home-feed" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/home-feed"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/home-feed

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/home-feed/sections/{id}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/home-feed/sections/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/home-feed/sections/architecto"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/home-feed/sections/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the section. Example: architecto

GET v1/discover-shops

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/discover-shops" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/discover-shops"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/discover-shops

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/discover-shops/sections/{id}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/discover-shops/sections/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/discover-shops/sections/architecto"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/discover-shops/sections/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the section. Example: architecto

GET v1/discover-community-collections

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/discover-community-collections" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/discover-community-collections"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/discover-community-collections

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/discover-community-collections/sections/{id}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/discover-community-collections/sections/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/discover-community-collections/sections/architecto"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/discover-community-collections/sections/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the section. Example: architecto

GET v1/categories/{category_id}/feed

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/categories/architecto/feed" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/categories/architecto/feed"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/categories/{category_id}/feed

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

category_id   string     

The ID of the category. Example: architecto

GET v1/categories/{category_id}/feed/sections/{id}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/categories/architecto/feed/sections/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/categories/architecto/feed/sections/architecto"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/categories/{category_id}/feed/sections/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

category_id   string     

The ID of the category. Example: architecto

id   string     

The ID of the section. Example: architecto

GET v1/admin/feed-sections

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/admin/feed-sections" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-sections"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/admin/feed-sections

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/admin/feed-sections

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/admin/feed-sections" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-sections"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/admin/feed-sections

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/admin/feed-sections/reorder

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/admin/feed-sections/reorder" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-sections/reorder"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/admin/feed-sections/reorder

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

PATCH v1/admin/feed-sections/{section_id}

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/admin/feed-sections/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-sections/architecto"
);

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

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());

Request      

PATCH v1/admin/feed-sections/{section_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

section_id   string     

The ID of the section. Example: architecto

DELETE v1/admin/feed-sections/{section_id}

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/admin/feed-sections/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-sections/architecto"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE v1/admin/feed-sections/{section_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

section_id   string     

The ID of the section. Example: architecto

GET v1/admin/curated-feed-lists

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/admin/curated-feed-lists" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/admin/curated-feed-lists

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/admin/curated-feed-lists

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/admin/curated-feed-lists

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

PATCH v1/admin/curated-feed-lists/{list_id}

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto"
);

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

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());

Request      

PATCH v1/admin/curated-feed-lists/{list_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

list_id   string     

The ID of the list. Example: architecto

DELETE v1/admin/curated-feed-lists/{list_id}

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE v1/admin/curated-feed-lists/{list_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

list_id   string     

The ID of the list. Example: architecto

GET v1/admin/curated-feed-lists/{list_id}/entries

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto/entries" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto/entries"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/admin/curated-feed-lists/{list_id}/entries

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

list_id   string     

The ID of the list. Example: architecto

POST v1/admin/curated-feed-lists/{list_id}/entries

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto/entries" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto/entries"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/admin/curated-feed-lists/{list_id}/entries

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

list_id   string     

The ID of the list. Example: architecto

POST v1/admin/curated-feed-lists/{list_id}/entries/reorder

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto/entries/reorder" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto/entries/reorder"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/admin/curated-feed-lists/{list_id}/entries/reorder

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

list_id   string     

The ID of the list. Example: architecto

DELETE v1/admin/curated-feed-lists/{list_id}/entries/{entry_id}

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto/entries/16" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curated-feed-lists/architecto/entries/16"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE v1/admin/curated-feed-lists/{list_id}/entries/{entry_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

list_id   string     

The ID of the list. Example: architecto

entry_id   integer     

The ID of the entry. Example: 16

GET v1/admin/feed-curation-workspaces/{surface}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/admin/feed-curation-workspaces/home" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-curation-workspaces/home"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/admin/feed-curation-workspaces/{surface}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

surface   string     

Example: home

GET v1/admin/feed-curation-capabilities/{surface}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/admin/feed-curation-capabilities/home" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-curation-capabilities/home"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/admin/feed-curation-capabilities/{surface}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

surface   string     

Example: home

PUT v1/admin/feed-curation-workspaces/{surface}

Example request:
curl --request PUT \
    "https://bazaarspot-api.test/v1/admin/feed-curation-workspaces/home" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-curation-workspaces/home"
);

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

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT v1/admin/feed-curation-workspaces/{surface}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

surface   string     

Example: home

POST v1/admin/feed-curation-workspaces/{surface}/preview

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/admin/feed-curation-workspaces/home/preview" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/feed-curation-workspaces/home/preview"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/admin/feed-curation-workspaces/{surface}/preview

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

surface   string     

Example: home

GET v1/admin/section-performance

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/admin/section-performance" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/section-performance"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/admin/section-performance

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/admin/outbound-clicks

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/admin/outbound-clicks" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/outbound-clicks"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/admin/outbound-clicks

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/admin/curator-token/rotate

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/admin/curator-token/rotate" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curator-token/rotate"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/admin/curator-token/rotate

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/admin/curators

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/admin/curators" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curators"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/admin/curators

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

DELETE v1/admin/curators/{curator_id}/tokens/{tokenId}

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/admin/curators/architecto/tokens/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/admin/curators/architecto/tokens/architecto"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE v1/admin/curators/{curator_id}/tokens/{tokenId}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

curator_id   string     

The ID of the curator. Example: architecto

tokenId   string     

Example: architecto

GET v1/internal/analytics/entities

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/internal/analytics/entities" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/analytics/entities"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/internal/analytics/entities

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

PUT v1/internal/analytics/current-metrics

Example request:
curl --request PUT \
    "https://bazaarspot-api.test/v1/internal/analytics/current-metrics" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/analytics/current-metrics"
);

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

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT v1/internal/analytics/current-metrics

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/internal/outbound-clicks/targets/{targetType}/{targetId}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/internal/outbound-clicks/targets/architecto/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/outbound-clicks/targets/architecto/architecto"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/internal/outbound-clicks/targets/{targetType}/{targetId}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

targetType   string     

Example: architecto

targetId   string     

Example: architecto

GET v1/internal/recommendations/catalog

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/internal/recommendations/catalog" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/recommendations/catalog"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/internal/recommendations/catalog

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/internal/ingestion/shops:onboard

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/ingestion/shops:onboard" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/ingestion/shops:onboard"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/ingestion/shops:onboard

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/internal/authority/shops

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/internal/authority/shops" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/authority/shops"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/internal/authority/shops

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/internal/authority/shop-catalog

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/internal/authority/shop-catalog" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/authority/shop-catalog"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/internal/authority/shop-catalog

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/internal/authority/shop-catalog/{shop_id}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/internal/authority/shop-catalog/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/authority/shop-catalog/architecto"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/internal/authority/shop-catalog/{shop_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

shop_id   string     

The ID of the shop. Example: architecto

POST v1/internal/authority/publications

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/authority/publications" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/authority/publications"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/authority/publications

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

PUT v1/internal/authority/publications/{authorityPublication_id}/scores

Example request:
curl --request PUT \
    "https://bazaarspot-api.test/v1/internal/authority/publications/architecto/scores" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/authority/publications/architecto/scores"
);

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

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT v1/internal/authority/publications/{authorityPublication_id}/scores

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

authorityPublication_id   string     

The ID of the authorityPublication. Example: architecto

POST v1/internal/authority/publications/{authorityPublication_id}/activate

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/authority/publications/architecto/activate" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/authority/publications/architecto/activate"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/authority/publications/{authorityPublication_id}/activate

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

authorityPublication_id   string     

The ID of the authorityPublication. Example: architecto

POST v1/internal/bot/identities/resolve

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/bot/identities/resolve" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/identities/resolve"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/bot/identities/resolve

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/bot/link-challenges/verify" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/link-challenges/verify"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/bot/link-challenges/complete" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/link-challenges/complete"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

POST v1/internal/bot/shop-favorites

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/bot/shop-favorites" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/shop-favorites"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/bot/shop-favorites

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/internal/bot/shops/{shop_id}/website-discovery-results

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/bot/shops/architecto/website-discovery-results" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/shops/architecto/website-discovery-results"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/bot/shops/{shop_id}/website-discovery-results

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

shop_id   string     

The ID of the shop. Example: architecto

POST v1/internal/bot/shops/{shop_id}/website-metadata-results

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/bot/shops/architecto/website-metadata-results" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/shops/architecto/website-metadata-results"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/bot/shops/{shop_id}/website-metadata-results

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

shop_id   string     

The ID of the shop. Example: architecto

POST v1/internal/bot/item-bookmarks

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/bot/item-bookmarks" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/item-bookmarks"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/bot/item-bookmarks

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/internal/bot/resources/resolve-url

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/bot/resources/resolve-url" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/resources/resolve-url"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/bot/resources/resolve-url

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/internal/bot/identities/{identity_id}/saved-resources

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/internal/bot/identities/architecto/saved-resources" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/bot/identities/architecto/saved-resources"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/internal/bot/identities/{identity_id}/saved-resources

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

identity_id   string     

The ID of the identity. Example: architecto

GET v1/me/channel-identities

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/channel-identities" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/channel-identities"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/me/channel-identities

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/channel-link-challenges" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/channel-link-challenges"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

DELETE v1/me/channel-identities/{identity_id}

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/me/channel-identities/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/channel-identities/architecto"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE v1/me/channel-identities/{identity_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

identity_id   string     

The ID of the identity. Example: architecto

POST v1/shop-portal/auth/login

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/shop-portal/auth/login" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/auth/login"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/shop-portal/auth/login

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/shop-portal/session

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/session" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/session"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/session

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/shop-portal/auth/logout

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/shop-portal/auth/logout" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/auth/logout"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/shop-portal/auth/logout

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/shop-portal/sessions

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/sessions" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/sessions"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/sessions

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

DELETE v1/shop-portal/sessions/{sessionId}

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/shop-portal/sessions/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/sessions/architecto"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE v1/shop-portal/sessions/{sessionId}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

sessionId   string     

Example: architecto

GET v1/shop-portal/shop

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/shop" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/shop"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/shop

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

PATCH v1/shop-portal/shop

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/shop-portal/shop" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/shop"
);

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

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());

Request      

PATCH v1/shop-portal/shop

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/shop-portal/items

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/items" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/items"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/items

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/shop-portal/items/{item}

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/items/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/items/architecto"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/items/{item}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

item   string     

The item. Example: architecto

PATCH v1/shop-portal/items/{item}

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/shop-portal/items/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/items/architecto"
);

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

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());

Request      

PATCH v1/shop-portal/items/{item}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

item   string     

The item. Example: architecto

POST v1/shop-portal/items/{item}/overrides/{field}/reset

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/shop-portal/items/architecto/overrides/architecto/reset" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/items/architecto/overrides/architecto/reset"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/shop-portal/items/{item}/overrides/{field}/reset

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

item   string     

The item. Example: architecto

field   string     

Example: architecto

GET v1/shop-portal/reviews

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/reviews" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/reviews"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/reviews

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

PUT v1/shop-portal/reviews/{review}/reply

Example request:
curl --request PUT \
    "https://bazaarspot-api.test/v1/shop-portal/reviews/architecto/reply" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/reviews/architecto/reply"
);

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

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT v1/shop-portal/reviews/{review}/reply

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

review   string     

The review. Example: architecto

DELETE v1/shop-portal/reviews/{review}/reply

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/shop-portal/reviews/architecto/reply" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/reviews/architecto/reply"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE v1/shop-portal/reviews/{review}/reply

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

review   string     

The review. Example: architecto

GET v1/shop-portal/team

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/team" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/team"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/team

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

POST v1/shop-portal/team

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/shop-portal/team" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/team"
);

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

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/shop-portal/team

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

DELETE v1/shop-portal/team/{membership}

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/shop-portal/team/architecto" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/team/architecto"
);

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

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE v1/shop-portal/team/{membership}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

membership   string     

Example: architecto

GET v1/shop-portal/analytics/overview

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/analytics/overview" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/analytics/overview"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/analytics/overview

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

GET v1/shop-portal/analytics/items

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shop-portal/analytics/items" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shop-portal/analytics/items"
);

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/shop-portal/analytics/items

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

PUT v1/internal/analytics/metric-buckets

Example request:
curl --request PUT \
    "https://bazaarspot-api.test/v1/internal/analytics/metric-buckets" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/analytics/metric-buckets"
);

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

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT v1/internal/analytics/metric-buckets

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Internal Analytics

Resolve analytics entities

requires authentication

Resolve backend entity identifiers for the analytics service.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/internal/analytics/entities/resolve" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/analytics/entities/resolve"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Request      

POST v1/internal/analytics/entities/resolve

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Store analytics metric snapshots

requires authentication

Upsert calculated feed metric snapshots from the analytics service.

Example request:
curl --request PUT \
    "https://bazaarspot-api.test/v1/internal/analytics/metric-snapshots" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/internal/analytics/metric-snapshots"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PUT",
    headers,
}).then(response => response.json());

Request      

PUT v1/internal/analytics/metric-snapshots

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Items

List Items

List items with filtering, sorting, pagination, and optional relationship includes.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/items?filter%5Bsearch%5D=sneaker&filter%5Bslug%5D=classic-polo-knit&filter%5Bis_active%5D=1&filter%5Bis_available%5D=1&filter%5Bshop_id%5D=01ktwg1fhzq1dpagvermfbjzad&filter%5Bcategory_id%5D=01ktwg1fhzq1dpagvermfbjzad&filter%5Bcondition%5D=new&filter%5Bprice_min%5D=100&filter%5Bprice_max%5D=500&sort=-created_at&per_page=20&include=shop%2Cbrand" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/items"
);

const params = {
    "filter[search]": "sneaker",
    "filter[slug]": "classic-polo-knit",
    "filter[is_active]": "1",
    "filter[is_available]": "1",
    "filter[shop_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "filter[category_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "filter[condition]": "new",
    "filter[price_min]": "100",
    "filter[price_max]": "500",
    "sort": "-created_at",
    "per_page": "20",
    "include": "shop,brand",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated item list.):


{
    "data": [
        {
            "id": "",
            "type": "items",
            "attributes": {
                "name": "Adipisci Molestias Fugit",
                "slug": "adipisci-molestias-fugit",
                "description": "Distinctio eum doloremque id aut libero aliquam veniam corporis.",
                "external_url": null,
                "price": 3025.43,
                "original_price": null,
                "currency": "EGP",
                "sku": "NO-351-QI",
                "condition": "new",
                "stock_level": 179,
                "weight": null,
                "dimensions": null,
                "specifications": null,
                "is_available": true,
                "is_active": true,
                "url": null,
                "featured_image_url": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/items/01ktwg1fhzq1dpagvermfbjzad"
            }
        },
        {
            "id": "",
            "type": "items",
            "attributes": {
                "name": "Officiis Corporis Nesciunt",
                "slug": "officiis-corporis-nesciunt",
                "description": "Ratione iure impedit molestiae ut rem.",
                "external_url": null,
                "price": 1962.84,
                "original_price": null,
                "currency": "EGP",
                "sku": "RC-724-VA",
                "condition": "new",
                "stock_level": 140,
                "weight": null,
                "dimensions": null,
                "specifications": null,
                "is_available": true,
                "is_active": true,
                "url": null,
                "featured_image_url": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/items/01ktwg1fhzq1dpagvermfbjzad"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/items

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

filter[search]   string  optional    

Search by name, slug, description, or SKU. Example: sneaker

filter[slug]   string  optional    

Filter by exact item slug. Example: classic-polo-knit

filter[is_active]   boolean  optional    

Filter by active status. Example: true

filter[is_available]   boolean  optional    

Filter by availability status. Example: true

filter[shop_id]   string  optional    

Filter by shop ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

filter[brand_id]   integer  optional    

Filter by brand ID.

filter[category_id]   string  optional    

Filter by category ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

filter[condition]   string  optional    

Filter by item condition. Example: new

Must be one of:
  • new
  • used
  • refurbished
  • damaged
filter[price_min]   number  optional    

Minimum price (inclusive). Example: 100

filter[price_max]   number  optional    

Maximum price (inclusive). Example: 500

sort   string  optional    

Sort column. Recommended sorting requires authentication and X-Profile-ID. Example: -created_at

Must be one of:
  • recommended
  • name
  • -name
  • price
  • -price
  • popularity
  • -popularity
  • created_at
  • -created_at
  • updated_at
  • -updated_at
per_page   integer  optional    

Number of items per page (1–100). Example: 20

include   string  optional    

Comma-separated relationships to include: shop, brand, categories, variants. Example: shop,brand

Show Item

Fetch a single item by ULID.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/items/architecto?include=shop%2Cbrand" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/items/architecto"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Item details.):


{
    "data": {
        "id": "",
        "type": "items",
        "attributes": {
            "name": "Eius Et Animi",
            "slug": "eius-et-animi",
            "description": "Velit et fugiat sunt nihil accusantium.",
            "external_url": null,
            "price": 1513.36,
            "original_price": null,
            "currency": "EGP",
            "sku": "KH-954-WA",
            "condition": "new",
            "stock_level": 183,
            "weight": null,
            "dimensions": null,
            "specifications": null,
            "is_available": true,
            "is_active": true,
            "url": null,
            "featured_image_url": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/items/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (404, Item could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/items/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the item. Example: architecto

item   string     

The ULID of the item. Example: 01ktwg1fhzq1dpagvermfbjzad

Query Parameters

include   string  optional    

Comma-separated relationships to include: shop, brand, categories, variants. Example: shop,brand

Create Item

requires authentication

Create a new item record.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/items" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"shop_id\": \"01ktwg1fhzq1dpagvermfbjzad\",
    \"brand_id\": 1,
    \"name\": \"White Sneakers\",
    \"slug\": \"white-sneakers\",
    \"description\": \"Comfortable everyday sneakers.\",
    \"price\": 299.99,
    \"original_price\": 399.99,
    \"currency\": \"EGP\",
    \"sku\": \"SNK-WHT-42\",
    \"condition\": \"new\",
    \"stock_level\": 50,
    \"weight\": \"0.5kg\",
    \"dimensions\": \"30x20x10cm\",
    \"specifications\": {
        \"color\": \"white\",
        \"size\": \"42\"
    },
    \"is_available\": true,
    \"is_active\": true
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/items"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "shop_id": "01ktwg1fhzq1dpagvermfbjzad",
    "brand_id": 1,
    "name": "White Sneakers",
    "slug": "white-sneakers",
    "description": "Comfortable everyday sneakers.",
    "price": 299.99,
    "original_price": 399.99,
    "currency": "EGP",
    "sku": "SNK-WHT-42",
    "condition": "new",
    "stock_level": 50,
    "weight": "0.5kg",
    "dimensions": "30x20x10cm",
    "specifications": {
        "color": "white",
        "size": "42"
    },
    "is_available": true,
    "is_active": true
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Item created.):


{
    "data": {
        "id": "",
        "type": "items",
        "attributes": {
            "name": "Aut Adipisci Quidem",
            "slug": "aut-adipisci-quidem",
            "description": "Qui commodi incidunt iure odit.",
            "external_url": null,
            "price": 568.81,
            "original_price": null,
            "currency": "EGP",
            "sku": "TC-744-PS",
            "condition": "new",
            "stock_level": 120,
            "weight": null,
            "dimensions": null,
            "specifications": null,
            "is_available": true,
            "is_active": true,
            "url": null,
            "featured_image_url": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/items/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/items

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

shop_id   string     

ULID of the shop this item belongs to. Example: 01ktwg1fhzq1dpagvermfbjzad

brand_id   integer  optional    

ID of the brand for this item. Example: 1

name   string     

Item name. Example: White Sneakers

slug   string  optional    

URL slug. Generated from name when omitted. Example: white-sneakers

description   string  optional    

Item description. Example: Comfortable everyday sneakers.

price   number  optional    

Selling price. Example: 299.99

original_price   number  optional    

Original price before discount. Example: 399.99

currency   string  optional    

ISO 4217 currency code. Example: EGP

sku   string  optional    

Stock keeping unit identifier. Example: SNK-WHT-42

condition   string  optional    

Item condition. Example: new

Must be one of:
  • new
  • used
  • refurbished
  • damaged
stock_level   integer  optional    

Current stock quantity. Example: 50

weight   string  optional    

Item weight. Example: 0.5kg

dimensions   string  optional    

Item dimensions. Example: 30x20x10cm

specifications   object  optional    

Key-value specifications.

is_available   boolean  optional    

Whether the item is currently available. Example: true

is_active   boolean  optional    

Whether the item is active. Example: true

Update Item

requires authentication

Patch an item by ULID.

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/items/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"White Leather Sneakers\",
    \"slug\": \"white-leather-sneakers\",
    \"description\": \"Updated description.\",
    \"price\": 249.99,
    \"original_price\": 399.99,
    \"currency\": \"EGP\",
    \"sku\": \"SNK-WHT-LTH-42\",
    \"condition\": \"new\",
    \"stock_level\": 30,
    \"is_available\": true,
    \"is_active\": true
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/items/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "White Leather Sneakers",
    "slug": "white-leather-sneakers",
    "description": "Updated description.",
    "price": 249.99,
    "original_price": 399.99,
    "currency": "EGP",
    "sku": "SNK-WHT-LTH-42",
    "condition": "new",
    "stock_level": 30,
    "is_available": true,
    "is_active": true
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Item updated.):


{
    "data": {
        "id": "",
        "type": "items",
        "attributes": {
            "name": "Nostrum Qui Commodi",
            "slug": "nostrum-qui-commodi",
            "description": "Iure odit et et modi ipsum nostrum omnis.",
            "external_url": null,
            "price": 2911.47,
            "original_price": null,
            "currency": "EGP",
            "sku": "LD-066-ZS",
            "condition": "new",
            "stock_level": 181,
            "weight": null,
            "dimensions": null,
            "specifications": null,
            "is_available": true,
            "is_active": true,
            "url": null,
            "featured_image_url": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/items/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Item could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

PATCH v1/items/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the item. Example: architecto

item   string     

The ULID of the item. Example: 01ktwg1fhzq1dpagvermfbjzad

Body Parameters

name   string  optional    

Item name. Example: White Leather Sneakers

slug   string  optional    

New URL slug for the item. Example: white-leather-sneakers

description   string  optional    

Item description. Example: Updated description.

price   number  optional    

Selling price. Example: 249.99

original_price   number  optional    

Original price before discount. Example: 399.99

currency   string  optional    

ISO 4217 currency code. Example: EGP

sku   string  optional    

Stock keeping unit identifier. Example: SNK-WHT-LTH-42

condition   string  optional    

Item condition. Example: new

Must be one of:
  • new
  • used
  • refurbished
  • damaged
stock_level   integer  optional    

Current stock quantity. Example: 30

is_available   boolean  optional    

Whether the item is currently available. Example: true

is_active   boolean  optional    

Whether the item is active. Example: true

Delete Item

requires authentication

Delete an item by ULID.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/items/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/items/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Item deleted.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Item could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/items/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the item. Example: architecto

item   string     

The ULID of the item. Example: 01ktwg1fhzq1dpagvermfbjzad

Notifications

List Notifications

requires authentication

List the acting profile's notifications, newest first, with cursor pagination.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/notifications?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/notifications"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated notification list.):


{
    "data": [
        {
            "id": "",
            "type": "notifications",
            "attributes": {
                "type": "friend_request.received",
                "message": "Clara Cronin V sent you a friend request.",
                "target_url": "/friends/requests",
                "actor_name": "Clara Cronin V",
                "actor_handle": "wleuschke",
                "actor_avatar_url": null,
                "context": [],
                "read_at": null,
                "created_at": "2026-07-06T10:01:48+00:00"
            }
        },
        {
            "id": "",
            "type": "notifications",
            "attributes": {
                "type": "friend_request.received",
                "message": "Dr. Raleigh Kreiger sent you a friend request.",
                "target_url": "/friends/requests",
                "actor_name": "Dr. Raleigh Kreiger",
                "actor_handle": "oklocko",
                "actor_avatar_url": null,
                "context": [],
                "read_at": null,
                "created_at": "2026-07-06T10:01:48+00:00"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/notifications

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

actingProfile   string     

The ULID of the acting profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Query Parameters

per_page   integer  optional    

Notifications per page (1-100). Example: 20

cursor   string  optional    

Cursor for the next page.

Unread Notification Count

requires authentication

Return the number of unread notifications for the acting profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/notifications/unread-count" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/notifications/unread-count"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Unread count.):


{
    "data": {
        "unread_count": 3
    }
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/notifications/unread-count

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

actingProfile   string     

The ULID of the acting profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Mark Notification Read

requires authentication

Mark a single notification as read.

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/notifications/architecto/read" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/notifications/architecto/read"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "PATCH",
    headers,
}).then(response => response.json());

Example response (200, Notification marked read.):


{
    "data": {
        "id": "",
        "type": "notifications",
        "attributes": {
            "type": "friend_request.received",
            "message": "Clara Cronin V sent you a friend request.",
            "target_url": "/friends/requests",
            "actor_name": "Clara Cronin V",
            "actor_handle": "wleuschke",
            "actor_avatar_url": null,
            "context": [],
            "read_at": null,
            "created_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (404, Notification does not belong to this profile.):


{
    "message": "Not Found."
}
 

Request      

PATCH v1/me/profiles/{actingProfile_id}/notifications/{notification_id}/read

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

notification_id   string     

The ID of the notification. Example: architecto

actingProfile   string     

The ULID of the acting profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

notification   string     

The notification ULID. Example: 01AN4Z07BY79KA1307SR9X4MV3

Mark All Notifications Read

requires authentication

Mark every unread notification for the acting profile as read.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/notifications/read-all" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/notifications/read-all"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, All notifications marked read.):


{
    "data": {
        "unread_count": 0
    }
}
 

Request      

POST v1/me/profiles/{actingProfile_id}/notifications/read-all

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

actingProfile   string     

The ULID of the acting profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Post Likes

Like Post

requires authentication

Like a post for the authenticated user.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/posts/architecto/like" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/posts/architecto/like"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Post liked.):


{
    "data": {
        "id": "",
        "type": "posts",
        "attributes": {
            "body": "Quidem nostrum qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora. Voluptatem laboriosam praesentium quis adipisci.",
            "status": "draft",
            "visibility": "Only me",
            "repost_of_post_id": null,
            "is_repost": false,
            "is_quote": false,
            "like_count": 0,
            "reply_count": 0,
            "repost_count": 0,
            "liked_by_me": false,
            "published_at": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

POST v1/posts/{post_id}/like

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

post_id   string     

The ID of the post. Example: architecto

post   string     

The post ULID. Example: 01AN4Z07BY79KA1307SR9X4MV3

Unlike Post

requires authentication

Remove the authenticated user like from a post.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/posts/architecto/like" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/posts/architecto/like"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200, Post unliked.):


{
    "data": {
        "id": "",
        "type": "posts",
        "attributes": {
            "body": "Quidem nostrum qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora. Voluptatem laboriosam praesentium quis adipisci.",
            "status": "draft",
            "visibility": "Only me",
            "repost_of_post_id": null,
            "is_repost": false,
            "is_quote": false,
            "like_count": 0,
            "reply_count": 0,
            "repost_count": 0,
            "liked_by_me": false,
            "published_at": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

DELETE v1/posts/{post_id}/like

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

post_id   string     

The ID of the post. Example: architecto

post   string     

The post ULID. Example: 01AN4Z07BY79KA1307SR9X4MV3

Posts

List Posts

requires authentication

List posts with filtering, sorting, pagination, and optional relationship includes.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/posts?filter%5Bsearch%5D=launch+update&filter%5Bstatus%5D=published&filter%5Bvisibility%5D=Public&filter%5Bauthor_id%5D=01jabcxyz1234567890abcdefg&filter%5Brepost_of_post_id%5D=01jabcxyz1234567890abcdefg&filter%5Bpublished_from%5D=2026-04-01T00%3A00%3A00Z&filter%5Bpublished_until%5D=2026-04-30T23%3A59%3A59Z&sort=-published_at&per_page=20&include=author%2CrepostOfPost%2CrepostOfPost.author" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/posts"
);

const params = {
    "filter[search]": "launch update",
    "filter[status]": "published",
    "filter[visibility]": "Public",
    "filter[author_id]": "01jabcxyz1234567890abcdefg",
    "filter[repost_of_post_id]": "01jabcxyz1234567890abcdefg",
    "filter[published_from]": "2026-04-01T00:00:00Z",
    "filter[published_until]": "2026-04-30T23:59:59Z",
    "sort": "-published_at",
    "per_page": "20",
    "include": "author,repostOfPost,repostOfPost.author",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated post list.):


{
    "data": [
        {
            "id": "",
            "type": "posts",
            "attributes": {
                "body": "Quidem nostrum qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora. Voluptatem laboriosam praesentium quis adipisci.",
                "status": "draft",
                "visibility": "Only me",
                "repost_of_post_id": null,
                "is_repost": false,
                "is_quote": false,
                "like_count": 0,
                "reply_count": 0,
                "repost_count": 0,
                "liked_by_me": false,
                "published_at": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            }
        },
        {
            "id": "",
            "type": "posts",
            "attributes": {
                "body": "Veritatis excepturi doloribus delectus fugit. Repudiandae laboriosam est alias tenetur ratione. Voluptate accusamus ut et recusandae. Rerum ex repellendus assumenda et.",
                "status": "draft",
                "visibility": "Only me",
                "repost_of_post_id": null,
                "is_repost": false,
                "is_quote": false,
                "like_count": 0,
                "reply_count": 0,
                "repost_count": 0,
                "liked_by_me": false,
                "published_at": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/posts

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

filter[search]   string  optional    

Search by post body. Example: launch update

filter[status]   string  optional    

Filter by post status. Example: published

Must be one of:
  • draft
  • published
  • archived
filter[visibility]   string  optional    

Filter by post visibility. Example: Public

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public
filter[author_id]   string  optional    

Filter by author ULID. Example: 01jabcxyz1234567890abcdefg

filter[repost_of_post_id]   string  optional    

Filter by repost source post ULID. Example: 01jabcxyz1234567890abcdefg

filter[published_from]   string  optional    

Include posts published on or after this ISO 8601 timestamp. Example: 2026-04-01T00:00:00Z

filter[published_until]   string  optional    

Include posts published on or before this ISO 8601 timestamp. Example: 2026-04-30T23:59:59Z

sort   string  optional    

Sort column. Prefix with - for descending. Example: -published_at

Must be one of:
  • created_at
  • -created_at
  • updated_at
  • -updated_at
  • published_at
  • -published_at
  • like_count
  • -like_count
  • reply_count
  • -reply_count
  • repost_count
  • -repost_count
per_page   integer  optional    

Number of posts per page (1-100). Example: 20

include   string  optional    

Comma-separated relationships to include: author, repostOfPost, repostOfPost.author. Example: author,repostOfPost,repostOfPost.author

Show Post

requires authentication

Fetch a single post by ID.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/posts/architecto?include=author%2CrepostOfPost%2CrepostOfPost.author" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/posts/architecto"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Post details.):


{
    "data": {
        "id": "",
        "type": "posts",
        "attributes": {
            "body": "Quidem nostrum qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora. Voluptatem laboriosam praesentium quis adipisci.",
            "status": "draft",
            "visibility": "Only me",
            "repost_of_post_id": null,
            "is_repost": false,
            "is_quote": false,
            "like_count": 0,
            "reply_count": 0,
            "repost_count": 0,
            "liked_by_me": false,
            "published_at": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Post could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/posts/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the post. Example: architecto

post   string     

The ULID of the post. Example: 01jabcxyz1234567890abcdefg

Query Parameters

include   string  optional    

Comma-separated relationships to include: author, repostOfPost, repostOfPost.author. Example: author,repostOfPost,repostOfPost.author

Create Post

requires authentication

Create a new post for the authenticated user.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/posts" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"body\": \"Shipping the new posts endpoint today.\",
    \"status\": \"draft\",
    \"visibility\": \"Only me\",
    \"repost_of_post_id\": \"01jabcxyz1234567890abcdefg\",
    \"like_count\": 0,
    \"reply_count\": 0,
    \"repost_count\": 0,
    \"published_at\": \"2026-04-17T18:45:00Z\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/posts"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "body": "Shipping the new posts endpoint today.",
    "status": "draft",
    "visibility": "Only me",
    "repost_of_post_id": "01jabcxyz1234567890abcdefg",
    "like_count": 0,
    "reply_count": 0,
    "repost_count": 0,
    "published_at": "2026-04-17T18:45:00Z"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Post created.):


{
    "data": {
        "id": "",
        "type": "posts",
        "attributes": {
            "body": "Quidem nostrum qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora. Voluptatem laboriosam praesentium quis adipisci.",
            "status": "draft",
            "visibility": "Only me",
            "repost_of_post_id": null,
            "is_repost": false,
            "is_quote": false,
            "like_count": 0,
            "reply_count": 0,
            "repost_count": 0,
            "liked_by_me": false,
            "published_at": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/posts

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

body   string  optional    

Post body content. Example: Shipping the new posts endpoint today.

status   string  optional    

Post status. Example: draft

Must be one of:
  • draft
  • published
  • archived
visibility   string  optional    

Post visibility. Example: Only me

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public
repost_of_post_id   string  optional    

Source post ULID if this is a repost. Example: 01jabcxyz1234567890abcdefg

like_count   integer  optional    

Initial like count. Example: 0

reply_count   integer  optional    

Initial reply count. Example: 0

repost_count   integer  optional    

Initial repost count. Example: 0

published_at   string  optional    

Publish timestamp. Required for published posts. Example: 2026-04-17T18:45:00Z

Update Post

requires authentication

Patch a post by ID.

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/posts/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"body\": \"Edited launch message.\",
    \"status\": \"published\",
    \"visibility\": \"Friends\",
    \"repost_of_post_id\": \"01jabcxyz1234567890abcdefg\",
    \"like_count\": 12,
    \"reply_count\": 4,
    \"repost_count\": 2,
    \"published_at\": \"2026-04-17T18:45:00Z\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/posts/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "body": "Edited launch message.",
    "status": "published",
    "visibility": "Friends",
    "repost_of_post_id": "01jabcxyz1234567890abcdefg",
    "like_count": 12,
    "reply_count": 4,
    "repost_count": 2,
    "published_at": "2026-04-17T18:45:00Z"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Post updated.):


{
    "data": {
        "id": "",
        "type": "posts",
        "attributes": {
            "body": "Quidem nostrum qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora. Voluptatem laboriosam praesentium quis adipisci.",
            "status": "draft",
            "visibility": "Only me",
            "repost_of_post_id": null,
            "is_repost": false,
            "is_quote": false,
            "like_count": 0,
            "reply_count": 0,
            "repost_count": 0,
            "liked_by_me": false,
            "published_at": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Post could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

PATCH v1/posts/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the post. Example: architecto

post   string     

The ULID of the post. Example: 01jabcxyz1234567890abcdefg

Body Parameters

body   string  optional    

Updated post body content. Example: Edited launch message.

status   string  optional    

Updated post status. Example: published

Must be one of:
  • draft
  • published
  • archived
visibility   string  optional    

Updated post visibility. Example: Friends

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public
repost_of_post_id   string  optional    

Source post ULID if this is a repost. Example: 01jabcxyz1234567890abcdefg

like_count   integer  optional    

Updated like count. Example: 12

reply_count   integer  optional    

Updated reply count. Example: 4

repost_count   integer  optional    

Updated repost count. Example: 2

published_at   string  optional    

Publish timestamp. Required if the post becomes published and does not already have one. Example: 2026-04-17T18:45:00Z

Delete Post

requires authentication

Delete a post by ID.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/posts/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/posts/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Post deleted.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Post could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/posts/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the post. Example: architecto

post   string     

The ULID of the post. Example: 01jabcxyz1234567890abcdefg

Profile Blocks

List Blocked Profiles

requires authentication

List profiles blocked by the authenticated user profile or a target profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/blocked-profiles?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/blocked-profiles"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated blocked profile list.):


{
    "data": [
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "daphne59",
                "display_name": "Morgan Hirthe",
                "bio": "Libero aliquam veniam corporis dolorem mollitia deleniti.",
                "avatar_url": "https://i.pravatar.cc/512?u=daphne59",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/daphne59"
            }
        },
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "modesta58",
                "display_name": "Mr. Murl Cruickshank Jr.",
                "bio": null,
                "avatar_url": "https://i.pravatar.cc/512?u=modesta58",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/modesta58"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/blocked-profiles

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

profile   string  optional    

The ULID of the target profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Query Parameters

per_page   integer  optional    

Number of profiles per page (1-100). Example: 20

Create Profile Block

requires authentication

Block a profile for the authenticated user profile.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/blocked-profiles/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/blocked-profiles/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Profile block already exists.):


{
    "message": "Profile block already exists."
}
 

Example response (201, Profile block created.):


{
    "message": "Profile block created."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, The target profile is the authenticated profile.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/me/profiles/{actingProfile_id}/blocked-profiles/{targetProfile_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

targetProfile_id   string     

The ID of the targetProfile. Example: architecto

profile   string     

The ULID of the profile to block. Example: 01AN4Z07BY79KA1307SR9X4MV3

Delete Profile Block

requires authentication

Remove a profile block from the authenticated user profile.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/blocked-profiles/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/blocked-profiles/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200, Profile block deleted.):


{
    "message": "Profile block deleted."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, The target profile is the authenticated profile.):


{
    "message": "The given data was invalid."
}
 

Request      

DELETE v1/me/profiles/{actingProfile_id}/blocked-profiles/{targetProfile_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

targetProfile_id   string     

The ID of the targetProfile. Example: architecto

profile   string     

The ULID of the profile to unblock. Example: 01AN4Z07BY79KA1307SR9X4MV3

List Blocked Profiles

requires authentication

List profiles blocked by the authenticated user profile or a target profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/profiles/architecto/blocked-profiles?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/profiles/architecto/blocked-profiles"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated blocked profile list.):


{
    "data": [
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "cynthiafahey",
                "display_name": "Morgan Hirthe",
                "bio": "Officia est dignissimos neque blanditiis odio veritatis excepturi.",
                "avatar_url": "https://i.pravatar.cc/512?u=cynthiafahey",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/cynthiafahey"
            }
        },
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "smithroxanne",
                "display_name": "Brennon Anderson",
                "bio": null,
                "avatar_url": "https://i.pravatar.cc/512?u=smithroxanne",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/smithroxanne"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/profiles/{actingProfile_id}/blocked-profiles

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

profile   string  optional    

The ULID of the target profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Query Parameters

per_page   integer  optional    

Number of profiles per page (1-100). Example: 20

Profile Friend Requests

List Incoming Profile Friend Requests

requires authentication

List pending friend requests received by the authenticated user profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/incoming?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/incoming"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated incoming friend request list.):


{
    "data": [
        {
            "id": "",
            "type": "profile-friend-requests",
            "attributes": {
                "requester_profile_id": "01kwve0y0dq6tzdc18cxxypme7",
                "recipient_profile_id": "01kwve0y0hdxnbys5jzdyrqh42",
                "created_at": null,
                "updated_at": null
            }
        },
        {
            "id": "",
            "type": "profile-friend-requests",
            "attributes": {
                "requester_profile_id": "01kwve0y0ndxrm4ggtm6f61svp",
                "recipient_profile_id": "01kwve0y0s2vz1gc4r09ythx6p",
                "created_at": null,
                "updated_at": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Authenticated user profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/friend-requests/incoming

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Query Parameters

per_page   integer  optional    

Number of requests per page (1-100). Example: 20

List Outgoing Profile Friend Requests

requires authentication

List pending friend requests sent by the authenticated user profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/outgoing?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/outgoing"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated outgoing friend request list.):


{
    "data": [
        {
            "id": "",
            "type": "profile-friend-requests",
            "attributes": {
                "requester_profile_id": "01kwve0y0y57x02dbffmf895x3",
                "recipient_profile_id": "01kwve0y12qhz36bzkbh0637bp",
                "created_at": null,
                "updated_at": null
            }
        },
        {
            "id": "",
            "type": "profile-friend-requests",
            "attributes": {
                "requester_profile_id": "01kwve0y16m6m88jhgjexag9as",
                "recipient_profile_id": "01kwve0y19w2se3se86r17caxy",
                "created_at": null,
                "updated_at": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Authenticated user profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/friend-requests/outgoing

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Query Parameters

per_page   integer  optional    

Number of requests per page (1-100). Example: 20

Create Profile Friend Request

requires authentication

Send a pending friend request to another profile. A reciprocal pending request is accepted automatically.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Friend request already exists.):


{
    "message": "Profile friend request already exists."
}
 

Example response (200, Reciprocal request accepted automatically.):


{
    "message": "Profile friend request accepted."
}
 

Example response (201, Friend request created.):


{
    "message": "Profile friend request created."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Example response (409, Either profile has blocked the other.):


{
    "message": "Blocked profiles cannot become friends."
}
 

Example response (422, The target profile is the authenticated profile.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/me/profiles/{actingProfile_id}/friend-requests/{targetProfile_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

targetProfile_id   string     

The ID of the targetProfile. Example: architecto

profile   string     

The ULID of the profile to request. Example: 01AN4Z07BY79KA1307SR9X4MV3

Accept Profile Friend Request

requires authentication

Accept an incoming pending friend request from another profile.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/architecto/accept" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/architecto/accept"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Friend request accepted.):


{
    "message": "Profile friend request accepted."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Incoming request could not be found.):


{
    "message": "Profile friend request not found."
}
 

Example response (422, The target profile is the authenticated profile.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/me/profiles/{actingProfile_id}/friend-requests/{targetProfile_id}/accept

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

targetProfile_id   string     

The ID of the targetProfile. Example: architecto

profile   string     

The ULID of the requester profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Decline Profile Friend Request

requires authentication

Decline an incoming pending friend request from another profile.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/architecto/decline" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/architecto/decline"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Friend request declined.):


{
    "message": "Profile friend request declined."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, The target profile is the authenticated profile.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/me/profiles/{actingProfile_id}/friend-requests/{targetProfile_id}/decline

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

targetProfile_id   string     

The ID of the targetProfile. Example: architecto

profile   string     

The ULID of the requester profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Cancel Profile Friend Request

requires authentication

Cancel an outgoing pending friend request to another profile.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friend-requests/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200, Friend request canceled.):


{
    "message": "Profile friend request canceled."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, The target profile is the authenticated profile.):


{
    "message": "The given data was invalid."
}
 

Request      

DELETE v1/me/profiles/{actingProfile_id}/friend-requests/{targetProfile_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

targetProfile_id   string     

The ID of the targetProfile. Example: architecto

profile   string     

The ULID of the recipient profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Profile Friends

List Profile Friends

requires authentication

List friends for the authenticated user profile or a target profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/friends?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friends"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated profile friend list.):


{
    "data": [
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "sleffler",
                "display_name": "Morgan Hirthe",
                "bio": null,
                "avatar_url": "https://i.pravatar.cc/512?u=sleffler",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/sleffler"
            }
        },
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "micaela88",
                "display_name": "Prof. Annabelle Kshlerin",
                "bio": "Veniam corporis dolorem mollitia.",
                "avatar_url": "https://i.pravatar.cc/512?u=micaela88",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/micaela88"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/friends

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

profile   string  optional    

The ULID of the target profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Query Parameters

per_page   integer  optional    

Number of profiles per page (1-100). Example: 20

List Profile Friends Of Friends

requires authentication

List second-degree friends for the authenticated user profile or a target profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/friends-of-friends?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friends-of-friends"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated friends-of-friends list.):


{
    "data": [
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "matildafeeney",
                "display_name": "Morgan Hirthe",
                "bio": null,
                "avatar_url": "https://i.pravatar.cc/512?u=matildafeeney",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/matildafeeney"
            }
        },
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "verlie08",
                "display_name": "Kirstin Nitzsche V",
                "bio": "Deleniti nemo odit quia officia.",
                "avatar_url": "https://i.pravatar.cc/512?u=verlie08",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/verlie08"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/friends-of-friends

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

profile   string  optional    

The ULID of the target profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Query Parameters

per_page   integer  optional    

Number of profiles per page (1-100). Example: 20

Delete Profile Friend

requires authentication

Remove a friendship from the authenticated user profile.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friends/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/friends/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200, Profile friendship deleted.):


{
    "message": "Profile friend deleted."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, The target profile is the authenticated profile.):


{
    "message": "The given data was invalid."
}
 

Request      

DELETE v1/me/profiles/{actingProfile_id}/friends/{targetProfile_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

targetProfile_id   string     

The ID of the targetProfile. Example: architecto

profile   string     

The ULID of the profile to unfriend. Example: 01AN4Z07BY79KA1307SR9X4MV3

List Profile Friends

requires authentication

List friends for the authenticated user profile or a target profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/profiles/architecto/friends?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/profiles/architecto/friends"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated profile friend list.):


{
    "data": [
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "qankunding",
                "display_name": "Morgan Hirthe",
                "bio": "Corporis dolorem mollitia deleniti nemo odit quia officia.",
                "avatar_url": "https://i.pravatar.cc/512?u=qankunding",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/qankunding"
            }
        },
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "gthiel",
                "display_name": "Mona Lemke",
                "bio": null,
                "avatar_url": "https://i.pravatar.cc/512?u=gthiel",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/gthiel"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/profiles/{actingProfile_id}/friends

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

profile   string  optional    

The ULID of the target profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Query Parameters

per_page   integer  optional    

Number of profiles per page (1-100). Example: 20

List Profile Friends Of Friends

requires authentication

List second-degree friends for the authenticated user profile or a target profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/profiles/architecto/friends-of-friends?per_page=20" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/profiles/architecto/friends-of-friends"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated friends-of-friends list.):


{
    "data": [
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "wbatz",
                "display_name": "Morgan Hirthe",
                "bio": "Deleniti nemo odit quia officia.",
                "avatar_url": "https://i.pravatar.cc/512?u=wbatz",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/wbatz"
            }
        },
        {
            "id": "",
            "type": "profiles",
            "attributes": {
                "handle": "walker26",
                "display_name": "Alexa Hamill DDS",
                "bio": null,
                "avatar_url": "https://i.pravatar.cc/512?u=walker26",
                "favorite_shops_visibility": "Only me",
                "favorite_items_visibility": "Only me",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/profiles/walker26"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/profiles/{actingProfile_id}/friends-of-friends

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

profile   string  optional    

The ULID of the target profile. Example: 01AN4Z07BY79KA1307SR9X4MV3

Query Parameters

per_page   integer  optional    

Number of profiles per page (1-100). Example: 20

Profiles

Show Profile

requires authentication

Fetch a profile by handle.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/profiles/jane_doe" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/profiles/jane_doe"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Profile found.):


{
    "data": {
        "id": "",
        "type": "profiles",
        "attributes": {
            "handle": "dareemelie",
            "display_name": "Morgan Hirthe",
            "bio": null,
            "avatar_url": "https://i.pravatar.cc/512?u=dareemelie",
            "favorite_shops_visibility": "Only me",
            "favorite_items_visibility": "Only me",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/profiles/dareemelie"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/profiles/{handle}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

handle   string     

The profile handle. Example: jane_doe

List Current User Profiles

requires authentication

List profiles owned by the authenticated user.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Request      

GET v1/me/profiles

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Create Current User Profile

requires authentication

Create the authenticated user profile.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"handle\": \"jane_doe\",
    \"display_name\": \"Jane Doe\",
    \"bio\": \"Curating local shops and finds.\",
    \"avatar_url\": \"https:\\/\\/i.pravatar.cc\\/512?u=jane_doe\",
    \"favorite_shops_visibility\": \"Public\",
    \"favorite_items_visibility\": \"Only me\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "handle": "jane_doe",
    "display_name": "Jane Doe",
    "bio": "Curating local shops and finds.",
    "avatar_url": "https:\/\/i.pravatar.cc\/512?u=jane_doe",
    "favorite_shops_visibility": "Public",
    "favorite_items_visibility": "Only me"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Profile created.):


{
    "data": {
        "id": "",
        "type": "profiles",
        "attributes": {
            "handle": "alayna44",
            "display_name": "Morgan Hirthe",
            "bio": "Nostrum omnis autem et consequatur aut.",
            "avatar_url": "https://i.pravatar.cc/512?u=alayna44",
            "favorite_shops_visibility": "Only me",
            "favorite_items_visibility": "Only me",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/profiles/alayna44"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (409, Current user already has a profile.):


{
    "message": "Profile already exists."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/me/profiles

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

handle   string     

Unique profile handle. Example: jane_doe

display_name   string  optional    

Public display name. Example: Jane Doe

bio   string  optional    

Public profile biography. Example: Curating local shops and finds.

avatar_url   string  optional    

Public avatar URL. Example: https://i.pravatar.cc/512?u=jane_doe

favorite_shops_visibility   string  optional    

Favorite shops visibility. Example: Public

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public
favorite_items_visibility   string  optional    

Favorite items visibility. Example: Only me

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public

Show Current User Profile

requires authentication

Fetch the authenticated user profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Current user profile.):


{
    "data": {
        "id": "",
        "type": "profiles",
        "attributes": {
            "handle": "pfritsch",
            "display_name": "Morgan Hirthe",
            "bio": null,
            "avatar_url": "https://i.pravatar.cc/512?u=pfritsch",
            "favorite_shops_visibility": "Only me",
            "favorite_items_visibility": "Only me",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/profiles/pfritsch"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

requires authentication

Search profiles by display name or handle for the acting profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/search?search=jane" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/search"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Update Current User Profile

requires authentication

Patch the authenticated user profile.

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/me/profiles/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"handle\": \"jane_doe_updated\",
    \"display_name\": \"Jane Doe\",
    \"bio\": \"Updated profile biography.\",
    \"avatar_url\": \"https:\\/\\/i.pravatar.cc\\/512?u=jane_doe_updated\",
    \"favorite_shops_visibility\": \"Followers\",
    \"favorite_items_visibility\": \"Friends\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "handle": "jane_doe_updated",
    "display_name": "Jane Doe",
    "bio": "Updated profile biography.",
    "avatar_url": "https:\/\/i.pravatar.cc\/512?u=jane_doe_updated",
    "favorite_shops_visibility": "Followers",
    "favorite_items_visibility": "Friends"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Profile updated.):


{
    "data": {
        "id": "",
        "type": "profiles",
        "attributes": {
            "handle": "carey67",
            "display_name": "Morgan Hirthe",
            "bio": null,
            "avatar_url": "https://i.pravatar.cc/512?u=carey67",
            "favorite_shops_visibility": "Only me",
            "favorite_items_visibility": "Only me",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/profiles/carey67"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

PATCH v1/me/profiles/{actingProfile_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Body Parameters

handle   string  optional    

Unique profile handle. Example: jane_doe_updated

display_name   string  optional    

Public display name. Example: Jane Doe

bio   string  optional    

Public profile biography. Example: Updated profile biography.

avatar_url   string  optional    

Public avatar URL. Example: https://i.pravatar.cc/512?u=jane_doe_updated

favorite_shops_visibility   string  optional    

Favorite shops visibility. Example: Followers

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public
favorite_items_visibility   string  optional    

Favorite items visibility. Example: Friends

Must be one of:
  • Only me
  • Friends
  • Followers
  • Friends of Friends
  • Public

Delete Current User Profile

requires authentication

Delete the authenticated user profile.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/me/profiles/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Profile deleted.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/me/profiles/{actingProfile_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

List My Profile Posts

requires authentication

List published timeline posts for the authenticated user profile, including repost rows.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/posts?sort=-published_at&per_page=20&include=author%2CrepostOfPost%2CrepostOfPost.author" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/posts"
);

const params = {
    "sort": "-published_at",
    "per_page": "20",
    "include": "author,repostOfPost,repostOfPost.author",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated current profile post list.):


{
    "data": [
        {
            "id": "",
            "type": "posts",
            "attributes": {
                "body": "Quidem nostrum qui commodi incidunt iure odit. Et modi ipsum nostrum omnis autem et consequatur. Dolores enim non facere tempora. Voluptatem laboriosam praesentium quis adipisci.",
                "status": "draft",
                "visibility": "Only me",
                "repost_of_post_id": null,
                "is_repost": false,
                "is_quote": false,
                "like_count": 0,
                "reply_count": 0,
                "repost_count": 0,
                "liked_by_me": false,
                "published_at": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            }
        },
        {
            "id": "",
            "type": "posts",
            "attributes": {
                "body": "Sit doloremque aut omnis quo sit. Mollitia aut rerum ipsa dolorem alias sapiente omnis harum. Itaque voluptas iste esse nesciunt optio.",
                "status": "draft",
                "visibility": "Only me",
                "repost_of_post_id": null,
                "is_repost": false,
                "is_quote": false,
                "like_count": 0,
                "reply_count": 0,
                "repost_count": 0,
                "liked_by_me": false,
                "published_at": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Current user profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/posts

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Query Parameters

sort   string  optional    

Sort column. Prefix with - for descending. Example: -published_at

Must be one of:
  • created_at
  • -created_at
  • published_at
  • -published_at
per_page   integer  optional    

Number of posts per page (1-100). Example: 20

include   string  optional    

Comma-separated relationships to include: author, repostOfPost, repostOfPost.author. Example: author,repostOfPost,repostOfPost.author

Referrals

Validate Referral Code

Check whether a referral code can be used during registration.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/referrals/validate" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"referral_code\": \"AbCdEfGhIjKlMnOpQrStUv\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/referrals/validate"
);

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

let body = {
    "referral_code": "AbCdEfGhIjKlMnOpQrStUv"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Validation result.):


{
    "valid": true
}
 

Request      

POST v1/referrals/validate

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

referral_code   string     

Referral code to validate. Example: AbCdEfGhIjKlMnOpQrStUv

Show Profile Referral

requires authentication

Return the stable referral code and registration URL for an owned profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/referral" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/referral"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "code": "AbCdEfGhIjKlMnOpQrStUv",
    "url": "https://frontend.bazaarspot-api.test/register?referral_code=AbCdEfGhIjKlMnOpQrStUv"
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/referral

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

actingProfile   string     

Owned profile ULID. Example: architecto

Reviews

List Reviews

requires authentication

List shop and item reviews with filtering, sorting, pagination, and optional relationship includes.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/reviews?filter%5Bsearch%5D=fast+shipping&filter%5Bshop_id%5D=01jabcxyz1234567890abcdefg&filter%5Bitem_id%5D=01jabcxyz1234567890abcdefg&filter%5Buser_id%5D=01jabcxyz1234567890abcdefg&filter%5Brating%5D=5&sort=-created_at&per_page=20&include=item%2Cshop%2Cuser%2Creply" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/reviews"
);

const params = {
    "filter[search]": "fast shipping",
    "filter[shop_id]": "01jabcxyz1234567890abcdefg",
    "filter[item_id]": "01jabcxyz1234567890abcdefg",
    "filter[user_id]": "01jabcxyz1234567890abcdefg",
    "filter[rating]": "5",
    "sort": "-created_at",
    "per_page": "20",
    "include": "item,shop,user,reply",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated review list.):


{
    "data": [
        {
            "id": "",
            "type": "reviews",
            "attributes": {
                "title": null,
                "body": "Nostrum qui commodi incidunt iure.",
                "rating": 5,
                "target_type": "shop",
                "target_id": "01kwve0y54ek2kerfcyzmqqsd0",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/reviews/01ktwg1fhzq1dpagvermfbjzad"
            }
        },
        {
            "id": "",
            "type": "reviews",
            "attributes": {
                "title": "Et recusandae modi rerum ex.",
                "body": null,
                "rating": 1,
                "target_type": "shop",
                "target_id": "01kwve0y58665m2f9ztdsvbk26",
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/reviews/01ktwg1fhzq1dpagvermfbjzad"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/reviews

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

filter[search]   string  optional    

Search by review title or body. Example: fast shipping

filter[shop_id]   string  optional    

Filter by shop ULID. Example: 01jabcxyz1234567890abcdefg

filter[item_id]   string  optional    

Filter by item ULID. Example: 01jabcxyz1234567890abcdefg

filter[user_id]   string  optional    

Filter by reviewer user ULID. Example: 01jabcxyz1234567890abcdefg

filter[rating]   integer  optional    

Filter by exact rating from 1 to 5. Example: 5

sort   string  optional    

Sort column. Prefix with - for descending. Example: -created_at

Must be one of:
  • created_at
  • -created_at
  • updated_at
  • -updated_at
  • rating
  • -rating
per_page   integer  optional    

Number of reviews per page (1-100). Example: 20

include   string  optional    

Comma-separated relationships to include: item, shop, user, reply. Example: item,shop,user,reply

Show Review

requires authentication

Fetch a single review by ID.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/reviews/architecto?include=item%2Cshop%2Cuser" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/reviews/architecto"
);

const params = {
    "include": "item,shop,user",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Review details.):


{
    "data": {
        "id": "",
        "type": "reviews",
        "attributes": {
            "title": null,
            "body": "Nostrum qui commodi incidunt iure.",
            "rating": 5,
            "target_type": "shop",
            "target_id": "01kwve0y5h2srqhcr3g0qbhk9y",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/reviews/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Review could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/reviews/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the review. Example: architecto

review   string     

The ULID of the review. Example: 01jabcxyz1234567890abcdefg

Query Parameters

include   string  optional    

Comma-separated relationships to include: item, shop, user. Example: item,shop,user

Create Review

requires authentication

Create a new review for a shop or item.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/reviews" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"item_id\": \"01jabcxyz1234567890abcdefg\",
    \"title\": \"Great buying experience\",
    \"body\": \"Fast shipping and accurate product photos.\",
    \"rating\": 5
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/reviews"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "item_id": "01jabcxyz1234567890abcdefg",
    "title": "Great buying experience",
    "body": "Fast shipping and accurate product photos.",
    "rating": 5
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Review created.):


{
    "data": {
        "id": "",
        "type": "reviews",
        "attributes": {
            "title": null,
            "body": "Nostrum qui commodi incidunt iure.",
            "rating": 5,
            "target_type": "shop",
            "target_id": "01kwve0y5s6r0674jt6va8t022",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/reviews/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/reviews

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

shop_id   string  optional    

ULID of the shop being reviewed. Provide exactly one of shop_id or item_id.

item_id   string  optional    

ULID of the item being reviewed. Provide exactly one of shop_id or item_id. Example: 01jabcxyz1234567890abcdefg

title   string  optional    

Review title. Example: Great buying experience

body   string  optional    

Review body content. Example: Fast shipping and accurate product photos.

rating   integer     

Rating from 1 to 5. Example: 5

Update Review

requires authentication

Patch a review by ID.

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/reviews/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"shop_id\": \"01jabcxyz1234567890abcdefg\",
    \"title\": \"Updated buying experience\",
    \"body\": \"Updated review text.\",
    \"rating\": 4
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/reviews/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "shop_id": "01jabcxyz1234567890abcdefg",
    "title": "Updated buying experience",
    "body": "Updated review text.",
    "rating": 4
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Review updated.):


{
    "data": {
        "id": "",
        "type": "reviews",
        "attributes": {
            "title": null,
            "body": "Nostrum qui commodi incidunt iure.",
            "rating": 5,
            "target_type": "shop",
            "target_id": "01kwve0y60jx9zbr3pmkwy91y0",
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/reviews/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Review could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

PATCH v1/reviews/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the review. Example: architecto

review   string     

The ULID of the review. Example: 01jabcxyz1234567890abcdefg

Body Parameters

shop_id   string  optional    

Move the review to this shop and clear item_id. Cannot be sent with item_id. Example: 01jabcxyz1234567890abcdefg

item_id   string  optional    

Move the review to this item and clear shop_id. Cannot be sent with shop_id.

title   string  optional    

Updated review title. Example: Updated buying experience

body   string  optional    

Updated review body content. Example: Updated review text.

rating   integer  optional    

Updated rating from 1 to 5. Example: 4

Delete Review

requires authentication

Delete a review by ID.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/reviews/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/reviews/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Review deleted.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Review could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/reviews/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the review. Example: architecto

review   string     

The ULID of the review. Example: 01jabcxyz1234567890abcdefg

Shareables

List Received Shareables

requires authentication

List shareables shared with the authenticated user profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables/received?filter%5Bshareable_type%5D=shop&filter%5Bshareable_id%5D=01ktwg1fhzq1dpagvermfbjzad&sort=-created_at&per_page=20&include=shareable%2CsharedByProfile" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables/received"
);

const params = {
    "filter[shareable_type]": "shop",
    "filter[shareable_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "sort": "-created_at",
    "per_page": "20",
    "include": "shareable,sharedByProfile",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated received shareable list.):


{
    "data": [
        {
            "id": "",
            "type": "shareables",
            "attributes": {
                "shareable_type": null,
                "shareable_id": null,
                "shared_by_profile_id": null,
                "shared_with_profile_id": null,
                "created_at": null,
                "updated_at": null
            }
        },
        {
            "id": "",
            "type": "shareables",
            "attributes": {
                "shareable_type": null,
                "shareable_id": null,
                "shared_by_profile_id": null,
                "shared_with_profile_id": null,
                "created_at": null,
                "updated_at": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Authenticated user profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/shareables/received

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Query Parameters

filter[shareable_type]   string  optional    

Filter by target type. Example: shop

Must be one of:
  • shop
  • item
  • collection
filter[shareable_id]   string  optional    

Filter by target ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

sort   string  optional    

Sort column. Prefix with - for descending. Example: -created_at

Must be one of:
  • created_at
  • -created_at
  • updated_at
  • -updated_at
per_page   integer  optional    

Number of shareables per page (1-100). Example: 20

include   string  optional    

Comma-separated relationships to include: shareable, sharedByProfile, sharedWithProfile. Example: shareable,sharedByProfile

List Sent Shareables

requires authentication

List shareables sent by the authenticated user profile.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables/sent?filter%5Bshareable_type%5D=shop&filter%5Bshareable_id%5D=01ktwg1fhzq1dpagvermfbjzad&sort=-created_at&per_page=20&include=shareable%2CsharedWithProfile" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables/sent"
);

const params = {
    "filter[shareable_type]": "shop",
    "filter[shareable_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "sort": "-created_at",
    "per_page": "20",
    "include": "shareable,sharedWithProfile",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated sent shareable list.):


{
    "data": [
        {
            "id": "",
            "type": "shareables",
            "attributes": {
                "shareable_type": null,
                "shareable_id": null,
                "shared_by_profile_id": null,
                "shared_with_profile_id": null,
                "created_at": null,
                "updated_at": null
            }
        },
        {
            "id": "",
            "type": "shareables",
            "attributes": {
                "shareable_type": null,
                "shareable_id": null,
                "shared_by_profile_id": null,
                "shared_with_profile_id": null,
                "created_at": null,
                "updated_at": null
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Authenticated user profile could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/shareables/sent

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Query Parameters

filter[shareable_type]   string  optional    

Filter by target type. Example: shop

Must be one of:
  • shop
  • item
  • collection
filter[shareable_id]   string  optional    

Filter by target ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

sort   string  optional    

Sort column. Prefix with - for descending. Example: -created_at

Must be one of:
  • created_at
  • -created_at
  • updated_at
  • -updated_at
per_page   integer  optional    

Number of shareables per page (1-100). Example: 20

include   string  optional    

Comma-separated relationships to include: shareable, sharedByProfile, sharedWithProfile. Example: shareable,sharedWithProfile

Show Shareable

requires authentication

Fetch one shareable if the authenticated user profile is the sender or recipient.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables/16?include=shareable%2CsharedByProfile" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables/16"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Shareable details.):


{
    "data": {
        "id": "",
        "type": "shareables",
        "attributes": {
            "shareable_type": null,
            "shareable_id": null,
            "shared_by_profile_id": null,
            "shared_with_profile_id": null,
            "created_at": null,
            "updated_at": null
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Shareable could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/shareables/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

id   integer     

The ID of the shareable. Example: 16

shareable   integer     

The shareable ID. Example: 1

Query Parameters

include   string  optional    

Comma-separated relationships to include: shareable, sharedByProfile, sharedWithProfile. Example: shareable,sharedByProfile

Create Shareable

requires authentication

Share a shop, item, or collection with a friend profile.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"shareable_type\": \"shop\",
    \"shareable_id\": \"01ktwg1fhzq1dpagvermfbjzad\",
    \"shared_with_profile_id\": \"01ktwg1fhzq1dpagvermfbjzae\"
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "shareable_type": "shop",
    "shareable_id": "01ktwg1fhzq1dpagvermfbjzad",
    "shared_with_profile_id": "01ktwg1fhzq1dpagvermfbjzae"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Shareable created.):


{
    "data": {
        "id": "",
        "type": "shareables",
        "attributes": {
            "shareable_type": null,
            "shareable_id": null,
            "shared_by_profile_id": null,
            "shared_with_profile_id": null,
            "created_at": null,
            "updated_at": null
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Authenticated user profile could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/me/profiles/{actingProfile_id}/shareables

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Body Parameters

shareable_type   string     

Shareable target type. Example: shop

Must be one of:
  • shop
  • item
  • collection
shareable_id   string     

ULID of the target being shared. Example: 01ktwg1fhzq1dpagvermfbjzad

shared_with_profile_id   string     

Friend profile ULID receiving the share. Example: 01ktwg1fhzq1dpagvermfbjzae

Delete Shareable

requires authentication

Delete one shareable if the authenticated user profile is the sender or recipient.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables/16" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/shareables/16"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Shareable deleted.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Shareable could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/me/profiles/{actingProfile_id}/shareables/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

id   integer     

The ID of the shareable. Example: 16

shareable   integer     

The shareable ID. Example: 1

Shops

List Shops

List shops with filtering, sorting, pagination, and optional relationship includes.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shops?filter%5Bsearch%5D=odd&filter%5Bslug%5D=odd-egypt&filter%5Bis_active%5D=1&filter%5Bverified%5D=1&filter%5Bclassification%5D=online_store&filter%5Bcategory_id%5D=01ktwg1fhzq1dpagvermfbjzad&filter%5Bsocial_platform%5D=instagram&filter%5Bsocial_identifier_type%5D=username&filter%5Bsocial_identifier%5D=odd.eg&filter%5Bscraped_from%5D=2026-04-01&filter%5Bscraped_until%5D=2026-04-15&sort=-created_at&per_page=20&include=country%2Ccategories" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shops"
);

const params = {
    "filter[search]": "odd",
    "filter[slug]": "odd-egypt",
    "filter[is_active]": "1",
    "filter[verified]": "1",
    "filter[classification]": "online_store",
    "filter[category_id]": "01ktwg1fhzq1dpagvermfbjzad",
    "filter[social_platform]": "instagram",
    "filter[social_identifier_type]": "username",
    "filter[social_identifier]": "odd.eg",
    "filter[scraped_from]": "2026-04-01",
    "filter[scraped_until]": "2026-04-15",
    "sort": "-created_at",
    "per_page": "20",
    "include": "country,categories",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paginated shop list.):


{
    "data": [
        {
            "id": "",
            "type": "shops",
            "attributes": {
                "name": "Bailey Ltd",
                "slug": "bailey-ltd",
                "description": "Et fugiat sunt nihil accusantium.",
                "website_url": "https://okuneva.test",
                "domain": "okuneva.test",
                "phone": "+1-463-622-3498",
                "email": "[email protected]",
                "address": "38862 Ferne Locks Suite 058\nChristianshire, IA 97161",
                "classification": "department_store",
                "country_code": null,
                "region": "North Demarcusmouth",
                "is_active": true,
                "is_verified": false,
                "verified_at": null,
                "inactive_reason": null,
                "social_profiles": [],
                "url": null,
                "logo_url": null,
                "banner_image_url": null,
                "shop_image_url": null,
                "shop_favicon_url": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/shops/01ktwg1fhzq1dpagvermfbjzad"
            }
        },
        {
            "id": "",
            "type": "shops",
            "attributes": {
                "name": "Labadie, Haag and Considine",
                "slug": "labadie-haag-and-considine",
                "description": "Eum doloremque id aut libero aliquam veniam corporis.",
                "website_url": "https://wisoky.test",
                "domain": "wisoky.test",
                "phone": "(907) 735-1679",
                "email": "[email protected]",
                "address": "4985 Jacques Lakes Apt. 004\nRoxanneview, GA 41591-5182",
                "classification": "marketplace",
                "country_code": null,
                "region": "North Zachery",
                "is_active": true,
                "is_verified": false,
                "verified_at": null,
                "inactive_reason": null,
                "social_profiles": [],
                "url": null,
                "logo_url": null,
                "banner_image_url": null,
                "shop_image_url": null,
                "shop_favicon_url": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/shops/01ktwg1fhzq1dpagvermfbjzad"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/shops

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

filter[search]   string  optional    

Search by name, slug, domain, website URL, or description. Example: odd

filter[slug]   string  optional    

Filter by exact shop slug. Example: odd-egypt

filter[is_active]   boolean  optional    

Filter by active status. Example: true

filter[verified]   boolean  optional    

Filter by verification status. Example: true

filter[country_code]   string  optional    

Filter by ISO country code.

filter[classification]   string  optional    

Filter by shop classification. Example: online_store

Must be one of:
  • online_store
  • local_brand
  • marketplace
  • department_store
  • specialty_store
  • boutique
  • chain_store
  • franchise
filter[category_id]   string  optional    

Filter by category ULID. Example: 01ktwg1fhzq1dpagvermfbjzad

filter[feature_id]   integer  optional    

Filter by shop feature ID.

filter[ecommerce_provider_id]   integer  optional    

Filter by ecommerce provider ID.

filter[social_platform]   string  optional    

Filter by social profile platform. Example: instagram

Must be one of:
  • facebook
  • instagram
filter[social_identifier_type]   string  optional    

Filter by social profile identifier type. Example: username

Must be one of:
  • username
  • profile_id
  • url
filter[social_identifier]   string  optional    

Filter by normalized social profile identifier. Example: odd.eg

filter[scraped_from]   string  optional    

Only shops scraped on or after this date (Y-m-d). Example: 2026-04-01

filter[scraped_until]   string  optional    

Only shops scraped on or before this date (Y-m-d). Example: 2026-04-15

sort   string  optional    

Sort column. Recommended sorting requires authentication and X-Profile-ID. Example: -created_at

Must be one of:
  • recommended
  • popularity
  • -popularity
  • name
  • -name
  • created_at
  • -created_at
  • updated_at
  • -updated_at
  • verified_at
  • -verified_at
  • last_scraped_at
  • -last_scraped_at
per_page   integer  optional    

Number of shops per page (1–100). Example: 20

include   string  optional    

Comma-separated relationships to include: country, categories, features. Example: country,categories

Show Shop

Fetch a single shop by ULID.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/shops/architecto?include=country%2Cfeatures" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shops/architecto"
);

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

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

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Shop details.):


{
    "data": {
        "id": "",
        "type": "shops",
        "attributes": {
            "name": "Rempel, Gulgowski and O'Kon",
            "slug": "rempel-gulgowski-and-okon",
            "description": "Accusantium harum mollitia modi deserunt aut ab.",
            "website_url": "https://ernser.test",
            "domain": "ernser.test",
            "phone": "1-463-692-1881",
            "email": "[email protected]",
            "address": "1052 Carey Greens\nLefflerhaven, TX 58408-7043",
            "classification": "marketplace",
            "country_code": null,
            "region": "Raynormouth",
            "is_active": true,
            "is_verified": false,
            "verified_at": null,
            "inactive_reason": null,
            "social_profiles": [],
            "url": null,
            "logo_url": null,
            "banner_image_url": null,
            "shop_image_url": null,
            "shop_favicon_url": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/shops/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (404, Shop could not be found.):


{
    "message": "Not Found."
}
 

Request      

GET v1/shops/{id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the shop. Example: architecto

shop   string     

The ULID of the shop. Example: 01ktwg1fhzq1dpagvermfbjzad

Query Parameters

include   string  optional    

Comma-separated relationships to include: country, categories, features. Example: country,features

Create Shop

requires authentication

Create a new shop record.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/shops" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Odd Egypt\",
    \"domain\": \"oddegypt.com\",
    \"slug\": \"odd-egypt\",
    \"website_url\": \"https:\\/\\/oddegypt.com\",
    \"description\": \"Independent Egyptian online store.\",
    \"phone\": \"+20 100 000 0000\",
    \"email\": \"[email protected]\",
    \"address\": \"Cairo, Egypt\",
    \"classification\": \"online_store\",
    \"country_code\": \"EG\",
    \"country_id\": 1,
    \"region\": \"Cairo\",
    \"is_active\": true,
    \"verified_at\": \"2026-04-15T12:00:00+00:00\",
    \"favorite\": true,
    \"social_profiles\": [
        {
            \"platform\": \"instagram\",
            \"handle\": \"@odd.eg\"
        }
    ]
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/shops"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Odd Egypt",
    "domain": "oddegypt.com",
    "slug": "odd-egypt",
    "website_url": "https:\/\/oddegypt.com",
    "description": "Independent Egyptian online store.",
    "phone": "+20 100 000 0000",
    "email": "[email protected]",
    "address": "Cairo, Egypt",
    "classification": "online_store",
    "country_code": "EG",
    "country_id": 1,
    "region": "Cairo",
    "is_active": true,
    "verified_at": "2026-04-15T12:00:00+00:00",
    "favorite": true,
    "social_profiles": [
        {
            "platform": "instagram",
            "handle": "@odd.eg"
        }
    ]
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Shop created.):


{
    "data": {
        "id": "",
        "type": "shops",
        "attributes": {
            "name": "Price Ltd",
            "slug": "price-ltd",
            "description": "Commodi incidunt iure odit.",
            "website_url": "https://cronin.test",
            "domain": "cronin.test",
            "phone": "203-867-3351",
            "email": "[email protected]",
            "address": "427 Labadie Curve Suite 170\nLake Micaela, ID 92203",
            "classification": "chain_store",
            "country_code": null,
            "region": "West Cynthiaberg",
            "is_active": true,
            "is_verified": false,
            "verified_at": null,
            "inactive_reason": null,
            "social_profiles": [],
            "url": null,
            "logo_url": null,
            "banner_image_url": null,
            "shop_image_url": null,
            "shop_favicon_url": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/shops/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

POST v1/shops

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Human-friendly shop name. Example: Odd Egypt

domain   string     

Primary domain for the shop. Example: oddegypt.com

slug   string  optional    

URL slug. Generated from name when omitted. Example: odd-egypt

website_url   string  optional    

Canonical website URL. Defaults to https://{domain} when omitted. Example: https://oddegypt.com

description   string  optional    

Shop description. Example: Independent Egyptian online store.

phone   string  optional    

Public shop phone number. Example: +20 100 000 0000

email   string  optional    

Public shop email address. Example: [email protected]

address   string  optional    

Public shop address. Example: Cairo, Egypt

classification   string  optional    

Shop classification. Example: online_store

Must be one of:
  • online_store
  • local_brand
  • marketplace
  • department_store
  • specialty_store
  • boutique
  • chain_store
  • franchise
country_code   string  optional    

ISO 3166-1 alpha-2 country code. Example: EG

country_id   integer  optional    

Country record ID. Reconciled with country_code when both are provided. Example: 1

region   string  optional    

Shop region or city. Example: Cairo

is_active   boolean  optional    

Whether the shop is active. Example: true

verified_at   string  optional    

Verification timestamp (ISO 8601). Set to mark the shop as manually verified. Example: 2026-04-15T12:00:00+00:00

favorite   boolean  optional    

Favorite the created or matched shop for the authenticated user. Example: true

social_profiles   object[]  optional    

Facebook or Instagram profiles for shops without websites.

platform   string     

Social platform. Example: instagram

Must be one of:
  • facebook
  • instagram
handle   string  optional    

Social handle when known. Example: @odd.eg

url   string  optional    

Social profile URL, including Facebook profile ID URLs. Example: https://www.facebook.com/profile.php?id=100077674242505

Update Shop

requires authentication

Patch a shop by ULID.

Example request:
curl --request PATCH \
    "https://bazaarspot-api.test/v1/shops/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Odd Egypt Boutique\",
    \"domain\": \"oddegypt.com\",
    \"slug\": \"odd-egypt-boutique\",
    \"website_url\": \"https:\\/\\/oddegypt.com\",
    \"description\": \"Updated shop description.\",
    \"phone\": \"+20 100 000 0000\",
    \"email\": \"[email protected]\",
    \"address\": \"Cairo, Egypt\",
    \"classification\": \"boutique\",
    \"country_code\": \"EG\",
    \"country_id\": 1,
    \"region\": \"Alexandria\",
    \"is_active\": true,
    \"verified_at\": \"2026-04-15T12:00:00+00:00\",
    \"social_profiles\": [
        {
            \"platform\": \"instagram\",
            \"handle\": \"@odd.eg\"
        }
    ]
}"
const url = new URL(
    "https://bazaarspot-api.test/v1/shops/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "name": "Odd Egypt Boutique",
    "domain": "oddegypt.com",
    "slug": "odd-egypt-boutique",
    "website_url": "https:\/\/oddegypt.com",
    "description": "Updated shop description.",
    "phone": "+20 100 000 0000",
    "email": "[email protected]",
    "address": "Cairo, Egypt",
    "classification": "boutique",
    "country_code": "EG",
    "country_id": 1,
    "region": "Alexandria",
    "is_active": true,
    "verified_at": "2026-04-15T12:00:00+00:00",
    "social_profiles": [
        {
            "platform": "instagram",
            "handle": "@odd.eg"
        }
    ]
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Shop updated.):


{
    "data": {
        "id": "",
        "type": "shops",
        "attributes": {
            "name": "Dare Group",
            "slug": "dare-group",
            "description": "Odit et et modi.",
            "website_url": "https://leuschke.test",
            "domain": "leuschke.test",
            "phone": "+1-715-952-7161",
            "email": "[email protected]",
            "address": "723 Wisoky Passage\nMicaelatown, CA 87335-0574",
            "classification": "specialty_store",
            "country_code": null,
            "region": "West Gisselle",
            "is_active": true,
            "is_verified": false,
            "verified_at": null,
            "inactive_reason": null,
            "social_profiles": [],
            "url": null,
            "logo_url": null,
            "banner_image_url": null,
            "shop_image_url": null,
            "shop_favicon_url": null,
            "created_at": "2026-07-06T10:01:48+00:00",
            "updated_at": "2026-07-06T10:01:48+00:00"
        },
        "links": {
            "self": "http://bazaarspot-api.test/v1/shops/01ktwg1fhzq1dpagvermfbjzad"
        }
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Shop could not be found.):


{
    "message": "Not Found."
}
 

Example response (422, Validation failed.):


{
    "message": "The given data was invalid."
}
 

Request      

PATCH v1/shops/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the shop. Example: architecto

shop   string     

The ULID of the shop. Example: 01ktwg1fhzq1dpagvermfbjzad

Body Parameters

name   string  optional    

Human-friendly shop name. Example: Odd Egypt Boutique

domain   string  optional    

Primary domain for the shop. Example: oddegypt.com

slug   string  optional    

New URL slug for the shop. Example: odd-egypt-boutique

website_url   string  optional    

Canonical website URL. Example: https://oddegypt.com

description   string  optional    

Shop description. Example: Updated shop description.

phone   string  optional    

Public shop phone number. Example: +20 100 000 0000

email   string  optional    

Public shop email address. Example: [email protected]

address   string  optional    

Public shop address. Example: Cairo, Egypt

classification   string  optional    

Shop classification. Example: boutique

Must be one of:
  • online_store
  • local_brand
  • marketplace
  • department_store
  • specialty_store
  • boutique
  • chain_store
  • franchise
country_code   string  optional    

ISO 3166-1 alpha-2 country code. Example: EG

country_id   integer  optional    

Country record ID. Reconciled with country_code when both are provided. Example: 1

region   string  optional    

Shop region or city. Example: Alexandria

is_active   boolean  optional    

Whether the shop is active. Example: true

verified_at   string  optional    

Verification timestamp (ISO 8601). Set to mark the shop as manually verified. Example: 2026-04-15T12:00:00+00:00

social_profiles   object[]  optional    

Replacement Facebook or Instagram profiles for the shop.

platform   string     

Social platform. Example: instagram

Must be one of:
  • facebook
  • instagram
handle   string  optional    

Social handle when known. Example: @odd.eg

url   string  optional    

Social profile URL, including Facebook profile ID URLs. Example: https://www.facebook.com/profile.php?id=100077674242505

Delete Shop

requires authentication

Soft delete a shop by ULID.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/shops/architecto" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/shops/architecto"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, Shop deleted.):

Empty response
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Shop could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/shops/{id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the shop. Example: architecto

shop   string     

The ULID of the shop. Example: 01ktwg1fhzq1dpagvermfbjzad

User Bookmarked Items

List User Bookmarked Items

requires authentication

List bookmarked items for the authenticated user.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/bookmarked-items?per_page=20&include=shop" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/bookmarked-items"
);

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

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Bookmarked item list.):


{
    "data": [
        {
            "id": "",
            "type": "items",
            "attributes": {
                "name": "Incidunt Iure Odit",
                "slug": "incidunt-iure-odit",
                "description": "Et modi ipsum nostrum omnis autem et consequatur.",
                "external_url": null,
                "price": 3651.56,
                "original_price": null,
                "currency": "EGP",
                "sku": "SN-515-RW",
                "condition": "new",
                "stock_level": 13,
                "weight": null,
                "dimensions": null,
                "specifications": null,
                "is_available": true,
                "is_active": true,
                "url": null,
                "featured_image_url": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/items/01ktwg1fhzq1dpagvermfbjzad"
            }
        },
        {
            "id": "",
            "type": "items",
            "attributes": {
                "name": "Reiciendis Quia Perspiciatis",
                "slug": "reiciendis-quia-perspiciatis",
                "description": "Ducimus corrupti et dolores quia maiores assumenda.",
                "external_url": null,
                "price": 689.49,
                "original_price": null,
                "currency": "EGP",
                "sku": "SG-468-TV",
                "condition": "new",
                "stock_level": 143,
                "weight": null,
                "dimensions": null,
                "specifications": null,
                "is_available": true,
                "is_active": true,
                "url": null,
                "featured_image_url": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/items/01ktwg1fhzq1dpagvermfbjzad"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/bookmarked-items

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Query Parameters

per_page   integer  optional    

Number of bookmarked items per page (1-100). Example: 20

include   string  optional    

Comma-separated item relationships to include: shop, brand, categories, variants. Example: shop

Create User Bookmarked Item

requires authentication

Bookmark an item for the authenticated user.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/bookmarked-items/01AN4Z07BY79KA1307SR9X4MV3" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/bookmarked-items/01AN4Z07BY79KA1307SR9X4MV3"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Item was already bookmarked by the user.):


{
    "message": "Bookmarked item already exists."
}
 

Example response (201, Bookmarked item created.):


{
    "message": "Bookmarked item created."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Item could not be found.):


{
    "message": "Not Found."
}
 

Request      

POST v1/me/profiles/{actingProfile_id}/bookmarked-items/{item_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

item_id   string     

The ULID of the item to bookmark. Example: 01AN4Z07BY79KA1307SR9X4MV3

Delete User Bookmarked Item

requires authentication

Delete an item from the authenticated user bookmarked items.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/bookmarked-items/01AN4Z07BY79KA1307SR9X4MV3" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/bookmarked-items/01AN4Z07BY79KA1307SR9X4MV3"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200, Bookmarked item deleted.):


{
    "message": "Bookmarked item deleted."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Item could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/me/profiles/{actingProfile_id}/bookmarked-items/{item_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

item_id   string     

The ULID of the item to remove from bookmarks. Example: 01AN4Z07BY79KA1307SR9X4MV3

User Favorite Shops

List User Favorite Shops

requires authentication

List favorite shops for the authenticated user.

Example request:
curl --request GET \
    --get "https://bazaarspot-api.test/v1/me/profiles/architecto/favorite-shops" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/favorite-shops"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Favorite shop list.):


{
    "data": [
        {
            "id": "",
            "type": "shops",
            "attributes": {
                "name": "Baumbach Ltd",
                "slug": "baumbach-ltd",
                "description": "Nostrum omnis autem et consequatur aut.",
                "website_url": "https://bauch.test",
                "domain": "bauch.test",
                "phone": "283.476.7809",
                "email": "[email protected]",
                "address": "2127 Verlie Manors\nWest Gisselle, CO 53669",
                "classification": "boutique",
                "country_code": null,
                "region": "East Nedra",
                "is_active": true,
                "is_verified": false,
                "verified_at": null,
                "inactive_reason": null,
                "social_profiles": [],
                "url": null,
                "logo_url": null,
                "banner_image_url": null,
                "shop_image_url": null,
                "shop_favicon_url": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/shops/01ktwg1fhzq1dpagvermfbjzad"
            }
        },
        {
            "id": "",
            "type": "shops",
            "attributes": {
                "name": "Bradtke Group",
                "slug": "bradtke-group",
                "description": "Qui repudiandae laboriosam est alias.",
                "website_url": "https://emmerich.test",
                "domain": "emmerich.test",
                "phone": "269-915-6037",
                "email": "[email protected]",
                "address": "13733 Runolfsson Mall\nMargarettaside, OH 29924",
                "classification": "marketplace",
                "country_code": null,
                "region": "Kreigerburgh",
                "is_active": true,
                "is_verified": false,
                "verified_at": null,
                "inactive_reason": null,
                "social_profiles": [],
                "url": null,
                "logo_url": null,
                "banner_image_url": null,
                "shop_image_url": null,
                "shop_favicon_url": null,
                "created_at": "2026-07-06T10:01:48+00:00",
                "updated_at": "2026-07-06T10:01:48+00:00"
            },
            "links": {
                "self": "http://bazaarspot-api.test/v1/shops/01ktwg1fhzq1dpagvermfbjzad"
            }
        }
    ],
    "links": {
        "first": "/?page=1",
        "last": "/?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "links": [
            {
                "url": null,
                "label": "&laquo; Previous",
                "page": null,
                "active": false
            },
            {
                "url": "/?page=1",
                "label": "1",
                "page": 1,
                "active": true
            },
            {
                "url": null,
                "label": "Next &raquo;",
                "page": null,
                "active": false
            }
        ],
        "path": "/",
        "per_page": 2,
        "to": 2,
        "total": 2
    }
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Request      

GET v1/me/profiles/{actingProfile_id}/favorite-shops

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

Create User Favorite Shop

requires authentication

Favorite a shop for the authenticated user.

Example request:
curl --request POST \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/favorite-shops/01AN4Z07BY79KA1307SR9X4MV3" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/favorite-shops/01AN4Z07BY79KA1307SR9X4MV3"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Shop was already favorited by the user.):


{
    "message": "Favorite shop already exists."
}
 

Example response (201, Favorite shop created.):


{
    "message": "Favorite shop created."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Shop could not be found.):


{
    "message": "Not Found."
}
 

Request      

POST v1/me/profiles/{actingProfile_id}/favorite-shops/{shop_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

shop_id   string     

The ULID of the shop to favorite. Example: 01AN4Z07BY79KA1307SR9X4MV3

Delete User Favorite Shop

requires authentication

Delete a shop from the authenticated user favorite shops.

Example request:
curl --request DELETE \
    "https://bazaarspot-api.test/v1/me/profiles/architecto/favorite-shops/01AN4Z07BY79KA1307SR9X4MV3" \
    --header "Authorization: Bearer {YOUR_BEARER_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "https://bazaarspot-api.test/v1/me/profiles/architecto/favorite-shops/01AN4Z07BY79KA1307SR9X4MV3"
);

const headers = {
    "Authorization": "Bearer {YOUR_BEARER_TOKEN}",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200, Favorite shop deleted.):


{
    "message": "Favorite shop deleted."
}
 

Example response (401, Authentication failed.):


{
    "message": "Unauthenticated."
}
 

Example response (403, Token is missing the required ability.):


{
    "message": "Forbidden."
}
 

Example response (404, Shop could not be found.):


{
    "message": "Not Found."
}
 

Request      

DELETE v1/me/profiles/{actingProfile_id}/favorite-shops/{shop_id}

Headers

Authorization        

Example: Bearer {YOUR_BEARER_TOKEN}

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

actingProfile_id   string     

The ID of the actingProfile. Example: architecto

shop_id   string     

The ULID of the shop to unfavorite. Example: 01AN4Z07BY79KA1307SR9X4MV3