MENU navbar-image

Introduction

Welcome to the Babylon Core API documentation.

Overview

Babylon exposes two public HTTP surfaces for marketplace integrations:

Most integrations start on the primary platform API, then call bid ingress only for live bid placement flows.

Connection Overview

  1. Resolve tenant context from your Babylon tenant domain/subdomain, or send X-Tenant-ID when calling a shared platform host.
  2. Authenticate with an API key for server-to-server integrations or a bearer token for signed-in users.
  3. Use the primary platform API for setup, catalog, order, payment, and webhook management.
  4. If you consume outbound events, create a webhook subscription, verify signatures, and use the events feed or replay endpoints for reconciliation.

Webhooks & Event Model

Webhook deliveries are signed HTTPS POST requests. Each integration event uses the same top-level envelope:

Subscriptions control which event_type values you receive. The events feed is the canonical catalog of supported outbound events and can also be used for replay and reconciliation workflows.

Authentication

This API supports two authentication methods:

API keys are designed for server-to-server communication, integrations, and webhooks.

Usage:

curl -H "Authorization: Bearer <your-api-key>" https://api.babylon.com/api/listings

Benefits:

Creating API Keys:

2. Sanctum Tokens (For End Users)

Sanctum tokens are designed for user-facing applications (web frontends, mobile apps).

Usage:

  1. Obtain a token by making a POST request to /api/auth/login with your credentials (no Authorization header required)
  2. Include the token in the Authorization header as a Bearer token
  3. Include the X-Tenant-ID header with your tenant UUID (or use tenant-specific domains)
curl -H "Authorization: Bearer <sanctum-token>" \
     -H "X-Tenant-ID: your-tenant-uuid" \
     https://api.babylon.com/api/listings

SPA note: When called from a Sanctum-stateful browser origin, /api/auth/login also establishes a cookie session while returning token for stateless downstream services.

Multi-Tenancy

All API requests must be scoped to a specific tenant.

With API Keys:

With Sanctum Tokens: You can identify your tenant in three ways:

Rate Limiting

API requests are rate limited to prevent abuse. Rate limits vary by endpoint category. Rate limit information is included in response headers: X-RateLimit-Limit, X-RateLimit-Remaining, and Retry-After when applicable.

Error Handling

The API uses conventional HTTP response codes to indicate success or failure. Codes in the 2xx range indicate success, 4xx indicate client errors, and 5xx indicate server errors.

Error responses include a JSON body with details:

{
  "message": "Error description",
  "errors": {
    "field_name": ["Validation error message"]
  }
}

Pagination

List endpoints return paginated results with the following structure:

{
  "data": [...],
  "links": {
    "first": "...",
    "last": "...",
    "prev": null,
    "next": "..."
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 10,
    "per_page": 15,
    "to": 15,
    "total": 150
  }
}

Authenticating requests

Most endpoints require authentication. You can authenticate requests by including an Authorization header with the value "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE".

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

This API supports two authentication methods:

1. API Keys (Recommended for Server-to-Server)

2. Sanctum Tokens (For End Users)

Both methods use the same Authorization: Bearer <token> header format.

SPA (browser) note

If you're using the Babylon React SPA against a stateful origin (Sanctum SPA cookie auth), POST /api/auth/login will:

Authentication

Verify user's email address

requires authentication

Verifies the user's email address using a signed URL.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auth/email/verify/01JBQW8K7V2XZGHJK5MNPQRSTU/abc123...?expires=1234567890&signature=abc123..." \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auth/email/verify/01JBQW8K7V2XZGHJK5MNPQRSTU/abc123..."
);

const params = {
    "expires": "1234567890",
    "signature": "abc123...",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, already verified):


{
    "message": "Email already verified"
}
 

Example response (200, success):


{
    "message": "Email verified successfully"
}
 

Example response (403, invalid signature):


{
    "message": "Invalid verification link"
}
 

Request      

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

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The user's ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

hash   string     

The verification hash. Example: abc123...

Query Parameters

expires   integer  optional    

The expiration timestamp. Example: 1234567890

signature   string  optional    

The URL signature. Example: abc123...

Resend verification email

requires authentication

Sends a new verification email to the authenticated user.

Example request:
curl --request POST \
    "http://localhost:8000/api/auth/email/verification-notification" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auth/email/verification-notification"
);

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

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

Example response (200, success):


{
    "message": "Verification email sent"
}
 

Example response (200, already verified):


{
    "message": "Email already verified"
}
 

Example response (429, rate limited):


{
    "message": "Too many requests. Please try again later."
}
 

Request      

POST api/auth/email/verification-notification

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Check verification status

requires authentication

Returns whether the authenticated user's email is verified.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auth/email/verification-status" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auth/email/verification-status"
);

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

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

Example response (200, success):


{
    "verified": true
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/auth/email/verification-status

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Authentication - 2FA

Enable 2FA

requires authentication

Enable TOTP-based two-factor authentication. Returns QR code SVG, secret, and recovery codes.

Example request:
curl --request POST \
    "http://localhost:8000/api/user/two-factor-authentication" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"password\": \"secret123\"
}"
const url = new URL(
    "http://localhost:8000/api/user/two-factor-authentication"
);

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

let body = {
    "password": "secret123"
};

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

Example response (200, success):


{
    "qr_code_svg": "<svg>...</svg>",
    "secret": "JBSWY3DPEHPK3PXP",
    "recovery_codes": [
        "abc123",
        "def456",
        "ghi789",
        "jkl012",
        "mno345",
        "pqr678",
        "stu901",
        "vwx234"
    ]
}
 

Request      

POST api/user/two-factor-authentication

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

password   string     

Current password for confirmation. Example: secret123

Confirm 2FA

requires authentication

Confirm 2FA setup by verifying a 6-digit TOTP code.

Example request:
curl --request POST \
    "http://localhost:8000/api/user/confirmed-two-factor-authentication" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"123456\"
}"
const url = new URL(
    "http://localhost:8000/api/user/confirmed-two-factor-authentication"
);

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

let body = {
    "code": "123456"
};

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

Example response (200, success):


{
    "message": "Two-factor authentication confirmed successfully."
}
 

Example response (422, invalid code):


{
    "message": "Invalid authentication code."
}
 

Request      

POST api/user/confirmed-two-factor-authentication

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

code   string     

6-digit TOTP code from authenticator app. Example: 123456

Disable 2FA

requires authentication

Disable two-factor authentication. Requires password confirmation.

Example request:
curl --request DELETE \
    "http://localhost:8000/api/user/two-factor-authentication" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"password\": \"secret123\"
}"
const url = new URL(
    "http://localhost:8000/api/user/two-factor-authentication"
);

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

let body = {
    "password": "secret123"
};

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

Example response (200, success):


{
    "message": "Two-factor authentication disabled successfully."
}
 

Request      

DELETE api/user/two-factor-authentication

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

password   string     

Current password for confirmation. Example: secret123

Get recovery codes

requires authentication

Retrieve existing recovery codes for 2FA.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/user/two-factor-recovery-codes" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/user/two-factor-recovery-codes"
);

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

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

Example response (200, success):


{
    "recovery_codes": [
        "abc123",
        "def456",
        "ghi789",
        "jkl012",
        "mno345",
        "pqr678",
        "stu901",
        "vwx234"
    ]
}
 

Request      

GET api/user/two-factor-recovery-codes

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Regenerate recovery codes

requires authentication

Generate new recovery codes for 2FA. Old codes will no longer work.

Example request:
curl --request POST \
    "http://localhost:8000/api/user/two-factor-recovery-codes" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/user/two-factor-recovery-codes"
);

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

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

Example response (200, success):


{
    "recovery_codes": [
        "new123",
        "new456",
        "new789",
        "new012",
        "new345",
        "new678",
        "new901",
        "new234"
    ]
}
 

Request      

POST api/user/two-factor-recovery-codes

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Send SMS 2FA code

requires authentication

Send SMS-based 2FA code as alternative to TOTP. Uses SmsNotificationService abstraction (Vonage by default).

Example request:
curl --request POST \
    "http://localhost:8000/api/user/two-factor-sms" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/user/two-factor-sms"
);

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

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

Example response (200, success):


{
    "message": "SMS code sent successfully."
}
 

Example response (400, no phone):


{
    "message": "Phone number not set."
}
 

Example response (500, sms error):


{
    "message": "Failed to send SMS code.",
    "error": "Provider error"
}
 

Request      

POST api/user/two-factor-sms

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Verify SMS 2FA code

requires authentication

Verify SMS-based 2FA code.

Example request:
curl --request POST \
    "http://localhost:8000/api/user/two-factor-sms/verify" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"123456\"
}"
const url = new URL(
    "http://localhost:8000/api/user/two-factor-sms/verify"
);

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

let body = {
    "code": "123456"
};

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

Example response (200, success):


{
    "message": "SMS code verified successfully."
}
 

Example response (422, invalid):


{
    "message": "Invalid or expired code."
}
 

Request      

POST api/user/two-factor-sms/verify

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

code   string     

6-digit code from SMS. Example: 123456

API Keys

List API keys

requires authentication

Get all API keys for the authenticated user.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/keys" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/keys"
);

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

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

Example response (200):


{
    "data": [
        {
            "id": "01HQZX...",
            "name": "Production API Key",
            "key_prefix": "sk_live_abc123",
            "abilities": [
                "listings:read",
                "bids:create"
            ],
            "last_used_at": "2025-01-20T10:30:00Z",
            "last_used_ip": "192.168.1.1",
            "request_count": 1500,
            "expires_at": "2026-12-31T23:59:59Z",
            "is_active": true,
            "created_at": "2025-01-20T10:00:00Z"
        }
    ]
}
 

Request      

GET api/keys

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Create API key

requires authentication

Create a new API key. The plaintext key is returned only once - save it securely!

Example request:
curl --request POST \
    "http://localhost:8000/api/keys" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"Production API Key\",
    \"abilities\": [
        \"listings:read\",
        \"bids:create\"
    ],
    \"expires_at\": \"2026-12-31T23:59:59Z\",
    \"ip_whitelist\": [
        \"192.168.1.1\"
    ],
    \"metadata\": [
        \"ab\"
    ]
}"
const url = new URL(
    "http://localhost:8000/api/keys"
);

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

let body = {
    "name": "Production API Key",
    "abilities": [
        "listings:read",
        "bids:create"
    ],
    "expires_at": "2026-12-31T23:59:59Z",
    "ip_whitelist": [
        "192.168.1.1"
    ],
    "metadata": [
        "ab"
    ]
};

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

Example response (201):


{
    "data": {
        "id": "01HQZX...",
        "name": "Production API Key",
        "key": "sk_live_abc123...",
        "key_prefix": "sk_live_abc123",
        "abilities": [
            "listings:read",
            "bids:create"
        ],
        "expires_at": "2026-12-31T23:59:59Z",
        "created_at": "2025-01-20T10:00:00Z"
    },
    "message": "Save this key securely. It will not be shown again."
}
 

Request      

POST api/keys

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

User-friendly name. Example: Production API Key

abilities   string[]  optional    

Optional permission strings.

expires_at   string  optional    

Optional expiration date (ISO 8601). Example: 2026-12-31T23:59:59Z

ip_whitelist   string[]  optional    

Optional IP whitelist.

metadata   string[]  optional    

Optional metadata.

Get API key details

requires authentication

Retrieve details for a specific API key. Does NOT include plaintext key.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/keys/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/keys/ab"
);

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

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

Example response (200):


{
    "data": {
        "id": "01HQZX...",
        "name": "Production API Key",
        "key_prefix": "sk_live_abc123",
        "abilities": [
            "listings:read",
            "bids:create"
        ],
        "last_used_at": "2025-01-20T10:30:00Z",
        "request_count": 1500,
        "is_active": true,
        "created_at": "2025-01-20T10:00:00Z"
    }
}
 

Request      

GET api/keys/{apiKey_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

apiKey_id   string     

The ID of the apiKey. Example: ab

Revoke API key

requires authentication

Revoke an API key to immediately invalidate it.

Example request:
curl --request DELETE \
    "http://localhost:8000/api/keys/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/keys/ab"
);

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

let body = {
    "reason": "ab"
};

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

Example response (200):


{
    "message": "API key revoked successfully"
}
 

Request      

DELETE api/keys/{apiKey_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

apiKey_id   string     

The ID of the apiKey. Example: ab

Body Parameters

reason   string  optional    

Optional revocation reason. Example: ab

Rotate API key

requires authentication

Rotate an API key by revoking the old one and creating a new one with the same permissions. The new plaintext key is returned only once - save it securely!

Example request:
curl --request POST \
    "http://localhost:8000/api/keys/ab/rotate" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/keys/ab/rotate"
);

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

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

Example response (201):


{
    "data": {
        "id": "01HQZX...",
        "name": "Production API Key (rotated)",
        "key": "sk_live_xyz789...",
        "key_prefix": "sk_live_xyz789",
        "abilities": [
            "listings:read",
            "bids:create"
        ],
        "expires_at": "2026-12-31T23:59:59Z",
        "created_at": "2025-01-20T10:00:00Z"
    },
    "message": "Save this key securely. It will not be shown again."
}
 

Request      

POST api/keys/{apiKey_id}/rotate

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

apiKey_id   string     

The ID of the apiKey. Example: ab

Integrations - Webhooks

List webhook subscriptions

requires authentication

Returns tenant-scoped webhook subscriptions.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/integrations/webhook-subscriptions?page=1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JXYZ...",
            "tenant_id": "01JTENANT...",
            "name": "ERP Webhooks",
            "status": "active",
            "target_url": "https://example.com/hooks",
            "event_types": [
                "payment.v1.succeeded"
            ],
            "filters": [],
            "payload_mode": "hybrid",
            "consecutive_failures": 0,
            "paused_at": null,
            "last_delivery_at": null,
            "next_secret_valid_until": null,
            "created_at": "2026-02-27T17:00:00Z",
            "updated_at": "2026-02-27T17:00:00Z"
        }
    ],
    "links": {
        "first": "...",
        "last": "...",
        "prev": null,
        "next": "..."
    },
    "meta": {
        "current_page": 1,
        "per_page": 15
    }
}
 

Request      

GET api/integrations/webhook-subscriptions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Page number. Example: 1

Create webhook subscription

requires authentication

Creates a webhook subscription and returns the signing secret once. Persist the secret securely; it cannot be retrieved again.

Example request:
curl --request POST \
    "http://localhost:8000/api/integrations/webhook-subscriptions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ERP Webhooks\",
    \"target_url\": \"https:\\/\\/example.com\\/hooks\",
    \"event_types\": [
        \"bid.v1.placed\",
        \"order.v1.shipped\"
    ],
    \"filters\": [
        \"01JORDER...\"
    ],
    \"payload_mode\": \"hybrid\",
    \"metadata\": [
        \"erp\"
    ]
}"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions"
);

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

let body = {
    "name": "ERP Webhooks",
    "target_url": "https:\/\/example.com\/hooks",
    "event_types": [
        "bid.v1.placed",
        "order.v1.shipped"
    ],
    "filters": [
        "01JORDER..."
    ],
    "payload_mode": "hybrid",
    "metadata": [
        "erp"
    ]
};

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

Example response (201, success):


{
    "data": {
        "id": "01JXYZ...",
        "tenant_id": "01JTENANT...",
        "name": "ERP Webhooks",
        "status": "active",
        "target_url": "https://example.com/hooks",
        "event_types": [
            "bid.v1.placed",
            "order.v1.shipped"
        ],
        "filters": [],
        "payload_mode": "hybrid",
        "consecutive_failures": 0,
        "paused_at": null,
        "last_delivery_at": null,
        "next_secret_valid_until": null,
        "created_at": "2026-02-27T17:00:00Z",
        "updated_at": "2026-02-27T17:00:00Z"
    },
    "signing_secret": "abcdefghijklmnopqrstuvwxyz123456",
    "signing_secret_last4": "3456"
}
 

Request      

POST api/integrations/webhook-subscriptions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string  optional    

Optional subscription name. Example: ERP Webhooks

target_url   string     

HTTPS endpoint URL. Example: https://example.com/hooks

event_types   string[]     

Event type allowlist.

filters   string[]  optional    

Optional resource filters.

payload_mode   string  optional    

Optional payload mode: reference, snapshot, hybrid. Example: hybrid

metadata   string[]  optional    

Optional metadata.

Get webhook subscription

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/integrations/webhook-subscriptions/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JXYZ...",
        "tenant_id": "01JTENANT...",
        "name": "ERP Webhooks",
        "status": "active",
        "target_url": "https://example.com/hooks",
        "event_types": [
            "payment.v1.succeeded"
        ],
        "filters": [],
        "payload_mode": "hybrid",
        "consecutive_failures": 0
    }
}
 

Request      

GET api/integrations/webhook-subscriptions/{webhookSubscription_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookSubscription_id   string     

The ID of the webhookSubscription. Example: ab

webhookSubscription   string     

Subscription ULID. Example: 01JXYZ...

Update webhook subscription

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ERP Webhooks (Primary)\",
    \"target_url\": \"https:\\/\\/example.com\\/new-hooks\",
    \"event_types\": [
        \"bid.v1.placed\"
    ],
    \"filters\": [
        \"01JCAT...\"
    ],
    \"payload_mode\": \"reference\",
    \"metadata\": [
        \"erp-v2\"
    ]
}"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab"
);

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

let body = {
    "name": "ERP Webhooks (Primary)",
    "target_url": "https:\/\/example.com\/new-hooks",
    "event_types": [
        "bid.v1.placed"
    ],
    "filters": [
        "01JCAT..."
    ],
    "payload_mode": "reference",
    "metadata": [
        "erp-v2"
    ]
};

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

Example response (200, success):


{
    "data": {
        "id": "01JXYZ...",
        "status": "active",
        "payload_mode": "reference"
    }
}
 

Request      

PATCH api/integrations/webhook-subscriptions/{webhookSubscription_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookSubscription_id   string     

The ID of the webhookSubscription. Example: ab

webhookSubscription   string     

Subscription ULID. Example: 01JXYZ...

Body Parameters

name   string  optional    

Optional subscription name. Example: ERP Webhooks (Primary)

target_url   string  optional    

Optional HTTPS endpoint URL. Example: https://example.com/new-hooks

event_types   string[]  optional    

Optional event type allowlist.

filters   string[]  optional    

Optional resource filters.

payload_mode   string  optional    

Optional payload mode: reference, snapshot, hybrid. Example: reference

metadata   string[]  optional    

Optional metadata.

Delete webhook subscription

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab"
);

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

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

Example response (204, success):

Empty response
 

Request      

DELETE api/integrations/webhook-subscriptions/{webhookSubscription_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookSubscription_id   string     

The ID of the webhookSubscription. Example: ab

webhookSubscription   string     

Subscription ULID. Example: 01JXYZ...

Pause webhook subscription

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab/pause" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab/pause"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JXYZ...",
        "status": "paused",
        "paused_at": "2026-02-27T17:10:00Z"
    }
}
 

Request      

POST api/integrations/webhook-subscriptions/{webhookSubscription_id}/pause

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookSubscription_id   string     

The ID of the webhookSubscription. Example: ab

webhookSubscription   string     

Subscription ULID. Example: 01JXYZ...

Resume webhook subscription

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab/resume" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab/resume"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JXYZ...",
        "status": "active",
        "paused_at": null
    }
}
 

Request      

POST api/integrations/webhook-subscriptions/{webhookSubscription_id}/resume

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookSubscription_id   string     

The ID of the webhookSubscription. Example: ab

webhookSubscription   string     

Subscription ULID. Example: 01JXYZ...

Rotate subscription signing secret

requires authentication

Rotates the webhook signing secret and returns the new secret once.

Example request:
curl --request POST \
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab/rotate-secret" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab/rotate-secret"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JXYZ...",
        "next_secret_valid_until": "2026-02-28T17:00:00Z"
    },
    "signing_secret": "newsecretvalue123",
    "signing_secret_last4": "e123"
}
 

Request      

POST api/integrations/webhook-subscriptions/{webhookSubscription_id}/rotate-secret

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookSubscription_id   string     

The ID of the webhookSubscription. Example: ab

webhookSubscription   string     

Subscription ULID. Example: 01JXYZ...

List subscription delivery attempts

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/integrations/webhook-subscriptions/ab/deliveries?outcome=delivered&limit=50" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"outcome\": \"failed\",
    \"limit\": 16
}"
const url = new URL(
    "http://localhost:8000/api/integrations/webhook-subscriptions/ab/deliveries"
);

const params = {
    "outcome": "delivered",
    "limit": "50",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "outcome": "failed",
    "limit": 16
};

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JDELIVERY...",
            "delivery_id": "01JDELIVERGROUP...",
            "tenant_id": "01JTENANT...",
            "subscription_id": "01JXYZ...",
            "integration_event_id": "01JEVENT...",
            "event_id": "f9d69bc6-9f2b-4d7d-9557-f6d71f3f2c80",
            "event_type": "payment.v1.succeeded",
            "attempt_number": 1,
            "scheduled_at": "2026-02-27T17:00:10Z",
            "sent_at": "2026-02-27T17:00:11Z",
            "completed_at": "2026-02-27T17:00:12Z",
            "outcome": "delivered",
            "http_status": 200,
            "latency_ms": 120,
            "error_code": null,
            "error_message": null,
            "next_attempt_at": null,
            "is_replay": false,
            "created_at": "2026-02-27T17:00:10Z"
        }
    ],
    "links": {
        "first": "...",
        "last": "..."
    },
    "meta": {
        "current_page": 1
    }
}
 

Request      

GET api/integrations/webhook-subscriptions/{webhookSubscription_id}/deliveries

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookSubscription_id   string     

The ID of the webhookSubscription. Example: ab

webhookSubscription   string     

Subscription ULID. Example: 01JXYZ...

Query Parameters

outcome   string  optional    

Filter by outcome. Example: delivered

limit   integer  optional    

Number of records per page (1-200). Example: 50

Body Parameters

outcome   string  optional    

Example: failed

Must be one of:
  • queued
  • retrying
  • delivered
  • failed
  • dead_letter
  • cancelled
limit   integer  optional    

Must be at least 1. Must not be greater than 200. Example: 16

Integrations - Webhook Deliveries

Get delivery attempt details

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/integrations/deliveries/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/integrations/deliveries/ab"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JDELIVERY...",
        "delivery_id": "01JDELIVERGROUP...",
        "tenant_id": "01JTENANT...",
        "subscription_id": "01JXYZ...",
        "integration_event_id": "01JEVENT...",
        "event_id": "f9d69bc6-9f2b-4d7d-9557-f6d71f3f2c80",
        "event_type": "payment.v1.succeeded",
        "attempt_number": 1,
        "scheduled_at": "2026-02-27T17:00:10Z",
        "sent_at": "2026-02-27T17:00:11Z",
        "completed_at": "2026-02-27T17:00:12Z",
        "outcome": "delivered",
        "http_status": 200,
        "latency_ms": 120,
        "error_code": null,
        "error_message": null,
        "next_attempt_at": null,
        "is_replay": false,
        "created_at": "2026-02-27T17:00:10Z"
    }
}
 

Request      

GET api/integrations/deliveries/{webhookDelivery_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookDelivery_id   string     

The ID of the webhookDelivery. Example: ab

webhookDelivery   string     

Delivery attempt ULID. Example: 01JDELIVERY...

Redeliver a webhook event

requires authentication

Creates a new replay delivery attempt for the same event/subscription.

Example request:
curl --request POST \
    "http://localhost:8000/api/integrations/deliveries/ab/redeliver" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/integrations/deliveries/ab/redeliver"
);

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

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

Example response (202, accepted):


{
    "data": {
        "id": "01JNEWDELIVERY...",
        "delivery_id": "01JNEWGROUP...",
        "tenant_id": "01JTENANT...",
        "subscription_id": "01JXYZ...",
        "integration_event_id": "01JEVENT...",
        "attempt_number": 1,
        "outcome": "queued",
        "is_replay": true
    }
}
 

Request      

POST api/integrations/deliveries/{webhookDelivery_id}/redeliver

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

webhookDelivery_id   string     

The ID of the webhookDelivery. Example: ab

webhookDelivery   string     

Delivery attempt ULID. Example: 01JDELIVERY...

Integrations - Events Feed

List integration events

requires authentication

Returns events ordered by occurred_at then id.

Available webhook event types and when they are emitted:

Event payload model:

Use this endpoint as the canonical catalog/feed for both:

Example request:
curl --request GET \
    --get "http://localhost:8000/api/integrations/events?cursor=eyJvY2N1cnJlZF9hdCI6IjIwMjYtMDItMjdUMTc6MDA6MDBaIiwiaWQiOiIwMUpFVkVOVC4uLiJ9&limit=100&event_types[]=bid.v1.placed&event_types[]=order.v1.shipped&from=2026-02-27T00%3A00%3A00Z&to=2026-02-28T00%3A00%3A00Z" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"cursor\": \"ab\",
    \"limit\": 7,
    \"event_types\": [
        \"supply.item.v1.listing_submitted_for_approval\"
    ],
    \"from\": \"2026-05-04T20:47:20\",
    \"to\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/integrations/events"
);

const params = {
    "cursor": "eyJvY2N1cnJlZF9hdCI6IjIwMjYtMDItMjdUMTc6MDA6MDBaIiwiaWQiOiIwMUpFVkVOVC4uLiJ9",
    "limit": "100",
    "event_types[0]": "bid.v1.placed",
    "event_types[1]": "order.v1.shipped",
    "from": "2026-02-27T00:00:00Z",
    "to": "2026-02-28T00:00:00Z",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "cursor": "ab",
    "limit": 7,
    "event_types": [
        "supply.item.v1.listing_submitted_for_approval"
    ],
    "from": "2026-05-04T20:47:20",
    "to": "2069-05-25"
};

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

Example response (200, success):


{
    "data": [
        {
            "event_id": "f9d69bc6-9f2b-4d7d-9557-f6d71f3f2c80",
            "event_type": "payment.v1.succeeded",
            "schema_version": 1,
            "occurred_at": "2026-02-27T17:01:00Z",
            "tenant_id": "01JTENANT...",
            "idempotency_key": "01JTENANT...:payment.v1.succeeded:01JPAY...",
            "resource": {
                "type": "payment",
                "id": "01JPAY..."
            },
            "data": {
                "order_id": "01JORDER...",
                "amount_minor": 550000,
                "currency": "USD"
            }
        }
    ],
    "next_cursor": "eyJvY2N1cnJlZF9hdCI6IjIwMjYtMDItMjdUMTc6MDE6MDBaIiwiaWQiOiIwMUpFVkVOVC4uLiJ9"
}
 

Request      

GET api/integrations/events

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

cursor   string  optional    

Opaque cursor for pagination. Example: eyJvY2N1cnJlZF9hdCI6IjIwMjYtMDItMjdUMTc6MDA6MDBaIiwiaWQiOiIwMUpFVkVOVC4uLiJ9

limit   integer  optional    

Page size (1-1000). Example: 100

event_types   string[]  optional    

Optional event type filter.

from   string  optional    

Optional ISO-8601 lower bound timestamp. Example: 2026-02-27T00:00:00Z

to   string  optional    

Optional ISO-8601 upper bound timestamp. Example: 2026-02-28T00:00:00Z

Body Parameters

cursor   string  optional    

Example: ab

limit   integer  optional    

Must be at least 1. Must not be greater than 1000. Example: 7

event_types   string[]  optional    

This field is required when event_types is present.

Must be one of:
  • auction.v1.started
  • auction.v1.ended
  • bid.v1.placed
  • bid.v1.highest_changed
  • payment.v1.succeeded
  • payment.v1.failed
  • order.v1.created
  • order.v1.shipped
  • order.v1.delivered
  • order.v1.completed
  • message.v1.sent
  • payout.v1.completed
  • supply.condition.v1.attested
  • supply.condition.v1.completed
  • supply.condition.v1.created
  • supply.condition.v1.status_changed
  • supply.condition.v1.updated
  • supply.intake.v1.cancelled
  • supply.intake.v1.closed
  • supply.intake.v1.created
  • supply.intake.v1.in_transit
  • supply.intake.v1.received
  • supply.intake.v1.status_changed
  • supply.intake.v1.updated
  • supply.item.v1.auction_created
  • supply.item.v1.auction_ended
  • supply.item.v1.auction_started
  • supply.item.v1.created
  • supply.item.v1.deleted
  • supply.item.v1.listing_approved
  • supply.item.v1.listing_backfilled
  • supply.item.v1.listing_cancelled
  • supply.item.v1.listing_draft_created
  • supply.item.v1.listing_live
  • supply.item.v1.listing_rejected
  • supply.item.v1.listing_returned_to_draft
  • supply.item.v1.listing_scheduled
  • supply.item.v1.listing_status_changed
  • supply.item.v1.listing_submitted_for_approval
  • supply.item.v1.stage_changed
  • supply.item.v1.updated
  • supply.lead.v1.created
  • supply.lead.v1.deleted
  • supply.lead.v1.stage_changed
  • supply.lead.v1.updated
  • supply.valuation.v1.approved
  • supply.valuation.v1.closed
  • supply.valuation.v1.completed
  • supply.valuation.v1.created
  • supply.valuation.v1.linked_to_listing
  • supply.valuation.v1.recommendation_created
  • supply.valuation.v1.recommendation_selected
  • supply.valuation.v1.status_changed
  • supply.valuation.v1.updated
  • demand.segment.v1.updated
  • distribution.campaign.v1.sent
from   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

to   string  optional    

Must be a valid date. Must be a date after or equal to from. Example: 2069-05-25

Integrations - Replays

Create replay request

requires authentication

Enqueues a replay job that redelivers matching events through the standard webhook path. Replay uses the same event payload contract and signature mechanism as live delivery.

Example request:
curl --request POST \
    "http://localhost:8000/api/integrations/replays" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"subscription_id\": \"01JXYZ...\",
    \"from\": \"2026-02-27T00:00:00Z\",
    \"to\": \"2026-02-28T00:00:00Z\",
    \"event_types\": [
        \"order.v1.shipped\"
    ]
}"
const url = new URL(
    "http://localhost:8000/api/integrations/replays"
);

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

let body = {
    "subscription_id": "01JXYZ...",
    "from": "2026-02-27T00:00:00Z",
    "to": "2026-02-28T00:00:00Z",
    "event_types": [
        "order.v1.shipped"
    ]
};

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

Example response (202, accepted):


{
    "accepted": true,
    "subscription_id": "01JXYZ..."
}
 

Request      

POST api/integrations/replays

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

subscription_id   string     

Subscription ULID. Example: 01JXYZ...

from   string     

ISO-8601 start time. Example: 2026-02-27T00:00:00Z

to   string     

ISO-8601 end time. Example: 2026-02-28T00:00:00Z

event_types   string[]  optional    

Optional event type subset.

User Profile

Get profile

requires authentication

Retrieve authenticated user profile with addresses, payment methods, and OAuth providers.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/profile" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/profile"
);

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

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

Example response (200, success):


{
    "user": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "John Doe",
        "email": "john@example.com",
        "profile": {
            "display_name": "John",
            "bio": "Collector",
            "website": "https://..."
        },
        "addresses": [],
        "payment_methods": []
    }
}
 

Request      

GET api/profile

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update profile

requires authentication

Update user name, email, and phone using Fortify action.

Example request:
curl --request PUT \
    "http://localhost:8000/api/profile" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"John Doe\",
    \"email\": \"john@example.com\",
    \"phone\": \"+447700900000\"
}"
const url = new URL(
    "http://localhost:8000/api/profile"
);

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

let body = {
    "name": "John Doe",
    "email": "john@example.com",
    "phone": "+447700900000"
};

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

Example response (200, success):


{
    "message": "Profile updated successfully."
}
 

Request      

PUT api/profile

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string  optional    

User's name. Example: John Doe

email   string  optional    

User's email. Example: john@example.com

phone   string  optional    

User's phone. Example: +447700900000

Update profile details

requires authentication

Update extended profile information (display name, bio, website, social links).

Example request:
curl --request PUT \
    "http://localhost:8000/api/profile/details" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"display_name\": \"John the Collector\",
    \"bio\": \"Vintage camera collector since 1995\",
    \"website\": \"https:\\/\\/johndoe.com\",
    \"social_links\": {
        \"twitter\": \"johndoe\",
        \"instagram\": \"johndoe\"
    }
}"
const url = new URL(
    "http://localhost:8000/api/profile/details"
);

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

let body = {
    "display_name": "John the Collector",
    "bio": "Vintage camera collector since 1995",
    "website": "https:\/\/johndoe.com",
    "social_links": {
        "twitter": "johndoe",
        "instagram": "johndoe"
    }
};

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

Example response (200, success):


{
    "message": "Profile updated successfully.",
    "profile": {
        "display_name": "John the Collector",
        "bio": "..."
    }
}
 

Request      

PUT api/profile/details

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

display_name   string  optional    

Display name. Example: John the Collector

bio   string  optional    

Biography (max 1000 chars). Example: Vintage camera collector since 1995

website   string  optional    

Website URL. Example: https://johndoe.com

social_links   object  optional    

Social media links.

Serve the authenticated user's avatar image (same-origin proxy).

requires authentication

This is especially useful in local dev where avatars are stored on an S3 emulator (LocalStack/MinIO) that isn't directly reachable from the browser, or where signed URLs use container-only hostnames.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/profile/avatar" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/profile/avatar"
);

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

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

Example response (200, success):


Binary image stream (content-type: image/jpeg or image/png)
 

Example response (404, no avatar):


Empty 404 when user has no avatar
 

Request      

GET api/profile/avatar

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Upload avatar.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/profile/avatar" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "avatar=@/private/var/folders/40/p9d183kj4j78wtdbrp4kflth0000gn/T/php669ajftb1qf58G14PrP" 
const url = new URL(
    "http://localhost:8000/api/profile/avatar"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

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

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

Example response (200, success):


{
    "message": "Avatar uploaded successfully.",
    "avatar_url": "https://s3.amazonaws.com/..."
}
 

Example response (422, validation error):


{
    "message": "The avatar field is required.",
    "errors": {
        "avatar": [
            "The avatar field is required."
        ]
    }
}
 

Request      

POST api/profile/avatar

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

Body Parameters

avatar   file     

Must be an image. Must not be greater than 2048 kilobytes.

Delete avatar.

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/profile/avatar" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/profile/avatar"
);

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

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

Example response (200, success):


{
    "message": "Avatar deleted successfully."
}
 

Request      

DELETE api/profile/avatar

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Addresses

List addresses

requires authentication

Retrieve all addresses for authenticated user.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/addresses" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/addresses"
);

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

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

Example response (200, success):


{
    "addresses": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "type": "shipping",
            "full_name": "John Doe",
            "address_line_1": "123 Main St",
            "city": "London",
            "postal_code": "SW1A 1AA",
            "country": "GB",
            "is_default": true
        }
    ]
}
 

Request      

GET api/addresses

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Add address

requires authentication

Create a new shipping or billing address.

Example request:
curl --request POST \
    "http://localhost:8000/api/addresses" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"shipping\",
    \"label\": \"Home\",
    \"is_default\": true,
    \"full_name\": \"John Doe\",
    \"company\": \"Acme Corp\",
    \"address_line_1\": \"123 Main Street\",
    \"address_line_2\": \"Apt 4B\",
    \"city\": \"London\",
    \"state\": \"Greater London\",
    \"postal_code\": \"SW1A 1AA\",
    \"country\": \"GB\",
    \"phone\": \"+447700900000\"
}"
const url = new URL(
    "http://localhost:8000/api/addresses"
);

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

let body = {
    "type": "shipping",
    "label": "Home",
    "is_default": true,
    "full_name": "John Doe",
    "company": "Acme Corp",
    "address_line_1": "123 Main Street",
    "address_line_2": "Apt 4B",
    "city": "London",
    "state": "Greater London",
    "postal_code": "SW1A 1AA",
    "country": "GB",
    "phone": "+447700900000"
};

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

Example response (201, success):


{
    "message": "Address created successfully.",
    "address": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "type": "shipping",
        "full_name": "John Doe"
    }
}
 

Request      

POST api/addresses

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

type   string     

Address type (shipping, billing). Example: shipping

label   string  optional    

Address label. Example: Home

is_default   boolean  optional    

Set as default address. Example: true

full_name   string     

Full name. Example: John Doe

company   string  optional    

Company name. Example: Acme Corp

address_line_1   string     

Address line 1. Example: 123 Main Street

address_line_2   string  optional    

Address line 2. Example: Apt 4B

city   string     

City. Example: London

state   string  optional    

State/Province. Example: Greater London

postal_code   string     

Postal/ZIP code. Example: SW1A 1AA

country   string     

ISO 3166-1 alpha-2 country code. Example: GB

phone   string  optional    

Phone number. Example: +447700900000

Show a single address.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/addresses/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/addresses/ab"
);

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

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

Example response (200, success):


{
    "address": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "type": "shipping",
        "full_name": "John Doe",
        "address_line_1": "123 Main St",
        "city": "London",
        "postal_code": "SW1A 1AA",
        "country": "GB",
        "is_default": true
    }
}
 

Example response (403, unauthorized):


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

Request      

GET api/addresses/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the address. Example: ab

Update an address.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/addresses/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"shipping\",
    \"label\": \"ipzdszigdqrrkthq\",
    \"is_default\": false,
    \"full_name\": \"pvviwahfxqnyifdn\",
    \"company\": \"nzclnhfpvmsnpkyn\",
    \"address_line_1\": \"lnbgjdpzixzkhgml\",
    \"address_line_2\": \"xfmavknkckbhgmqy\",
    \"city\": \"eipywyxscplvrjza\",
    \"state\": \"qaveihafwfciilry\",
    \"postal_code\": \"ubypsenryjd\",
    \"country\": \"uo\",
    \"phone\": \"rkexffnsuub\"
}"
const url = new URL(
    "http://localhost:8000/api/addresses/ab"
);

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

let body = {
    "type": "shipping",
    "label": "ipzdszigdqrrkthq",
    "is_default": false,
    "full_name": "pvviwahfxqnyifdn",
    "company": "nzclnhfpvmsnpkyn",
    "address_line_1": "lnbgjdpzixzkhgml",
    "address_line_2": "xfmavknkckbhgmqy",
    "city": "eipywyxscplvrjza",
    "state": "qaveihafwfciilry",
    "postal_code": "ubypsenryjd",
    "country": "uo",
    "phone": "rkexffnsuub"
};

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

Example response (200, success):


{
    "message": "Address updated successfully.",
    "address": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "type": "shipping",
        "full_name": "John Doe"
    }
}
 

Example response (403, unauthorized):


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

Example response (422, validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "postal_code": [
            "The postal code field is required."
        ]
    }
}
 

Request      

PUT api/addresses/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the address. Example: ab

Body Parameters

type   string  optional    

Example: shipping

Must be one of:
  • shipping
  • billing
label   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

is_default   boolean  optional    

Example: false

full_name   string  optional    

Must not be greater than 255 characters. Example: pvviwahfxqnyifdn

company   string  optional    

Must not be greater than 255 characters. Example: nzclnhfpvmsnpkyn

address_line_1   string  optional    

Must not be greater than 255 characters. Example: lnbgjdpzixzkhgml

address_line_2   string  optional    

Must not be greater than 255 characters. Example: xfmavknkckbhgmqy

city   string  optional    

Must not be greater than 255 characters. Example: eipywyxscplvrjza

state   string  optional    

Must not be greater than 255 characters. Example: qaveihafwfciilry

postal_code   string  optional    

Must not be greater than 20 characters. Example: ubypsenryjd

country   string  optional    

Must be 2 characters. Example: uo

phone   string  optional    

Must not be greater than 20 characters. Example: rkexffnsuub

Delete an address.

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/addresses/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/addresses/ab"
);

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

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

Example response (200, success):


{
    "message": "Address deleted successfully."
}
 

Example response (403, unauthorized):


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

Request      

DELETE api/addresses/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the address. Example: ab

Set address as default.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/addresses/ab/default" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/addresses/ab/default"
);

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

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

Example response (200, success):


{
    "message": "Address set as default successfully.",
    "address": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "is_default": true
    }
}
 

Example response (403, unauthorized):


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

Request      

POST api/addresses/{address_id}/default

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

address_id   string     

The ID of the address. Example: ab

Payment Methods

List payment methods

requires authentication

Retrieve all payment methods for the authenticated user including billing addresses.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/payment-methods" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/payment-methods"
);

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

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

Example response (200, success):


{
    "payment_methods": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "type": "card",
            "brand": "visa",
            "last_four": "4242",
            "exp_month": 12,
            "exp_year": 2025,
            "is_default": true,
            "billing_address": {
                "address_line_1": "123 Main St",
                "city": "London",
                "postal_code": "SW1A 1AA",
                "country": "GB"
            }
        }
    ]
}
 

Request      

GET api/payment-methods

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Add payment method

requires authentication

Add a new payment method using Stripe payment method ID. Creates Stripe customer if needed.

Example request:
curl --request POST \
    "http://localhost:8000/api/payment-methods" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"stripe_payment_method_id\": \"pm_1234567890abcdef\",
    \"billing_address_id\": \"01JBQW8K7V2XZGHJK5MNPQRSTU\",
    \"is_default\": true
}"
const url = new URL(
    "http://localhost:8000/api/payment-methods"
);

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

let body = {
    "stripe_payment_method_id": "pm_1234567890abcdef",
    "billing_address_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "is_default": true
};

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

Example response (201, success):


{
    "message": "Payment method added successfully.",
    "payment_method": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "type": "card",
        "brand": "visa",
        "last_four": "4242",
        "is_default": true
    }
}
 

Example response (422, invalid address):


{
    "message": "Invalid billing address."
}
 

Request      

POST api/payment-methods

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

stripe_payment_method_id   string     

Stripe payment method ID from Stripe.js. Example: pm_1234567890abcdef

billing_address_id   string  optional    

Billing address ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

is_default   boolean  optional    

Set as default payment method. Example: true

Get payment method

requires authentication

Retrieve a specific payment method with billing address.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/payment-methods/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/payment-methods/ab"
);

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

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

Example response (200, success):


{
    "payment_method": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "type": "card",
        "brand": "visa",
        "last_four": "4242",
        "exp_month": 12,
        "exp_year": 2025,
        "is_default": true,
        "billing_address": {
            "address_line_1": "123 Main St",
            "city": "London",
            "postal_code": "SW1A 1AA",
            "country": "GB"
        }
    }
}
 

Request      

GET api/payment-methods/{paymentMethod_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

paymentMethod_id   string     

The ID of the paymentMethod. Example: ab

paymentMethod   string     

The payment method ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Update payment method

requires authentication

Update payment method billing address or default status.

Example request:
curl --request PUT \
    "http://localhost:8000/api/payment-methods/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"billing_address_id\": \"01JBQW8K7V2XZGHJK5MNPQRSTU\",
    \"is_default\": true
}"
const url = new URL(
    "http://localhost:8000/api/payment-methods/ab"
);

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

let body = {
    "billing_address_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "is_default": true
};

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

Example response (200, success):


{
    "message": "Payment method updated successfully.",
    "payment_method": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "is_default": true
    }
}
 

Request      

PUT api/payment-methods/{paymentMethod_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

paymentMethod_id   string     

The ID of the paymentMethod. Example: ab

paymentMethod   string     

The payment method ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

billing_address_id   string  optional    

Billing address ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

is_default   boolean  optional    

Set as default payment method. Example: true

Delete payment method

requires authentication

Delete a payment method and detach from Stripe. Automatically sets another as default if needed.

Example request:
curl --request DELETE \
    "http://localhost:8000/api/payment-methods/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/payment-methods/ab"
);

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

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

Example response (200, success):


{
    "message": "Payment method deleted successfully."
}
 

Request      

DELETE api/payment-methods/{paymentMethod_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

paymentMethod_id   string     

The ID of the paymentMethod. Example: ab

paymentMethod   string     

The payment method ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Set default payment method

requires authentication

Set a payment method as the default for future payments.

Example request:
curl --request POST \
    "http://localhost:8000/api/payment-methods/ab/default" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/payment-methods/ab/default"
);

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

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

Example response (200, success):


{
    "message": "Payment method set as default successfully.",
    "payment_method": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "is_default": true
    }
}
 

Request      

POST api/payment-methods/{paymentMethod_id}/default

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

paymentMethod_id   string     

The ID of the paymentMethod. Example: ab

paymentMethod   string     

The payment method ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Create setup intent

requires authentication

Create a Stripe SetupIntent for adding a new payment method via Stripe.js. Returns client_secret for frontend integration.

Example request:
curl --request POST \
    "http://localhost:8000/api/payment-methods/setup-intent" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/payment-methods/setup-intent"
);

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

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

Example response (200, success):


{
    "client_secret": "seti_1234567890abcdef_secret_1234567890abcdef"
}
 

Example response (500, stripe error):


{
    "message": "Failed to create setup intent.",
    "error": "Stripe error message"
}
 

Request      

POST api/payment-methods/setup-intent

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

KYC Verification

Create KYC verification session

requires authentication

Creates an identity verification session using configured KYC provider (Stripe Identity by default). Returns client_secret for frontend integration with Stripe Identity SDK.

Example request:
curl --request POST \
    "http://localhost:8000/api/kyc/session" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/kyc/session"
);

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

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

Example response (200, success):


{
    "client_secret": "vs_1234567890abcdef_secret_1234567890abcdef"
}
 

Example response (400, already verified):


{
    "message": "KYC already verified."
}
 

Example response (500, provider error):


{
    "message": "Failed to create verification session."
}
 

Request      

POST api/kyc/session

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get KYC verification status

requires authentication

Retrieve the current KYC verification status for the authenticated user.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/kyc/status" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/kyc/status"
);

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

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

Example response (200, verified):


{
    "status": "verified",
    "verified_at": "2025-10-29T10:00:00.000000Z",
    "last_error": null
}
 

Example response (200, processing):


{
    "status": "processing",
    "verified_at": null,
    "last_error": null
}
 

Example response (200, none):


{
    "status": "none",
    "message": "No verification found."
}
 

Example response (200, failed):


{
    "status": "requires_input",
    "verified_at": null,
    "last_error": "Document image quality too low"
}
 

Request      

GET api/kyc/status

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Retry KYC verification

requires authentication

Creates a new verification session if previous verification failed. Returns client_secret for frontend integration.

Example request:
curl --request POST \
    "http://localhost:8000/api/kyc/retry" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/kyc/retry"
);

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

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

Example response (200, success):


{
    "client_secret": "vs_1234567890abcdef_secret_1234567890abcdef"
}
 

Example response (400, already verified):


{
    "message": "KYC already verified."
}
 

Example response (400, pending):


{
    "message": "Verification is still pending. Please wait."
}
 

Request      

POST api/kyc/retry

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Listings

Browse listings

requires authentication

Browse active listings with optional filters for category, status, condition, price range, and phygital items.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/listings?category_id=01JBQW8K7V2XZGHJK5MNPQRSTU&include_descendants=1&status=live&condition=excellent&listing_type=fixed_price&is_fixed_price=1&fixed_price_min=1000&fixed_price_max=50000&price_min=10000&price_max=50000&has_buy_now=1&is_phygital=&per_page=20" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/listings"
);

const params = {
    "category_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "include_descendants": "1",
    "status": "live",
    "condition": "excellent",
    "listing_type": "fixed_price",
    "is_fixed_price": "1",
    "fixed_price_min": "1000",
    "fixed_price_max": "50000",
    "price_min": "10000",
    "price_max": "50000",
    "has_buy_now": "1",
    "is_phygital": "0",
    "per_page": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "title": "Vintage Camera",
            "description": "...",
            "starting_bid": 10000,
            "buy_now_price": 25000,
            "condition": "excellent",
            "status": "live",
            "is_phygital": false,
            "category": {
                "id": "...",
                "name": "Electronics"
            },
            "user": {
                "id": "...",
                "name": "John Seller"
            },
            "media": [
                {
                    "id": "...",
                    "url": "...",
                    "is_primary": true
                }
            ]
        }
    ],
    "links": {
        "first": "...",
        "last": "...",
        "prev": null,
        "next": "..."
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 10,
        "per_page": 20,
        "to": 20,
        "total": 200
    }
}
 

Request      

GET api/listings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

category_id   string  optional    

Filter by category ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

include_descendants   boolean  optional    

When true and category_id is provided, include listings in descendant categories. Example: true

status   string  optional    

Filter by status (draft, pending, live, sold, removed). Default: live. Example: live

condition   string  optional    

Filter by condition (new, like_new, excellent, good, fair, poor). Example: excellent

listing_type   string  optional    

Filter by listing type (english,dutch,sealed,live_event,fixed_price). Example: fixed_price

is_fixed_price   boolean  optional    

Shortcut to filter fixed price listings. Example: true

fixed_price_min   integer  optional    

Minimum fixed price (cents). Example: 1000

fixed_price_max   integer  optional    

Maximum fixed price (cents). Example: 50000

price_min   integer  optional    

Filter by minimum starting bid in cents. Example: 10000

price_max   integer  optional    

Filter by maximum starting bid in cents. Example: 50000

has_buy_now   boolean  optional    

Filter listings with Buy Now option. Example: true

is_phygital   boolean  optional    

Filter phygital listings (with NFT). Example: false

per_page   integer  optional    

Items per page (default: 20). Example: 20

Get listings ending soon.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/listings/ending-soon" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/listings/ending-soon"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "title": "Vintage Camera",
            "starting_bid": 10000,
            "status": "live",
            "end_time": "2025-10-30T10:00:00.000000Z"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (404, tenant not found):


{
    "message": "Tenant context is required."
}
 

Request      

GET api/listings/ending-soon

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get listing details

requires authentication

Retrieve detailed information about a specific listing including media, attributes, and category.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/listings/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/listings/ab"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "title": "Vintage Camera",
        "description": "Fully functional vintage camera...",
        "starting_bid": 10000,
        "buy_now_price": 25000,
        "condition": "excellent",
        "status": "live",
        "is_phygital": false,
        "view_count": 42,
        "category": {
            "id": "...",
            "name": "Electronics"
        },
        "user": {
            "id": "...",
            "name": "John Seller"
        },
        "media": [
            {
                "id": "...",
                "url": "...",
                "is_primary": true
            }
        ],
        "attributes": [
            {
                "category_attribute": {
                    "name": "Brand"
                },
                "value": "Canon"
            }
        ],
        "tags": [
            {
                "name": "vintage"
            },
            {
                "name": "camera"
            }
        ]
    }
}
 

Example response (404, not found):


{
    "message": "Listing not found"
}
 

Request      

GET api/listings/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the listing. Example: ab

listing   string     

The listing ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Get my listings

requires authentication

Retrieve all listings created by the authenticated user.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/my-listings?per_page=20" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/my-listings"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "title": "My Vintage Camera",
            "status": "live",
            "created_at": "2025-10-29T10:00:00.000000Z"
        }
    ],
    "links": {},
    "meta": {}
}
 

Request      

GET api/my-listings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

Items per page (default: 20). Example: 20

Create listing

requires authentication

Create a new auction listing. Requires authentication.

Example request:
curl --request POST \
    "http://localhost:8000/api/listings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"listing_type\": \"english\",
    \"title\": \"Vintage Canon Camera\",
    \"description\": \"Fully functional vintage Canon camera from 1980s...\",
    \"category_id\": \"01JBQW8K7V2XZGHJK5MNPQRSTU\",
    \"condition\": \"excellent\",
    \"starting_bid\": 10000,
    \"reserve_price\": 15000,
    \"buy_now_price\": 25000,
    \"fixed_price_amount\": 95,
    \"quantity\": 8,
    \"allow_offers\": false,
    \"min_offer_percent\": 1,
    \"auto_accept_percent\": 1,
    \"estimate_low\": 42,
    \"estimate_high\": 3,
    \"bid_increment\": 96,
    \"start_time\": \"2069-05-25\",
    \"end_time\": \"2069-05-25\",
    \"item_location\": \"dszigdqrrkthqpvv\",
    \"shipping_cost\": 8,
    \"is_local_pickup\": true,
    \"is_international_shipping\": false,
    \"currency\": \"wah\",
    \"is_phygital\": false,
    \"nft_contract_address\": \"0x1234567890abcdef...\",
    \"nft_token_id\": \"123\",
    \"nft_blockchain\": \"polygon\",
    \"digital_asset_url\": \"https:\\/\\/gaylord.com\\/quia-dignissimos-tempore-sapiente-nihil-quod-voluptate-unde.html\",
    \"digital_asset_type\": \"avknkckbhgmqyeip\",
    \"tax_status\": \"margin_scheme\",
    \"custom_attributes\": [
        \"ab\"
    ],
    \"tags\": [
        \"vintage\",
        \"camera\",
        \"electronics\"
    ],
    \"media_ids\": [
        \"01JBQW8K7V2XZGHJK5MNPQRSTU\"
    ],
    \"sales_model\": \"seller_led\",
    \"price_display_mode\": \"inherit\",
    \"attributes\": [
        {
            \"category_attribute_id\": \"...\",
            \"value\": \"Canon\"
        }
    ]
}"
const url = new URL(
    "http://localhost:8000/api/listings"
);

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

let body = {
    "listing_type": "english",
    "title": "Vintage Canon Camera",
    "description": "Fully functional vintage Canon camera from 1980s...",
    "category_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "condition": "excellent",
    "starting_bid": 10000,
    "reserve_price": 15000,
    "buy_now_price": 25000,
    "fixed_price_amount": 95,
    "quantity": 8,
    "allow_offers": false,
    "min_offer_percent": 1,
    "auto_accept_percent": 1,
    "estimate_low": 42,
    "estimate_high": 3,
    "bid_increment": 96,
    "start_time": "2069-05-25",
    "end_time": "2069-05-25",
    "item_location": "dszigdqrrkthqpvv",
    "shipping_cost": 8,
    "is_local_pickup": true,
    "is_international_shipping": false,
    "currency": "wah",
    "is_phygital": false,
    "nft_contract_address": "0x1234567890abcdef...",
    "nft_token_id": "123",
    "nft_blockchain": "polygon",
    "digital_asset_url": "https:\/\/gaylord.com\/quia-dignissimos-tempore-sapiente-nihil-quod-voluptate-unde.html",
    "digital_asset_type": "avknkckbhgmqyeip",
    "tax_status": "margin_scheme",
    "custom_attributes": [
        "ab"
    ],
    "tags": [
        "vintage",
        "camera",
        "electronics"
    ],
    "media_ids": [
        "01JBQW8K7V2XZGHJK5MNPQRSTU"
    ],
    "sales_model": "seller_led",
    "price_display_mode": "inherit",
    "attributes": [
        {
            "category_attribute_id": "...",
            "value": "Canon"
        }
    ]
};

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

Example response (201, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "title": "Vintage Canon Camera",
        "status": "pending",
        "created_at": "2025-10-29T10:00:00.000000Z"
    }
}
 

Example response (422, validation error):


{
    "message": "The title field is required.",
    "errors": {
        "title": [
            "The title field is required."
        ]
    }
}
 

Request      

POST api/listings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

listing_type   string     

Example: english

Must be one of:
  • english
  • dutch
  • sealed
  • live_event
  • fixed_price
title   string     

Listing title (max 255 chars). Example: Vintage Canon Camera

description   string     

Detailed description. Example: Fully functional vintage Canon camera from 1980s...

category_id   string     

Category ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

condition   string     

Item condition (new, like_new, excellent, good, fair, poor). Example: excellent

starting_bid   integer     

Starting bid in cents. Example: 10000

reserve_price   integer  optional    

Reserve price in cents (optional). Example: 15000

buy_now_price   integer  optional    

Buy Now price in cents (optional). Example: 25000

fixed_price_amount   integer  optional    

Must be at least 100. Example: 95

quantity   integer  optional    

Must be at least 1. Example: 8

allow_offers   boolean  optional    

Example: false

min_offer_percent   integer  optional    

Must be between 1 and 100. Example: 1

auto_accept_percent   integer  optional    

Must be between 1 and 100. Example: 1

estimate_low   integer  optional    

Must be at least 0. Example: 42

estimate_high   integer  optional    

Must be at least 0. Example: 3

bid_increment   integer  optional    

Must be at least 100. Example: 96

start_time   string  optional    

Must be a valid date. Must be a date after now. Example: 2069-05-25

end_time   string  optional    

Must be a valid date. Must be a date after start_time. Example: 2069-05-25

item_location   string  optional    

Must not be greater than 255 characters. Example: dszigdqrrkthqpvv

shipping_cost   integer  optional    

Must be at least 0. Example: 8

is_local_pickup   boolean  optional    

Example: true

is_international_shipping   boolean  optional    

Example: false

currency   string  optional    

Must be 3 characters. Example: wah

is_phygital   boolean  optional    

Whether listing includes NFT. Example: false

nft_contract_address   string  optional    

NFT contract address (required if is_phygital=true). Example: 0x1234567890abcdef...

nft_token_id   string  optional    

NFT token ID (required if is_phygital=true). Example: 123

nft_blockchain   string  optional    

Example: polygon

Must be one of:
  • ethereum
  • polygon
  • other
digital_asset_url   string  optional    

Must be a valid URL. Example: https://gaylord.com/quia-dignissimos-tempore-sapiente-nihil-quod-voluptate-unde.html

digital_asset_type   string  optional    

Must not be greater than 100 characters. Example: avknkckbhgmqyeip

tax_status   string  optional    

Example: margin_scheme

Must be one of:
  • taxable
  • tax_exempt
  • margin_scheme
custom_attributes   string[]     
additional_details   object  optional    
tags   string[]  optional    

Tags for listing.

media_ids   string[]     

Array of media IDs to attach.

sales_model   string  optional    

Example: seller_led

Must be one of:
  • seller_led
  • tenant_assisted
  • tenant_seller_of_record
consignor_id   string  optional    

The id of an existing record in the consignors table.

price_display_mode   string  optional    

Example: inherit

Must be one of:
  • inherit
  • minor_units
  • whole_units
attributes   string[]  optional    

Custom category attributes.

Update listing

requires authentication

Update an existing listing. Requires authentication and ownership.

Example request:
curl --request PUT \
    "http://localhost:8000/api/listings/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"listing_type\": \"dutch\",
    \"title\": \"Updated Camera Title\",
    \"description\": \"Updated description...\",
    \"category_id\": \"01JBQW8K7V2XZGHJK5MNPQRSTU\",
    \"condition\": \"good\",
    \"starting_bid\": 12000,
    \"reserve_price\": 18000,
    \"buy_now_price\": 30000,
    \"fixed_price_amount\": 100,
    \"bid_increment\": 94,
    \"start_time\": \"2069-05-25\",
    \"end_time\": \"2069-05-25\",
    \"item_location\": \"dszigdqrrkthqpvv\",
    \"shipping_cost\": 8,
    \"is_local_pickup\": false,
    \"is_international_shipping\": false,
    \"quantity\": 41,
    \"allow_offers\": false,
    \"min_offer_percent\": 1,
    \"auto_accept_percent\": 2,
    \"currency\": \"fxq\",
    \"custom_attributes\": [
        \"ab\"
    ],
    \"tags\": [
        \"vintage\",
        \"camera\"
    ],
    \"media_ids\": [
        \"ab\"
    ],
    \"price_display_mode\": \"whole_units\",
    \"attributes\": [
        {
            \"category_attribute_id\": \"...\",
            \"value\": \"Canon\"
        }
    ]
}"
const url = new URL(
    "http://localhost:8000/api/listings/ab"
);

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

let body = {
    "listing_type": "dutch",
    "title": "Updated Camera Title",
    "description": "Updated description...",
    "category_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "condition": "good",
    "starting_bid": 12000,
    "reserve_price": 18000,
    "buy_now_price": 30000,
    "fixed_price_amount": 100,
    "bid_increment": 94,
    "start_time": "2069-05-25",
    "end_time": "2069-05-25",
    "item_location": "dszigdqrrkthqpvv",
    "shipping_cost": 8,
    "is_local_pickup": false,
    "is_international_shipping": false,
    "quantity": 41,
    "allow_offers": false,
    "min_offer_percent": 1,
    "auto_accept_percent": 2,
    "currency": "fxq",
    "custom_attributes": [
        "ab"
    ],
    "tags": [
        "vintage",
        "camera"
    ],
    "media_ids": [
        "ab"
    ],
    "price_display_mode": "whole_units",
    "attributes": [
        {
            "category_attribute_id": "...",
            "value": "Canon"
        }
    ]
};

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "title": "Updated Camera Title",
        "updated_at": "2025-10-29T10:30:00.000000Z"
    }
}
 

Example response (403, unauthorized):


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

Request      

PUT api/listings/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the listing. Example: ab

listing   string     

The listing ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

listing_type   string  optional    

Example: dutch

Must be one of:
  • english
  • dutch
  • sealed
  • live_event
  • fixed_price
title   string  optional    

Listing title (max 255 chars). Example: Updated Camera Title

description   string  optional    

Detailed description. Example: Updated description...

category_id   string  optional    

Category ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

condition   string  optional    

Item condition. Example: good

starting_bid   integer  optional    

Starting bid in cents. Example: 12000

reserve_price   integer  optional    

Reserve price in cents. Example: 18000

buy_now_price   integer  optional    

Buy Now price in cents. Example: 30000

fixed_price_amount   integer  optional    

Must be at least 100. Example: 100

bid_increment   integer  optional    

Must be at least 100. Example: 94

start_time   string  optional    

Must be a valid date. Must be a date after now. Example: 2069-05-25

end_time   string  optional    

Must be a valid date. Must be a date after start_time. Example: 2069-05-25

item_location   string  optional    

Must not be greater than 255 characters. Example: dszigdqrrkthqpvv

shipping_cost   integer  optional    

Must be at least 0. Example: 8

is_local_pickup   boolean  optional    

Example: false

is_international_shipping   boolean  optional    

Example: false

quantity   integer  optional    

Must be at least 1. Example: 41

allow_offers   boolean  optional    

Example: false

min_offer_percent   integer  optional    

Must be between 1 and 100. Example: 1

auto_accept_percent   integer  optional    

Must be between 1 and 100. Example: 2

currency   string  optional    

Must be 3 characters. Example: fxq

custom_attributes   string[]     
additional_details   object  optional    
tags   string[]  optional    

Tags for listing.

media_ids   string[]     

The id of an existing record in the listing_media table.

price_display_mode   string  optional    

Example: whole_units

Must be one of:
  • inherit
  • minor_units
  • whole_units
attributes   string[]  optional    

Custom category attributes.

Update listing

requires authentication

Update an existing listing. Requires authentication and ownership.

Example request:
curl --request PATCH \
    "http://localhost:8000/api/listings/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"listing_type\": \"sealed\",
    \"title\": \"Updated Camera Title\",
    \"description\": \"Updated description...\",
    \"category_id\": \"01JBQW8K7V2XZGHJK5MNPQRSTU\",
    \"condition\": \"good\",
    \"starting_bid\": 12000,
    \"reserve_price\": 18000,
    \"buy_now_price\": 30000,
    \"fixed_price_amount\": 100,
    \"bid_increment\": 94,
    \"start_time\": \"2069-05-25\",
    \"end_time\": \"2069-05-25\",
    \"item_location\": \"dszigdqrrkthqpvv\",
    \"shipping_cost\": 8,
    \"is_local_pickup\": true,
    \"is_international_shipping\": false,
    \"quantity\": 41,
    \"allow_offers\": false,
    \"min_offer_percent\": 1,
    \"auto_accept_percent\": 2,
    \"currency\": \"fxq\",
    \"custom_attributes\": [
        \"ab\"
    ],
    \"tags\": [
        \"vintage\",
        \"camera\"
    ],
    \"media_ids\": [
        \"ab\"
    ],
    \"price_display_mode\": \"inherit\",
    \"attributes\": [
        {
            \"category_attribute_id\": \"...\",
            \"value\": \"Canon\"
        }
    ]
}"
const url = new URL(
    "http://localhost:8000/api/listings/ab"
);

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

let body = {
    "listing_type": "sealed",
    "title": "Updated Camera Title",
    "description": "Updated description...",
    "category_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "condition": "good",
    "starting_bid": 12000,
    "reserve_price": 18000,
    "buy_now_price": 30000,
    "fixed_price_amount": 100,
    "bid_increment": 94,
    "start_time": "2069-05-25",
    "end_time": "2069-05-25",
    "item_location": "dszigdqrrkthqpvv",
    "shipping_cost": 8,
    "is_local_pickup": true,
    "is_international_shipping": false,
    "quantity": 41,
    "allow_offers": false,
    "min_offer_percent": 1,
    "auto_accept_percent": 2,
    "currency": "fxq",
    "custom_attributes": [
        "ab"
    ],
    "tags": [
        "vintage",
        "camera"
    ],
    "media_ids": [
        "ab"
    ],
    "price_display_mode": "inherit",
    "attributes": [
        {
            "category_attribute_id": "...",
            "value": "Canon"
        }
    ]
};

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "title": "Updated Camera Title",
        "updated_at": "2025-10-29T10:30:00.000000Z"
    }
}
 

Example response (403, unauthorized):


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

Request      

PATCH api/listings/{listing_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing_id   string     

The ID of the listing. Example: ab

listing   string     

The listing ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

listing_type   string  optional    

Example: sealed

Must be one of:
  • english
  • dutch
  • sealed
  • live_event
  • fixed_price
title   string  optional    

Listing title (max 255 chars). Example: Updated Camera Title

description   string  optional    

Detailed description. Example: Updated description...

category_id   string  optional    

Category ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

condition   string  optional    

Item condition. Example: good

starting_bid   integer  optional    

Starting bid in cents. Example: 12000

reserve_price   integer  optional    

Reserve price in cents. Example: 18000

buy_now_price   integer  optional    

Buy Now price in cents. Example: 30000

fixed_price_amount   integer  optional    

Must be at least 100. Example: 100

bid_increment   integer  optional    

Must be at least 100. Example: 94

start_time   string  optional    

Must be a valid date. Must be a date after now. Example: 2069-05-25

end_time   string  optional    

Must be a valid date. Must be a date after start_time. Example: 2069-05-25

item_location   string  optional    

Must not be greater than 255 characters. Example: dszigdqrrkthqpvv

shipping_cost   integer  optional    

Must be at least 0. Example: 8

is_local_pickup   boolean  optional    

Example: true

is_international_shipping   boolean  optional    

Example: false

quantity   integer  optional    

Must be at least 1. Example: 41

allow_offers   boolean  optional    

Example: false

min_offer_percent   integer  optional    

Must be between 1 and 100. Example: 1

auto_accept_percent   integer  optional    

Must be between 1 and 100. Example: 2

currency   string  optional    

Must be 3 characters. Example: fxq

custom_attributes   string[]     
additional_details   object  optional    
tags   string[]  optional    

Tags for listing.

media_ids   string[]     

The id of an existing record in the listing_media table.

price_display_mode   string  optional    

Example: inherit

Must be one of:
  • inherit
  • minor_units
  • whole_units
attributes   string[]  optional    

Custom category attributes.

Delete listing

requires authentication

Soft delete a listing. Requires authentication and ownership.

Example request:
curl --request DELETE \
    "http://localhost:8000/api/listings/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/listings/ab"
);

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

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

Example response (200, success):


{
    "message": "Listing deleted successfully"
}
 

Example response (403, unauthorized):


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

Request      

DELETE api/listings/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the listing. Example: ab

listing   string     

The listing ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Purchase (Buy Now) a fixed price listing.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/listings/ab/purchase" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"quantity\": 1,
    \"shipping_address_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/listings/ab/purchase"
);

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

let body = {
    "quantity": 1,
    "shipping_address_id": "ab"
};

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

Request      

POST api/listings/{listing_id}/purchase

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing_id   string     

The ID of the listing. Example: ab

listing   string     

Listing ID. Example: ab

Body Parameters

quantity   integer     

Quantity to purchase (min 1). Example: 1

shipping_address_id   string  optional    

Example: ab

Categories

List categories

requires authentication

Get all root categories with their immediate children. Public endpoint for browsing the category hierarchy.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/categories" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/categories"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "name": "Electronics",
            "description": "Electronic items",
            "icon": "https://...",
            "sort_order": 1,
            "is_active": true,
            "children": [
                {
                    "id": "...",
                    "name": "Cameras",
                    "parent_id": "01JBQW8K7V2XZGHJK5MNPQRSTU"
                }
            ]
        }
    ]
}
 

Request      

GET api/categories

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get category tree

requires authentication

Get complete hierarchical category structure with all nested children.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/categories/tree" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/categories/tree"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "name": "Electronics",
            "children": [
                {
                    "id": "...",
                    "name": "Cameras",
                    "children": [
                        {
                            "id": "...",
                            "name": "Digital Cameras"
                        }
                    ]
                }
            ]
        }
    ]
}
 

Request      

GET api/categories/tree

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get category details

requires authentication

Retrieve detailed information about a specific category including parent, children, and custom fields.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/categories/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/categories/ab"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "Cameras",
        "description": "Camera equipment",
        "icon": "https://...",
        "parent": {
            "id": "...",
            "name": "Electronics"
        },
        "children": [],
        "attributes": [
            {
                "name": "Brand",
                "type": "string"
            }
        ]
    }
}
 

Request      

GET api/categories/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the category. Example: ab

category   string     

The category ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Get category attributes

requires authentication

Retrieve custom fields for a category (e.g., Brand, Size, Model for specific categories).

Example request:
curl --request GET \
    --get "http://localhost:8000/api/categories/ab/attributes" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/categories/ab/attributes"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "category_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "name": "Brand",
            "type": "string",
            "is_required": true,
            "options": [
                "Canon",
                "Nikon",
                "Sony"
            ],
            "sort_order": 1
        }
    ]
}
 

Request      

GET api/categories/{categoryId}/attributes

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

categoryId   string     

Example: ab

category   string     

The category ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Get category sections

requires authentication

Retrieve structured "Additional Details" sections for a category (including inherited sections).

Example request:
curl --request GET \
    --get "http://localhost:8000/api/categories/01JBQW8K7V2XZGHJK5MNPQRSTU/sections" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/categories/01JBQW8K7V2XZGHJK5MNPQRSTU/sections"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "name": "Condition",
            "fields": [
                {
                    "name": "condition",
                    "type": "string",
                    "required": true
                }
            ]
        }
    ]
}
 

Example response (404, category not found):


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

Request      

GET api/categories/{categoryId}/sections

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

categoryId   string     

The category ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Collections

List collections with optional filters.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/collections?status=live&type=themed&is_promoted=1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/collections"
);

const params = {
    "status": "live",
    "type": "themed",
    "is_promoted": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, success):


{"data": [{"id": "01JBQXM0VSXV9H8NR5TZW68SW6", "name": "Spring Showcase", "slug": "spring-showcase", "type": "themed", "status": "live", "listings_count": 24}], "meta": {...}}
 

Example response (400, missing tenant):


{
    "message": "Tenant context is required. Please provide a valid X-Tenant-ID header or ensure IdentifyTenant middleware is active."
}
 

Request      

GET api/collections

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

Filter by status (draft, scheduled, live, archived). Defaults to 'live' for public access. Example: live

type   string  optional    

Filter by type (vendor, themed, operational, physical). Example: themed

is_promoted   boolean  optional    

Filter promoted collections. Example: true

Display a single collection by slug.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/collections/spring-showcase" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/collections/spring-showcase"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQXM0VSXV9H8NR5TZW68SW6",
        "name": "Spring Showcase",
        "slug": "spring-showcase",
        "type": "themed",
        "status": "live",
        "vendor": null,
        "event": null,
        "listings_count": 24
    }
}
 

Example response (404, not found):


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

Request      

GET api/collections/{slug}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

slug   string     

The collection slug. Example: spring-showcase

List listings inside a collection.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/collections/01JBQXM0VSXV9H8NR5TZW68SW6/listings?category_id=01JBQXM0VSXV9H8NR5TZW68SW6&condition=excellent&price_min=10000&price_max=50000&search=vintage&listing_type=fixed_price&is_fixed_price=1&has_buy_now=1&sort=ending_soon" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/collections/01JBQXM0VSXV9H8NR5TZW68SW6/listings"
);

const params = {
    "category_id": "01JBQXM0VSXV9H8NR5TZW68SW6",
    "condition": "excellent",
    "price_min": "10000",
    "price_max": "50000",
    "search": "vintage",
    "listing_type": "fixed_price",
    "is_fixed_price": "1",
    "has_buy_now": "1",
    "sort": "ending_soon",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, success):


{"data": [{"id": "01JBQXQRGN9V5M8F6T7Y2X3Z4A", "title": "Vintage Rangefinder", "status": "live", "starting_bid": 100000}], "meta": {...}}
 

Example response (404, collection not found):


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

Request      

GET api/collections/{id}/listings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The collection ID. Example: 01JBQXM0VSXV9H8NR5TZW68SW6

Query Parameters

category_id   string  optional    

Filter by category. Example: 01JBQXM0VSXV9H8NR5TZW68SW6

condition   string  optional    

Filter by condition (new, excellent, good, fair, poor). Example: excellent

price_min   integer  optional    

Minimum price in cents. Example: 10000

price_max   integer  optional    

Maximum price in cents. Example: 50000

search   string  optional    

Search listing title/description. Example: vintage

listing_type   string  optional    

Filter by listing type (english,dutch,sealed,live_event,fixed_price). Example: fixed_price

is_fixed_price   boolean  optional    

Shortcut to filter fixed price listings. Example: true

has_buy_now   boolean  optional    

Filter listings with Buy Now option. Example: true

sort   string  optional    

Sort order (ending_soon, newest, price_low_high, price_high_low). Example: ending_soon

Auctions

List active auctions

requires authentication

Browse scheduled and live auctions with optional filters.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auctions?event_id=01JBQW8K7V2XZGHJK5MNPQRSTU&status=live&category_id=01JBQW8K7V2XZGHJK5MNPQRSTU&include_descendants=1&per_page=15" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auctions"
);

const params = {
    "event_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "status": "live",
    "category_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "include_descendants": "1",
    "per_page": "15",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "listing_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "status": "live",
            "current_bid": 15000,
            "bid_count": 12,
            "start_time": "2025-10-29T10:00:00.000000Z",
            "end_time": "2025-10-30T10:00:00.000000Z",
            "listing": {
                "title": "Vintage Camera",
                "starting_bid": 10000
            }
        }
    ],
    "links": {},
    "meta": {}
}
 

Request      

GET api/auctions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

event_id   string  optional    

Filter by event ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

status   string  optional    

Filter by status (scheduled, live). Example: live

category_id   string  optional    

Filter by category ID (listing category). Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

include_descendants   boolean  optional    

When true and category_id is provided, include auctions whose listings are in descendant categories. Example: true

per_page   integer  optional    

Items per page (max: 50). Example: 15

List auctions ending soon

requires authentication

Retrieve live auctions ending within specified hours.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auctions/ending-soon?hours=24" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auctions/ending-soon"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "listing_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "status": "live",
            "current_bid": 15000,
            "end_time": "2025-10-29T14:00:00.000000Z",
            "listing": {
                "title": "Vintage Camera"
            }
        }
    ],
    "links": {},
    "meta": {}
}
 

Request      

GET api/auctions/ending-soon

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

hours   integer  optional    

Number of hours to look ahead (default: 24). Example: 24

Get auction details

requires authentication

Retrieve detailed information about a specific auction including current bid, bid count, and merged listing data.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auctions/01JBQW8K7V2XZGHJK5MNPQRSTU" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auctions/01JBQW8K7V2XZGHJK5MNPQRSTU"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "listing_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "status": "live",
        "current_bid": 15000,
        "bid_count": 12,
        "minimum_bid": 15500,
        "reserve_met": false,
        "start_time": "2025-10-29T10:00:00.000000Z",
        "end_time": "2025-10-30T10:00:00.000000Z",
        "listing": {
            "title": "Vintage Camera",
            "description": "...",
            "media": []
        }
    }
}
 

Example response (404, not found):


{
    "message": "Auction not found"
}
 

Request      

GET api/auctions/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The auction ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

List auctions by event

requires authentication

Retrieve all auctions for a specific event, ordered by lot number.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auctions/events/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auctions/events/ab"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "lot_number": 1,
            "listing_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "status": "scheduled",
            "listing": {
                "title": "Item 1"
            }
        },
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "lot_number": 2,
            "listing_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "status": "scheduled",
            "listing": {
                "title": "Item 2"
            }
        }
    ],
    "links": {},
    "meta": {}
}
 

Request      

GET api/auctions/events/{event}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

The event. Example: ab

eventId   string     

The event ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Q&A

List listing questions

requires authentication

Get all public Q&A for a listing. Public endpoint showing answered questions and follow-ups.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/listings/ab/questions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/listings/ab/questions"
);

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

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

Example response (200, success):


{
    "questions": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "question_text": "What is the condition?",
            "answer_text": "Excellent condition",
            "asker": {
                "name": "Potential Buyer"
            },
            "answerer": {
                "name": "Seller"
            },
            "created_at": "2025-10-29T10:00:00Z",
            "answered_at": "2025-10-29T11:00:00Z",
            "follow_ups": []
        }
    ]
}
 

Request      

GET api/listings/{listingId}/questions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listingId   string     

Example: ab

listing   string     

The listing ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Post question

requires authentication

Ask a question about a listing. Question will be published once seller answers. Can also post follow-up questions.

Example request:
curl --request POST \
    "http://localhost:8000/api/listings/ab/questions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"question_text\": \"What is the shipping cost to London?\",
    \"parent_question_id\": \"01JBQW8K7V2XZGHJK5MNPQRSTU\"
}"
const url = new URL(
    "http://localhost:8000/api/listings/ab/questions"
);

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

let body = {
    "question_text": "What is the shipping cost to London?",
    "parent_question_id": "01JBQW8K7V2XZGHJK5MNPQRSTU"
};

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

Example response (201, success):


{
    "question": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "question_text": "What is the shipping cost?",
        "asker": {
            "name": "Buyer"
        },
        "created_at": "2025-10-29T10:00:00Z"
    }
}
 

Request      

POST api/listings/{listingId}/questions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listingId   string     

Example: ab

listing   string     

The listing ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

question_text   string     

Question text (max 1000 chars). Example: What is the shipping cost to London?

parent_question_id   string  optional    

Parent question ID for follow-ups. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Answer question

requires authentication

Seller or tenant admin answers a question about the listing. Answer will be publicly visible.

Example request:
curl --request POST \
    "http://localhost:8000/api/questions/ab/answer" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"answer_text\": \"Shipping to London is £5.99 for standard delivery\"
}"
const url = new URL(
    "http://localhost:8000/api/questions/ab/answer"
);

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

let body = {
    "answer_text": "Shipping to London is £5.99 for standard delivery"
};

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

Example response (200, success):


{
    "question": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "question_text": "What is the shipping cost?",
        "answer_text": "Shipping to London is £5.99",
        "answerer": {
            "name": "Seller"
        },
        "answered_at": "2025-10-29T11:00:00Z"
    }
}
 

Request      

POST api/questions/{question_id}/answer

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

question_id   string     

The ID of the question. Example: ab

question   string     

The question ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

answer_text   string     

Answer text (max 2000 chars). Example: Shipping to London is £5.99 for standard delivery

Delete question

requires authentication

Delete a question. Only the question asker or admin with 'moderate content' permission can delete.

Example request:
curl --request DELETE \
    "http://localhost:8000/api/questions/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/questions/ab"
);

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

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

Example response (200, success):


{
    "message": "Question deleted."
}
 

Example response (403, unauthorized):


{
    "message": "Unauthorized."
}
 

Request      

DELETE api/questions/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the question. Example: ab

question   string     

The question ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Search

requires authentication

Full-text search across listings with filters, sorting, and facets. Uses configurable SearchService abstraction (database by default, Algolia/OpenSearch for production).

Example request:
curl --request GET \
    --get "http://localhost:8000/api/search?q=vintage+camera&category_id=01JBQW8K7V2XZGHJK5MNPQRSTU&status=live&condition=excellent&price_min=10000&price_max=50000&has_buy_now=1&is_phygital=&tags[]=vintage&tags[]=camera&sort_by=current_bid&sort_direction=desc&page=1&per_page=20" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"q\": \"ipzdszigdqrrkthq\",
    \"status\": \"ended\",
    \"condition\": \"like_new\",
    \"price_min\": 15,
    \"price_max\": 34,
    \"has_buy_now\": false,
    \"is_phygital\": false,
    \"tags\": [
        \"viwahfxqnyifdnnz\"
    ],
    \"sort_by\": \"end_time\",
    \"sort_direction\": \"asc\",
    \"page\": 83,
    \"per_page\": 16
}"
const url = new URL(
    "http://localhost:8000/api/search"
);

const params = {
    "q": "vintage camera",
    "category_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "status": "live",
    "condition": "excellent",
    "price_min": "10000",
    "price_max": "50000",
    "has_buy_now": "1",
    "is_phygital": "0",
    "tags[0]": "vintage",
    "tags[1]": "camera",
    "sort_by": "current_bid",
    "sort_direction": "desc",
    "page": "1",
    "per_page": "20",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "q": "ipzdszigdqrrkthq",
    "status": "ended",
    "condition": "like_new",
    "price_min": 15,
    "price_max": 34,
    "has_buy_now": false,
    "is_phygital": false,
    "tags": [
        "viwahfxqnyifdnnz"
    ],
    "sort_by": "end_time",
    "sort_direction": "asc",
    "page": 83,
    "per_page": 16
};

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

Example response (200, success):


{
    "listings": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "title": "Vintage Camera",
            "price": 10000
        }
    ],
    "total": 150,
    "page": 1,
    "per_page": 20,
    "facets": {
        "categories": [
            {
                "id": "...",
                "name": "Electronics",
                "count": 42
            }
        ],
        "conditions": [
            {
                "value": "excellent",
                "count": 28
            }
        ],
        "price_ranges": [
            {
                "min": 0,
                "max": 10000,
                "count": 35
            }
        ]
    },
    "processing_time": 0.025
}
 

Autocomplete suggestions

requires authentication

Get search suggestions for autocomplete UI. Returns top 10 matching listings with title and image.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/search/autocomplete?q=vint" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"q\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/search/autocomplete"
);

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

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

let body = {
    "q": "ipzdszigdqrrkthq"
};

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

Example response (200, success):


[
    {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "title": "Vintage Camera",
        "category": "Electronics",
        "primary_image_url": "https://..."
    }
]
 

Request      

GET api/search/autocomplete

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

q   string     

Search term (min 2 chars). Example: vint

Body Parameters

q   string     

Must be at least 2 characters. Must not be greater than 100 characters. Example: ipzdszigdqrrkthq

Get search facets

requires authentication

Retrieve available filter options with counts for building filter UI (categories, conditions, popular tags).

Example request:
curl --request GET \
    --get "http://localhost:8000/api/search/facets" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/search/facets"
);

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

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

Example response (200, success):


{
    "categories": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "name": "Electronics",
            "count": 42
        }
    ],
    "tags": [
        {
            "name": "vintage",
            "count": 85
        }
    ],
    "conditions": [
        {
            "value": "new",
            "label": "New"
        },
        {
            "value": "like_new",
            "label": "Like New"
        }
    ]
}
 

Request      

GET api/search/facets

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Orders

List my orders

requires authentication

Returns orders where the authenticated user is the buyer or seller.

Optional query param:

Example request:
curl --request GET \
    --get "http://localhost:8000/api/orders" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "auction_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "status": "pending_payment",
            "total_amount": 15000
        }
    ],
    "links": {},
    "meta": {
        "current_page": 1,
        "per_page": 20,
        "total": 5
    }
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthorized"
}
 

Example response (422, invalid status):


{
    "message": "Invalid status filter.",
    "errors": {
        "status": [
            "Invalid status."
        ]
    }
}
 

Request      

GET api/orders

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get order by ID

requires authentication

Retrieve a specific order by its ID. User must be the buyer or seller.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/orders/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab"
);

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

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

Example response (200, success):


{"data": {"id": "01JBQW8K7V2XZGHJK5MNPQRSTU", "auction_id": "01JBQW8K7V2XZGHJK5MNPQRSTU", "status": "pending_payment", "total_amount": 15000, ...}}
 

Example response (404, not found):


{
    "message": "Order not found"
}
 

Request      

GET api/orders/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Get order by auction ID

requires authentication

Retrieve order(s) associated with a specific auction. User must be the buyer or seller.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/orders/by-auction/01JBQW8K7V2XZGHJK5MNPQRSTU" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/by-auction/01JBQW8K7V2XZGHJK5MNPQRSTU"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "auction_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "status": "pending_payment",
            "total_amount": 15000,
            "...": "..."
        }
    ]
}
 

Request      

GET api/orders/by-auction/{auction_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

auction_id   string     

The auction ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Sync (create) an order for a winning Dutch acceptance bid.

requires authentication

This is used by the frontend "Creating your order..." flow to avoid waiting for scheduled tasks / queue workers to backfill orders.

Returns:

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/sync-dutch-accept/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/sync-dutch-accept/ab"
);

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

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

Request      

POST api/orders/sync-dutch-accept/{bid_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

bid_id   string     

The ID of the bid. Example: ab

Create payment intent for an order

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/payment" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"payment_method_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/payment"
);

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

let body = {
    "payment_method_id": "ab"
};

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

Example response (200, success):


{
    "payment_intent_id": "pi_...",
    "client_secret": "pi_..._secret_...",
    "amount": 15000,
    "requires_action": false
}
 

Request      

POST api/orders/{order_id}/payment

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

payment_method_id   string     

Either:

  • a Stripe PaymentMethod id (pm_...) created via Stripe.js, OR
  • "use_default" to charge the user's default saved payment method. Example: ab

Finalize a payment after client-side confirmation.

requires authentication

In local/dev environments, Stripe webhooks are often not configured. When the frontend completes 3DS/SCA via Stripe.js, Stripe may mark the PaymentIntent as succeeded, but our order/listing state won't update until we observe that success. This endpoint re-checks the latest PaymentIntent and applies the same state transitions + domain events as the webhook handler.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/payment/finalize" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"payment_intent_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/payment/finalize"
);

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

let body = {
    "payment_intent_id": "ab"
};

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

Request      

POST api/orders/{order_id}/payment/finalize

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

Body Parameters

payment_intent_id   string  optional    

Example: ab

Schedule payout for order

requires authentication

Manually schedules a payout for a completed order. Typically handled automatically after delivery confirmation.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/schedule-payout" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/schedule-payout"
);

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

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

Example response (200, success):


{
    "message": "Payout scheduled successfully",
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "amount": 45000,
        "scheduled_for": "2025-11-05T10:00:00.000000Z"
    }
}
 

Example response (400, already scheduled):


{
    "message": "Payout already scheduled for this order"
}
 

Example response (403, unauthorized):


{
    "message": "Unauthorized to schedule payout"
}
 

Request      

POST api/orders/{order_id}/schedule-payout

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Seller Payouts

Execute scheduled payout

requires authentication

Executes a scheduled payout to the seller's connected account. Only available after the hold period has expired.

Example request:
curl --request POST \
    "http://localhost:8000/api/payouts/ab/execute" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/payouts/ab/execute"
);

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

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

Example response (200, success):


{
    "message": "Payout executed successfully",
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "amount": 45000,
        "status": "completed"
    }
}
 

Example response (400, already executed):


{
    "message": "Payout has already been executed"
}
 

Example response (403, unauthorized):


{
    "message": "Unauthorized to execute this payout"
}
 

Request      

POST api/payouts/{payout_id}/execute

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

payout_id   string     

The ID of the payout. Example: ab

payout   string     

The payout ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Shipping

Create shipment

requires authentication

Create a shipment for an order. Seller provides package details and selects carrier/service level. Automatically generates shipping label via carrier API.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/ship" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"carrier\": \"royal_mail\",
    \"service_level\": \"standard\",
    \"weight\": 1.5,
    \"length\": 30,
    \"width\": 20,
    \"height\": 10,
    \"description\": \"Vintage Camera\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/ship"
);

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

let body = {
    "carrier": "royal_mail",
    "service_level": "standard",
    "weight": 1.5,
    "length": 30,
    "width": 20,
    "height": 10,
    "description": "Vintage Camera"
};

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

Example response (201, success):


{
    "message": "Shipment created successfully",
    "shipment": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "tracking_number": "RM123456789GB",
        "carrier": "royal_mail",
        "label_url": "https://...",
        "estimated_delivery": "2025-10-31T10:00:00Z",
        "status": "created"
    }
}
 

Request      

POST api/orders/{order_id}/ship

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

carrier   string  optional    

Carrier (royal_mail, dpd, ups, fedex). Uses tenant default if not specified. Example: royal_mail

service_level   string     

Service level (standard, express, international). Example: standard

weight   number     

Package weight in kg. Example: 1.5

length   number     

Package length in cm. Example: 30

width   number     

Package width in cm. Example: 20

height   number     

Package height in cm. Example: 10

description   string     

Package description. Example: Vintage Camera

Mark order as shipped manually

requires authentication

Use this when shipping is arranged outside the platform and no carrier label should be purchased.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/mark-shipped" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"carrier\": \"DHL Express\",
    \"tracking_number\": \"EXTERNAL123456\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/mark-shipped"
);

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

let body = {
    "carrier": "DHL Express",
    "tracking_number": "EXTERNAL123456"
};

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

Example response (200, success):


{
    "message": "Order marked as shipped",
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "status": "shipped",
        "tracking_number": "EXTERNAL123456",
        "carrier": "DHL Express",
        "shipped_at": "2025-10-29T10:00:00Z"
    }
}
 

Request      

POST api/orders/{order_id}/mark-shipped

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

carrier   string  optional    

Optional carrier name. Example: DHL Express

tracking_number   string  optional    

Optional tracking number. Example: EXTERNAL123456

Get shipment details

requires authentication

Retrieve shipment information including tracking number, status, addresses, and tracking events.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/orders/ab/shipment" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/shipment"
);

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

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

Example response (200, success):


{"shipment": {"id": "01JBQW8K7V2XZGHJK5MNPQRSTU", "tracking_number": "RM123456789GB", "carrier": "royal_mail", "label_url": "https://...", "service_level": "standard", "status": "in_transit", "estimated_delivery": "2025-10-31T10:00:00Z", "shipped_at": "2025-10-29T10:00:00Z", "delivered_at": null, "from_address": {...}, "to_address": {...}, "package_details": {...}, "tracking_events": [{"status": "picked_up", "location": "London", "timestamp": "2025-10-29T10:00:00Z"}]}}
 

Example response (404, not found):


{
    "message": "Shipment not found for this order"
}
 

Request      

GET api/orders/{order_id}/shipment

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Get tracking updates

requires authentication

Fetch real-time tracking information from carrier API. Updates shipment status and tracking events.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/orders/ab/tracking" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/tracking"
);

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

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

Example response (200, success):


{
    "tracking": {
        "tracking_number": "RM123456789GB",
        "status": "in_transit",
        "current_location": "Distribution Center London",
        "estimated_delivery": "2025-10-31T10:00:00Z",
        "delivered_at": null,
        "events": [
            {
                "status": "picked_up",
                "location": "London",
                "timestamp": "2025-10-29T10:00:00Z",
                "description": "Package picked up"
            }
        ]
    }
}
 

Example response (404, not found):


{
    "message": "Shipment not found for this order"
}
 

Example response (500, carrier error):


{
    "message": "Failed to fetch tracking information",
    "error": "Carrier API error"
}
 

Request      

GET api/orders/{order_id}/tracking

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Cancel shipment

requires authentication

Cancel a shipment with carrier. Only allowed for shipments in 'created' or 'pending_pickup' status. Reverts order to 'paid' status so seller can create new shipment.

Example request:
curl --request DELETE \
    "http://localhost:8000/api/orders/ab/shipment" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/shipment"
);

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

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

Example response (200, success):


{
    "message": "Shipment cancelled successfully"
}
 

Example response (404, not found):


{
    "message": "Shipment not found for this order"
}
 

Example response (422, cannot cancel):


{
    "message": "Shipment cannot be cancelled in current status"
}
 

Example response (422, carrier error):


{
    "message": "Failed to cancel shipment with carrier",
    "error": "Carrier rejection reason"
}
 

Request      

DELETE api/orders/{order_id}/shipment

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Delivery

Confirm delivery

requires authentication

Seller confirms item has shipped. Starts buyer acceptance period (typically 7 days). Can also be triggered automatically by tracking updates.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/confirm-delivery" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/confirm-delivery"
);

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

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

Example response (200, success):


{
    "message": "Delivery confirmed successfully",
    "confirmation": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "confirmed_at": "2025-10-29T10:00:00Z",
        "acceptance_deadline": "2025-11-05T10:00:00Z"
    }
}
 

Example response (422, error):


{
    "message": "Failed to confirm delivery",
    "error": "Order not shipped"
}
 

Request      

POST api/orders/{order_id}/confirm-delivery

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Accept delivery

requires authentication

Buyer accepts received item. Triggers OrderDelivered event which schedules seller payout. Order status becomes 'completed'.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/accept" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"notes\": \"Item received in perfect condition\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/accept"
);

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

let body = {
    "notes": "Item received in perfect condition"
};

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

Example response (200, success):


{
    "message": "Delivery accepted successfully. Order is now completed.",
    "confirmation": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "accepted": true,
        "notes": "Item received in perfect condition"
    }
}
 

Example response (422, error):


{
    "message": "Failed to accept delivery",
    "error": "Acceptance deadline passed"
}
 

Request      

POST api/orders/{order_id}/accept

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

notes   string  optional    

Optional notes about delivery. Example: Item received in perfect condition

Reject delivery

requires authentication

Buyer rejects item and opens dispute. Payout to seller is held pending dispute resolution. Requires rejection reason, type, and optional evidence photos.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/reject" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"rejection_reason\": \"Item arrived damaged with visible dents\",
    \"rejection_type\": \"damaged\",
    \"evidence_photos\": [
        \"https:\\/\\/...\",
        \"https:\\/\\/...\"
    ],
    \"desired_outcome\": \"refund\",
    \"notes\": \"Packaging was damaged on arrival\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/reject"
);

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

let body = {
    "rejection_reason": "Item arrived damaged with visible dents",
    "rejection_type": "damaged",
    "evidence_photos": [
        "https:\/\/...",
        "https:\/\/..."
    ],
    "desired_outcome": "refund",
    "notes": "Packaging was damaged on arrival"
};

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

Example response (200, success):


{
    "message": "Delivery rejected. A dispute has been created and payout has been held.",
    "confirmation": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "accepted": false,
        "rejection_reason": "Item arrived damaged with visible dents",
        "rejection_type": "damaged"
    }
}
 

Example response (422, error):


{
    "message": "Failed to reject delivery",
    "error": "Acceptance deadline passed"
}
 

Request      

POST api/orders/{order_id}/reject

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

rejection_reason   string     

Detailed rejection reason. Example: Item arrived damaged with visible dents

rejection_type   string     

Type (damaged, not_as_described, wrong_item, other). Example: damaged

evidence_photos   string[]  optional    

Photo URLs as evidence (max 5).

desired_outcome   string  optional    

Desired outcome (refund, return_then_refund). Defaults to refund. Example: refund

notes   string  optional    

Additional notes. Example: Packaging was damaged on arrival

Get delivery status

requires authentication

Check delivery confirmation status, acceptance deadline, and whether buyer can still accept/reject.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/orders/ab/delivery-status" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/delivery-status"
);

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

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

Example response (200, not confirmed):


{
    "delivery_confirmed": false,
    "can_confirm": true
}
 

Example response (200, awaiting acceptance):


{
    "delivery_confirmed": true,
    "confirmed_at": "2025-10-29T10:00:00Z",
    "confirmation_type": "manual",
    "accepted": null,
    "acceptance_deadline": "2025-11-05T10:00:00Z",
    "can_accept": true,
    "can_reject": true,
    "rejection_reason": null,
    "rejection_type": null
}
 

Example response (200, accepted):


{
    "delivery_confirmed": true,
    "confirmed_at": "2025-10-29T10:00:00Z",
    "accepted": true,
    "acceptance_deadline": "2025-11-05T10:00:00Z",
    "can_accept": false,
    "can_reject": false
}
 

Request      

GET api/orders/{order_id}/delivery-status

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Messaging

List conversations

requires authentication

Retrieve all conversations for the authenticated user from Messaging DB. Includes buyer and seller details merged from Core DB.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/conversations" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/conversations"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "auction_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "order_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "other_participant": {
                "id": "...",
                "name": "Jane Seller"
            },
            "last_message_at": "2025-10-29T10:00:00.000000Z",
            "unread_count": 2
        }
    ],
    "meta": {
        "current_page": 1,
        "per_page": 20,
        "last_page": 1,
        "total": 1
    },
    "links": {
        "first": null,
        "last": null,
        "prev": null,
        "next": null
    }
}
 

Request      

GET api/conversations

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

View conversation messages

requires authentication

Retrieve all messages for a conversation. Supports search within messages. Automatically marks conversation as read.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/conversations/ab?q=tracking" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/conversations/ab"
);

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

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "auction_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "order_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "other_participant": {
            "id": "...",
            "name": "Jane Seller"
        }
    },
    "messages": {
        "data": [
            {
                "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
                "conversation_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
                "content": "Hello, when will you ship?",
                "sender": {
                    "id": "...",
                    "name": "John Buyer"
                },
                "sent_at": "2025-10-29T10:00:00.000000Z",
                "is_published": true
            }
        ],
        "meta": {
            "current_page": 1,
            "per_page": 50,
            "last_page": 1,
            "total": 1
        },
        "links": {
            "first": null,
            "last": null,
            "prev": null,
            "next": null
        }
    }
}
 

Example response (403, unauthorized):


{
    "message": "Unauthorized."
}
 

Example response (404, not found):


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

Request      

GET api/conversations/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the conversation. Example: ab

conversationId   string     

The conversation ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Query Parameters

q   string  optional    

Search term to filter messages. Example: tracking

Send message

requires authentication

Send a message in a conversation.

If the conversation doesn't exist yet, you can lazily create it by providing order_id. Participant ids and listing/auction context are derived server-side from the order (client-provided ids are not trusted). Message content is moderated and PII is masked.

Example request:
curl --request POST \
    "http://localhost:8000/api/conversations/ab/messages" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"content\": \"Hello, when will you ship the item?\",
    \"issue_id\": \"ab\",
    \"order_id\": \"01JBQW8K7V2XZGHJK5MNPQRSTU\",
    \"attachments\": [
        {
            \"url\": \"http:\\/\\/feeney.com\\/\",
            \"type\": \"szigdqrrkthqpvvi\"
        }
    ]
}"
const url = new URL(
    "http://localhost:8000/api/conversations/ab/messages"
);

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

let body = {
    "content": "Hello, when will you ship the item?",
    "issue_id": "ab",
    "order_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "attachments": [
        {
            "url": "http:\/\/feeney.com\/",
            "type": "szigdqrrkthqpvvi"
        }
    ]
};

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

Example response (201, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "conversation_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "content": "Hello, when will you ship the item?",
        "sender": {
            "id": "...",
            "name": "John Buyer"
        },
        "sent_at": "2025-10-29T10:00:00.000000Z"
    }
}
 

Example response (400, error):


{
    "message": "Failed to send message: Validation error"
}
 

Request      

POST api/conversations/{conversation_id}/messages

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

conversation_id   string     

The ID of the conversation. Example: ab

conversationId   string     

The conversation ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

content   string     

Message content (max 5000 chars). Example: Hello, when will you ship the item?

attachments   object[]  optional    

Must not have more than 10 items.

url   string  optional    

This field is required when attachments is present. Must match the regex /^(https?:\/\/|\/)/. Must not be greater than 8192 characters. Example: http://feeney.com/

type   string  optional    

Must not be greater than 50 characters. Example: szigdqrrkthqpvvi

issue_id   string  optional    

Example: ab

order_id   string  optional    

Order ID (required only if creating conversation). Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Report a message/conversation for moderation review (participant-scoped).

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/conversations/ab/report" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"message_id\": \"ab\",
    \"reason\": \"pzdszigdqrrkthqp\"
}"
const url = new URL(
    "http://localhost:8000/api/conversations/ab/report"
);

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

let body = {
    "message_id": "ab",
    "reason": "pzdszigdqrrkthqp"
};

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

Request      

POST api/conversations/{conversation}/report

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

conversation   string     

The conversation. Example: ab

Body Parameters

message_id   string  optional    

Example: ab

reason   string  optional    

Must not be greater than 1000 characters. Example: pzdszigdqrrkthqp

Mark conversation as read

requires authentication

Mark all messages in a conversation as read for the authenticated user.

Example request:
curl --request POST \
    "http://localhost:8000/api/conversations/ab/read" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/conversations/ab/read"
);

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

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

Example response (200, success):


{
    "message": "Conversation marked as read."
}
 

Example response (403, unauthorized):


{
    "message": "Unauthorized."
}
 

Example response (404, not found):


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

Request      

POST api/conversations/{conversation}/read

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

conversation   string     

The conversation. Example: ab

conversationId   string     

The conversation ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Mark conversation as read

requires authentication

Mark all messages in a conversation as read for the authenticated user.

Example request:
curl --request POST \
    "http://localhost:8000/api/conversations/ab/mark-read" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/conversations/ab/mark-read"
);

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

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

Example response (200, success):


{
    "message": "Conversation marked as read."
}
 

Example response (403, unauthorized):


{
    "message": "Unauthorized."
}
 

Example response (404, not found):


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

Request      

POST api/conversations/{conversation}/mark-read

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

conversation   string     

The conversation. Example: ab

conversationId   string     

The conversation ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Trust & Safety - Ratings

List user ratings

requires authentication

Get all ratings received by a user. Public endpoint for viewing user reputation.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/users/ab/ratings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/users/ab/ratings"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "rating_value": 5,
            "review_text": "Excellent seller!",
            "reviewer": {
                "name": "John Buyer"
            },
            "created_at": "2025-10-29T10:00:00Z"
        }
    ]
}
 

Request      

GET api/users/{user_id}/ratings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

user_id   string     

The ID of the user. Example: ab

user   string     

The user ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Rate order

requires authentication

Leave a rating for buyer or seller after order completion. Buyers rate sellers, sellers rate buyers.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/rate" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"rating_type\": \"buyer_to_seller\",
    \"rating_value\": 5,
    \"review_text\": \"Great transaction, item as described\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/rate"
);

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

let body = {
    "rating_type": "buyer_to_seller",
    "rating_value": 5,
    "review_text": "Great transaction, item as described"
};

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

Example response (201, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "rating_value": 5,
        "review_text": "Great transaction",
        "created_at": "2025-10-29T10:00:00Z"
    }
}
 

Request      

POST api/orders/{order_id}/rate

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

rating_type   string     

Type (buyer_to_seller, seller_to_buyer). Example: buyer_to_seller

rating_value   integer     

Rating value 1-5. Example: 5

review_text   string  optional    

Optional review text (max 1000 chars). Example: Great transaction, item as described

Respond to rating

requires authentication

Seller responds to buyer rating (or vice versa). Only the rated user can respond.

Example request:
curl --request POST \
    "http://localhost:8000/api/ratings/ab/respond" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"response_text\": \"Thank you for your feedback!\"
}"
const url = new URL(
    "http://localhost:8000/api/ratings/ab/respond"
);

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

let body = {
    "response_text": "Thank you for your feedback!"
};

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "rating_value": 5,
        "response_text": "Thank you for your feedback!"
    }
}
 

Request      

POST api/ratings/{rating_id}/respond

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

rating_id   string     

The ID of the rating. Example: ab

rating   string     

The rating ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

response_text   string     

Response text (max 1000 chars). Example: Thank you for your feedback!

Get my ratings

requires authentication

Get ratings received and given by authenticated user.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/my-ratings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/my-ratings"
);

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

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

Example response (200, success):


{
    "given": [
        {
            "id": "...",
            "rating_value": 5,
            "reviewee": {
                "name": "Seller Name"
            }
        }
    ],
    "received": [
        {
            "id": "...",
            "rating_value": 4,
            "reviewer": {
                "name": "Buyer Name"
            }
        }
    ]
}
 

Request      

GET api/my-ratings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Trust & Safety - Disputes

Get my disputes

requires authentication

List all disputes filed by or involving the authenticated user.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/my-disputes" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/my-disputes"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "order_id": "...",
            "status": "pending",
            "created_at": "2025-10-29T10:00:00Z"
        }
    ]
}
 

Request      

GET api/my-disputes

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get dispute details

requires authentication

View detailed dispute information including order, evidence, resolution status.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/disputes/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/disputes/ab"
);

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

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

Example response (200, success):


{"data": {"id": "01JBQW8K7V2XZGHJK5MNPQRSTU", "order": {...}, "status": "under_review", "filed_by": {...}, "rejection_reason": "Item damaged", "evidence_photos": ["..."], "reviewed_by": {...}, "admin_notes": "Investigating claim"}}
 

Request      

GET api/disputes/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the dispute. Example: ab

dispute   string     

The dispute ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Make a dispute offer (Seller)

requires authentication

Seller can make exactly one offer for a dispute: refund, partial_refund, or return_then_refund.

Example request:
curl --request POST \
    "http://localhost:8000/api/disputes/ab/offer" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"refund\",
    \"amount\": 15000
}"
const url = new URL(
    "http://localhost:8000/api/disputes/ab/offer"
);

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

let body = {
    "type": "refund",
    "amount": 15000
};

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

Example response (200, success):


{
    "data": {
        "id": "...",
        "offer": {
            "type": "refund",
            "status": "pending"
        }
    }
}
 

Example response (409, already offered):


{
    "message": "An offer already exists for this dispute."
}
 

Request      

POST api/disputes/{dispute_id}/offer

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dispute_id   string     

The ID of the dispute. Example: ab

dispute   string     

The dispute ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

type   string     

Offer type (refund, partial_refund, return_then_refund). Example: refund

amount   integer  optional    

Offer amount in cents (required for partial_refund). Example: 15000

Accept a dispute offer (Buyer)

requires authentication

Accepts the seller's single offer and resolves the dispute.

Example request:
curl --request POST \
    "http://localhost:8000/api/disputes/ab/offer/accept" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/disputes/ab/offer/accept"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "...",
        "status": "resolved",
        "offer": {
            "status": "accepted"
        }
    }
}
 

Request      

POST api/disputes/{dispute_id}/offer/accept

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dispute_id   string     

The ID of the dispute. Example: ab

dispute   string     

The dispute ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Request more information (Seller)

requires authentication

Creates a participant-visible update and flags the dispute as "info requested".

Example request:
curl --request POST \
    "http://localhost:8000/api/disputes/ab/request-info" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"message\": \"Please upload clearer photos of the damage and the packaging label.\"
}"
const url = new URL(
    "http://localhost:8000/api/disputes/ab/request-info"
);

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

let body = {
    "message": "Please upload clearer photos of the damage and the packaging label."
};

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

Example response (201, success):


{
    "data": {
        "id": "...",
        "actor_role": "seller",
        "message": "Please upload..."
    }
}
 

Request      

POST api/disputes/{dispute_id}/request-info

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dispute_id   string     

The ID of the dispute. Example: ab

dispute   string     

The dispute ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

message   string     

Message to the buyer. Example: Please upload clearer photos of the damage and the packaging label.

Mark return shipped (Buyer)

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/disputes/ab/return/shipped" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"carrier\": \"Royal Mail\",
    \"tracking_number\": \"RM123456789GB\"
}"
const url = new URL(
    "http://localhost:8000/api/disputes/ab/return/shipped"
);

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

let body = {
    "carrier": "Royal Mail",
    "tracking_number": "RM123456789GB"
};

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

Example response (200, success):


{
    "data": {
        "id": "...",
        "return": {
            "status": "shipped"
        }
    }
}
 

Request      

POST api/disputes/{dispute_id}/return/shipped

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dispute_id   string     

The ID of the dispute. Example: ab

dispute   string     

The dispute ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

carrier   string  optional    

Carrier name. Example: Royal Mail

tracking_number   string     

Tracking number. Example: RM123456789GB

Mark return received (Seller)

requires authentication

When a return is marked received, the system executes a full refund and resolves the dispute.

Example request:
curl --request POST \
    "http://localhost:8000/api/disputes/ab/return/received" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/disputes/ab/return/received"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "...",
        "status": "resolved",
        "return": {
            "status": "received"
        }
    }
}
 

Request      

POST api/disputes/{dispute_id}/return/received

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dispute_id   string     

The ID of the dispute. Example: ab

dispute   string     

The dispute ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Close a dispute (Buyer/Seller)

requires authentication

Close is permitted only after the dispute is resolved. Seller close requires buyer acknowledgment (buyer must close first).

Example request:
curl --request POST \
    "http://localhost:8000/api/disputes/ab/close" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/disputes/ab/close"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "...",
        "status": "resolved"
    }
}
 

Example response (422, not resolved):


{
    "message": "Dispute can only be closed after resolution."
}
 

Request      

POST api/disputes/{dispute_id}/close

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dispute_id   string     

The ID of the dispute. Example: ab

dispute   string     

The dispute ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Get dispute for an order

requires authentication

Retrieve the dispute associated with an order (buyer or seller).

Example request:
curl --request GET \
    --get "http://localhost:8000/api/orders/ab/dispute" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/dispute"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "order_id": "...",
        "status": "filed",
        "dispute_type": "not_as_described",
        "requested_outcome": "refund"
    }
}
 

Example response (403, unauthorized):


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

Example response (404, not found):


{
    "message": "Dispute not found for this order"
}
 

Request      

GET api/orders/{order_id}/dispute

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Open a dispute for an order (Buyer)

requires authentication

Create a dispute against an order outside the delivery rejection window.

Eligibility window: 30 days from delivered_at (fallback: completed_at, shipped_at). Note: If the order is delivered and the buyer is still within the delivery acceptance window, you must use POST /orders/{order}/reject instead.

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/dispute" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"dispute_type\": \"not_as_described\",
    \"description\": \"Item description did not match what arrived\",
    \"evidence_urls\": [
        \"https:\\/\\/...\",
        \"https:\\/\\/...\"
    ],
    \"requested_outcome\": \"refund\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/dispute"
);

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

let body = {
    "dispute_type": "not_as_described",
    "description": "Item description did not match what arrived",
    "evidence_urls": [
        "https:\/\/...",
        "https:\/\/..."
    ],
    "requested_outcome": "refund"
};

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

Example response (201, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "order_id": "...",
        "status": "filed",
        "dispute_type": "not_as_described",
        "requested_outcome": "refund"
    }
}
 

Example response (409, already disputed):


{
    "message": "A dispute already exists for this order."
}
 

Example response (422, in rejection window):


{
    "message": "Delivery acceptance window is still open. Use delivery rejection to report an issue."
}
 

Request      

POST api/orders/{order_id}/dispute

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Body Parameters

dispute_type   string     

Dispute reason code (not_received, not_as_described, damaged, wrong_item, counterfeit, other). Example: not_as_described

description   string     

Short description. Example: Item description did not match what arrived

evidence_urls   string[]  optional    

Evidence URLs (max 5).

requested_outcome   string  optional    

Desired outcome (refund, return_then_refund). Defaults to refund. Example: refund

Media

Request upload URL

requires authentication

Get pre-signed S3 URL for direct upload. Returns URL, media ID, and expiration. Client uploads file to URL, then confirms upload.

Example request:
curl --request POST \
    "http://localhost:8000/api/media/upload-url" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"file_name\": \"vintage-camera.jpg\",
    \"file_type\": \"photo\",
    \"mime_type\": \"image\\/jpeg\",
    \"file_size\": 2048000
}"
const url = new URL(
    "http://localhost:8000/api/media/upload-url"
);

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

let body = {
    "file_name": "vintage-camera.jpg",
    "file_type": "photo",
    "mime_type": "image\/jpeg",
    "file_size": 2048000
};

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

Example response (200, success):


{
    "upload_url": "https://s3.amazonaws.com/...",
    "media_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "expires_at": "2025-10-29T11:00:00Z"
}
 

Example response (422, file too large):


{
    "message": "File size exceeds maximum allowed for photo"
}
 

Request      

POST api/media/upload-url

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

file_name   string     

Original filename. Example: vintage-camera.jpg

file_type   string     

File type (photo, video, document). Example: photo

mime_type   string     

MIME type. Example: image/jpeg

file_size   integer     

File size in bytes (max: photo 20MB, video 100MB, document 5MB). Example: 2048000

Authenticated upload path used as a browser fallback when cross-origin pre-signed uploads are blocked by bucket CORS.

requires authentication

Accepts either multipart/form-data (file) or a raw request body.

Example request:
curl --request POST \
    "http://localhost:8000/api/media/ab/upload-direct" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/media/ab/upload-direct"
);

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

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

Request      

POST api/media/{media}/upload-direct

PUT api/media/{media}/upload-direct

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

media   string     

Example: ab

Confirm upload and trigger processing.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/media/ab/confirm" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/media/ab/confirm"
);

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

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

Example response (200, success):


{
    "message": "Upload confirmed, processing started",
    "media": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "processing_status": "processing"
    }
}
 

Example response (403, unauthorized):


{
    "message": "Unauthorized to confirm this upload"
}
 

Example response (404, file not found):


{
    "message": "File upload not found or expired"
}
 

Request      

POST api/media/{media}/confirm

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

media   string     

Example: ab

Attach media to listing.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/media/listings/ab/media" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"media_ids\": [
        \"ab\"
    ]
}"
const url = new URL(
    "http://localhost:8000/api/media/listings/ab/media"
);

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

let body = {
    "media_ids": [
        "ab"
    ]
};

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

Example response (200, success):


{
    "message": "Media attached successfully",
    "media": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "listing_id": "01JBQW8K7V2XZGHJK5MNPQRSTV"
        }
    ]
}
 

Example response (403, unauthorized):


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

Example response (422, validation error):


{
    "message": "Some media files are invalid or already attached"
}
 

Request      

POST api/media/listings/{listing_id}/media

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing_id   string     

The ID of the listing. Example: ab

Body Parameters

media_ids   string[]     

The id of an existing record in the listing_media table.

GDPR Compliance

Request data export

requires authentication

Request complete user data export for GDPR compliance. Data will be packaged and made available for download. Export link expires after 30 days.

Example request:
curl --request POST \
    "http://localhost:8000/api/gdpr/export" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"format\": \"json\"
}"
const url = new URL(
    "http://localhost:8000/api/gdpr/export"
);

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

let body = {
    "format": "json"
};

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

Example response (201, success):


{
    "message": "Data export request submitted successfully.",
    "export_request_id": "01JBQW8K7V2XZGHJK5MNPQRSTU"
}
 

Example response (400, already pending):


{
    "message": "You already have a pending export request."
}
 

Request      

POST api/gdpr/export

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

format   string  optional    

Export format (json, csv, pdf). Default: json. Example: json

Check export status

requires authentication

Check status of data export request and get download URL when ready.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/gdpr/export/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/gdpr/export/ab"
);

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

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

Example response (200, pending):


{
    "status": "pending",
    "format": "json",
    "file_url": null,
    "expires_at": null,
    "completed_at": null,
    "error_message": null
}
 

Example response (200, completed):


{
    "status": "completed",
    "format": "json",
    "file_url": "https://s3.amazonaws.com/exports/...",
    "expires_at": "2025-11-28T10:00:00Z",
    "completed_at": "2025-10-29T10:30:00Z",
    "error_message": null
}
 

Example response (200, failed):


{
    "status": "failed",
    "format": "json",
    "file_url": null,
    "expires_at": null,
    "completed_at": null,
    "error_message": "Export generation failed"
}
 

Request      

GET api/gdpr/export/{exportRequest_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

exportRequest_id   string     

The ID of the exportRequest. Example: ab

exportRequest   string     

The export request ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Download data export

requires authentication

Download data export file. Returns redirect to signed S3 URL.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/gdpr/export/ab/download" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/gdpr/export/ab/download"
);

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

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

Example response (302, success):


Redirects to download URL
 

Example response (400, not ready):


{
    "message": "Export is not ready yet."
}
 

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 37ee35d1-37a5-4e34-bf94-1483195dbae7
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Example response (410, expired):


{
    "message": "Export has expired."
}
 

Request      

GET api/gdpr/export/{exportRequest_id}/download

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

exportRequest_id   string     

The ID of the exportRequest. Example: ab

exportRequest   string     

The export request ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Delete account

requires authentication

Request account deletion with 30-day grace period. Account and all personal data will be permanently deleted after grace period.

Example request:
curl --request DELETE \
    "http://localhost:8000/api/gdpr/account" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"password\": \"secret123\"
}"
const url = new URL(
    "http://localhost:8000/api/gdpr/account"
);

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

let body = {
    "password": "secret123"
};

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

Example response (200, success):


{
    "message": "Account deletion scheduled for 2025-11-28. You can cancel this request within 30 days.",
    "deletion_scheduled_at": "2025-11-28T10:00:00Z"
}
 

Request      

DELETE api/gdpr/account

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

password   string     

Current password for confirmation. Example: secret123

Cancel account deletion

requires authentication

Cancel pending account deletion request. Only available within 30-day grace period.

Example request:
curl --request POST \
    "http://localhost:8000/api/gdpr/account/restore" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/gdpr/account/restore"
);

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

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

Example response (200, success):


{
    "message": "Account deletion cancelled successfully."
}
 

Example response (400, not scheduled):


{
    "message": "No account deletion is scheduled."
}
 

Request      

POST api/gdpr/account/restore

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Subscriptions & Billing

Manage tenant subscriptions, billing, and invoices. All endpoints require authentication and automatically use the authenticated user's tenant context.

SaaS subscriptions support monthly and annual billing cycles with usage-based charges. Billing is handled through Stripe with automatic invoice generation and payment collection.

Thin controller that delegates business logic to:

List available subscription plans

requires authentication

Get all active subscription plans with pricing for monthly and annual billing cycles. This is a public endpoint that doesn't require authentication.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/subscriptions/plans" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/subscriptions/plans"
);

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

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

Example response (200):


{
    "data": [
        {
            "id": "01HQZX...",
            "name": "Professional",
            "slug": "professional",
            "description": "For growing businesses",
            "price_monthly": 9900,
            "price_annual": 99000,
            "currency": "GBP",
            "trial_days": 14,
            "features": {
                "max_listings": 100,
                "max_auctions": 50,
                "storage_gb": 50
            },
            "is_featured": false
        }
    ]
}
 

Request      

GET api/subscriptions/plans

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get current subscription

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/subscription" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/subscription"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 8a3913e7-8638-4e71-a634-e1c1a224a53a
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/subscription

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Create subscription

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/subscription" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"subscription_plan_id\": \"ab\",
    \"billing_cycle\": \"monthly\",
    \"stripe_payment_method_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/subscription"
);

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

let body = {
    "subscription_plan_id": "ab",
    "billing_cycle": "monthly",
    "stripe_payment_method_id": "ab"
};

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

Request      

POST api/subscription

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

subscription_plan_id   string     

The id of an existing record in the subscription_plans table. Example: ab

billing_cycle   string     

Example: monthly

Must be one of:
  • monthly
  • annual
stripe_payment_method_id   string  optional    

Example: ab

Update subscription

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/subscription" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"subscription_plan_id\": \"ab\",
    \"billing_cycle\": \"monthly\",
    \"prorated\": false
}"
const url = new URL(
    "http://localhost:8000/api/subscription"
);

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

let body = {
    "subscription_plan_id": "ab",
    "billing_cycle": "monthly",
    "prorated": false
};

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

Request      

PUT api/subscription

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

subscription_plan_id   string     

The id of an existing record in the subscription_plans table. Example: ab

billing_cycle   string  optional    

Example: monthly

Must be one of:
  • monthly
  • annual
prorated   boolean  optional    

Example: false

Cancel subscription

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/subscription" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"immediately\": true,
    \"reason\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/subscription"
);

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

let body = {
    "immediately": true,
    "reason": "ipzdszigdqrrkthq"
};

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

Request      

DELETE api/subscription

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

immediately   boolean  optional    

Example: true

reason   string  optional    

Must not be greater than 500 characters. Example: ipzdszigdqrrkthq

Pause subscription

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/subscription/pause" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/subscription/pause"
);

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

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

Request      

POST api/subscription/pause

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Resume subscription

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/subscription/resume" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/subscription/resume"
);

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

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

Request      

POST api/subscription/resume

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

List invoices

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/subscription/invoices" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/subscription/invoices"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: b1996baa-6bbe-4678-bc06-3910f143ee01
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/subscription/invoices

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get invoice

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/subscription/invoices/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/subscription/invoices/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 4ee4f1b6-bf2a-4ee6-ae24-2140f7c4303a
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/subscription/invoices/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the invoice. Example: ab

Download invoice PDF

requires authentication

Download the invoice as HTML (can be printed as PDF or converted to PDF). If Stripe invoice PDF is available, redirects to that. Otherwise generates a local invoice HTML.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/subscription/invoices/ab/download" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/subscription/invoices/ab/download"
);

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

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

Example response (200, success):


HTML content or redirect to Stripe PDF
 

Example response (302, Stripe redirect):


Redirects to Stripe invoice PDF URL
 

Example response (404, not found):


{
    "message": "Invoice not found"
}
 

Request      

GET api/subscription/invoices/{invoice}/download

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

invoice   string     

The invoice. Example: ab

invoiceId   string     

The invoice ID. Example: 01HQZX...

List payment methods for subscription.

requires authentication

Retrieve all payment methods for the tenant's Stripe customer associated with their subscription.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/subscription/payment-methods" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/subscription/payment-methods"
);

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

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

Example response (200, success):


{
    "payment_methods": [
        {
            "id": "pm_1234...",
            "brand": "visa",
            "last4": "4242"
        }
    ]
}
 

Example response (404, no subscription):


{
    "message": "No subscription found"
}
 

Example response (422, error):


{
    "message": "Failed to retrieve payment methods",
    "error": "..."
}
 

Request      

GET api/subscription/payment-methods

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update default payment method for subscription

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/subscription/payment-method" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"payment_method_id\": \"pm_ipzd\"
}"
const url = new URL(
    "http://localhost:8000/api/subscription/payment-method"
);

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

let body = {
    "payment_method_id": "pm_ipzd"
};

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

Request      

PUT api/subscription/payment-method

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

payment_method_id   string     

Must start with one of pm_. Example: pm_ipzd

Reports

Operational CSV exports for invoices, invoice payments, refunds, and payouts.

Export outstanding invoices as CSV

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/reports/invoices/outstanding.csv" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/reports/invoices/outstanding.csv"
);

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

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

Example response (200, success):


CSV file download (Content-Type: text/csv)
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/reports/invoices/outstanding.csv

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Export collected invoice payments as CSV

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/reports/invoice-payments/collected.csv?from=2025-01-01&to=2025-01-31" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"from\": \"2026-05-04T20:47:20\",
    \"to\": \"2026-05-04T20:47:20\"
}"
const url = new URL(
    "http://localhost:8000/api/reports/invoice-payments/collected.csv"
);

const params = {
    "from": "2025-01-01",
    "to": "2025-01-31",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "from": "2026-05-04T20:47:20",
    "to": "2026-05-04T20:47:20"
};

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

Example response (200, success):


CSV file download (Content-Type: text/csv)
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/reports/invoice-payments/collected.csv

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

from   string  optional    

date Filter from date (Y-m-d). Example: 2025-01-01

to   string  optional    

date Filter to date (Y-m-d). Example: 2025-01-31

Body Parameters

from   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

to   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

Export refunds in period as CSV

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/reports/refunds.csv?from=2025-01-01&to=2025-01-31" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"from\": \"2026-05-04T20:47:20\",
    \"to\": \"2026-05-04T20:47:20\"
}"
const url = new URL(
    "http://localhost:8000/api/reports/refunds.csv"
);

const params = {
    "from": "2025-01-01",
    "to": "2025-01-31",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "from": "2026-05-04T20:47:20",
    "to": "2026-05-04T20:47:20"
};

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

Example response (200, success):


CSV file download (Content-Type: text/csv)
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/reports/refunds.csv

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

from   string  optional    

date Filter from date (Y-m-d). Example: 2025-01-01

to   string  optional    

date Filter to date (Y-m-d). Example: 2025-01-31

Body Parameters

from   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

to   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

Export payouts in period as CSV

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/reports/payouts.csv?from=2025-01-01&to=2025-01-31" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"from\": \"2026-05-04T20:47:20\",
    \"to\": \"2026-05-04T20:47:20\"
}"
const url = new URL(
    "http://localhost:8000/api/reports/payouts.csv"
);

const params = {
    "from": "2025-01-01",
    "to": "2025-01-31",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "from": "2026-05-04T20:47:20",
    "to": "2026-05-04T20:47:20"
};

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

Example response (200, success):


CSV file download (Content-Type: text/csv)
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/reports/payouts.csv

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

from   string  optional    

date Filter from date (Y-m-d). Example: 2025-01-01

to   string  optional    

date Filter to date (Y-m-d). Example: 2025-01-31

Body Parameters

from   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

to   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

GET api/health

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/health" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/health"
);

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

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

Example response (200):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 9ccfb38f-8e93-4903-b0f3-9c1c5b8f8d51
 

{
    "status": "ok",
    "service": "core-app",
    "timestamp": "2026-05-04T20:47:20+00:00",
    "database": "unavailable"
}
 

Request      

GET api/health

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/server-time

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/server-time" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/server-time"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 2ba53041-88ff-483c-9c2d-77ef9f18a459
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/server-time

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Login user via session (Sanctum SPA cookie auth) and return the user.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/auth/login" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"loma53@example.com\",
    \"password\": \"vNLMj_\"
}"
const url = new URL(
    "http://localhost:8000/api/auth/login"
);

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

let body = {
    "email": "loma53@example.com",
    "password": "vNLMj_"
};

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

Example response (200, success):


{
    "user": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "John Doe",
        "email": "john@example.com",
        "is_kyc_verified": false,
        "two_factor_enabled": false
    }
}
 

Example response (200, 2FA required):


{
    "two_factor_required": true,
    "two_factor_token": "encrypted_token_string"
}
 

Example response (400, tenant context required):


{
    "message": "Tenant context is required"
}
 

Example response (422, validation error):


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

Request      

POST api/auth/login

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

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

password   string     

Example: vNLMj_

Register new user, log them in via session (Sanctum SPA cookie auth), and return the user.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/auth/register" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auth/register"
);

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

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

Example response (201, success):


{
    "user": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "John Doe",
        "email": "john@example.com",
        "is_kyc_verified": false,
        "two_factor_enabled": false
    },
    "email_verification_sent": true
}
 

Example response (400, tenant context required):


{
    "message": "Tenant context is required"
}
 

Example response (422, validation error):


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

Request      

POST api/auth/register

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Request password reset link (generic response to prevent account enumeration).

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/auth/forgot-password" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"loma53@example.com\"
}"
const url = new URL(
    "http://localhost:8000/api/auth/forgot-password"
);

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

let body = {
    "email": "loma53@example.com"
};

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

Example response (200, generic):


{
    "message": "If an account with that email exists, we have emailed a password reset link."
}
 

Example response (400, tenant context required):


{
    "message": "Tenant context is required"
}
 

Request      

POST api/auth/forgot-password

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

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

Verify 2FA code and complete login.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/auth/2fa/verify" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"two_factor_token\": \"ab\",
    \"code\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/auth/2fa/verify"
);

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

let body = {
    "two_factor_token": "ab",
    "code": "ab"
};

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

Example response (200, success):


{
    "user": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "John Doe",
        "email": "john@example.com",
        "is_kyc_verified": false,
        "two_factor_enabled": true
    }
}
 

Example response (422, validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "code": [
            "The provided two-factor authentication code was invalid."
        ]
    }
}
 

Request      

POST api/auth/2fa/verify

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

two_factor_token   string     

Example: ab

code   string     

Example: ab

Reset password using token from reset email link (SPA/API flow).

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/auth/reset-password" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"token\": \"ab\",
    \"email\": \"lina.hahn@example.org\",
    \"password\": \"vNLMj_\"
}"
const url = new URL(
    "http://localhost:8000/api/auth/reset-password"
);

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

let body = {
    "token": "ab",
    "email": "lina.hahn@example.org",
    "password": "vNLMj_"
};

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

Example response (200, success):


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

Example response (400, tenant context required):


{
    "message": "Tenant context is required"
}
 

Example response (422, validation error):


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

Request      

POST api/auth/reset-password

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

token   string     

Example: ab

email   string     

Must be a valid email address. Example: lina.hahn@example.org

password   string     

Example: vNLMj_

Return the currently-authenticated user (session/cookie).

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auth/me" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auth/me"
);

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

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

Example response (200, success):


{
    "user": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "John Doe",
        "email": "john@example.com",
        "is_kyc_verified": false,
        "two_factor_enabled": false
    }
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated."
}
 

Request      

GET api/auth/me

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Issue (or rotate) a SPA bearer token for the current authenticated user.

requires authentication

This is useful when the browser session is authenticated (cookie-based) but the SPA does not currently have a valid bearer token persisted (used for stateless calls like bid-ingress and for authenticated viewer-state overlays).

Example request:
curl --request POST \
    "http://localhost:8000/api/auth/token" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auth/token"
);

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

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

Example response (200, success):


{
    "token": "plain_text_token"
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated."
}
 

Request      

POST api/auth/token

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Logout user (session/cookie).

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/auth/logout" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auth/logout"
);

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

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

Example response (200, success):


{
    "message": "Logged out successfully"
}
 

Request      

POST api/auth/logout

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Login user via session (Sanctum SPA cookie auth) and return the user.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/login" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"email\": \"loma53@example.com\",
    \"password\": \"vNLMj_\"
}"
const url = new URL(
    "http://localhost:8000/api/login"
);

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

let body = {
    "email": "loma53@example.com",
    "password": "vNLMj_"
};

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

Example response (200, success):


{
    "user": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "John Doe",
        "email": "john@example.com",
        "is_kyc_verified": false,
        "two_factor_enabled": false
    }
}
 

Example response (200, 2FA required):


{
    "two_factor_required": true,
    "two_factor_token": "encrypted_token_string"
}
 

Example response (400, tenant context required):


{
    "message": "Tenant context is required"
}
 

Example response (422, validation error):


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

Request      

POST api/login

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

email   string     

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

password   string     

Example: vNLMj_

Register new user, log them in via session (Sanctum SPA cookie auth), and return the user.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/register" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/register"
);

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

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

Example response (201, success):


{
    "user": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "John Doe",
        "email": "john@example.com",
        "is_kyc_verified": false,
        "two_factor_enabled": false
    },
    "email_verification_sent": true
}
 

Example response (400, tenant context required):


{
    "message": "Tenant context is required"
}
 

Example response (422, validation error):


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

Request      

POST api/register

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Authenticate the request for the given channel.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/broadcasting/auth" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/broadcasting/auth"
);

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

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

Request      

POST api/broadcasting/auth

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

GET /api/notifications/unread-count

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/notifications/unread-count" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/notifications/unread-count"
);

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

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

Example response (200, success):


{
    "unread_count": 3
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/notifications/unread-count

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

GET /api/notifications

requires authentication

Returns the authenticated user's notifications (Laravel database notifications).

Example request:
curl --request GET \
    --get "http://localhost:8000/api/notifications?unread=&per_page=20" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/notifications"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "type": "App\\Notifications\\OrderShipped",
            "data": {
                "order_id": "..."
            },
            "read_at": null,
            "created_at": "2025-10-29T10:00:00.000000Z"
        }
    ],
    "links": {},
    "meta": {
        "current_page": 1,
        "per_page": 20,
        "total": 5
    }
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/notifications

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

unread   boolean  optional    

Filter unread only. Example: false

per_page   integer  optional    

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

POST /api/notifications/{id}/read

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/notifications/ab/read" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/notifications/ab/read"
);

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

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

Request      

POST api/notifications/{id}/read

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the notification. Example: ab

POST /api/notifications/read-all

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/notifications/read-all" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/notifications/read-all"
);

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

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

Request      

POST api/notifications/read-all

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/marketing-email-preferences

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/marketing-email-preferences" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/marketing-email-preferences"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 55d42544-c715-42cc-955a-709e17145e66
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/marketing-email-preferences

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

PUT api/marketing-email-preferences

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/marketing-email-preferences" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"marketing_emails_enabled\": false
}"
const url = new URL(
    "http://localhost:8000/api/marketing-email-preferences"
);

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

let body = {
    "marketing_emails_enabled": false
};

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

Request      

PUT api/marketing-email-preferences

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

marketing_emails_enabled   boolean     

Example: false

GET api/marketing-emails/unsubscribe/{recipient}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/marketing-emails/unsubscribe/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/marketing-emails/unsubscribe/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 9b462ad0-5361-44a6-b839-d8f37975038a
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/marketing-emails/unsubscribe/{recipient}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

recipient   string     

Example: ab

GET api/marketing-emails/click/{recipient}/{linkKey}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/marketing-emails/click/ab/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/marketing-emails/click/ab/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: f9f30529-b523-4946-9b7f-f2121ea7964d
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/marketing-emails/click/{recipient}/{linkKey}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

recipient   string     

Example: ab

linkKey   string     

Example: ab

GET api/tenants/resolve-host

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenants/resolve-host" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"host\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/tenants/resolve-host"
);

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

let body = {
    "host": "ipzdszigdqrrkthq"
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: afde93de-b173-4f75-91a8-b7da278aff27
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/tenants/resolve-host

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

host   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

Get tenant configuration by slug (public endpoint for frontend branding).

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenants/example-tenant/config" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenants/example-tenant/config"
);

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

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

Example response (200, success):


{
    "tenant_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "branding": {},
    "features": {},
    "locale": "en"
}
 

Example response (404, not found):


{
    "message": "Tenant not found"
}
 

Request      

GET api/tenants/{slug}/config

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

slug   string     

Tenant slug or identifier. Example: example-tenant

GET api/tenants/{slug}/white-label

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenants/ab/white-label" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenants/ab/white-label"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 3aab435c-5f31-4196-a325-0d2f0c068b90
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/tenants/{slug}/white-label

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

slug   string     

The slug of the tenant. Example: ab

Get tenant locale configuration.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration/locale" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/locale"
);

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

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

Example response (200, success):


{
    "locale": {
        "default": "en",
        "supported": [
            "en",
            "fr"
        ],
        "timezone": "Europe/London",
        "currency": "GBP"
    }
}
 

Example response (404, tenant not found):


{
    "message": "Tenant not found"
}
 

Request      

GET api/tenant/configuration/locale

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get all tenant configuration.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "branding": {},
        "features": {},
        "locale": {},
        "providers": {}
    }
}
 

Example response (404, tenant not found):


{
    "message": "Tenant not found"
}
 

Request      

GET api/tenant/configuration

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Get tenant branding configuration.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration/branding" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/branding"
);

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

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

Example response (200, success):


{
    "logo_url": "https://cdn.babylon.com/...",
    "primary_color": "#1E40AF",
    "tenant_name": "Example Tenant"
}
 

Example response (404, tenant not found):


{
    "message": "Tenant not found"
}
 

Request      

GET api/tenant/configuration/branding

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update tenant branding configuration.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/configuration/branding" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"logo_url\": \"http:\\/\\/www.hermiston.com\\/\",
    \"favicon_url\": \"http:\\/\\/www.hahn.info\\/aut-dolores-sapiente-delectus-nemo\",
    \"primary_color\": \"#5af8CD\",
    \"secondary_color\": \"#5af8CD\",
    \"accent_color\": \"#5af8CD\",
    \"custom_css_url\": \"http:\\/\\/www.dare.com\\/\",
    \"font_family\": \"kthqpvviwahfxqny\",
    \"storefront_title\": \"ifdnnzclnhfpvmsn\",
    \"storefront_description\": \"pkynlnbgjdpzixzk\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/branding"
);

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

let body = {
    "logo_url": "http:\/\/www.hermiston.com\/",
    "favicon_url": "http:\/\/www.hahn.info\/aut-dolores-sapiente-delectus-nemo",
    "primary_color": "#5af8CD",
    "secondary_color": "#5af8CD",
    "accent_color": "#5af8CD",
    "custom_css_url": "http:\/\/www.dare.com\/",
    "font_family": "kthqpvviwahfxqny",
    "storefront_title": "ifdnnzclnhfpvmsn",
    "storefront_description": "pkynlnbgjdpzixzk"
};

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

Example response (200, success):


{
    "logo_url": "https://cdn.babylon.com/tenants/01JBQW8K7V2XZGHJK5MNPQRSTU/branding/logo.png",
    "favicon_url": null,
    "primary_color": "#1E40AF",
    "secondary_color": "#3B82F6",
    "accent_color": "#60A5FA",
    "custom_css_url": null,
    "font_family": "Inter, sans-serif",
    "tenant_name": "Example Tenant",
    "tenant_slug": "example-tenant"
}
 

Example response (422, validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "primary_color": [
            "The primary color must be a valid hex color."
        ]
    }
}
 

Request      

PUT api/tenant/configuration/branding

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

logo_url   string  optional    

Must not be greater than 500 characters. Example: http://www.hermiston.com/

favicon_url   string  optional    

Must not be greater than 500 characters. Example: http://www.hahn.info/aut-dolores-sapiente-delectus-nemo

primary_color   string     

Must match the regex /^#[0-9A-Fa-f]{6}$/. Example: #5af8CD

secondary_color   string     

Must match the regex /^#[0-9A-Fa-f]{6}$/. Example: #5af8CD

accent_color   string  optional    

Must match the regex /^#[0-9A-Fa-f]{6}$/. Example: #5af8CD

custom_css_url   string  optional    

Must not be greater than 500 characters. Example: http://www.dare.com/

font_family   string  optional    

Must not be greater than 255 characters. Example: kthqpvviwahfxqny

storefront_title   string  optional    

Must not be greater than 255 characters. Example: ifdnnzclnhfpvmsn

storefront_description   string  optional    

Must not be greater than 500 characters. Example: pkynlnbgjdpzixzk

requires authentication

Get tenant business profile configuration.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration/business-profile" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/business-profile"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: bd5dba5e-fa19-4be1-9529-735a961a5b44
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/tenant/configuration/business-profile

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update tenant business profile configuration.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/configuration/business-profile" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"legal_business_name\": \"ipzdszigdqrrkthq\",
    \"support_email\": \"molly.sanford@example.org\",
    \"support_phone\": \"ahfxqnyifdnnzcln\",
    \"company_registration_number\": \"hfpvmsnpkynlnbgj\",
    \"tax_registration_number\": \"dpzixzkhgmlxfmav\",
    \"registered_address\": {
        \"address_line_1\": \"knkckbhgmqyeipyw\",
        \"address_line_2\": \"yxscplvrjzaqavei\",
        \"city\": \"hafwfciilryubyps\",
        \"state\": \"enryjduorkexffns\",
        \"postal_code\": \"uubyteydjenadobd\",
        \"country\": \"fa\"
    }
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/business-profile"
);

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

let body = {
    "legal_business_name": "ipzdszigdqrrkthq",
    "support_email": "molly.sanford@example.org",
    "support_phone": "ahfxqnyifdnnzcln",
    "company_registration_number": "hfpvmsnpkynlnbgj",
    "tax_registration_number": "dpzixzkhgmlxfmav",
    "registered_address": {
        "address_line_1": "knkckbhgmqyeipyw",
        "address_line_2": "yxscplvrjzaqavei",
        "city": "hafwfciilryubyps",
        "state": "enryjduorkexffns",
        "postal_code": "uubyteydjenadobd",
        "country": "fa"
    }
};

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

Request      

PUT api/tenant/configuration/business-profile

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

legal_business_name   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

support_email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: molly.sanford@example.org

support_phone   string  optional    

Must not be greater than 50 characters. Example: ahfxqnyifdnnzcln

company_registration_number   string  optional    

Must not be greater than 100 characters. Example: hfpvmsnpkynlnbgj

tax_registration_number   string  optional    

Must not be greater than 100 characters. Example: dpzixzkhgmlxfmav

registered_address   object  optional    
address_line_1   string  optional    

Must not be greater than 255 characters. Example: knkckbhgmqyeipyw

address_line_2   string  optional    

Must not be greater than 255 characters. Example: yxscplvrjzaqavei

city   string  optional    

Must not be greater than 120 characters. Example: hafwfciilryubyps

state   string  optional    

Must not be greater than 120 characters. Example: enryjduorkexffns

postal_code   string  optional    

Must not be greater than 40 characters. Example: uubyteydjenadobd

country   string  optional    

Must be 2 characters. Example: fa

Get tenant feature flags.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration/features" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/features"
);

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

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

Example response (200, success):


{
    "features": {
        "auctions": true,
        "marketplace": true,
        "messaging": true,
        "kyc": false
    }
}
 

Example response (404, tenant not found):


{
    "message": "Tenant not found"
}
 

Request      

GET api/tenant/configuration/features

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update tenant feature flags.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/configuration/features" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"auctions\": true,
    \"marketplace\": true,
    \"messaging\": false,
    \"public_browse\": false,
    \"kyc\": true,
    \"phygital\": true,
    \"live_auctions\": true,
    \"custody\": false,
    \"api_access\": false,
    \"webhooks\": false,
    \"two_factor_auth\": true,
    \"require_listing_approval\": false,
    \"listing_copy_ai\": true,
    \"supply_os\": true,
    \"valuation\": true,
    \"demand_os\": false,
    \"shared_network\": true,
    \"consignor_portal\": false,
    \"external_crm_sync\": false,
    \"distribution_automation\": true
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/features"
);

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

let body = {
    "auctions": true,
    "marketplace": true,
    "messaging": false,
    "public_browse": false,
    "kyc": true,
    "phygital": true,
    "live_auctions": true,
    "custody": false,
    "api_access": false,
    "webhooks": false,
    "two_factor_auth": true,
    "require_listing_approval": false,
    "listing_copy_ai": true,
    "supply_os": true,
    "valuation": true,
    "demand_os": false,
    "shared_network": true,
    "consignor_portal": false,
    "external_crm_sync": false,
    "distribution_automation": true
};

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

Example response (200, success):


{
    "features": {
        "auctions": true,
        "marketplace": true,
        "messaging": true,
        "kyc": false,
        "phygital": false,
        "live_auctions": false,
        "custody": false,
        "api_access": true,
        "webhooks": false,
        "two_factor_auth": false,
        "require_listing_approval": false
    }
}
 

Example response (422, validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "auctions": [
            "The auctions field must be true or false."
        ]
    }
}
 

Request      

PUT api/tenant/configuration/features

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

auctions   boolean  optional    

Example: true

marketplace   boolean  optional    

Example: true

messaging   boolean  optional    

Example: false

public_browse   boolean  optional    

Example: false

kyc   boolean  optional    

Example: true

phygital   boolean  optional    

Example: true

live_auctions   boolean  optional    

Example: true

custody   boolean  optional    

Example: false

api_access   boolean  optional    

Example: false

webhooks   boolean  optional    

Example: false

two_factor_auth   boolean  optional    

Example: true

require_listing_approval   boolean  optional    

Example: false

listing_copy_ai   boolean  optional    

Example: true

supply_os   boolean  optional    

Example: true

valuation   boolean  optional    

Example: true

demand_os   boolean  optional    

Example: false

shared_network   boolean  optional    

Example: true

consignor_portal   boolean  optional    

Example: false

external_crm_sync   boolean  optional    

Example: false

distribution_automation   boolean  optional    

Example: true

Get tenant provider preferences.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration/providers" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/providers"
);

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

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

Example response (200, success):


{
    "providers": {
        "payment": "stripe",
        "shipping": "royal_mail",
        "kyc": "stripe"
    }
}
 

Example response (404, tenant not found):


{
    "message": "Tenant not found"
}
 

Request      

GET api/tenant/configuration/providers

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update tenant provider preferences.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/configuration/providers" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"payment\": \"stripe\",
    \"shipping\": \"dpd\",
    \"kyc\": \"jumio\",
    \"sms\": \"vonage\",
    \"search\": \"opensearch\",
    \"email\": \"resend\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/providers"
);

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

let body = {
    "payment": "stripe",
    "shipping": "dpd",
    "kyc": "jumio",
    "sms": "vonage",
    "search": "opensearch",
    "email": "resend"
};

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

Example response (200, success):


{
    "providers": {
        "payment": "stripe",
        "shipping": "royal_mail",
        "kyc": "stripe",
        "sms": "vonage",
        "search": "database",
        "email": "smtp"
    }
}
 

Example response (422, validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "payment": [
            "The selected payment provider is invalid."
        ]
    }
}
 

Request      

PUT api/tenant/configuration/providers

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

payment   string     

Example: stripe

Must be one of:
  • stripe
shipping   string     

Example: dpd

Must be one of:
  • royal_mail
  • dpd
kyc   string     

Example: jumio

Must be one of:
  • stripe
  • onfido
  • jumio
sms   string     

Example: vonage

Must be one of:
  • vonage
  • twilio
search   string     

Example: opensearch

Must be one of:
  • database
  • algolia
  • opensearch
email   string     

Example: resend

Must be one of:
  • smtp
  • ses
  • postmark
  • resend

Update tenant locale configuration.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/configuration/locale" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"default_locale\": \"ip\",
    \"supported_locales\": [
        \"zd\"
    ],
    \"timezone\": \"America\\/Chicago\",
    \"currency\": \"zig\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/locale"
);

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

let body = {
    "default_locale": "ip",
    "supported_locales": [
        "zd"
    ],
    "timezone": "America\/Chicago",
    "currency": "zig"
};

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

Example response (200, success):


{
    "locale": {
        "default": "en",
        "supported": [
            "en",
            "fr",
            "de"
        ],
        "timezone": "Europe/London",
        "currency": "GBP"
    }
}
 

Example response (422, validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "default_locale": [
            "The default locale must be one of the supported locales."
        ]
    }
}
 

Request      

PUT api/tenant/configuration/locale

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

default_locale   string     

Must be 2 characters. Example: ip

Must be one of:
  • en
  • fr
  • de
  • es
  • it
  • pt
  • nl
  • pl
  • ru
  • ja
  • zh
  • ar
supported_locales   string[]     

Must be 2 characters.

Must be one of:
  • en
  • fr
  • de
  • es
  • it
  • pt
  • nl
  • pl
  • ru
  • ja
  • zh
  • ar
timezone   string     

Must be a valid time zone, such as Africa/Accra. Example: America/Chicago

currency   string     

Must be 3 characters. Example: zig

Must be one of:
  • GBP
  • USD
  • EUR
  • JPY
  • CNY
  • AUD
  • CAD
  • CHF

Get tenant auction settings configuration.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration/auction-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/auction-settings"
);

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

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

Example response (200, success):


{
    "default_bid_increment_rule_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "default_auction_type": "english",
    "reserve_policy": {
        "min_reserve": 1000
    },
    "proxy_bidding": {
        "enabled": true
    },
    "buy_now_policy": {
        "enabled": true
    },
    "anti_sniping": {
        "enabled": true
    }
}
 

Example response (404, tenant not found):


{
    "message": "Tenant not found"
}
 

Example response (500, server error):


{
    "message": "Failed to load auction settings"
}
 

Request      

GET api/tenant/configuration/auction-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update tenant auction settings configuration.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/configuration/auction-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"default_bid_increment_rule_id\": \"ab\",
    \"default_auction_type\": \"english\",
    \"bidder_verification\": {
        \"require_kyc\": true,
        \"requirement\": \"email_and_payment_method\"
    },
    \"reserve_policy\": {
        \"min_reserve\": 15,
        \"auto_reserve_by_category\": [
            38
        ]
    },
    \"proxy_bidding\": {
        \"enabled\": true,
        \"max_proxy_amount\": 4
    },
    \"buy_now_policy\": {
        \"enabled\": false,
        \"markup_type\": \"fixed\",
        \"markup_value\": 2306379
    },
    \"anti_sniping\": {
        \"enabled\": true,
        \"threshold\": 10,
        \"extension\": 13
    }
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/auction-settings"
);

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

let body = {
    "default_bid_increment_rule_id": "ab",
    "default_auction_type": "english",
    "bidder_verification": {
        "require_kyc": true,
        "requirement": "email_and_payment_method"
    },
    "reserve_policy": {
        "min_reserve": 15,
        "auto_reserve_by_category": [
            38
        ]
    },
    "proxy_bidding": {
        "enabled": true,
        "max_proxy_amount": 4
    },
    "buy_now_policy": {
        "enabled": false,
        "markup_type": "fixed",
        "markup_value": 2306379
    },
    "anti_sniping": {
        "enabled": true,
        "threshold": 10,
        "extension": 13
    }
};

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

Example response (200, success):


{
    "default_bid_increment_rule_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "default_auction_type": "english",
    "reserve_policy": {
        "min_reserve": 1000,
        "auto_reserve_by_category": {
            "art": 50000
        }
    },
    "proxy_bidding": {
        "enabled": true,
        "max_proxy_amount": 1000000
    },
    "buy_now_policy": {
        "enabled": true,
        "markup_type": "percentage",
        "markup_value": 20
    },
    "anti_sniping": {
        "enabled": true,
        "threshold": 120,
        "extension": 120
    }
}
 

Example response (422, validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "default_auction_type": [
            "The auction type must be one of: english, dutch, sealed_bid."
        ]
    }
}
 

Request      

PUT api/tenant/configuration/auction-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

default_bid_increment_rule_id   string  optional    

The id of an existing record in the bid_store.bid_increment_rules table. Example: ab

default_auction_type   string     

Example: english

Must be one of:
  • english
  • dutch
  • sealed_bid
bidder_verification   object  optional    
require_kyc   boolean  optional    

Example: true

requirement   string  optional    

Example: email_and_payment_method

Must be one of:
  • email_only
  • email_and_payment_method
  • full_kyc
reserve_policy   object  optional    
min_reserve   integer  optional    

Must be at least 0. Example: 15

auto_reserve_by_category   integer[]  optional    

Must be at least 0.

proxy_bidding   object  optional    
enabled   boolean  optional    

Example: true

max_proxy_amount   integer  optional    

Must be at least 1. Example: 4

buy_now_policy   object  optional    
enabled   boolean  optional    

Example: false

markup_type   string  optional    

Example: fixed

Must be one of:
  • percentage
  • fixed
markup_value   number  optional    

Example: 2306379

anti_sniping   object  optional    
enabled   boolean  optional    

Example: true

threshold   integer  optional    

Must be at least 1. Must not be greater than 600. Example: 10

extension   integer  optional    

Must be at least 1. Must not be greater than 600. Example: 13

Update tenant auction settings configuration.

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/tenant/configuration/auction-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"default_bid_increment_rule_id\": \"ab\",
    \"default_auction_type\": \"dutch\",
    \"bidder_verification\": {
        \"require_kyc\": true,
        \"requirement\": \"full_kyc\"
    },
    \"reserve_policy\": {
        \"min_reserve\": 15,
        \"auto_reserve_by_category\": [
            38
        ]
    },
    \"proxy_bidding\": {
        \"enabled\": false,
        \"max_proxy_amount\": 4
    },
    \"buy_now_policy\": {
        \"enabled\": true,
        \"markup_type\": \"fixed\",
        \"markup_value\": 2306379
    },
    \"anti_sniping\": {
        \"enabled\": false,
        \"threshold\": 10,
        \"extension\": 13
    }
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/auction-settings"
);

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

let body = {
    "default_bid_increment_rule_id": "ab",
    "default_auction_type": "dutch",
    "bidder_verification": {
        "require_kyc": true,
        "requirement": "full_kyc"
    },
    "reserve_policy": {
        "min_reserve": 15,
        "auto_reserve_by_category": [
            38
        ]
    },
    "proxy_bidding": {
        "enabled": false,
        "max_proxy_amount": 4
    },
    "buy_now_policy": {
        "enabled": true,
        "markup_type": "fixed",
        "markup_value": 2306379
    },
    "anti_sniping": {
        "enabled": false,
        "threshold": 10,
        "extension": 13
    }
};

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

Example response (200, success):


{
    "default_bid_increment_rule_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "default_auction_type": "english",
    "reserve_policy": {
        "min_reserve": 1000,
        "auto_reserve_by_category": {
            "art": 50000
        }
    },
    "proxy_bidding": {
        "enabled": true,
        "max_proxy_amount": 1000000
    },
    "buy_now_policy": {
        "enabled": true,
        "markup_type": "percentage",
        "markup_value": 20
    },
    "anti_sniping": {
        "enabled": true,
        "threshold": 120,
        "extension": 120
    }
}
 

Example response (422, validation error):


{
    "message": "The given data was invalid.",
    "errors": {
        "default_auction_type": [
            "The auction type must be one of: english, dutch, sealed_bid."
        ]
    }
}
 

Request      

PATCH api/tenant/configuration/auction-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

default_bid_increment_rule_id   string  optional    

The id of an existing record in the bid_store.bid_increment_rules table. Example: ab

default_auction_type   string     

Example: dutch

Must be one of:
  • english
  • dutch
  • sealed_bid
bidder_verification   object  optional    
require_kyc   boolean  optional    

Example: true

requirement   string  optional    

Example: full_kyc

Must be one of:
  • email_only
  • email_and_payment_method
  • full_kyc
reserve_policy   object  optional    
min_reserve   integer  optional    

Must be at least 0. Example: 15

auto_reserve_by_category   integer[]  optional    

Must be at least 0.

proxy_bidding   object  optional    
enabled   boolean  optional    

Example: false

max_proxy_amount   integer  optional    

Must be at least 1. Example: 4

buy_now_policy   object  optional    
enabled   boolean  optional    

Example: true

markup_type   string  optional    

Example: fixed

Must be one of:
  • percentage
  • fixed
markup_value   number  optional    

Example: 2306379

anti_sniping   object  optional    
enabled   boolean  optional    

Example: false

threshold   integer  optional    

Must be at least 1. Must not be greater than 600. Example: 10

extension   integer  optional    

Must be at least 1. Must not be greater than 600. Example: 13

Get tenant marketplace settings configuration.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration/marketplace-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/marketplace-settings"
);

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

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

Example response (200, success):


{
    "data": {
        "listing_fee_percent": 5,
        "auction_fee_percent": 10
    }
}
 

Example response (404, tenant not found):


{
    "message": "Tenant not found"
}
 

Request      

GET api/tenant/configuration/marketplace-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update tenant marketplace settings configuration.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/configuration/marketplace-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"payment_grace_period_hours\": 16,
    \"relist\": {
        \"enabled\": true
    },
    \"pricing\": {
        \"price_display_mode\": \"minor_units\"
    },
    \"operations\": {
        \"sales_model_default\": \"tenant_assisted\",
        \"allow_listing_model_override\": false,
        \"model2\": {
            \"in_custody_owner\": \"seller\"
        },
        \"model3\": {
            \"operational_seller_user_id\": \"ab\",
            \"consignor_tracking_enabled\": true,
            \"payout_execution_mode\": \"manual\"
        },
        \"identity\": {
            \"buyer_visible_seller\": \"dynamic_by_model\"
        }
    }
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/marketplace-settings"
);

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

let body = {
    "payment_grace_period_hours": 16,
    "relist": {
        "enabled": true
    },
    "pricing": {
        "price_display_mode": "minor_units"
    },
    "operations": {
        "sales_model_default": "tenant_assisted",
        "allow_listing_model_override": false,
        "model2": {
            "in_custody_owner": "seller"
        },
        "model3": {
            "operational_seller_user_id": "ab",
            "consignor_tracking_enabled": true,
            "payout_execution_mode": "manual"
        },
        "identity": {
            "buyer_visible_seller": "dynamic_by_model"
        }
    }
};

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

Request      

PUT api/tenant/configuration/marketplace-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

payment_grace_period_hours   integer  optional    

Must be at least 1. Must not be greater than 720. Example: 16

relist   object  optional    
enabled   boolean  optional    

Example: true

pricing   object  optional    
price_display_mode   string  optional    

Example: minor_units

Must be one of:
  • minor_units
  • whole_units
operations   object  optional    
sales_model_default   string  optional    

Example: tenant_assisted

Must be one of:
  • seller_led
  • tenant_assisted
  • tenant_seller_of_record
allow_listing_model_override   boolean  optional    

Example: false

model2   object  optional    
in_custody_owner   string  optional    

Example: seller

Must be one of:
  • tenant
  • seller
model3   object  optional    
operational_seller_user_id   string  optional    

Example: ab

consignor_tracking_enabled   boolean  optional    

Example: true

payout_execution_mode   string  optional    

Example: manual

Must be one of:
  • manual
identity   object  optional    
buyer_visible_seller   string  optional    

Example: dynamic_by_model

Must be one of:
  • dynamic_by_model

Update tenant marketplace settings configuration.

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/tenant/configuration/marketplace-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"payment_grace_period_hours\": 16,
    \"relist\": {
        \"enabled\": true
    },
    \"pricing\": {
        \"price_display_mode\": \"minor_units\"
    },
    \"operations\": {
        \"sales_model_default\": \"tenant_seller_of_record\",
        \"allow_listing_model_override\": true,
        \"model2\": {
            \"in_custody_owner\": \"tenant\"
        },
        \"model3\": {
            \"operational_seller_user_id\": \"ab\",
            \"consignor_tracking_enabled\": true,
            \"payout_execution_mode\": \"manual\"
        },
        \"identity\": {
            \"buyer_visible_seller\": \"dynamic_by_model\"
        }
    }
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/marketplace-settings"
);

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

let body = {
    "payment_grace_period_hours": 16,
    "relist": {
        "enabled": true
    },
    "pricing": {
        "price_display_mode": "minor_units"
    },
    "operations": {
        "sales_model_default": "tenant_seller_of_record",
        "allow_listing_model_override": true,
        "model2": {
            "in_custody_owner": "tenant"
        },
        "model3": {
            "operational_seller_user_id": "ab",
            "consignor_tracking_enabled": true,
            "payout_execution_mode": "manual"
        },
        "identity": {
            "buyer_visible_seller": "dynamic_by_model"
        }
    }
};

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

Request      

PATCH api/tenant/configuration/marketplace-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

payment_grace_period_hours   integer  optional    

Must be at least 1. Must not be greater than 720. Example: 16

relist   object  optional    
enabled   boolean  optional    

Example: true

pricing   object  optional    
price_display_mode   string  optional    

Example: minor_units

Must be one of:
  • minor_units
  • whole_units
operations   object  optional    
sales_model_default   string  optional    

Example: tenant_seller_of_record

Must be one of:
  • seller_led
  • tenant_assisted
  • tenant_seller_of_record
allow_listing_model_override   boolean  optional    

Example: true

model2   object  optional    
in_custody_owner   string  optional    

Example: tenant

Must be one of:
  • tenant
  • seller
model3   object  optional    
operational_seller_user_id   string  optional    

Example: ab

consignor_tracking_enabled   boolean  optional    

Example: true

payout_execution_mode   string  optional    

Example: manual

Must be one of:
  • manual
identity   object  optional    
buyer_visible_seller   string  optional    

Example: dynamic_by_model

Must be one of:
  • dynamic_by_model

Get tenant supply settings configuration.

requires authentication

Returns routing, network consent defaults, valuation provider configuration, submission requirements, and (when set) forecast.monthly_seller_commission_target_minor so integrations can align with the supply scorecard pipeline target gap. Requires permission manage tenant settings.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/configuration/supply-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/supply-settings"
);

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

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

Example response (200, success):


{"data":{"routing":{"mode":"tenant_only","require_explicit_network_consent":true},"submission":{"require_valuation":true},"forecast":{"monthly_seller_commission_target_minor":500000}}
 

Example response (404, tenant not found):


{
    "message": "Tenant not found"
}
 

Request      

GET api/tenant/configuration/supply-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Update tenant supply settings configuration.

requires authentication

PATCH merges partial updates into existing tenant supply settings. To clear the monthly seller commission target, include forecast with monthly_seller_commission_target_minor set to null. The target is stored in minor currency units (same basis as fee calculations) and is compared to the base-case pipeline forecast on GET /api/supply/scorecard. Requires permission manage tenant settings.

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/configuration/supply-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"routing\": {
        \"mode\": \"tenant_only\",
        \"require_explicit_network_consent\": true
    },
    \"network\": {
        \"consent_default\": \"opt_out_required\"
    },
    \"valuation\": {
        \"provider_mode\": \"external_only\",
        \"provider_key\": \"ipzdszigdqrrkthq\",
        \"auto_assignment_enabled\": true
    },
    \"submission\": {
        \"require_valuation\": true,
        \"require_intake_shipment\": false,
        \"require_condition_report\": false,
        \"require_media\": false
    },
    \"forecast\": {
        \"monthly_seller_commission_target_minor\": \"500000\"
    }
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/supply-settings"
);

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

let body = {
    "routing": {
        "mode": "tenant_only",
        "require_explicit_network_consent": true
    },
    "network": {
        "consent_default": "opt_out_required"
    },
    "valuation": {
        "provider_mode": "external_only",
        "provider_key": "ipzdszigdqrrkthq",
        "auto_assignment_enabled": true
    },
    "submission": {
        "require_valuation": true,
        "require_intake_shipment": false,
        "require_condition_report": false,
        "require_media": false
    },
    "forecast": {
        "monthly_seller_commission_target_minor": "500000"
    }
};

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

Example response (200, success):


{
    "data": {
        "routing": {
            "mode": "tenant_only"
        }
    }
}
 

Example response (422, validation error):


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

Request      

PUT api/tenant/configuration/supply-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

routing   object  optional    
mode   string  optional    

Sometimes. One of tenant_only, operator_assisted, network_ready. Example: tenant_only

require_explicit_network_consent   boolean  optional    

Example: true

network   object  optional    
consent_default   string  optional    

Example: opt_out_required

Must be one of:
  • opt_in
  • opt_out_required
  • manual_review
valuation   object  optional    
provider_mode   string  optional    

Example: external_only

Must be one of:
  • manual
  • hybrid
  • external_only
provider_key   string  optional    

Must not be greater than 100 characters. Example: ipzdszigdqrrkthq

auto_assignment_enabled   boolean  optional    

Example: true

provider_settings   object  optional    
submission   object  optional    
require_valuation   boolean  optional    

Sometimes. Example: true

require_intake_shipment   boolean  optional    

Example: false

require_condition_report   boolean  optional    

Example: false

require_media   boolean  optional    

Example: false

forecast   object  optional    

Sometimes. Forecast-related tuning.

monthly_seller_commission_target_minor   int|null  optional    

Sometimes. Positive integer (minor units). Send null inside forecast to clear. Example: 500000

Update tenant supply settings configuration.

requires authentication

PATCH merges partial updates into existing tenant supply settings. To clear the monthly seller commission target, include forecast with monthly_seller_commission_target_minor set to null. The target is stored in minor currency units (same basis as fee calculations) and is compared to the base-case pipeline forecast on GET /api/supply/scorecard. Requires permission manage tenant settings.

Example request:
curl --request PATCH \
    "http://localhost:8000/api/tenant/configuration/supply-settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"routing\": {
        \"mode\": \"tenant_only\",
        \"require_explicit_network_consent\": false
    },
    \"network\": {
        \"consent_default\": \"opt_in\"
    },
    \"valuation\": {
        \"provider_mode\": \"hybrid\",
        \"provider_key\": \"ipzdszigdqrrkthq\",
        \"auto_assignment_enabled\": true
    },
    \"submission\": {
        \"require_valuation\": true,
        \"require_intake_shipment\": true,
        \"require_condition_report\": true,
        \"require_media\": false
    },
    \"forecast\": {
        \"monthly_seller_commission_target_minor\": \"500000\"
    }
}"
const url = new URL(
    "http://localhost:8000/api/tenant/configuration/supply-settings"
);

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

let body = {
    "routing": {
        "mode": "tenant_only",
        "require_explicit_network_consent": false
    },
    "network": {
        "consent_default": "opt_in"
    },
    "valuation": {
        "provider_mode": "hybrid",
        "provider_key": "ipzdszigdqrrkthq",
        "auto_assignment_enabled": true
    },
    "submission": {
        "require_valuation": true,
        "require_intake_shipment": true,
        "require_condition_report": true,
        "require_media": false
    },
    "forecast": {
        "monthly_seller_commission_target_minor": "500000"
    }
};

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

Example response (200, success):


{
    "data": {
        "routing": {
            "mode": "tenant_only"
        }
    }
}
 

Example response (422, validation error):


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

Request      

PATCH api/tenant/configuration/supply-settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

routing   object  optional    
mode   string  optional    

Sometimes. One of tenant_only, operator_assisted, network_ready. Example: tenant_only

require_explicit_network_consent   boolean  optional    

Example: false

network   object  optional    
consent_default   string  optional    

Example: opt_in

Must be one of:
  • opt_in
  • opt_out_required
  • manual_review
valuation   object  optional    
provider_mode   string  optional    

Example: hybrid

Must be one of:
  • manual
  • hybrid
  • external_only
provider_key   string  optional    

Must not be greater than 100 characters. Example: ipzdszigdqrrkthq

auto_assignment_enabled   boolean  optional    

Example: true

provider_settings   object  optional    
submission   object  optional    
require_valuation   boolean  optional    

Sometimes. Example: true

require_intake_shipment   boolean  optional    

Example: true

require_condition_report   boolean  optional    

Example: true

require_media   boolean  optional    

Example: false

forecast   object  optional    

Sometimes. Forecast-related tuning.

monthly_seller_commission_target_minor   int|null  optional    

Sometimes. Positive integer (minor units). Send null inside forecast to clear. Example: 500000

GET api/tenant/white-label

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/white-label" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/white-label"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 5f0447d1-719a-4fd1-b316-0c8f450f9bc7
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/tenant/white-label

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

PUT api/tenant/white-label/draft

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/white-label/draft" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
const url = new URL(
    "http://localhost:8000/api/tenant/white-label/draft"
);

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

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

Request      

PUT api/tenant/white-label/draft

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

config   object  optional    

This field is required when sections is not present.

sections   object  optional    

This field is required when config is not present.

POST api/tenant/white-label/publish

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenant/white-label/publish" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"notes\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/white-label/publish"
);

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

let body = {
    "notes": "ipzdszigdqrrkthq"
};

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

Request      

POST api/tenant/white-label/publish

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

notes   string  optional    

Must not be greater than 2000 characters. Example: ipzdszigdqrrkthq

POST api/tenant/white-label/rollback

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenant/white-label/rollback" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"version_id\": \"ab\",
    \"notes\": \"pzdszigdqrrkthqp\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/white-label/rollback"
);

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

let body = {
    "version_id": "ab",
    "notes": "pzdszigdqrrkthqp"
};

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

Request      

POST api/tenant/white-label/rollback

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

version_id   string     

Example: ab

notes   string  optional    

Must not be greater than 2000 characters. Example: pzdszigdqrrkthqp

GET api/tenant/white-label/assets

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/white-label/assets" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/white-label/assets"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 0c53a024-902e-4129-82bb-cb2a389fa795
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/tenant/white-label/assets

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/tenant/white-label/assets

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenant/white-label/assets" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: multipart/form-data" \
    --header "Accept: application/json" \
    --form "type=favicon"\
    --form "key=ipzdszigdqrrkthq"\
    --form "file=@/private/var/folders/40/p9d183kj4j78wtdbrp4kflth0000gn/T/phplj5o2rj8s84af0ThV1z" 
const url = new URL(
    "http://localhost:8000/api/tenant/white-label/assets"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "multipart/form-data",
    "Accept": "application/json",
};

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

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

Request      

POST api/tenant/white-label/assets

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: multipart/form-data

Accept        

Example: application/json

Body Parameters

type   string     

Example: favicon

Must be one of:
  • logo
  • mark
  • favicon
  • font
  • icon
  • social
  • document
  • email
  • overlay
key   string     

Must match the regex /^[a-z0-9][a-z0-9._-]*$/. Must not be greater than 120 characters. Example: ipzdszigdqrrkthq

file   file     

Must be a file. Must not be greater than 5120 kilobytes.

metadata   object  optional    

Get tenant domain configuration

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/domain" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/domain"
);

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

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

Example response (200, success):


{
    "active": {
        "hostname": "example.babylon.host",
        "status": "active"
    },
    "pending": null,
    "platform": {
        "selected_base": "babylon.host",
        "computed_hostname": "example.babylon.host"
    },
    "purposes": {
        "storefront": {
            "active": null,
            "pending": null
        }
    },
    "capabilities": {
        "custom_storefront_domain": true
    }
}
 

Example response (404, tenant not found):


{
    "code": "unknown_host",
    "message": "Tenant not resolved for host."
}
 

Request      

GET api/tenant/domain

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

PUT api/tenant/domain/mode

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/tenant/domain/mode" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"mode\": \"platform\",
    \"platform_base\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/mode"
);

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

let body = {
    "mode": "platform",
    "platform_base": "ab"
};

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

Request      

PUT api/tenant/domain/mode

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

mode   string     

Example: platform

Must be one of:
  • platform
platform_base   string     

Example: ab

POST api/tenant/domain/custom

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenant/domain/custom" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"hostname\": \"ipzdszigdqrrkthq\",
    \"purpose\": \"storefront\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/custom"
);

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

let body = {
    "hostname": "ipzdszigdqrrkthq",
    "purpose": "storefront"
};

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

Request      

POST api/tenant/domain/custom

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

hostname   string     

Must not be greater than 253 characters. Example: ipzdszigdqrrkthq

purpose   string  optional    

Example: storefront

Must be one of:
  • storefront

POST api/tenant/domain/custom/confirm-dns

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenant/domain/custom/confirm-dns" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domain_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/custom/confirm-dns"
);

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

let body = {
    "domain_id": "ab"
};

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

Request      

POST api/tenant/domain/custom/confirm-dns

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

domain_id   string     

Example: ab

POST api/tenant/domain/custom/test

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenant/domain/custom/test" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domain_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/custom/test"
);

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

let body = {
    "domain_id": "ab"
};

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

Request      

POST api/tenant/domain/custom/test

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

domain_id   string     

Example: ab

DELETE api/tenant/domain/custom

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/tenant/domain/custom" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domain_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/custom"
);

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

let body = {
    "domain_id": "ab"
};

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

Request      

DELETE api/tenant/domain/custom

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

domain_id   string     

Example: ab

GET api/tenant/domain/email-identities

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/domain/email-identities" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/email-identities"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: ad6da81e-3a94-4994-9ee4-75e61832e898
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/tenant/domain/email-identities

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/tenant/domain/email-identities/custom

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenant/domain/email-identities/custom" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domain\": \"ipzdszigdqrrkthq\",
    \"is_default\": true
}"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/email-identities/custom"
);

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

let body = {
    "domain": "ipzdszigdqrrkthq",
    "is_default": true
};

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

Request      

POST api/tenant/domain/email-identities/custom

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

domain   string     

Must not be greater than 253 characters. Example: ipzdszigdqrrkthq

is_default   boolean  optional    

Example: true

POST api/tenant/domain/email-identities/{identityId}/refresh

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenant/domain/email-identities/ab/refresh" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/email-identities/ab/refresh"
);

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

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

Request      

POST api/tenant/domain/email-identities/{identityId}/refresh

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

identityId   string     

Example: ab

List domain events for the tenant

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/tenant/domain/events?domain_id=01JBQW8K7V2XZGHJK5MNPQRSTU&cursor=01JBQW8K7V2XZGHJK5MNPQRSTU&limit=50" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"domain_id\": \"ab\",
    \"cursor\": \"ab\",
    \"limit\": 7
}"
const url = new URL(
    "http://localhost:8000/api/tenant/domain/events"
);

const params = {
    "domain_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "cursor": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "limit": "50",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "domain_id": "ab",
    "cursor": "ab",
    "limit": 7
};

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

Example response (200, success):


{
    "items": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "at": "2025-10-29T10:00:00.000000Z",
            "type": "status_change",
            "from_status": "pending",
            "to_status": "active"
        }
    ],
    "next_cursor": "01JBQW8K7V2XZGHJK5MNPQRSTU"
}
 

Example response (403, forbidden):


{
    "code": "forbidden",
    "message": "Forbidden."
}
 

Example response (404, tenant not found):


{
    "code": "unknown_host",
    "message": "Tenant not resolved for host."
}
 

Request      

GET api/tenant/domain/events

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

domain_id   string  optional    

Filter by domain ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

cursor   string  optional    

Pagination cursor. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

limit   integer  optional    

Max items (1-100). Example: 50

Body Parameters

domain_id   string  optional    

Example: ab

cursor   string  optional    

Example: ab

limit   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 7

POST api/tenants/{tenant_id}/frontend-origins

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/tenants/ab/frontend-origins" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"origin\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/tenants/ab/frontend-origins"
);

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

let body = {
    "origin": "ab"
};

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

Request      

POST api/tenants/{tenant_id}/frontend-origins

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

tenant_id   string     

The ID of the tenant. Example: ab

Body Parameters

origin   string     

Example: ab

PATCH /api/user/public-identity

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/user/public-identity" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"public_handle\": \"ab\",
    \"seller_brand_name\": \"pzdszigdqrrkthqp\",
    \"public_display_name\": \"vviwahfxqnyifdnn\"
}"
const url = new URL(
    "http://localhost:8000/api/user/public-identity"
);

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

let body = {
    "public_handle": "ab",
    "seller_brand_name": "pzdszigdqrrkthqp",
    "public_display_name": "vviwahfxqnyifdnn"
};

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

Request      

PATCH api/user/public-identity

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

public_handle   string     

Example: ab

seller_brand_name   string  optional    

Must not be greater than 255 characters. Example: pzdszigdqrrkthqp

public_display_name   string  optional    

Must not be greater than 255 characters. Example: vviwahfxqnyifdnn

GET /api/public-handles/availability?handle=.

requires authentication

..

Check if a public handle is available for the current tenant.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/public-handles/availability?handle=john_doe" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/public-handles/availability"
);

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

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

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

Example response (200, success):


{
    "available": true,
    "normalized": "john_doe"
}
 

Example response (400, tenant required):


{
    "available": false,
    "normalized": null,
    "reason": "tenant_required"
}
 

Request      

GET api/public-handles/availability

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

handle   string     

The handle to check. Example: john_doe

POST api/listings/{listing_id}/quote

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/listings/ab/quote" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 61,
    \"quantity\": 52,
    \"delivery_method\": \"pickup\"
}"
const url = new URL(
    "http://localhost:8000/api/listings/ab/quote"
);

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

let body = {
    "amount": 61,
    "quantity": 52,
    "delivery_method": "pickup"
};

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

Request      

POST api/listings/{listing_id}/quote

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing_id   string     

The ID of the listing. Example: ab

Body Parameters

amount   integer     

Must be at least 1. Example: 61

quantity   integer  optional    

Must be at least 1. Example: 52

delivery_method   string  optional    

Example: pickup

Must be one of:
  • shipping
  • pickup

GET api/offers

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/offers" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"pending\",
    \"listing_id\": \"ab\",
    \"per_page\": 7
}"
const url = new URL(
    "http://localhost:8000/api/offers"
);

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

let body = {
    "status": "pending",
    "listing_id": "ab",
    "per_page": 7
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: ff20d29a-c0c6-4833-9b3d-0a83a016f97c
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/offers

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

status   string  optional    

Example: pending

Must be one of:
  • pending
  • accepted
  • rejected
  • cancelled
listing_id   string  optional    

Example: ab

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 7

Download order invoice as PDF

requires authentication

Returns a PDF (or seller statement for seller view). Buyer sees buyer-facing invoice; seller sees seller statement.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/invoices/ab/download" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/invoices/ab/download"
);

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

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

Example response (200, success):


PDF file download (Content-Type: application/pdf)
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Example response (403, forbidden):


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

Example response (404, not found):


{
    "message": "Not found"
}
 

Request      

GET api/invoices/{invoice_id}/download

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

invoice_id   string     

The ID of the invoice. Example: ab

invoice   string     

The invoice ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Seller overview rollups.

requires authentication

Returns:

Example request:
curl --request GET \
    --get "http://localhost:8000/api/seller/overview" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/seller/overview"
);

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

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

Example response (200, success):


{
    "counts": {
        "paid_unshipped": 4,
        "delivered_pending_acceptance": 2,
        "disputed": 0,
        "completed": 45
    },
    "money": {
        "net_proceeds_pending": [],
        "net_proceeds_paid_out": [],
        "scheduled_payout_amount": []
    }
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthorized"
}
 

Request      

GET api/seller/overview

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

List seller-scoped fixed-price listing offers.

requires authentication

Defaults to pending offers only.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/seller/offers?status=pending&listing_id=01JBQW8K7V2XZGHJK5MNPQRSTU&per_page=20" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"rejected\",
    \"listing_id\": \"ab\",
    \"per_page\": 7
}"
const url = new URL(
    "http://localhost:8000/api/seller/offers"
);

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

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

let body = {
    "status": "rejected",
    "listing_id": "ab",
    "per_page": 7
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: c7a0d08f-5e8e-4f7a-afe1-7ef70417ef54
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/seller/offers

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

Filter by status. Example: pending

listing_id   string  optional    

Filter by listing. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

per_page   integer  optional    

Pagination size. Example: 20

Body Parameters

status   string  optional    

Example: rejected

Must be one of:
  • pending
  • accepted
  • rejected
  • cancelled
listing_id   string  optional    

Example: ab

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 7

List seller payouts.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/seller/payouts?status=completed&page=1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/seller/payouts"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "status": "completed",
            "amount": 15000,
            "currency": "GBP"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthorized"
}
 

Example response (422, invalid status):


{
    "message": "Invalid status filter.",
    "errors": {
        "status": [
            "Invalid status."
        ]
    }
}
 

Request      

GET api/seller/payouts

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

Filter by status (pending, scheduled, processing, completed, failed, etc.). Example: completed

page   integer  optional    

Pagination page. Example: 1

Seller consignment ledger.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/seller/ledger?from=2025-01-01&to=2025-01-31&page=1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/seller/ledger"
);

const params = {
    "from": "2025-01-01",
    "to": "2025-01-31",
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "type": "sale",
            "amount": 15000,
            "currency": "GBP"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthorized"
}
 

Request      

GET api/seller/ledger

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

from   string  optional    

date Filter from date (Y-m-d). Example: 2025-01-01

to   string  optional    

date Filter to date (Y-m-d). Example: 2025-01-31

page   integer  optional    

Pagination page. Example: 1

List open issues for the seller/concierge counterparty.

requires authentication

This is the seller-facing surface for pre-dispute Issue lifecycle.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/seller/issues" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/seller/issues"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "order_id": "...",
            "status": "issue_opened",
            "reason_code": "not_as_described"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthorized"
}
 

Example response (503, migrations pending):


{
    "message": "Database migrations are required (missing order_issues table). Run `php artisan migrate`."
}
 

Request      

GET api/seller/issues

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/consignors

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/consignors" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/consignors"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 833298fc-1003-4849-988b-7ff3be212a11
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/consignors

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/consignors

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/consignors" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ipzdszigdqrrkthq\",
    \"email\": \"molly.sanford@example.org\",
    \"phone\": \"ahfxqnyifdnnzcln\"
}"
const url = new URL(
    "http://localhost:8000/api/consignors"
);

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

let body = {
    "name": "ipzdszigdqrrkthq",
    "email": "molly.sanford@example.org",
    "phone": "ahfxqnyifdnnzcln"
};

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

Request      

POST api/consignors

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: molly.sanford@example.org

phone   string  optional    

Must not be greater than 60 characters. Example: ahfxqnyifdnnzcln

payout_profile   object  optional    
tax_profile   object  optional    
metadata   object  optional    

GET api/consignors/{id}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/consignors/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/consignors/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 406ae78c-b9e1-476a-a955-b28f15b5a6db
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/consignors/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the consignor. Example: ab

PATCH api/consignors/{id}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/consignors/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ipzdszigdqrrkthq\",
    \"email\": \"molly.sanford@example.org\",
    \"phone\": \"ahfxqnyifdnnzcln\"
}"
const url = new URL(
    "http://localhost:8000/api/consignors/ab"
);

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

let body = {
    "name": "ipzdszigdqrrkthq",
    "email": "molly.sanford@example.org",
    "phone": "ahfxqnyifdnnzcln"
};

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

Request      

PATCH api/consignors/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the consignor. Example: ab

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: molly.sanford@example.org

phone   string  optional    

Must not be greater than 60 characters. Example: ahfxqnyifdnnzcln

payout_profile   object  optional    
tax_profile   object  optional    
metadata   object  optional    

DELETE api/consignors/{id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/consignors/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/consignors/ab"
);

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

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

Request      

DELETE api/consignors/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the consignor. Example: ab

GET api/supply/activities

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/activities" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"limit\": 16,
    \"subject_type\": \"reserve_recommendation\",
    \"event_type\": \"pzdszigdqrrkthqp\",
    \"from\": \"2026-05-04T20:47:20\",
    \"to\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/activities"
);

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

let body = {
    "limit": 16,
    "subject_type": "reserve_recommendation",
    "event_type": "pzdszigdqrrkthqp",
    "from": "2026-05-04T20:47:20",
    "to": "2069-05-25"
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 40329710-3340-4158-b4d5-0b371ebb9b35
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/activities

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

limit   integer  optional    

Must be at least 1. Must not be greater than 200. Example: 16

subject_type   string  optional    

Example: reserve_recommendation

Must be one of:
  • consignment_lead
  • consignment_item
  • intake_shipment
  • condition_report
  • valuation_case
  • reserve_recommendation
subject_id   string  optional    
event_type   string  optional    

Must not be greater than 120 characters. Example: pzdszigdqrrkthqp

actor_id   string  optional    
from   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

to   string  optional    

Must be a valid date. Must be a date after or equal to from. Example: 2069-05-25

GET api/supply/activities/{supplyActivity}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/activities/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/activities/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 5849eac8-e364-4b77-8fa5-b11c93eceade
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/activities/{supplyActivity}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplyActivity   string     

Example: ab

GET api/supply/intake/shipments

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/intake/shipments" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"limit\": 16,
    \"status\": \"received\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/intake/shipments"
);

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

let body = {
    "limit": 16,
    "status": "received"
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: aa74c912-d7e9-404d-90bc-3b6de600eff8
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/intake/shipments

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

limit   integer  optional    

Must be at least 1. Must not be greater than 200. Example: 16

status   string  optional    

Example: received

Must be one of:
  • expected
  • in_transit
  • received
  • closed
  • cancelled
consignor_id   string  optional    
consignment_lead_id   string  optional    
consignment_item_id   string  optional    

POST api/supply/intake/shipments

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/intake/shipments" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"consignment_item_ids\": [
        \"ab\"
    ],
    \"status\": \"closed\",
    \"source_type\": \"pzdszigdqrrkthqp\",
    \"source_ref\": \"vviwahfxqnyifdnn\",
    \"external_owner_ref\": \"zclnhfpvmsnpkynl\",
    \"reference_number\": \"nbgjdpzixzkhgmlx\",
    \"inbound_method\": \"fmavknkckbhgmqye\",
    \"carrier_name\": \"ipywyxscplvrjzaq\",
    \"tracking_number\": \"aveihafwfciilryu\",
    \"package_count\": 66,
    \"expected_item_count\": 76,
    \"notes\": \"psenryjduorkexff\",
    \"custody_location\": \"nsuubyteydjenado\",
    \"network_eligible\": false,
    \"network_consent_status\": \"revoked\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/intake/shipments"
);

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

let body = {
    "consignment_item_ids": [
        "ab"
    ],
    "status": "closed",
    "source_type": "pzdszigdqrrkthqp",
    "source_ref": "vviwahfxqnyifdnn",
    "external_owner_ref": "zclnhfpvmsnpkynl",
    "reference_number": "nbgjdpzixzkhgmlx",
    "inbound_method": "fmavknkckbhgmqye",
    "carrier_name": "ipywyxscplvrjzaq",
    "tracking_number": "aveihafwfciilryu",
    "package_count": 66,
    "expected_item_count": 76,
    "notes": "psenryjduorkexff",
    "custody_location": "nsuubyteydjenado",
    "network_eligible": false,
    "network_consent_status": "revoked"
};

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

Request      

POST api/supply/intake/shipments

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

consignor_id   string  optional    

The id of an existing record in the consignors table.

consignment_lead_id   string  optional    

The id of an existing record in the consignment_leads table.

consignment_item_ids   string[]     

The id of an existing record in the consignment_items table.

status   string  optional    

Example: closed

Must be one of:
  • expected
  • in_transit
  • received
  • closed
  • cancelled
source_type   string  optional    

Must not be greater than 64 characters. Example: pzdszigdqrrkthqp

source_ref   string  optional    

Must not be greater than 191 characters. Example: vviwahfxqnyifdnn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: zclnhfpvmsnpkynl

reference_number   string  optional    

Must not be greater than 191 characters. Example: nbgjdpzixzkhgmlx

inbound_method   string  optional    

Must not be greater than 64 characters. Example: fmavknkckbhgmqye

carrier_name   string  optional    

Must not be greater than 191 characters. Example: ipywyxscplvrjzaq

tracking_number   string  optional    

Must not be greater than 191 characters. Example: aveihafwfciilryu

package_count   integer  optional    

Must be at least 1. Example: 66

expected_item_count   integer  optional    

Must be at least 0. Example: 76

notes   string  optional    

Must not be greater than 10000 characters. Example: psenryjduorkexff

custody_location   string  optional    

Must not be greater than 191 characters. Example: nsuubyteydjenado

custody_metadata   object  optional    
network_eligible   boolean  optional    

Example: false

network_consent_status   string  optional    

Example: revoked

Must be one of:
  • not_requested
  • pending
  • granted
  • denied
  • revoked
routing_metadata   object  optional    
metadata   object  optional    

GET api/supply/intake/shipments/{intakeShipment}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/intake/shipments/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/intake/shipments/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 8773ca40-eebe-4d55-a7f5-9c8ae520e277
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/intake/shipments/{intakeShipment}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

intakeShipment   string     

Example: ab

PATCH api/supply/intake/shipments/{intakeShipment}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/supply/intake/shipments/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"consignment_item_ids\": [
        \"ab\"
    ],
    \"status\": \"cancelled\",
    \"source_type\": \"pzdszigdqrrkthqp\",
    \"source_ref\": \"vviwahfxqnyifdnn\",
    \"external_owner_ref\": \"zclnhfpvmsnpkynl\",
    \"reference_number\": \"nbgjdpzixzkhgmlx\",
    \"inbound_method\": \"fmavknkckbhgmqye\",
    \"carrier_name\": \"ipywyxscplvrjzaq\",
    \"tracking_number\": \"aveihafwfciilryu\",
    \"package_count\": 66,
    \"expected_item_count\": 76,
    \"notes\": \"psenryjduorkexff\",
    \"custody_location\": \"nsuubyteydjenado\",
    \"network_eligible\": false,
    \"network_consent_status\": \"revoked\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/intake/shipments/ab"
);

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

let body = {
    "consignment_item_ids": [
        "ab"
    ],
    "status": "cancelled",
    "source_type": "pzdszigdqrrkthqp",
    "source_ref": "vviwahfxqnyifdnn",
    "external_owner_ref": "zclnhfpvmsnpkynl",
    "reference_number": "nbgjdpzixzkhgmlx",
    "inbound_method": "fmavknkckbhgmqye",
    "carrier_name": "ipywyxscplvrjzaq",
    "tracking_number": "aveihafwfciilryu",
    "package_count": 66,
    "expected_item_count": 76,
    "notes": "psenryjduorkexff",
    "custody_location": "nsuubyteydjenado",
    "network_eligible": false,
    "network_consent_status": "revoked"
};

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

Request      

PATCH api/supply/intake/shipments/{intakeShipment}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

intakeShipment   string     

Example: ab

Body Parameters

consignor_id   string  optional    

The id of an existing record in the consignors table.

consignment_lead_id   string  optional    

The id of an existing record in the consignment_leads table.

consignment_item_ids   string[]     

The id of an existing record in the consignment_items table.

status   string  optional    

Example: cancelled

Must be one of:
  • expected
  • in_transit
  • received
  • closed
  • cancelled
source_type   string  optional    

Must not be greater than 64 characters. Example: pzdszigdqrrkthqp

source_ref   string  optional    

Must not be greater than 191 characters. Example: vviwahfxqnyifdnn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: zclnhfpvmsnpkynl

reference_number   string  optional    

Must not be greater than 191 characters. Example: nbgjdpzixzkhgmlx

inbound_method   string  optional    

Must not be greater than 64 characters. Example: fmavknkckbhgmqye

carrier_name   string  optional    

Must not be greater than 191 characters. Example: ipywyxscplvrjzaq

tracking_number   string  optional    

Must not be greater than 191 characters. Example: aveihafwfciilryu

package_count   integer  optional    

Must be at least 1. Example: 66

expected_item_count   integer  optional    

Must be at least 0. Example: 76

notes   string  optional    

Must not be greater than 10000 characters. Example: psenryjduorkexff

custody_location   string  optional    

Must not be greater than 191 characters. Example: nsuubyteydjenado

custody_metadata   object  optional    
network_eligible   boolean  optional    

Example: false

network_consent_status   string  optional    

Example: revoked

Must be one of:
  • not_requested
  • pending
  • granted
  • denied
  • revoked
routing_metadata   object  optional    
metadata   object  optional    

GET api/supply/valuations

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/valuations" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"limit\": 16,
    \"status\": \"approved\",
    \"selected_only\": true
}"
const url = new URL(
    "http://localhost:8000/api/supply/valuations"
);

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

let body = {
    "limit": 16,
    "status": "approved",
    "selected_only": true
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: d35767b1-3e97-4241-9a9d-b59a55dc9670
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/valuations

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

limit   integer  optional    

Must be at least 1. Must not be greater than 200. Example: 16

status   string  optional    

Example: approved

Must be one of:
  • open
  • recommended
  • approved
  • closed
consignment_lead_id   string  optional    
consignment_item_id   string  optional    
listing_id   string  optional    
selected_only   boolean  optional    

Example: true

POST api/supply/valuations

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/valuations" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"approved\",
    \"source_type\": \"ipzdszigdqrrkthq\",
    \"source_ref\": \"pvviwahfxqnyifdn\",
    \"external_owner_ref\": \"nzclnhfpvmsnpkyn\",
    \"notes\": \"lnbgjdpzixzkhgml\",
    \"network_eligible\": true,
    \"network_consent_status\": \"not_requested\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/valuations"
);

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

let body = {
    "status": "approved",
    "source_type": "ipzdszigdqrrkthq",
    "source_ref": "pvviwahfxqnyifdn",
    "external_owner_ref": "nzclnhfpvmsnpkyn",
    "notes": "lnbgjdpzixzkhgml",
    "network_eligible": true,
    "network_consent_status": "not_requested"
};

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

Request      

POST api/supply/valuations

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

consignment_lead_id   string  optional    

The id of an existing record in the consignment_leads table.

consignment_item_id   string  optional    

The id of an existing record in the consignment_items table.

listing_id   string  optional    

The id of an existing record in the listings table.

status   string  optional    

Example: approved

Must be one of:
  • open
  • recommended
  • approved
  • closed
source_type   string  optional    

Must not be greater than 64 characters. Example: ipzdszigdqrrkthq

source_ref   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: nzclnhfpvmsnpkyn

notes   string  optional    

Must not be greater than 5000 characters. Example: lnbgjdpzixzkhgml

input_sources   object  optional    
subject_snapshot   object  optional    
network_eligible   boolean  optional    

Example: true

network_consent_status   string  optional    

Example: not_requested

Must be one of:
  • not_requested
  • pending
  • granted
  • denied
  • revoked
routing_metadata   object  optional    

GET api/supply/valuations/{valuationCase}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/valuations/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/valuations/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 4c770fc9-b715-4bcc-990c-8acf8897b315
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/valuations/{valuationCase}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

valuationCase   string     

Example: ab

PATCH api/supply/valuations/{valuationCase}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/supply/valuations/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"status\": \"recommended\",
    \"source_type\": \"ipzdszigdqrrkthq\",
    \"source_ref\": \"pvviwahfxqnyifdn\",
    \"external_owner_ref\": \"nzclnhfpvmsnpkyn\",
    \"notes\": \"lnbgjdpzixzkhgml\",
    \"network_eligible\": false,
    \"network_consent_status\": \"pending\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/valuations/ab"
);

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

let body = {
    "status": "recommended",
    "source_type": "ipzdszigdqrrkthq",
    "source_ref": "pvviwahfxqnyifdn",
    "external_owner_ref": "nzclnhfpvmsnpkyn",
    "notes": "lnbgjdpzixzkhgml",
    "network_eligible": false,
    "network_consent_status": "pending"
};

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

Request      

PATCH api/supply/valuations/{valuationCase}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

valuationCase   string     

Example: ab

Body Parameters

consignment_lead_id   string  optional    

The id of an existing record in the consignment_leads table.

consignment_item_id   string  optional    

The id of an existing record in the consignment_items table.

listing_id   string  optional    

The id of an existing record in the listings table.

selected_reserve_recommendation_id   string  optional    

The id of an existing record in the reserve_recommendations table.

status   string  optional    

Example: recommended

Must be one of:
  • open
  • recommended
  • approved
  • closed
source_type   string  optional    

Must not be greater than 64 characters. Example: ipzdszigdqrrkthq

source_ref   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: nzclnhfpvmsnpkyn

notes   string  optional    

Must not be greater than 5000 characters. Example: lnbgjdpzixzkhgml

input_sources   object  optional    
subject_snapshot   object  optional    
network_eligible   boolean  optional    

Example: false

network_consent_status   string  optional    

Example: pending

Must be one of:
  • not_requested
  • pending
  • granted
  • denied
  • revoked
routing_metadata   object  optional    

GET api/supply/valuations/{valuationCase}/recommendations

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/valuations/ab/recommendations" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/valuations/ab/recommendations"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: d977df6e-731f-4be0-896f-fea9729ecf37
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/valuations/{valuationCase}/recommendations

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

valuationCase   string     

Example: ab

POST api/supply/valuations/{valuationCase}/recommendations

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/valuations/ab/recommendations" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"source_type\": \"ipzdszigdqrrkthq\",
    \"source_ref\": \"pvviwahfxqnyifdn\",
    \"provider_name\": \"nzclnhfpvmsnpkyn\",
    \"estimated_low\": 24,
    \"estimated_high\": 0,
    \"reserve_price\": 53,
    \"confidence_score\": 22,
    \"currency\": \"jdp\",
    \"rationale\": \"zixzkhgmlxfmavkn\",
    \"override_reason\": \"kckbhgmqyeipywyx\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/valuations/ab/recommendations"
);

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

let body = {
    "source_type": "ipzdszigdqrrkthq",
    "source_ref": "pvviwahfxqnyifdn",
    "provider_name": "nzclnhfpvmsnpkyn",
    "estimated_low": 24,
    "estimated_high": 0,
    "reserve_price": 53,
    "confidence_score": 22,
    "currency": "jdp",
    "rationale": "zixzkhgmlxfmavkn",
    "override_reason": "kckbhgmqyeipywyx"
};

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

Request      

POST api/supply/valuations/{valuationCase}/recommendations

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

valuationCase   string     

Example: ab

Body Parameters

source_type   string  optional    

Must not be greater than 64 characters. Example: ipzdszigdqrrkthq

source_ref   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

provider_name   string  optional    

Must not be greater than 191 characters. Example: nzclnhfpvmsnpkyn

estimated_low   integer  optional    

Must be at least 0. Example: 24

estimated_high   integer  optional    

Must be at least 0. Example: 0

reserve_price   integer  optional    

Must be at least 0. Example: 53

confidence_score   number  optional    

Must be at least 0. Must not be greater than 100. Example: 22

currency   string     

Must be 3 characters. Example: jdp

rationale   string  optional    

Must not be greater than 10000 characters. Example: zixzkhgmlxfmavkn

override_reason   string  optional    

Must not be greater than 5000 characters. Example: kckbhgmqyeipywyx

comps_provenance   object  optional    
metadata   object  optional    

GET api/supply/valuations/{valuationCase}/recommendations/{reserveRecommendation}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/valuations/ab/recommendations/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/valuations/ab/recommendations/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 9f140f57-e431-48c3-b585-01d706377110
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/valuations/{valuationCase}/recommendations/{reserveRecommendation}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

valuationCase   string     

Example: ab

reserveRecommendation   string     

Example: ab

GET api/supply/leads

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/leads" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"stage\": \"ipzdszigdqrrkthq\",
    \"search\": \"pvviwahfxqnyifdn\",
    \"unassigned\": true,
    \"overdue_actions\": true,
    \"due_today_actions\": true,
    \"page\": 24
}"
const url = new URL(
    "http://localhost:8000/api/supply/leads"
);

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

let body = {
    "stage": "ipzdszigdqrrkthq",
    "search": "pvviwahfxqnyifdn",
    "unassigned": true,
    "overdue_actions": true,
    "due_today_actions": true,
    "page": 24
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: fc2f3978-4bc7-4bcb-b2fe-27948d707ed5
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/leads

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

stage   string  optional    

Must not be greater than 64 characters. Example: ipzdszigdqrrkthq

consignor_id   string  optional    

The id of an existing record in the consignors table.

search   string  optional    

Must not be greater than 255 characters. Example: pvviwahfxqnyifdn

owner_user_id   string  optional    

The id of an existing record in the users table.

unassigned   boolean  optional    

Example: true

overdue_actions   boolean  optional    

Example: true

due_today_actions   boolean  optional    

Example: true

page   integer  optional    

Must be at least 1. Example: 24

POST api/supply/leads

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/leads" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"stage\": \"lead\",
    \"source_type\": \"ipzdszigdqrrkthq\",
    \"source_ref\": \"pvviwahfxqnyifdn\",
    \"external_owner_ref\": \"nzclnhfpvmsnpkyn\",
    \"name\": \"lnbgjdpzixzkhgml\",
    \"email\": \"mstroman@example.com\",
    \"phone\": \"vknkckbhgmqyeipy\",
    \"notes\": \"wyxscplvrjzaqave\",
    \"expected_item_count\": 73,
    \"last_contacted_at\": \"2026-05-04T20:47:20\",
    \"converted_at\": \"2026-05-04T20:47:20\",
    \"network_eligible\": false,
    \"network_consent_status\": \"granted\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/leads"
);

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

let body = {
    "stage": "lead",
    "source_type": "ipzdszigdqrrkthq",
    "source_ref": "pvviwahfxqnyifdn",
    "external_owner_ref": "nzclnhfpvmsnpkyn",
    "name": "lnbgjdpzixzkhgml",
    "email": "mstroman@example.com",
    "phone": "vknkckbhgmqyeipy",
    "notes": "wyxscplvrjzaqave",
    "expected_item_count": 73,
    "last_contacted_at": "2026-05-04T20:47:20",
    "converted_at": "2026-05-04T20:47:20",
    "network_eligible": false,
    "network_consent_status": "granted"
};

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

Request      

POST api/supply/leads

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

consignor_id   string  optional    

The id of an existing record in the consignors table.

stage   string  optional    

Example: lead

Must be one of:
  • lead
  • contacted
source_type   string  optional    

Must not be greater than 64 characters. Example: ipzdszigdqrrkthq

source_ref   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: nzclnhfpvmsnpkyn

name   string     

Must not be greater than 255 characters. Example: lnbgjdpzixzkhgml

email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: mstroman@example.com

phone   string  optional    

Must not be greater than 60 characters. Example: vknkckbhgmqyeipy

notes   string  optional    

Must not be greater than 5000 characters. Example: wyxscplvrjzaqave

expected_item_count   integer  optional    

Must be at least 0. Example: 73

last_contacted_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

converted_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

network_eligible   boolean  optional    

Example: false

network_consent_status   string  optional    

Example: granted

Must be one of:
  • not_requested
  • pending
  • granted
  • denied
  • revoked
metadata   object  optional    
owner_user_id   string  optional    

The id of an existing record in the users table.

GET api/supply/leads/{consignmentLead}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/leads/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/leads/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: ecc051ac-7bcb-4c27-baff-fec562317bff
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/leads/{consignmentLead}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

consignmentLead   string     

Example: ab

PATCH api/supply/leads/{consignmentLead}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/supply/leads/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"stage\": \"contacted\",
    \"source_type\": \"ipzdszigdqrrkthq\",
    \"source_ref\": \"pvviwahfxqnyifdn\",
    \"external_owner_ref\": \"nzclnhfpvmsnpkyn\",
    \"name\": \"lnbgjdpzixzkhgml\",
    \"email\": \"mstroman@example.com\",
    \"phone\": \"vknkckbhgmqyeipy\",
    \"notes\": \"wyxscplvrjzaqave\",
    \"expected_item_count\": 73,
    \"last_contacted_at\": \"2026-05-04T20:47:20\",
    \"converted_at\": \"2026-05-04T20:47:20\",
    \"network_eligible\": false,
    \"network_consent_status\": \"not_requested\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/leads/ab"
);

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

let body = {
    "stage": "contacted",
    "source_type": "ipzdszigdqrrkthq",
    "source_ref": "pvviwahfxqnyifdn",
    "external_owner_ref": "nzclnhfpvmsnpkyn",
    "name": "lnbgjdpzixzkhgml",
    "email": "mstroman@example.com",
    "phone": "vknkckbhgmqyeipy",
    "notes": "wyxscplvrjzaqave",
    "expected_item_count": 73,
    "last_contacted_at": "2026-05-04T20:47:20",
    "converted_at": "2026-05-04T20:47:20",
    "network_eligible": false,
    "network_consent_status": "not_requested"
};

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

Request      

PATCH api/supply/leads/{consignmentLead}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

consignmentLead   string     

Example: ab

Body Parameters

consignor_id   string  optional    

The id of an existing record in the consignors table.

stage   string  optional    

Example: contacted

Must be one of:
  • lead
  • contacted
source_type   string  optional    

Must not be greater than 64 characters. Example: ipzdszigdqrrkthq

source_ref   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: nzclnhfpvmsnpkyn

name   string  optional    

Must not be greater than 255 characters. Example: lnbgjdpzixzkhgml

email   string  optional    

Must be a valid email address. Must not be greater than 255 characters. Example: mstroman@example.com

phone   string  optional    

Must not be greater than 60 characters. Example: vknkckbhgmqyeipy

notes   string  optional    

Must not be greater than 5000 characters. Example: wyxscplvrjzaqave

expected_item_count   integer  optional    

Must be at least 0. Example: 73

last_contacted_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

converted_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

network_eligible   boolean  optional    

Example: false

network_consent_status   string  optional    

Example: not_requested

Must be one of:
  • not_requested
  • pending
  • granted
  • denied
  • revoked
metadata   object  optional    
owner_user_id   string  optional    

The id of an existing record in the users table.

DELETE api/supply/leads/{consignmentLead}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/supply/leads/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/leads/ab"
);

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

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

Request      

DELETE api/supply/leads/{consignmentLead}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

consignmentLead   string     

Example: ab

GET api/supply/items

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/items" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"per_page\": 16,
    \"stage\": \"received\",
    \"search\": \"pzdszigdqrrkthqp\",
    \"submission_state\": \"needs_listing_draft\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/items"
);

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

let body = {
    "per_page": 16,
    "stage": "received",
    "search": "pzdszigdqrrkthqp",
    "submission_state": "needs_listing_draft"
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: d330faf1-7025-4329-8a6b-572c5cfb32ab
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/items

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

per_page   integer  optional    

Must be at least 1. Must not be greater than 200. Example: 16

stage   string  optional    

Example: received

Must be one of:
  • expected
  • received
  • inspected
  • valuation
  • approved
  • catalogued
  • consigned
  • listed
  • sold
  • paid
consignor_id   string  optional    
consignment_lead_id   string  optional    
search   string  optional    

Must not be greater than 255 characters. Example: pzdszigdqrrkthqp

submission_state   string  optional    

Example: needs_listing_draft

Must be one of:
  • needs_listing_draft
  • blocked_for_submission
  • ready_for_submission
  • pending_approval
  • changes_requested
  • approved_or_published

POST api/supply/items

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/items" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"stage\": \"expected\",
    \"source_type\": \"ipzdszigdqrrkthq\",
    \"source_ref\": \"pvviwahfxqnyifdn\",
    \"external_owner_ref\": \"nzclnhfpvmsnpkyn\",
    \"internal_reference\": \"lnbgjdpzixzkhgml\",
    \"title\": \"xfmavknkckbhgmqy\",
    \"description\": \"Eius perspiciatis tempora et inventore voluptatem hic.\",
    \"condition_summary\": \"cplvrjzaqaveihaf\",
    \"expected_at\": \"2026-05-04T20:47:20\",
    \"received_at\": \"2026-05-04T20:47:20\",
    \"inspected_at\": \"2026-05-04T20:47:20\",
    \"approved_at\": \"2026-05-04T20:47:20\",
    \"catalogued_at\": \"2026-05-04T20:47:20\",
    \"network_eligible\": false,
    \"network_consent_status\": \"revoked\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/items"
);

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

let body = {
    "stage": "expected",
    "source_type": "ipzdszigdqrrkthq",
    "source_ref": "pvviwahfxqnyifdn",
    "external_owner_ref": "nzclnhfpvmsnpkyn",
    "internal_reference": "lnbgjdpzixzkhgml",
    "title": "xfmavknkckbhgmqy",
    "description": "Eius perspiciatis tempora et inventore voluptatem hic.",
    "condition_summary": "cplvrjzaqaveihaf",
    "expected_at": "2026-05-04T20:47:20",
    "received_at": "2026-05-04T20:47:20",
    "inspected_at": "2026-05-04T20:47:20",
    "approved_at": "2026-05-04T20:47:20",
    "catalogued_at": "2026-05-04T20:47:20",
    "network_eligible": false,
    "network_consent_status": "revoked"
};

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

Request      

POST api/supply/items

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

consignor_id   string  optional    

The id of an existing record in the consignors table.

consignment_lead_id   string  optional    

The id of an existing record in the consignment_leads table.

listing_id   string  optional    

The id of an existing record in the listings table.

stage   string  optional    

Example: expected

Must be one of:
  • expected
  • received
  • inspected
  • valuation
  • approved
  • catalogued
  • consigned
  • listed
  • sold
  • paid
source_type   string  optional    

Must not be greater than 64 characters. Example: ipzdszigdqrrkthq

source_ref   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: nzclnhfpvmsnpkyn

internal_reference   string  optional    

Must not be greater than 191 characters. Example: lnbgjdpzixzkhgml

title   string     

Must not be greater than 255 characters. Example: xfmavknkckbhgmqy

description   string  optional    

Must not be greater than 10000 characters. Example: Eius perspiciatis tempora et inventore voluptatem hic.

category_id   string  optional    

The id of an existing record in the categories table.

condition_summary   string  optional    

Must not be greater than 255 characters. Example: cplvrjzaqaveihaf

expected_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

received_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

inspected_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

approved_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

catalogued_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

network_eligible   boolean  optional    

Example: false

network_consent_status   string  optional    

Example: revoked

Must be one of:
  • not_requested
  • pending
  • granted
  • denied
  • revoked
metadata   object  optional    

GET api/supply/items/{consignmentItem}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/items/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/items/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: f5719fe4-ff96-4529-a1bc-11feb71721cd
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/items/{consignmentItem}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

consignmentItem   string     

Example: ab

PATCH api/supply/items/{consignmentItem}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/supply/items/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"stage\": \"listed\",
    \"source_type\": \"ipzdszigdqrrkthq\",
    \"source_ref\": \"pvviwahfxqnyifdn\",
    \"external_owner_ref\": \"nzclnhfpvmsnpkyn\",
    \"internal_reference\": \"lnbgjdpzixzkhgml\",
    \"title\": \"xfmavknkckbhgmqy\",
    \"description\": \"Eius perspiciatis tempora et inventore voluptatem hic.\",
    \"condition_summary\": \"cplvrjzaqaveihaf\",
    \"expected_at\": \"2026-05-04T20:47:20\",
    \"received_at\": \"2026-05-04T20:47:20\",
    \"inspected_at\": \"2026-05-04T20:47:20\",
    \"approved_at\": \"2026-05-04T20:47:20\",
    \"catalogued_at\": \"2026-05-04T20:47:20\",
    \"network_eligible\": true,
    \"network_consent_status\": \"granted\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/items/ab"
);

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

let body = {
    "stage": "listed",
    "source_type": "ipzdszigdqrrkthq",
    "source_ref": "pvviwahfxqnyifdn",
    "external_owner_ref": "nzclnhfpvmsnpkyn",
    "internal_reference": "lnbgjdpzixzkhgml",
    "title": "xfmavknkckbhgmqy",
    "description": "Eius perspiciatis tempora et inventore voluptatem hic.",
    "condition_summary": "cplvrjzaqaveihaf",
    "expected_at": "2026-05-04T20:47:20",
    "received_at": "2026-05-04T20:47:20",
    "inspected_at": "2026-05-04T20:47:20",
    "approved_at": "2026-05-04T20:47:20",
    "catalogued_at": "2026-05-04T20:47:20",
    "network_eligible": true,
    "network_consent_status": "granted"
};

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

Request      

PATCH api/supply/items/{consignmentItem}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

consignmentItem   string     

Example: ab

Body Parameters

consignor_id   string  optional    

The id of an existing record in the consignors table.

consignment_lead_id   string  optional    

The id of an existing record in the consignment_leads table.

listing_id   string  optional    

The id of an existing record in the listings table.

stage   string  optional    

Example: listed

Must be one of:
  • expected
  • received
  • inspected
  • valuation
  • approved
  • catalogued
  • consigned
  • listed
  • sold
  • paid
source_type   string  optional    

Must not be greater than 64 characters. Example: ipzdszigdqrrkthq

source_ref   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: nzclnhfpvmsnpkyn

internal_reference   string  optional    

Must not be greater than 191 characters. Example: lnbgjdpzixzkhgml

title   string  optional    

Must not be greater than 255 characters. Example: xfmavknkckbhgmqy

description   string  optional    

Must not be greater than 10000 characters. Example: Eius perspiciatis tempora et inventore voluptatem hic.

category_id   string  optional    

The id of an existing record in the categories table.

condition_summary   string  optional    

Must not be greater than 255 characters. Example: cplvrjzaqaveihaf

expected_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

received_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

inspected_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

approved_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

catalogued_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

network_eligible   boolean  optional    

Example: true

network_consent_status   string  optional    

Example: granted

Must be one of:
  • not_requested
  • pending
  • granted
  • denied
  • revoked
metadata   object  optional    

DELETE api/supply/items/{consignmentItem}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/supply/items/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/items/ab"
);

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

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

Request      

DELETE api/supply/items/{consignmentItem}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

consignmentItem   string     

Example: ab

POST api/supply/items/{consignmentItem}/listing-submission

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/items/ab/listing-submission" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/items/ab/listing-submission"
);

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

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

Request      

POST api/supply/items/{consignmentItem}/listing-submission

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

consignmentItem   string     

Example: ab

POST api/demand/buyer-profiles/rebuild

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/demand/buyer-profiles/rebuild" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"sync_system_segments\": false,
    \"refresh_segments\": true
}"
const url = new URL(
    "http://localhost:8000/api/demand/buyer-profiles/rebuild"
);

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

let body = {
    "sync_system_segments": false,
    "refresh_segments": true
};

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

Request      

POST api/demand/buyer-profiles/rebuild

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

sync_system_segments   boolean  optional    

Example: false

refresh_segments   boolean  optional    

Example: true

GET api/demand/buyer-profiles

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/demand/buyer-profiles" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/buyer-profiles"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 9c4b4fb1-ff92-49eb-b002-470979bdc2f2
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/demand/buyer-profiles

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/demand/buyer-profiles/{buyerProfile}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/demand/buyer-profiles/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/buyer-profiles/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: f470661b-e15d-427c-98f8-daa19f4a4391
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/demand/buyer-profiles/{buyerProfile}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

buyerProfile   string     

Example: ab

GET api/demand/segments

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/demand/segments" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/segments"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 6c08a2ec-390a-4c93-a9fa-3dd98a9090bd
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/demand/segments

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/demand/segments/refresh

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/demand/segments/refresh" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"sync_system_segments\": false
}"
const url = new URL(
    "http://localhost:8000/api/demand/segments/refresh"
);

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

let body = {
    "sync_system_segments": false
};

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

Request      

POST api/demand/segments/refresh

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

sync_system_segments   boolean  optional    

Example: false

GET api/demand/segments/{buyerSegment}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/demand/segments/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/segments/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 9750a179-123b-4d65-9d53-0807e1b907c5
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/demand/segments/{buyerSegment}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

buyerSegment   string     

Example: ab

POST api/demand/segments/{buyerSegment}/refresh

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/demand/segments/ab/refresh" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"sync_system_segments\": true
}"
const url = new URL(
    "http://localhost:8000/api/demand/segments/ab/refresh"
);

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

let body = {
    "sync_system_segments": true
};

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

Request      

POST api/demand/segments/{buyerSegment}/refresh

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

buyerSegment   string     

Example: ab

Body Parameters

sync_system_segments   boolean  optional    

Example: true

DELETE api/demand/segments/{buyerSegment}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/demand/segments/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/segments/ab"
);

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

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

Request      

DELETE api/demand/segments/{buyerSegment}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

buyerSegment   string     

Example: ab

GET api/demand/triggers

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/demand/triggers" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/triggers"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 6ac971d2-a8fc-4402-ad7c-af0dc221c7f3
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/demand/triggers

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/demand/triggers

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/demand/triggers" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ipzdszigdqrrkthq\",
    \"slug\": \"pvviwahfxqnyifdn\",
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"trigger_type\": \"ab\",
    \"channel_adapter\": \"marketing_email\",
    \"is_active\": false
}"
const url = new URL(
    "http://localhost:8000/api/demand/triggers"
);

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

let body = {
    "name": "ipzdszigdqrrkthq",
    "slug": "pvviwahfxqnyifdn",
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "trigger_type": "ab",
    "channel_adapter": "marketing_email",
    "is_active": false
};

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

Request      

POST api/demand/triggers

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

slug   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

description   string  optional    

Example: Nesciunt eius nihil cumque quia sunt aut dolores.

trigger_type   string     

Example: ab

Must be one of:
  • auction_launch
  • ending_soon
  • outbid_recovery
  • similar_items
  • no_bid_rescue
  • dormant_reactivation
  • second_chance_follow_up
channel_adapter   string  optional    

Example: marketing_email

Must be one of:
  • marketing_email
is_active   boolean  optional    

Example: false

definition   object  optional    
metadata   object  optional    

GET api/demand/triggers/{engagementTrigger}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/demand/triggers/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/triggers/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 97231ed2-fc44-4b73-9981-e508d146cf39
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/demand/triggers/{engagementTrigger}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

engagementTrigger   string     

Example: ab

PATCH api/demand/triggers/{engagementTrigger}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/demand/triggers/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ipzdszigdqrrkthq\",
    \"slug\": \"pvviwahfxqnyifdn\",
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"trigger_type\": \"ab\",
    \"channel_adapter\": \"marketing_email\",
    \"is_active\": false
}"
const url = new URL(
    "http://localhost:8000/api/demand/triggers/ab"
);

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

let body = {
    "name": "ipzdszigdqrrkthq",
    "slug": "pvviwahfxqnyifdn",
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "trigger_type": "ab",
    "channel_adapter": "marketing_email",
    "is_active": false
};

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

Request      

PATCH api/demand/triggers/{engagementTrigger}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

engagementTrigger   string     

Example: ab

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

slug   string  optional    

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

description   string  optional    

Example: Nesciunt eius nihil cumque quia sunt aut dolores.

trigger_type   string  optional    

Example: ab

Must be one of:
  • auction_launch
  • ending_soon
  • outbid_recovery
  • similar_items
  • no_bid_rescue
  • dormant_reactivation
  • second_chance_follow_up
channel_adapter   string  optional    

Example: marketing_email

Must be one of:
  • marketing_email
is_active   boolean  optional    

Example: false

definition   object  optional    
metadata   object  optional    

DELETE api/demand/triggers/{engagementTrigger}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/demand/triggers/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/triggers/ab"
);

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

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

Request      

DELETE api/demand/triggers/{engagementTrigger}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

engagementTrigger   string     

Example: ab

POST api/demand/triggers/{engagementTrigger}/execute

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/demand/triggers/ab/execute" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"listing_ids\": [
        \"ab\"
    ],
    \"buyer_segment_id\": \"ab\",
    \"campaign_name\": \"pzdszigdqrrkthqp\",
    \"source_name\": \"vviwahfxqnyifdnn\",
    \"scheduled_for\": \"2069-05-25\",
    \"audience_filters\": [
        \"dszigdqrrkthqpvv\"
    ],
    \"idempotency_context\": \"iwahfxqnyifdnnzc\"
}"
const url = new URL(
    "http://localhost:8000/api/demand/triggers/ab/execute"
);

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

let body = {
    "listing_ids": [
        "ab"
    ],
    "buyer_segment_id": "ab",
    "campaign_name": "pzdszigdqrrkthqp",
    "source_name": "vviwahfxqnyifdnn",
    "scheduled_for": "2069-05-25",
    "audience_filters": [
        "dszigdqrrkthqpvv"
    ],
    "idempotency_context": "iwahfxqnyifdnnzc"
};

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

Request      

POST api/demand/triggers/{engagementTrigger}/execute

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

engagementTrigger   string     

Example: ab

Body Parameters

listing_ids   string[]     
buyer_segment_id   string  optional    

Example: ab

campaign_name   string  optional    

Must not be greater than 255 characters. Example: pzdszigdqrrkthqp

source_name   string  optional    

Must not be greater than 255 characters. Example: vviwahfxqnyifdnn

scheduled_for   string  optional    

Must be a valid date. Must be a date after now. Example: 2069-05-25

audience_filters   string[]  optional    

This field is required when audience_filters is present. Must not be greater than 191 characters.

idempotency_context   string  optional    

Must not be greater than 255 characters. Example: iwahfxqnyifdnnzc

GET api/demand/campaigns

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/demand/campaigns" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/campaigns"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 4311e814-d1ea-49ce-9c71-5df3228ea3f6
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/demand/campaigns

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/demand/campaigns

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/demand/campaigns" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"engagement_trigger_id\": \"ab\",
    \"buyer_segment_id\": \"ab\",
    \"name\": \"pzdszigdqrrkthqp\",
    \"slug\": \"vviwahfxqnyifdnn\",
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"campaign_type\": \"manual\",
    \"channel_adapter\": \"marketing_email\",
    \"source_type\": \"source_group\",
    \"source_ref\": \"qrrkthqpvviwahfx\",
    \"audience_filters\": [
        \"qnyifdnnzclnhfpv\"
    ],
    \"source_snapshot\": {
        \"source_name\": \"ipzdszigdqrrkthq\",
        \"listing_ids\": [
            \"ab\"
        ]
    },
    \"delivery_config\": {
        \"attribution_window_days\": 7
    }
}"
const url = new URL(
    "http://localhost:8000/api/demand/campaigns"
);

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

let body = {
    "engagement_trigger_id": "ab",
    "buyer_segment_id": "ab",
    "name": "pzdszigdqrrkthqp",
    "slug": "vviwahfxqnyifdnn",
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "campaign_type": "manual",
    "channel_adapter": "marketing_email",
    "source_type": "source_group",
    "source_ref": "qrrkthqpvviwahfx",
    "audience_filters": [
        "qnyifdnnzclnhfpv"
    ],
    "source_snapshot": {
        "source_name": "ipzdszigdqrrkthq",
        "listing_ids": [
            "ab"
        ]
    },
    "delivery_config": {
        "attribution_window_days": 7
    }
};

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

Request      

POST api/demand/campaigns

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

engagement_trigger_id   string  optional    

Example: ab

buyer_segment_id   string  optional    

Example: ab

name   string     

Must not be greater than 255 characters. Example: pzdszigdqrrkthqp

slug   string  optional    

Must not be greater than 191 characters. Example: vviwahfxqnyifdnn

description   string  optional    

Example: Nesciunt eius nihil cumque quia sunt aut dolores.

campaign_type   string  optional    

Example: manual

Must be one of:
  • manual
  • triggered
channel_adapter   string  optional    

Example: marketing_email

Must be one of:
  • marketing_email
source_type   string     

Example: source_group

Must be one of:
  • source_group
source_ref   string  optional    

Must not be greater than 191 characters. Example: qrrkthqpvviwahfx

audience_filters   string[]  optional    

This field is required when audience_filters is present. Must not be greater than 191 characters.

source_snapshot   object     
source_name   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

listing_ids   string[]  optional    

This field is required when source_snapshot.listing_ids is present.

delivery_config   object  optional    
attribution_window_days   integer  optional    

Must be at least 1. Must not be greater than 30. Example: 7

metadata   object  optional    

GET api/demand/campaigns/{distributionCampaign}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/demand/campaigns/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/campaigns/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 41567263-a348-4b58-9b2e-c9c415dfc857
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/demand/campaigns/{distributionCampaign}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

distributionCampaign   string     

Example: ab

PATCH api/demand/campaigns/{distributionCampaign}

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/demand/campaigns/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"engagement_trigger_id\": \"ab\",
    \"buyer_segment_id\": \"ab\",
    \"name\": \"pzdszigdqrrkthqp\",
    \"slug\": \"vviwahfxqnyifdnn\",
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"campaign_type\": \"manual\",
    \"channel_adapter\": \"marketing_email\",
    \"source_type\": \"source_group\",
    \"source_ref\": \"qrrkthqpvviwahfx\",
    \"audience_filters\": [
        \"qnyifdnnzclnhfpv\"
    ],
    \"source_snapshot\": {
        \"source_name\": \"msnpkynlnbgjdpzi\",
        \"listing_ids\": [
            \"ab\"
        ]
    },
    \"delivery_config\": {
        \"attribution_window_days\": 7
    },
    \"status\": \"cancelled\"
}"
const url = new URL(
    "http://localhost:8000/api/demand/campaigns/ab"
);

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

let body = {
    "engagement_trigger_id": "ab",
    "buyer_segment_id": "ab",
    "name": "pzdszigdqrrkthqp",
    "slug": "vviwahfxqnyifdnn",
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "campaign_type": "manual",
    "channel_adapter": "marketing_email",
    "source_type": "source_group",
    "source_ref": "qrrkthqpvviwahfx",
    "audience_filters": [
        "qnyifdnnzclnhfpv"
    ],
    "source_snapshot": {
        "source_name": "msnpkynlnbgjdpzi",
        "listing_ids": [
            "ab"
        ]
    },
    "delivery_config": {
        "attribution_window_days": 7
    },
    "status": "cancelled"
};

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

Request      

PATCH api/demand/campaigns/{distributionCampaign}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

distributionCampaign   string     

Example: ab

Body Parameters

engagement_trigger_id   string  optional    

Example: ab

buyer_segment_id   string  optional    

Example: ab

name   string  optional    

Must not be greater than 255 characters. Example: pzdszigdqrrkthqp

slug   string  optional    

Must not be greater than 191 characters. Example: vviwahfxqnyifdnn

description   string  optional    

Example: Nesciunt eius nihil cumque quia sunt aut dolores.

campaign_type   string  optional    

Example: manual

Must be one of:
  • manual
  • triggered
channel_adapter   string  optional    

Example: marketing_email

Must be one of:
  • marketing_email
source_type   string  optional    

Example: source_group

Must be one of:
  • source_group
source_ref   string  optional    

Must not be greater than 191 characters. Example: qrrkthqpvviwahfx

audience_filters   string[]  optional    

This field is required when audience_filters is present. Must not be greater than 191 characters.

source_snapshot   object  optional    
source_name   string  optional    

Must not be greater than 255 characters. Example: msnpkynlnbgjdpzi

listing_ids   string[]  optional    

This field is required when source_snapshot.listing_ids is present.

delivery_config   object  optional    
attribution_window_days   integer  optional    

Must be at least 1. Must not be greater than 30. Example: 7

status   string  optional    

Example: cancelled

Must be one of:
  • draft
  • scheduled
  • sending
  • sent
  • failed
  • cancelled
metadata   object  optional    

DELETE api/demand/campaigns/{distributionCampaign}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/demand/campaigns/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/campaigns/ab"
);

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

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

Request      

DELETE api/demand/campaigns/{distributionCampaign}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

distributionCampaign   string     

Example: ab

POST api/demand/campaigns/{distributionCampaign}/execute

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/demand/campaigns/ab/execute" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"scheduled_for\": \"2069-05-25\",
    \"idempotency_key\": \"dszigdqrrkthqpvv\"
}"
const url = new URL(
    "http://localhost:8000/api/demand/campaigns/ab/execute"
);

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

let body = {
    "scheduled_for": "2069-05-25",
    "idempotency_key": "dszigdqrrkthqpvv"
};

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

Request      

POST api/demand/campaigns/{distributionCampaign}/execute

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

distributionCampaign   string     

Example: ab

Body Parameters

scheduled_for   string  optional    

Must be a valid date. Must be a date after now. Example: 2069-05-25

idempotency_key   string  optional    

Must not be greater than 255 characters. Example: dszigdqrrkthqpvv

POST api/demand/campaigns/{distributionCampaign}/refresh-attribution

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/demand/campaigns/ab/refresh-attribution" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/demand/campaigns/ab/refresh-attribution"
);

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

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

Request      

POST api/demand/campaigns/{distributionCampaign}/refresh-attribution

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

distributionCampaign   string     

Example: ab

POST api/onboarding/purchase-info

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/onboarding/purchase-info" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"dismissed\": true,
    \"complete\": false,
    \"phone\": \"ipzdszigdqrrkthq\",
    \"setup_payment_method\": true,
    \"shipping_address\": {
        \"label\": \"pvviwahfxqnyifdn\",
        \"is_default\": false,
        \"full_name\": \"nzclnhfpvmsnpkyn\",
        \"company\": \"lnbgjdpzixzkhgml\",
        \"address_line_1\": \"xfmavknkckbhgmqy\",
        \"address_line_2\": \"eipywyxscplvrjza\",
        \"city\": \"qaveihafwfciilry\",
        \"state\": \"ubypsenryjduorke\",
        \"postal_code\": \"xffnsuubyte\",
        \"country\": \"yd\",
        \"phone\": \"jenadobdfah\"
    },
    \"billing_address\": {
        \"label\": \"ioutbyseqsghbvmo\",
        \"is_default\": false,
        \"full_name\": \"jkzqzqkvjohzwrtw\",
        \"company\": \"incgjrtvorfmpvzw\",
        \"address_line_1\": \"wgimzvvokjaxwbag\",
        \"address_line_2\": \"ymlaeltfuqmvdchh\",
        \"city\": \"wvesukwxeaffdxhu\",
        \"state\": \"conockbjljijilny\",
        \"postal_code\": \"praqpolljyr\",
        \"country\": \"wb\",
        \"phone\": \"qmyigaqmcpy\"
    }
}"
const url = new URL(
    "http://localhost:8000/api/onboarding/purchase-info"
);

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

let body = {
    "dismissed": true,
    "complete": false,
    "phone": "ipzdszigdqrrkthq",
    "setup_payment_method": true,
    "shipping_address": {
        "label": "pvviwahfxqnyifdn",
        "is_default": false,
        "full_name": "nzclnhfpvmsnpkyn",
        "company": "lnbgjdpzixzkhgml",
        "address_line_1": "xfmavknkckbhgmqy",
        "address_line_2": "eipywyxscplvrjza",
        "city": "qaveihafwfciilry",
        "state": "ubypsenryjduorke",
        "postal_code": "xffnsuubyte",
        "country": "yd",
        "phone": "jenadobdfah"
    },
    "billing_address": {
        "label": "ioutbyseqsghbvmo",
        "is_default": false,
        "full_name": "jkzqzqkvjohzwrtw",
        "company": "incgjrtvorfmpvzw",
        "address_line_1": "wgimzvvokjaxwbag",
        "address_line_2": "ymlaeltfuqmvdchh",
        "city": "wvesukwxeaffdxhu",
        "state": "conockbjljijilny",
        "postal_code": "praqpolljyr",
        "country": "wb",
        "phone": "qmyigaqmcpy"
    }
};

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

Request      

POST api/onboarding/purchase-info

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

dismissed   boolean  optional    

Example: true

complete   boolean  optional    

Example: false

phone   string  optional    

Must not be greater than 50 characters. Example: ipzdszigdqrrkthq

setup_payment_method   boolean  optional    

Example: true

shipping_address   object  optional    
label   string  optional    

Must not be greater than 255 characters. Example: pvviwahfxqnyifdn

is_default   boolean  optional    

Example: false

full_name   string  optional    

This field is required when shipping_address is present. Must not be greater than 255 characters. Example: nzclnhfpvmsnpkyn

company   string  optional    

Must not be greater than 255 characters. Example: lnbgjdpzixzkhgml

address_line_1   string  optional    

This field is required when shipping_address is present. Must not be greater than 255 characters. Example: xfmavknkckbhgmqy

address_line_2   string  optional    

Must not be greater than 255 characters. Example: eipywyxscplvrjza

city   string  optional    

This field is required when shipping_address is present. Must not be greater than 255 characters. Example: qaveihafwfciilry

state   string  optional    

Must not be greater than 255 characters. Example: ubypsenryjduorke

postal_code   string  optional    

This field is required when shipping_address is present. Must not be greater than 20 characters. Example: xffnsuubyte

country   string  optional    

This field is required when shipping_address is present. Must be 2 characters. Example: yd

phone   string  optional    

Must not be greater than 20 characters. Example: jenadobdfah

billing_address   object  optional    
label   string  optional    

Must not be greater than 255 characters. Example: ioutbyseqsghbvmo

is_default   boolean  optional    

Example: false

full_name   string  optional    

This field is required when billing_address is present. Must not be greater than 255 characters. Example: jkzqzqkvjohzwrtw

company   string  optional    

Must not be greater than 255 characters. Example: incgjrtvorfmpvzw

address_line_1   string  optional    

This field is required when billing_address is present. Must not be greater than 255 characters. Example: wgimzvvokjaxwbag

address_line_2   string  optional    

Must not be greater than 255 characters. Example: ymlaeltfuqmvdchh

city   string  optional    

This field is required when billing_address is present. Must not be greater than 255 characters. Example: wvesukwxeaffdxhu

state   string  optional    

Must not be greater than 255 characters. Example: conockbjljijilny

postal_code   string  optional    

This field is required when billing_address is present. Must not be greater than 20 characters. Example: praqpolljyr

country   string  optional    

This field is required when billing_address is present. Must be 2 characters. Example: wb

phone   string  optional    

Must not be greater than 20 characters. Example: qmyigaqmcpy

POST api/invoices/{invoice_id}/offline-payments

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/invoices/ab/offline-payments" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 61,
    \"currency\": \"pzd\",
    \"method\": \"cash\",
    \"reference\": \"szigdqrrkthqpvvi\",
    \"receipt_number\": \"wahfxqnyifdnnzcl\",
    \"evidence_url\": \"http:\\/\\/streich.info\\/a-quo-ad-saepe-hic-quae-inventore-ipsum-nisi\",
    \"occurred_at\": \"2026-05-04T20:47:20\",
    \"idempotency_key\": \"nbgjdpzixzkhgmlx\"
}"
const url = new URL(
    "http://localhost:8000/api/invoices/ab/offline-payments"
);

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

let body = {
    "amount": 61,
    "currency": "pzd",
    "method": "cash",
    "reference": "szigdqrrkthqpvvi",
    "receipt_number": "wahfxqnyifdnnzcl",
    "evidence_url": "http:\/\/streich.info\/a-quo-ad-saepe-hic-quae-inventore-ipsum-nisi",
    "occurred_at": "2026-05-04T20:47:20",
    "idempotency_key": "nbgjdpzixzkhgmlx"
};

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

Request      

POST api/invoices/{invoice_id}/offline-payments

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

invoice_id   string     

The ID of the invoice. Example: ab

Body Parameters

amount   integer     

Must be at least 1. Example: 61

currency   string     

Must be 3 characters. Example: pzd

method   string     

Example: cash

Must be one of:
  • stripe
  • bank_transfer
  • cash
  • cheque
  • card_present
reference   string  optional    

Must not be greater than 255 characters. Example: szigdqrrkthqpvvi

receipt_number   string  optional    

Must not be greater than 255 characters. Example: wahfxqnyifdnnzcl

evidence_url   string  optional    

Must not be greater than 2048 characters. Example: http://streich.info/a-quo-ad-saepe-hic-quae-inventore-ipsum-nisi

occurred_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

idempotency_key   string     

Must not be greater than 255 characters. Example: nbgjdpzixzkhgmlx

POST api/orders/{order_id}/confirm-balance-received

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/confirm-balance-received" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"idempotency_key\": \"ipzdszigdqrrkthq\",
    \"amount\": 15,
    \"reference\": \"vviwahfxqnyifdnn\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/confirm-balance-received"
);

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

let body = {
    "idempotency_key": "ipzdszigdqrrkthq",
    "amount": 15,
    "reference": "vviwahfxqnyifdnn"
};

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

Request      

POST api/orders/{order_id}/confirm-balance-received

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

Body Parameters

idempotency_key   string     

Must be at least 8 characters. Must not be greater than 128 characters. Example: ipzdszigdqrrkthq

amount   integer  optional    

Must be at least 0. Example: 15

reference   string  optional    

Must not be greater than 255 characters. Example: vviwahfxqnyifdnn

POST api/invoices/{invoice_id}/checkout-session

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/invoices/ab/checkout-session" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"idempotency_key\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/invoices/ab/checkout-session"
);

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

let body = {
    "idempotency_key": "ipzdszigdqrrkthq"
};

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

Request      

POST api/invoices/{invoice_id}/checkout-session

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

invoice_id   string     

The ID of the invoice. Example: ab

Body Parameters

idempotency_key   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

Get invoice timeline (events + payments)

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/invoices/ab/timeline" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/invoices/ab/timeline"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "type": "event",
            "event_type": "invoice_created",
            "occurred_at": "2025-10-29T10:00:00.000000Z"
        }
    ]
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Example response (403, forbidden):


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

Request      

GET api/invoices/{invoice_id}/timeline

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

invoice_id   string     

The ID of the invoice. Example: ab

invoice   string     

The invoice ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

POST api/test/email/verify

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/test/email/verify" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/test/email/verify"
);

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

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

Request      

POST api/test/email/verify

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/test/email/unverify

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/test/email/unverify" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/test/email/unverify"
);

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

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

Request      

POST api/test/email/unverify

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/listings/{listing_id}/duplicate

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/listings/ab/duplicate" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"title\": \"ipzdszigdqrrkthq\",
    \"category_id\": \"ab\",
    \"copy_media\": true,
    \"copy_tags\": false,
    \"copy_custom_attributes\": false,
    \"copy_notes\": false,
    \"schedule_strategy\": \"preserve_times\",
    \"start_at\": \"ab\",
    \"copy_phygital_identifiers\": true
}"
const url = new URL(
    "http://localhost:8000/api/listings/ab/duplicate"
);

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

let body = {
    "title": "ipzdszigdqrrkthq",
    "category_id": "ab",
    "copy_media": true,
    "copy_tags": false,
    "copy_custom_attributes": false,
    "copy_notes": false,
    "schedule_strategy": "preserve_times",
    "start_at": "ab",
    "copy_phygital_identifiers": true
};

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

Request      

POST api/listings/{listing_id}/duplicate

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing_id   string     

The ID of the listing. Example: ab

Body Parameters

title   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

category_id   string  optional    

Example: ab

copy_media   boolean  optional    

Example: true

copy_tags   boolean  optional    

Example: false

copy_custom_attributes   boolean  optional    

Example: false

copy_notes   boolean  optional    

Example: false

schedule_strategy   string  optional    

Example: preserve_times

Must be one of:
  • clear_times
  • preserve_times
  • shift_by_offset
start_at   string  optional    

Example: ab

copy_phygital_identifiers   boolean  optional    

Example: true

POST api/listings/ai/description-preview

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/listings/ai/description-preview" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"listing_id\": \"ipzdszigdqrrkthqpvviwahfxq\",
    \"category_id\": \"nyifdnnzclnhfpvmsnpkynlnbg\",
    \"title\": \"jdpzixzkhgmlxfma\",
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"mode\": \"premiumize\",
    \"tone\": \"premium\",
    \"length\": \"long\",
    \"listing_type\": \"qrrkthqpvviwahfx\",
    \"condition\": \"qnyifdnnzclnhfpv\",
    \"currency\": \"msn\",
    \"starting_bid\": 28,
    \"reserve_price\": 49,
    \"buy_now_price\": 24,
    \"fixed_price_amount\": 0,
    \"item_location\": \"lnbgjdpzixzkhgml\",
    \"shipping_cost\": 75,
    \"is_local_pickup\": false,
    \"is_international_shipping\": false,
    \"tags\": [
        \"fmavknkckbhgmqye\"
    ]
}"
const url = new URL(
    "http://localhost:8000/api/listings/ai/description-preview"
);

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

let body = {
    "listing_id": "ipzdszigdqrrkthqpvviwahfxq",
    "category_id": "nyifdnnzclnhfpvmsnpkynlnbg",
    "title": "jdpzixzkhgmlxfma",
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "mode": "premiumize",
    "tone": "premium",
    "length": "long",
    "listing_type": "qrrkthqpvviwahfx",
    "condition": "qnyifdnnzclnhfpv",
    "currency": "msn",
    "starting_bid": 28,
    "reserve_price": 49,
    "buy_now_price": 24,
    "fixed_price_amount": 0,
    "item_location": "lnbgjdpzixzkhgml",
    "shipping_cost": 75,
    "is_local_pickup": false,
    "is_international_shipping": false,
    "tags": [
        "fmavknkckbhgmqye"
    ]
};

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

Request      

POST api/listings/ai/description-preview

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

listing_id   string  optional    

Must be 26 characters. Example: ipzdszigdqrrkthqpvviwahfxq

category_id   string  optional    

Must be 26 characters. Example: nyifdnnzclnhfpvmsnpkynlnbg

title   string  optional    

This field is required when listing_id is not present. Must not be greater than 255 characters. Example: jdpzixzkhgmlxfma

description   string  optional    

Example: Nesciunt eius nihil cumque quia sunt aut dolores.

mode   string  optional    

Example: premiumize

Must be one of:
  • generate
  • improve_existing
  • shorten
  • premiumize
  • factualize
tone   string  optional    

Example: premium

Must be one of:
  • neutral
  • premium
  • collector_focused
  • marketplace_simple
length   string  optional    

Example: long

Must be one of:
  • short
  • standard
  • long
listing_type   string  optional    

Must not be greater than 32 characters. Example: qrrkthqpvviwahfx

condition   string  optional    

Must not be greater than 64 characters. Example: qnyifdnnzclnhfpv

currency   string  optional    

Must be 3 characters. Example: msn

starting_bid   integer  optional    

Must be at least 0. Example: 28

reserve_price   integer  optional    

Must be at least 0. Example: 49

buy_now_price   integer  optional    

Must be at least 0. Example: 24

fixed_price_amount   integer  optional    

Must be at least 0. Example: 0

item_location   string  optional    

Must not be greater than 255 characters. Example: lnbgjdpzixzkhgml

shipping_cost   integer  optional    

Must be at least 0. Example: 75

is_local_pickup   boolean  optional    

Example: false

is_international_shipping   boolean  optional    

Example: false

tags   string[]  optional    

Must not be greater than 64 characters.

custom_attributes   object  optional    
additional_details   object  optional    

POST api/listing-imports/upload-url

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/listing-imports/upload-url" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"file_name\": \"ipzdszigdqrrkthq\",
    \"mime_type\": \"pvviwahfxqnyifdn\",
    \"file_size\": 24,
    \"default_status\": \"live\",
    \"strict_headers\": false
}"
const url = new URL(
    "http://localhost:8000/api/listing-imports/upload-url"
);

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

let body = {
    "file_name": "ipzdszigdqrrkthq",
    "mime_type": "pvviwahfxqnyifdn",
    "file_size": 24,
    "default_status": "live",
    "strict_headers": false
};

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

Request      

POST api/listing-imports/upload-url

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

file_name   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

mime_type   string     

Must not be greater than 255 characters. Example: pvviwahfxqnyifdn

file_size   integer     

Must be at least 1. Must not be greater than 26214400. Example: 24

default_status   string     

Example: live

Must be one of:
  • draft
  • scheduled
  • live
strict_headers   boolean  optional    

Example: false

POST api/listing-imports/{listingImport_id}/upload-direct

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/listing-imports/ab/upload-direct" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/listing-imports/ab/upload-direct"
);

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

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

Request      

POST api/listing-imports/{listingImport_id}/upload-direct

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listingImport_id   string     

The ID of the listingImport. Example: ab

POST api/listing-imports/{listingImport_id}/confirm

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/listing-imports/ab/confirm" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/listing-imports/ab/confirm"
);

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

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

Request      

POST api/listing-imports/{listingImport_id}/confirm

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listingImport_id   string     

The ID of the listingImport. Example: ab

Accept current Dutch auction price

requires authentication

Accepts the current price for a Dutch auction. Dispatches to bid processing pipeline via bid-ingress API.

Example request:
curl --request POST \
    "http://localhost:8000/api/auctions/ab/accept-price" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"idempotency_key\": \"ipzdszigdqrrkthq\",
    \"quantity\": 74
}"
const url = new URL(
    "http://localhost:8000/api/auctions/ab/accept-price"
);

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

let body = {
    "idempotency_key": "ipzdszigdqrrkthq",
    "quantity": 74
};

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

Request      

POST api/auctions/{auction}/accept-price

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

auction   string     

The auction. Example: ab

Body Parameters

idempotency_key   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

quantity   integer  optional    

Must be at least 1. Example: 74

metadata   object  optional    

POST api/auctions/{auction}/buy-now

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/auctions/ab/buy-now" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"idempotency_key\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/auctions/ab/buy-now"
);

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

let body = {
    "idempotency_key": "ipzdszigdqrrkthq"
};

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

Request      

POST api/auctions/{auction}/buy-now

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

auction   string     

The auction. Example: ab

Body Parameters

idempotency_key   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

Return viewer-specific auction state in bulk.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auctions/viewer-state?ids=" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auctions/viewer-state"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "auction_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "is_watching": true,
            "my_bid": 15000
        }
    ]
}
 

Example response (400, tenant required):


{
    "message": "Tenant context is required."
}
 

Request      

GET api/auctions/viewer-state

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

ids   string[]  optional    

Auction ULIDs to fetch state for.

List all active auction events.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auction-events" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auction-events"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "name": "Spring Auction",
            "start_time": "2025-10-29T10:00:00.000000Z",
            "is_active": true
        }
    ],
    "links": {},
    "meta": {}
}
 

Request      

GET api/auction-events

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Show a single auction event.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auction-events/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auction-events/ab"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "name": "Spring Auction",
        "start_time": "2025-10-29T10:00:00.000000Z"
    }
}
 

Example response (404, not found):


{
    "message": "Auction event not found"
}
 

Request      

GET api/auction-events/{event}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

Example: ab

id   string     

The auction event ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

List auctions for a specific event.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auction-events/ab/auctions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auction-events/ab/auctions"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 505c232e-6c6d-471c-97cc-6249966f0065
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/auction-events/{event}/auctions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

event   string     

Example: ab

POST api/listings/{listing_id}/offers

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/listings/ab/offers" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 98,
    \"quantity\": 52
}"
const url = new URL(
    "http://localhost:8000/api/listings/ab/offers"
);

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

let body = {
    "amount": 98,
    "quantity": 52
};

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

Request      

POST api/listings/{listing_id}/offers

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing_id   string     

The ID of the listing. Example: ab

Body Parameters

amount   integer     

Must be at least 100. Example: 98

quantity   integer  optional    

Must be at least 1. Example: 52

POST api/offers/{offer_id}/accept

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/offers/ab/accept" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/offers/ab/accept"
);

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

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

Request      

POST api/offers/{offer_id}/accept

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

offer_id   string     

The ID of the offer. Example: ab

POST api/offers/{offer_id}/reject

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/offers/ab/reject" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/offers/ab/reject"
);

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

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

Request      

POST api/offers/{offer_id}/reject

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

offer_id   string     

The ID of the offer. Example: ab

POST api/offers/{offer_id}/cancel

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/offers/ab/cancel" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/offers/ab/cancel"
);

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

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

Request      

POST api/offers/{offer_id}/cancel

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

offer_id   string     

The ID of the offer. Example: ab

POST api/orders/{order_id}/conversation

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/conversation" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/conversation"
);

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

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

Request      

POST api/orders/{order_id}/conversation

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

PUT api/orders/{order_id}/shipping-address

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/orders/ab/shipping-address" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"shipping_address_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/shipping-address"
);

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

let body = {
    "shipping_address_id": "ab"
};

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

Request      

PUT api/orders/{order_id}/shipping-address

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

Body Parameters

shipping_address_id   string     

Example: ab

POST api/deal-rooms/{dealRoom_id}/offers/{offer_id}/decline

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/offers/ab/decline" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/offers/ab/decline"
);

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

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

Request      

POST api/deal-rooms/{dealRoom_id}/offers/{offer_id}/decline

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

offer_id   string     

The ID of the offer. Example: ab

List deal room chat messages

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms/ab/messages" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/messages"
);

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

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

Example response (200, success):


{
    "conversation_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "messages": {
        "data": [],
        "links": {},
        "meta": {}
    }
}
 

Example response (403, forbidden):


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

Request      

GET api/deal-rooms/{dealRoom_id}/messages

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

dealRoom   string     

The deal room ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

POST api/deal-rooms/{dealRoom_id}/messages

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/messages" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"content\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/messages"
);

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

let body = {
    "content": "ipzdszigdqrrkthq"
};

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

Request      

POST api/deal-rooms/{dealRoom_id}/messages

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

Body Parameters

content   string     

Must not be greater than 5000 characters. Example: ipzdszigdqrrkthq

PUT api/deal-rooms/{dealRoom_id}/messages/{message}/flag

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/deal-rooms/ab/messages/ab/flag" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/messages/ab/flag"
);

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

let body = {
    "reason": "ipzdszigdqrrkthq"
};

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

Request      

PUT api/deal-rooms/{dealRoom_id}/messages/{message}/flag

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

message   string     

The message. Example: ab

Body Parameters

reason   string  optional    

Must not be greater than 1000 characters. Example: ipzdszigdqrrkthq

Get deal room metrics

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms/analytics/metrics?start=2025-01-01&end=2025-01-31" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/analytics/metrics"
);

const params = {
    "start": "2025-01-01",
    "end": "2025-01-31",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, success):


{
    "data": {
        "rooms_opened": 10,
        "settlements_finalised": 8,
        "total_hammer_value": 150000
    }
}
 

Example response (401, unauthenticated):


{
    "error": "Unauthenticated"
}
 

Request      

GET api/deal-rooms/analytics/metrics

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

start   string  optional    

date Filter from date (Y-m-d). Example: 2025-01-01

end   string  optional    

date Filter to date (Y-m-d). Example: 2025-01-31

GET api/deal-rooms/analytics/export

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms/analytics/export" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/analytics/export"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 7b5842c6-6e0a-43c0-a89f-3d88010b0b5a
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/deal-rooms/analytics/export

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

GET api/settlements/export

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/settlements/export" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/settlements/export"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 9da02416-c754-49cf-804a-8096c6486974
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/settlements/export

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

POST api/disputes/{dispute_id}/updates

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/disputes/ab/updates" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"message\": \"ipzdszigdqrrkthq\",
    \"evidence_urls\": [
        \"pvviwahfxqnyifdn\"
    ],
    \"visibility\": \"participants\"
}"
const url = new URL(
    "http://localhost:8000/api/disputes/ab/updates"
);

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

let body = {
    "message": "ipzdszigdqrrkthq",
    "evidence_urls": [
        "pvviwahfxqnyifdn"
    ],
    "visibility": "participants"
};

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

Request      

POST api/disputes/{dispute_id}/updates

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dispute_id   string     

The ID of the dispute. Example: ab

Body Parameters

message   string  optional    

Must not be greater than 2000 characters. Example: ipzdszigdqrrkthq

evidence_urls   string[]  optional    

Must match the regex /^(https?:\/\/|\/)/. Must not be greater than 8192 characters.

visibility   string  optional    

Example: participants

Must be one of:
  • participants
  • seller_only

POST api/orders/{order_id}/issues

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/orders/ab/issues" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason_code\": \"counterfeit\",
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"counterfeit_checklist\": {
        \"purchased_from_platform\": true,
        \"serial_present\": true,
        \"why_counterfeit\": \"qrrkthqpvviwahfx\"
    }
}"
const url = new URL(
    "http://localhost:8000/api/orders/ab/issues"
);

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

let body = {
    "reason_code": "counterfeit",
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "counterfeit_checklist": {
        "purchased_from_platform": true,
        "serial_present": true,
        "why_counterfeit": "qrrkthqpvviwahfx"
    }
};

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

Request      

POST api/orders/{order_id}/issues

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

Body Parameters

reason_code   string     

Example: counterfeit

Must be one of:
  • not_received
  • damaged
  • not_as_described
  • wrong_item_or_missing_parts
  • counterfeit
  • safety_issue
  • other
description   string  optional    

Must not be greater than 2000 characters. Example: Nesciunt eius nihil cumque quia sunt aut dolores.

counterfeit_checklist   object  optional    
purchased_from_platform   boolean  optional    

Example: true

serial_present   boolean  optional    

Example: true

why_counterfeit   string  optional    

Must not be greater than 2000 characters. Example: qrrkthqpvviwahfx

Get current open issue for an order

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/orders/ab/issues/current" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/orders/ab/issues/current"
);

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

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

Example response (200, success):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "order_id": "...",
        "status": "issue_opened",
        "reason_code": "not_as_described"
    },
    "eligibility": {}
}
 

Example response (200, no issue):


{
    "data": null
}
 

Example response (403, unauthorized):


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

Request      

GET api/orders/{order_id}/issues/current

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

order_id   string     

The ID of the order. Example: ab

order   string     

The order ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

POST api/issues/{issue_id}/structured-requests

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/issues/ab/structured-requests" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"type\": \"contact\",
    \"note\": \"ipzdszigdqrrkthq\",
    \"attachments\": [
        {
            \"url\": \"http:\\/\\/www.waelchi.org\\/corrupti-sequi-aut-eum-harum-dolore-nam-et\",
            \"type\": \"ifdnnzclnhfpvmsn\"
        }
    ]
}"
const url = new URL(
    "http://localhost:8000/api/issues/ab/structured-requests"
);

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

let body = {
    "type": "contact",
    "note": "ipzdszigdqrrkthq",
    "attachments": [
        {
            "url": "http:\/\/www.waelchi.org\/corrupti-sequi-aut-eum-harum-dolore-nam-et",
            "type": "ifdnnzclnhfpvmsn"
        }
    ]
};

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

Request      

POST api/issues/{issue_id}/structured-requests

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   string     

The ID of the issue. Example: ab

Body Parameters

type   string     

Example: contact

Must be one of:
  • contact
  • track_parcel
  • request_return
  • request_refund
note   string  optional    

Must not be greater than 2000 characters. Example: ipzdszigdqrrkthq

attachments   object[]  optional    

Must not have more than 10 items.

url   string  optional    

This field is required when attachments is present. Must match the regex /^(https?:\/\/|\/)/. Must not be greater than 8192 characters. Example: http://www.waelchi.org/corrupti-sequi-aut-eum-harum-dolore-nam-et

type   string  optional    

Must not be greater than 50 characters. Example: ifdnnzclnhfpvmsn

POST api/issues/{issue_id}/escalate

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/issues/ab/escalate" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"requested_outcome\": \"return_then_refund\"
}"
const url = new URL(
    "http://localhost:8000/api/issues/ab/escalate"
);

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

let body = {
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "requested_outcome": "return_then_refund"
};

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

Request      

POST api/issues/{issue_id}/escalate

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   string     

The ID of the issue. Example: ab

Body Parameters

description   string  optional    

Must not be greater than 2000 characters. Example: Nesciunt eius nihil cumque quia sunt aut dolores.

requested_outcome   string  optional    

Example: return_then_refund

Must be one of:
  • refund
  • return_then_refund

POST api/issues/{issue_id}/review-requests

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/issues/ab/review-requests" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/issues/ab/review-requests"
);

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

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

Request      

POST api/issues/{issue_id}/review-requests

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   string     

The ID of the issue. Example: ab

POST api/issues/{issue_id}/offers

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/issues/ab/offers" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"offer_type\": \"return_then_refund\",
    \"amount\": 61,
    \"currency\": \"pzd\",
    \"expires_at\": \"2026-05-04T20:47:21\",
    \"return_instructions\": \"szigdqrrkthqpvvi\"
}"
const url = new URL(
    "http://localhost:8000/api/issues/ab/offers"
);

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

let body = {
    "offer_type": "return_then_refund",
    "amount": 61,
    "currency": "pzd",
    "expires_at": "2026-05-04T20:47:21",
    "return_instructions": "szigdqrrkthqpvvi"
};

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

Request      

POST api/issues/{issue_id}/offers

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   string     

The ID of the issue. Example: ab

Body Parameters

offer_type   string     

Example: return_then_refund

Must be one of:
  • refund
  • partial_refund
  • return_then_refund
amount   integer  optional    

Must be at least 1. Example: 61

currency   string  optional    

Must be 3 characters. Example: pzd

expires_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

return_instructions   string  optional    

Must not be greater than 2000 characters. Example: szigdqrrkthqpvvi

POST api/issues/{issue_id}/offers/{offer_id}/accept

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/issues/ab/offers/ab/accept" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/issues/ab/offers/ab/accept"
);

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

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

Request      

POST api/issues/{issue_id}/offers/{offer_id}/accept

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   string     

The ID of the issue. Example: ab

offer_id   string     

The ID of the offer. Example: ab

POST api/issues/{issue_id}/close

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/issues/ab/close" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/issues/ab/close"
);

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

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

Request      

POST api/issues/{issue_id}/close

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

issue_id   string     

The ID of the issue. Example: ab

POST api/payouts/{payout_id}/mark-paid

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/payouts/ab/mark-paid" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reference\": \"ipzdszigdqrrkthq\",
    \"idempotency_key\": \"pvviwahfxqnyifdn\"
}"
const url = new URL(
    "http://localhost:8000/api/payouts/ab/mark-paid"
);

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

let body = {
    "reference": "ipzdszigdqrrkthq",
    "idempotency_key": "pvviwahfxqnyifdn"
};

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

Request      

POST api/payouts/{payout_id}/mark-paid

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

payout_id   string     

The ID of the payout. Example: ab

Body Parameters

reference   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

idempotency_key   string     

Must not be greater than 255 characters. Example: pvviwahfxqnyifdn

POST api/payouts/batches

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/payouts/batches" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"from\": \"2026-05-04T20:47:21\",
    \"to\": \"2026-05-04T20:47:21\",
    \"status\": [
        \"ab\"
    ]
}"
const url = new URL(
    "http://localhost:8000/api/payouts/batches"
);

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

let body = {
    "from": "2026-05-04T20:47:21",
    "to": "2026-05-04T20:47:21",
    "status": [
        "ab"
    ]
};

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

Request      

POST api/payouts/batches

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

from   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

to   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

status   string[]  optional    

List live commerce show sessions

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows?status=live&assigned_to_me=1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows"
);

const params = {
    "status": "live",
    "assigned_to_me": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "name": "Live Show",
            "status": "live"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Request      

GET api/live-commerce/shows

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

Filter by status. Example: live

assigned_to_me   boolean  optional    

Filter events assigned to current user. Example: true

Get a live commerce show session

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows/01JBQW8K7V2XZGHJK5MNPQRSTU" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/01JBQW8K7V2XZGHJK5MNPQRSTU"
);

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

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

Example response (200, success):


{
    "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "name": "Live Show",
    "status": "live",
    "show_queue_items": []
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Example response (404, not found):


404
 

Request      

GET api/live-commerce/shows/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The show session ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

GET api/live-commerce/shows/{id}/state

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/state" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/state"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 11db1da5-5b68-48a1-8ab3-f725f95cb8bd
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/live-commerce/shows/{id}/state

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the show. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

POST api/live-commerce/shows/{show}/overlay-tokens

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/overlay-tokens" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"overlay_type\": \"main_with_chat\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/overlay-tokens"
);

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

let body = {
    "overlay_type": "main_with_chat"
};

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

Request      

POST api/live-commerce/shows/{show}/overlay-tokens

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

show   string     

The show. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

overlay_type   string     

Example: main_with_chat

Must be one of:
  • main_with_chat
  • main_no_chat
  • chat

POST api/live-commerce/shows

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ipzdszigdqrrkthq\",
    \"event_type\": \"virtual\",
    \"venue\": \"pvviwahfxqnyifdn\",
    \"start_at\": \"2026-05-04T20:47:21\",
    \"timezone\": \"Asia\\/Phnom_Penh\",
    \"chat_enabled\": true,
    \"creator_attribution_enabled\": true
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows"
);

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

let body = {
    "name": "ipzdszigdqrrkthq",
    "event_type": "virtual",
    "venue": "pvviwahfxqnyifdn",
    "start_at": "2026-05-04T20:47:21",
    "timezone": "Asia\/Phnom_Penh",
    "chat_enabled": true,
    "creator_attribution_enabled": true
};

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

Request      

POST api/live-commerce/shows

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

event_type   string     

Example: virtual

Must be one of:
  • physical
  • hybrid
  • virtual
venue   string  optional    

Must not be greater than 255 characters. Example: pvviwahfxqnyifdn

start_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

timezone   string  optional    

Must not be greater than 50 characters. Example: Asia/Phnom_Penh

chat_enabled   boolean  optional    

Example: true

creator_attribution_enabled   boolean  optional    

Example: true

campaign_id   string  optional    

The id of an existing record in the campaigns table.

overlay_config   object  optional    
stinger_config   object  optional    
metadata   object  optional    

PUT api/live-commerce/shows/{id}

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ipzdszigdqrrkthq\",
    \"event_type\": \"hybrid\",
    \"venue\": \"pvviwahfxqnyifdn\",
    \"start_at\": \"2026-05-04T20:47:21\",
    \"timezone\": \"Asia\\/Phnom_Penh\",
    \"chat_enabled\": true,
    \"creator_attribution_enabled\": true
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4"
);

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

let body = {
    "name": "ipzdszigdqrrkthq",
    "event_type": "hybrid",
    "venue": "pvviwahfxqnyifdn",
    "start_at": "2026-05-04T20:47:21",
    "timezone": "Asia\/Phnom_Penh",
    "chat_enabled": true,
    "creator_attribution_enabled": true
};

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

Request      

PUT api/live-commerce/shows/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the show. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

event_type   string  optional    

Example: hybrid

Must be one of:
  • physical
  • hybrid
  • virtual
venue   string  optional    

Must not be greater than 255 characters. Example: pvviwahfxqnyifdn

start_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

timezone   string  optional    

Must not be greater than 50 characters. Example: Asia/Phnom_Penh

chat_enabled   boolean  optional    

Example: true

creator_attribution_enabled   boolean  optional    

Example: true

campaign_id   string  optional    

The id of an existing record in the campaigns table.

overlay_config   object  optional    
stinger_config   object  optional    

DELETE api/live-commerce/shows/{id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4"
);

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

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

Request      

DELETE api/live-commerce/shows/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the show. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

POST api/live-commerce/shows/{id}/start

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/start" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/start"
);

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

let body = {
    "command_id": "ab"
};

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

Request      

POST api/live-commerce/shows/{id}/start

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the show. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string     

Example: ab

metadata   object  optional    

POST api/live-commerce/shows/{id}/pause

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/pause" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/pause"
);

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

let body = {
    "command_id": "ab"
};

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

Request      

POST api/live-commerce/shows/{id}/pause

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the show. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string     

Example: ab

metadata   object  optional    

POST api/live-commerce/shows/{id}/resume

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/resume" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/resume"
);

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

let body = {
    "command_id": "ab"
};

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

Request      

POST api/live-commerce/shows/{id}/resume

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the show. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string     

Example: ab

metadata   object  optional    

POST api/live-commerce/shows/{id}/end

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/end" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ab\",
    \"summary\": {
        \"total_lots\": 8,
        \"total_bids\": 15,
        \"total_gmv_cents\": 38
    }
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/end"
);

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

let body = {
    "command_id": "ab",
    "summary": {
        "total_lots": 8,
        "total_bids": 15,
        "total_gmv_cents": 38
    }
};

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

Request      

POST api/live-commerce/shows/{id}/end

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the show. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string     

Example: ab

summary   object     
total_lots   integer     

Must be at least 0. Example: 8

total_bids   integer     

Must be at least 0. Example: 15

total_gmv_cents   integer     

Must be at least 0. Example: 38

metadata   object  optional    

Get chat messages for a show

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows/01JBQW8K7V2XZGHJK5MNPQRSTU/chat/messages" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/01JBQW8K7V2XZGHJK5MNPQRSTU/chat/messages"
);

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "...",
            "content": "Hello",
            "sender_id": "...",
            "sent_at": "2025-10-29T10:00:00.000000Z"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Example response (404, not found):


404
 

Request      

GET api/live-commerce/shows/{showId}/chat/messages

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

The show session ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

POST api/live-commerce/shows/{showId}/chat/messages

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/messages" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"content\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/messages"
);

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

let body = {
    "content": "ipzdszigdqrrkthq"
};

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

Request      

POST api/live-commerce/shows/{showId}/chat/messages

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

content   string     

Must not be greater than 500 characters. Example: ipzdszigdqrrkthq

DELETE api/live-commerce/shows/{showId}/chat/messages/{messageId}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/messages/10sCGBGnF45hpk3xEpAqhkJXE4" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/messages/10sCGBGnF45hpk3xEpAqhkJXE4"
);

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

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

Request      

DELETE api/live-commerce/shows/{showId}/chat/messages/{messageId}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

messageId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

POST api/live-commerce/shows/{showId}/chat/moderation/mute

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/mute" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"ab\",
    \"duration_minutes\": 7
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/mute"
);

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

let body = {
    "user_id": "ab",
    "duration_minutes": 7
};

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

Request      

POST api/live-commerce/shows/{showId}/chat/moderation/mute

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

user_id   string     

Example: ab

duration_minutes   integer  optional    

Must be at least 1. Must not be greater than 1440. Example: 7

POST api/live-commerce/shows/{showId}/chat/moderation/ban

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/ban" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"ab\",
    \"reason\": \"pzdszigdqrrkthqp\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/ban"
);

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

let body = {
    "user_id": "ab",
    "reason": "pzdszigdqrrkthqp"
};

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

Request      

POST api/live-commerce/shows/{showId}/chat/moderation/ban

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

user_id   string     

Example: ab

reason   string  optional    

Must not be greater than 500 characters. Example: pzdszigdqrrkthqp

POST api/live-commerce/shows/{showId}/chat/moderation/unmute

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/unmute" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/unmute"
);

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

let body = {
    "user_id": "ab"
};

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

Request      

POST api/live-commerce/shows/{showId}/chat/moderation/unmute

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

user_id   string     

Example: ab

POST api/live-commerce/shows/{showId}/chat/moderation/unban

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/unban" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"user_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/unban"
);

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

let body = {
    "user_id": "ab"
};

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

Request      

POST api/live-commerce/shows/{showId}/chat/moderation/unban

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

user_id   string     

Example: ab

POST api/live-commerce/shows/{showId}/chat/moderation/announcement

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/announcement" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"content\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/announcement"
);

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

let body = {
    "content": "ipzdszigdqrrkthq"
};

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

Request      

POST api/live-commerce/shows/{showId}/chat/moderation/announcement

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

content   string     

Must not be greater than 500 characters. Example: ipzdszigdqrrkthq

POST api/live-commerce/shows/{showId}/chat/moderation/pin/{messageId}

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/pin/10sCGBGnF45hpk3xEpAqhkJXE4" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/pin/10sCGBGnF45hpk3xEpAqhkJXE4"
);

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

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

Request      

POST api/live-commerce/shows/{showId}/chat/moderation/pin/{messageId}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

messageId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

POST api/live-commerce/shows/{showId}/chat/moderation/unpin

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/unpin" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/unpin"
);

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

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

Request      

POST api/live-commerce/shows/{showId}/chat/moderation/unpin

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

PUT api/live-commerce/shows/{showId}/chat/moderation/settings

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/settings" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"slow_mode_seconds\": 16,
    \"moderation_level\": \"strict\",
    \"highlight_keywords\": [
        \"pzdszigdqrrkthqp\"
    ]
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/chat/moderation/settings"
);

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

let body = {
    "slow_mode_seconds": 16,
    "moderation_level": "strict",
    "highlight_keywords": [
        "pzdszigdqrrkthqp"
    ]
};

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

Request      

PUT api/live-commerce/shows/{showId}/chat/moderation/settings

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

slow_mode_seconds   integer  optional    

Must be at least 0. Must not be greater than 300. Example: 16

moderation_level   string  optional    

Example: strict

Must be one of:
  • none
  • automatic
  • manual
  • strict
highlight_keywords   string[]  optional    

Must not be greater than 40 characters.

Get show analytics metrics

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows/01JBQW8K7V2XZGHJK5MNPQRSTU/analytics?start_date=2025-01-01&end_date=2025-01-31" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"start_date\": \"2026-05-04T20:47:21\",
    \"end_date\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/01JBQW8K7V2XZGHJK5MNPQRSTU/analytics"
);

const params = {
    "start_date": "2025-01-01",
    "end_date": "2025-01-31",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

let body = {
    "start_date": "2026-05-04T20:47:21",
    "end_date": "2069-05-25"
};

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

Example response (200, success):


{
    "data": {
        "viewers": 150,
        "messages": 42,
        "revenue": 50000
    }
}
 

Example response (401, unauthenticated):


{
    "error": "Unauthenticated"
}
 

Example response (404, not found):


{
    "error": "Show not found"
}
 

Request      

GET api/live-commerce/shows/{showId}/analytics

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

The show session ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Query Parameters

start_date   string  optional    

date Filter from date (Y-m-d). Example: 2025-01-01

end_date   string  optional    

date Filter to date (Y-m-d). Example: 2025-01-31

Body Parameters

start_date   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

end_date   string  optional    

Must be a valid date. Must be a date after or equal to start_date. Example: 2069-05-25

GET api/live-commerce/shows/{showId}/analytics/creators

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/analytics/creators" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"start_date\": \"2026-05-04T20:47:21\",
    \"end_date\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/analytics/creators"
);

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

let body = {
    "start_date": "2026-05-04T20:47:21",
    "end_date": "2069-05-25"
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: e5d335c8-bf17-47df-ae37-84a306e5e3f1
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/live-commerce/shows/{showId}/analytics/creators

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

start_date   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

end_date   string  optional    

Must be a valid date. Must be a date after or equal to start_date. Example: 2069-05-25

GET api/live-commerce/shows/{showId}/analytics/campaigns

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/analytics/campaigns" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"start_date\": \"2026-05-04T20:47:21\",
    \"end_date\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/analytics/campaigns"
);

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

let body = {
    "start_date": "2026-05-04T20:47:21",
    "end_date": "2069-05-25"
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 60030f3a-78bf-4472-af0f-95446736c8f9
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/live-commerce/shows/{showId}/analytics/campaigns

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

start_date   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

end_date   string  optional    

Must be a valid date. Must be a date after or equal to start_date. Example: 2069-05-25

GET api/live-commerce/shows/{showId}/analytics/export

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/analytics/export" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"start_date\": \"2026-05-04T20:47:21\",
    \"end_date\": \"2069-05-25\",
    \"format\": \"csv\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/analytics/export"
);

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

let body = {
    "start_date": "2026-05-04T20:47:21",
    "end_date": "2069-05-25",
    "format": "csv"
};

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: e6ab98bd-41ef-4044-8bea-f03f85ea0935
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/live-commerce/shows/{showId}/analytics/export

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

start_date   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

end_date   string  optional    

Must be a valid date. Must be a date after or equal to start_date. Example: 2069-05-25

format   string  optional    

Example: csv

Must be one of:
  • csv
  • summary

GET api/s/{code}

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/s/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/s/ab"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 6e1e3b45-6c2e-40b7-9014-5ef33bbc1af7
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/s/{code}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

code   string     

Example: ab

GET api/s/{code}/json

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/s/ab/json" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/s/ab/json"
);

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

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

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 387a7faf-2995-412d-98a9-90210e52466c
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/s/{code}/json

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

code   string     

Example: ab

POST api/live-commerce/attribution/events

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/attribution/events" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ab\",
    \"session_id\": \"ab\",
    \"event_type\": \"login\",
    \"live_auction_event_id\": \"ab\",
    \"gmv_cents\": 15
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/attribution/events"
);

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

let body = {
    "command_id": "ab",
    "session_id": "ab",
    "event_type": "login",
    "live_auction_event_id": "ab",
    "gmv_cents": 15
};

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

Request      

POST api/live-commerce/attribution/events

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

command_id   string     

Example: ab

session_id   string     

Example: ab

event_type   string     

Example: login

Must be one of:
  • landing_view
  • register
  • login
  • watch
  • chat_send
  • bid_placed
  • checkout_start
  • checkout_complete
live_auction_event_id   string     

Example: ab

creator_link_id   string  optional    
campaign_id   string  optional    
user_id   string  optional    
auction_id   string  optional    
lot_id   string  optional    
order_id   string  optional    
gmv_cents   integer  optional    

Must be at least 0. Example: 15

metadata   object  optional    

Get session attribution for current session

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/attribution/session?session_id=sess_abc123" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/attribution/session"
);

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

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

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

Example response (200, success):


{
    "session_id": "sess_abc123",
    "creator_link_id": "...",
    "live_auction_event_id": "..."
}
 

Example response (400, tenant required):


{
    "message": "Tenant context is required."
}
 

Example response (403, feature disabled):


{
    "message": "Live commerce creator attribution is disabled for this tenant."
}
 

Example response (422, session required):


{
    "message": "Session ID is required."
}
 

Request      

GET api/live-commerce/attribution/session

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

session_id   string  optional    

Session ID (or from lc_session_id cookie). Example: sess_abc123

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/creator-links?live_auction_event_id=01JBQW8K7V2XZGHJK5MNPQRSTU&campaign_id=01JBQW8K7V2XZGHJK5MNPQRSTU&creator_id=01JBQW8K7V2XZGHJK5MNPQRSTU" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/creator-links"
);

const params = {
    "live_auction_event_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "campaign_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "creator_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "...",
            "short_code": "abc123",
            "live_auction_event_id": "..."
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/creator-links/01JBQW8K7V2XZGHJK5MNPQRSTU" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/creator-links/01JBQW8K7V2XZGHJK5MNPQRSTU"
);

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

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

Example response (200, success):


{
    "id": "...",
    "short_code": "abc123",
    "live_auction_event": {}
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Example response (404, not found):


404
 

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/creator-links" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"live_auction_event_id\": \"ab\",
    \"creator_id\": \"ab\",
    \"expires_at\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/creator-links"
);

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

let body = {
    "live_auction_event_id": "ab",
    "creator_id": "ab",
    "expires_at": "2069-05-25"
};

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

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/live-commerce/creator-links/10sCGBGnF45hpk3xEpAqhkJXE4" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"expires_at\": \"2026-05-04T20:47:21\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/creator-links/10sCGBGnF45hpk3xEpAqhkJXE4"
);

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

let body = {
    "expires_at": "2026-05-04T20:47:21"
};

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

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/live-commerce/creator-links/10sCGBGnF45hpk3xEpAqhkJXE4" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/creator-links/10sCGBGnF45hpk3xEpAqhkJXE4"
);

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

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

List live commerce campaigns

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/campaigns?status=active" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/campaigns"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "...",
            "name": "Spring Campaign",
            "status": "active"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Request      

GET api/live-commerce/campaigns

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

Filter by status. Example: active

Get a campaign by ID

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/campaigns/01JBQW8K7V2XZGHJK5MNPQRSTU" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/campaigns/01JBQW8K7V2XZGHJK5MNPQRSTU"
);

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

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

Example response (200, success):


{
    "id": "...",
    "name": "Spring Campaign",
    "status": "active",
    "live_auction_events": []
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Example response (404, not found):


404
 

Request      

GET api/live-commerce/campaigns/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The campaign ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

POST api/live-commerce/campaigns

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/campaigns" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ipzdszigdqrrkthq\",
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"status\": \"active\",
    \"starts_at\": \"2026-05-04T20:47:21\",
    \"ends_at\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/campaigns"
);

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

let body = {
    "name": "ipzdszigdqrrkthq",
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "status": "active",
    "starts_at": "2026-05-04T20:47:21",
    "ends_at": "2069-05-25"
};

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

Request      

POST api/live-commerce/campaigns

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

name   string     

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

description   string  optional    

Example: Nesciunt eius nihil cumque quia sunt aut dolores.

status   string  optional    

Example: active

Must be one of:
  • draft
  • active
  • paused
  • ended
starts_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

ends_at   string  optional    

Must be a valid date. Must be a date after starts_at. Example: 2069-05-25

metadata   object  optional    

PUT api/live-commerce/campaigns/{id}

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/live-commerce/campaigns/10sCGBGnF45hpk3xEpAqhkJXE4" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"ipzdszigdqrrkthq\",
    \"description\": \"Nesciunt eius nihil cumque quia sunt aut dolores.\",
    \"status\": \"ended\",
    \"starts_at\": \"2026-05-04T20:47:21\",
    \"ends_at\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/campaigns/10sCGBGnF45hpk3xEpAqhkJXE4"
);

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

let body = {
    "name": "ipzdszigdqrrkthq",
    "description": "Nesciunt eius nihil cumque quia sunt aut dolores.",
    "status": "ended",
    "starts_at": "2026-05-04T20:47:21",
    "ends_at": "2069-05-25"
};

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

Request      

PUT api/live-commerce/campaigns/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the campaign. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

name   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

description   string  optional    

Example: Nesciunt eius nihil cumque quia sunt aut dolores.

status   string  optional    

Example: ended

Must be one of:
  • draft
  • active
  • paused
  • ended
starts_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

ends_at   string  optional    

Must be a valid date. Must be a date after starts_at. Example: 2069-05-25

metadata   object  optional    

DELETE api/live-commerce/campaigns/{id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/live-commerce/campaigns/10sCGBGnF45hpk3xEpAqhkJXE4" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/campaigns/10sCGBGnF45hpk3xEpAqhkJXE4"
);

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

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

Request      

DELETE api/live-commerce/campaigns/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the campaign. Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Get show queue state

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/shows/01JBQW8K7V2XZGHJK5MNPQRSTU/queue" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/01JBQW8K7V2XZGHJK5MNPQRSTU/queue"
);

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

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

Example response (200, success):


{
    "current_lot_id": "...",
    "queue_items": []
}
 

Example response (400, tenant required):


{
    "message": "Tenant context required"
}
 

Example response (403, forbidden):


{
    "message": "Forbidden"
}
 

Example response (404, not found):


404
 

Request      

GET api/live-commerce/shows/{showId}/queue

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

The show session ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

POST api/live-commerce/shows/{showId}/queue/{queueItemId}/reorder

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/10sCGBGnF45hpk3xEpAqhkJXE4/reorder" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"new_sequence\": 61,
    \"command_id\": \"pzdszigdqrrkthqpvviwahfxqn\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/10sCGBGnF45hpk3xEpAqhkJXE4/reorder"
);

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

let body = {
    "new_sequence": 61,
    "command_id": "pzdszigdqrrkthqpvviwahfxqn"
};

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

Request      

POST api/live-commerce/shows/{showId}/queue/{queueItemId}/reorder

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

queueItemId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

new_sequence   integer     

Must be at least 1. Example: 61

command_id   string  optional    

Must be 26 characters. Example: pzdszigdqrrkthqpvviwahfxqn

metadata   object  optional    

POST api/live-commerce/shows/{showId}/queue/{queueItemId}/pin

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/10sCGBGnF45hpk3xEpAqhkJXE4/pin" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ipzdszigdqrrkthqpvviwahfxq\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/10sCGBGnF45hpk3xEpAqhkJXE4/pin"
);

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

let body = {
    "command_id": "ipzdszigdqrrkthqpvviwahfxq"
};

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

Request      

POST api/live-commerce/shows/{showId}/queue/{queueItemId}/pin

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

queueItemId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string  optional    

Must be 26 characters. Example: ipzdszigdqrrkthqpvviwahfxq

metadata   object  optional    

POST api/live-commerce/shows/{showId}/queue/next

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/next" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ipzdszigdqrrkthqpvviwahfxq\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/next"
);

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

let body = {
    "command_id": "ipzdszigdqrrkthqpvviwahfxq"
};

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

Request      

POST api/live-commerce/shows/{showId}/queue/next

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string  optional    

Must be 26 characters. Example: ipzdszigdqrrkthqpvviwahfxq

metadata   object  optional    

POST api/live-commerce/shows/{showId}/queue/{queueItemId}/switch

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/10sCGBGnF45hpk3xEpAqhkJXE4/switch" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ipzdszigdqrrkthqpvviwahfxq\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/10sCGBGnF45hpk3xEpAqhkJXE4/switch"
);

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

let body = {
    "command_id": "ipzdszigdqrrkthqpvviwahfxq"
};

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

Request      

POST api/live-commerce/shows/{showId}/queue/{queueItemId}/switch

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

queueItemId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string  optional    

Must be 26 characters. Example: ipzdszigdqrrkthqpvviwahfxq

metadata   object  optional    

POST api/live-commerce/shows/{showId}/queue/current/hold

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/current/hold" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ipzdszigdqrrkthqpvviwahfxq\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/current/hold"
);

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

let body = {
    "command_id": "ipzdszigdqrrkthqpvviwahfxq"
};

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

Request      

POST api/live-commerce/shows/{showId}/queue/current/hold

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string  optional    

Must be 26 characters. Example: ipzdszigdqrrkthqpvviwahfxq

metadata   object  optional    

POST api/live-commerce/shows/{showId}/queue/current/resume

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/current/resume" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ipzdszigdqrrkthqpvviwahfxq\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/current/resume"
);

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

let body = {
    "command_id": "ipzdszigdqrrkthqpvviwahfxq"
};

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

Request      

POST api/live-commerce/shows/{showId}/queue/current/resume

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string  optional    

Must be 26 characters. Example: ipzdszigdqrrkthqpvviwahfxq

metadata   object  optional    

POST api/live-commerce/shows/{showId}/queue/current/extend

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/current/extend" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"seconds\": 16,
    \"command_id\": \"pzdszigdqrrkthqpvviwahfxqn\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/current/extend"
);

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

let body = {
    "seconds": 16,
    "command_id": "pzdszigdqrrkthqpvviwahfxqn"
};

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

Request      

POST api/live-commerce/shows/{showId}/queue/current/extend

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

seconds   integer  optional    

Must be at least 1. Must not be greater than 300. Example: 16

command_id   string  optional    

Must be 26 characters. Example: pzdszigdqrrkthqpvviwahfxqn

metadata   object  optional    

POST api/live-commerce/shows/{showId}/queue/current/skip

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/current/skip" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"ipzdszigdqrrkthqpvviwahfxq\"
}"
const url = new URL(
    "http://localhost:8000/api/live-commerce/shows/10sCGBGnF45hpk3xEpAqhkJXE4/queue/current/skip"
);

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

let body = {
    "command_id": "ipzdszigdqrrkthqpvviwahfxq"
};

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

Request      

POST api/live-commerce/shows/{showId}/queue/current/skip

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

showId   string     

Example: 10sCGBGnF45hpk3xEpAqhkJXE4

Body Parameters

command_id   string  optional    

Must be 26 characters. Example: ipzdszigdqrrkthqpvviwahfxq

metadata   object  optional    

Get overlay state (polling endpoint for live overlays)

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-commerce/overlays/overlay_abc123.../state" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-commerce/overlays/overlay_abc123.../state"
);

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

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

Example response (200, success):


{
    "show_id": "...",
    "current_lot": {},
    "chat_enabled": true
}
 

Example response (403, invalid token):


{
    "message": "Invalid or expired overlay token"
}
 

Example response (404, tenant not found):


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

Request      

GET api/live-commerce/overlays/{token}/state

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

token   string     

The overlay token. Example: overlay_abc123...

Bids

Get current user's bids

requires authentication

Returns paginated list of bids placed by the authenticated user.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/bids?page=1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/bids"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "auction_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "amount": 15000,
            "is_winning": true,
            "bid_at": "2025-10-29T10:00:00.000000Z",
            "auction": {
                "listing_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
                "status": "live"
            }
        }
    ],
    "links": {},
    "meta": {}
}
 

Request      

GET api/bids

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Page number. Example: 1

Get bid history for an auction

requires authentication

Returns paginated list of bids for a specific auction.

Bidder identity is anonymized via an auction-scoped alias (non-linkable across auctions), and trust signals are bucketized to avoid fingerprinting.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/auctions/ab/bids?page=1&per_page=20" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/auctions/ab/bids"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "amount": 15000,
            "obscured_username": "B***r",
            "bid_at": "2025-10-29T10:00:00.000000Z",
            "is_proxy_bid": false
        }
    ],
    "links": {},
    "meta": {}
}
 

Request      

GET api/auctions/{auctionId}/bids

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

auctionId   string     

Example: ab

Query Parameters

page   integer  optional    

Page number. Example: 1

per_page   integer  optional    

Items per page. Example: 20

Deal Rooms

GET /api/listings/{listing}/deal-room

requires authentication

Returns the deal_room_id for this listing if the authenticated user is authorized to access it. To avoid leaking existence, unauthorized callers receive 404.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/listings/ab/deal-room" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/listings/ab/deal-room"
);

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

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

Example response (200, success):


{
    "deal_room_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "status": "active"
}
 

Example response (200, no deal room):


{
    "deal_room_id": null,
    "status": null
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Example response (404, unauthorized):


404 (no body - avoids leaking existence)
 

Request      

GET api/listings/{listing_id}/deal-room

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing_id   string     

The ID of the listing. Example: ab

listing   string     

The listing ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

List deal rooms (seller-owned)

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms?per_page=15" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "listing_id": "...",
            "status": "active"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/deal-rooms

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

Items per page (1-100). Example: 15

Get deal room

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab"
);

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

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

Example response (200, success):


{
    "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
    "listing": {},
    "current_settlement": {},
    "offers": []
}
 

Example response (403, forbidden):


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

Example response (404, not found):


{
    "message": "Deal room not found"
}
 

Request      

GET api/deal-rooms/{dealRoom_id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

dealRoom   string     

The deal room ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Get my offer

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms/ab/my-offer" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/my-offer"
);

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

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

Example response (200, success):


{
    "offer": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "deal_room_id": "...",
        "offer_type": "seller_counter",
        "amount": 15000,
        "status": "pending"
    }
}
 

Example response (200, no offer):


{
    "offer": null
}
 

Example response (403, forbidden):


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

Request      

GET api/deal-rooms/{dealRoom_id}/my-offer

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

dealRoom   string     

The deal room ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

List eligible bidders (seller-only)

requires authentication

Provides a safe bidder ladder for seller selection UX (request increase / concessions). Does not expose bidder PII; returns only user_id and their bid amount.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms/ab/eligible-bidders" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/eligible-bidders"
);

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

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

Example response (200, success):


{
    "eligible_bidders": [
        {
            "user_id": "...",
            "bid_amount": 15000,
            "position": 1
        }
    ]
}
 

Example response (403, forbidden):


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

Request      

GET api/deal-rooms/{dealRoom_id}/eligible-bidders

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

dealRoom   string     

The deal room ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

GET /api/my/deal-rooms

requires authentication

Returns deal rooms the authenticated user can access, as either:

NOTE: We intentionally do not compute eligibility for every deal room (ladder lookup requires bid_store queries). This endpoint is meant to power discovery UX and in-app navigation, not a complete eligibility oracle.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/my/deal-rooms?per_page=20" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/my/deal-rooms"
);

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

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

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

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "listing_id": "...",
            "status": "active",
            "role": "seller"
        }
    ],
    "links": {},
    "meta": {}
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/my/deal-rooms

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

per_page   integer  optional    

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

List settlement versions

requires authentication

Returns settlement version history for a deal room.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms/ab/settlements" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/settlements"
);

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

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

Example response (200, success):


{
    "deal_room_id": "...",
    "current_settlement_id": "...",
    "settlements": [
        {
            "id": "...",
            "version": 1,
            "hammer_price": 15000
        }
    ]
}
 

Example response (403, forbidden):


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

Request      

GET api/deal-rooms/{dealRoom_id}/settlements

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

dealRoom   string     

The deal room ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

List actions

requires authentication

Returns recent offer/action history for a deal room.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/deal-rooms/ab/actions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/actions"
);

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

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

Example response (200, success):


{
    "deal_room_id": "...",
    "actions": [
        {
            "id": "...",
            "offer_type": "bidder_counter",
            "amount": 15000,
            "status": "accepted"
        }
    ]
}
 

Example response (403, forbidden):


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

Request      

GET api/deal-rooms/{dealRoom_id}/actions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

dealRoom   string     

The deal room ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Unified action endpoint for API polish: creates a negotiation action which may create a new settlement version.

requires authentication

Supported actions:

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/actions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"action\": \"accept_top_bid\",
    \"command_id\": \"01J...\",
    \"expected_settlement_version\": 2,
    \"offer_id\": \"01J...\",
    \"amount\": 15,
    \"expires_at\": \"2026-05-04T20:47:21\",
    \"bidder_id\": \"ab\",
    \"requested_amount\": 15,
    \"reason\": \"zdszigdqrrkthqpv\",
    \"concession_type\": \"viwahfxqnyifdnnz\",
    \"concession_amount\": 80,
    \"second_chance_reason\": \"lnhfpvmsnpkynlnb\"
}"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/actions"
);

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

let body = {
    "action": "accept_top_bid",
    "command_id": "01J...",
    "expected_settlement_version": 2,
    "offer_id": "01J...",
    "amount": 15,
    "expires_at": "2026-05-04T20:47:21",
    "bidder_id": "ab",
    "requested_amount": 15,
    "reason": "zdszigdqrrkthqpv",
    "concession_type": "viwahfxqnyifdnnz",
    "concession_amount": 80,
    "second_chance_reason": "lnhfpvmsnpkynlnb"
};

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

Request      

POST api/deal-rooms/{dealRoom_id}/actions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

Body Parameters

action   string     

Action type. Example: accept_top_bid

command_id   string  optional    

Optional idempotency key. Example: 01J...

expected_settlement_version   integer  optional    

Optional optimistic concurrency version. Example: 2

offer_id   string  optional    

Required for bidder_accept_offer/bidder_decline_offer. Example: 01J...

amount   integer  optional    

This field is required when action is counter_offer. Must be at least 0. Example: 15

terms   object  optional    
expires_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

bidder_id   string  optional    

This field is required when action is request_increase or concessions. Example: ab

requested_amount   integer  optional    

This field is required when action is request_increase. Must be at least 0. Example: 15

reason   string  optional    

Must not be greater than 1000 characters. Example: zdszigdqrrkthqpv

concession_type   string  optional    

This field is required when action is concessions. Must not be greater than 50 characters. Example: viwahfxqnyifdnnz

concession_amount   integer  optional    

This field is required when action is concessions. Must be at least 0. Example: 80

second_chance_reason   string  optional    

Must not be greater than 200 characters. Example: lnhfpvmsnpkynlnb

POST api/deal-rooms/{dealRoom_id}/accept-top-bid

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/accept-top-bid" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/accept-top-bid"
);

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

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

Request      

POST api/deal-rooms/{dealRoom_id}/accept-top-bid

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

POST api/deal-rooms/{dealRoom_id}/counter-offer

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/counter-offer" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"amount\": 8,
    \"expires_at\": \"2026-05-04T20:47:21\",
    \"expected_settlement_version\": 15,
    \"command_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/counter-offer"
);

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

let body = {
    "amount": 8,
    "expires_at": "2026-05-04T20:47:21",
    "expected_settlement_version": 15,
    "command_id": "ab"
};

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

Request      

POST api/deal-rooms/{dealRoom_id}/counter-offer

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

Body Parameters

amount   integer     

Must be at least 0. Example: 8

terms   object  optional    
expires_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

expected_settlement_version   integer  optional    

Must be at least 0. Example: 15

command_id   string  optional    

Example: ab

POST api/deal-rooms/{dealRoom_id}/request-increase

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/request-increase" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"bidder_id\": \"ab\",
    \"requested_amount\": 15,
    \"reason\": \"zdszigdqrrkthqpv\",
    \"message\": \"viwahfxqnyifdnnz\",
    \"expires_at\": \"2026-05-04T20:47:21\",
    \"expected_settlement_version\": 80,
    \"command_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/request-increase"
);

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

let body = {
    "bidder_id": "ab",
    "requested_amount": 15,
    "reason": "zdszigdqrrkthqpv",
    "message": "viwahfxqnyifdnnz",
    "expires_at": "2026-05-04T20:47:21",
    "expected_settlement_version": 80,
    "command_id": "ab"
};

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

Request      

POST api/deal-rooms/{dealRoom_id}/request-increase

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

Body Parameters

bidder_id   string     

Example: ab

requested_amount   integer     

Must be at least 0. Example: 15

reason   string  optional    

Must not be greater than 1000 characters. Example: zdszigdqrrkthqpv

message   string  optional    

Must not be greater than 1000 characters. Example: viwahfxqnyifdnnz

expires_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

expected_settlement_version   integer  optional    

Must be at least 0. Example: 80

command_id   string  optional    

Example: ab

POST api/deal-rooms/{dealRoom_id}/decline-offer

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/decline-offer" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"ipzdszigdqrrkthq\",
    \"command_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/decline-offer"
);

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

let body = {
    "reason": "ipzdszigdqrrkthq",
    "command_id": "ab"
};

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

Request      

POST api/deal-rooms/{dealRoom_id}/decline-offer

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

Body Parameters

reason   string  optional    

Must not be greater than 1000 characters. Example: ipzdszigdqrrkthq

command_id   string  optional    

Example: ab

POST api/deal-rooms/{dealRoom_id}/concessions

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/concessions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"bidder_id\": \"ab\",
    \"concession_type\": \"pzdszigdqrrkthqp\",
    \"concession_amount\": 34,
    \"expires_at\": \"2026-05-04T20:47:21\",
    \"expected_settlement_version\": 73,
    \"command_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/concessions"
);

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

let body = {
    "bidder_id": "ab",
    "concession_type": "pzdszigdqrrkthqp",
    "concession_amount": 34,
    "expires_at": "2026-05-04T20:47:21",
    "expected_settlement_version": 73,
    "command_id": "ab"
};

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

Request      

POST api/deal-rooms/{dealRoom_id}/concessions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

Body Parameters

bidder_id   string     

Example: ab

concession_type   string     

Must not be greater than 50 characters. Example: pzdszigdqrrkthqp

concession_amount   integer     

Must be at least 0. Example: 34

terms   object  optional    
expires_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:21

expected_settlement_version   integer  optional    

Must be at least 0. Example: 73

command_id   string  optional    

Example: ab

POST api/deal-rooms/{dealRoom_id}/second-chance

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/second-chance" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"reason\": \"ipzdszigdqrrkthq\",
    \"expected_settlement_version\": 15,
    \"command_id\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/second-chance"
);

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

let body = {
    "reason": "ipzdszigdqrrkthq",
    "expected_settlement_version": 15,
    "command_id": "ab"
};

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

Request      

POST api/deal-rooms/{dealRoom_id}/second-chance

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

Body Parameters

reason   string  optional    

Must not be greater than 200 characters. Example: ipzdszigdqrrkthq

expected_settlement_version   integer  optional    

Must be at least 0. Example: 15

command_id   string  optional    

Example: ab

Deal Room Offer API

requires authentication

Bidder offer accept/decline endpoints.

Example request:
curl --request POST \
    "http://localhost:8000/api/deal-rooms/ab/offers/ab/accept" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/deal-rooms/ab/offers/ab/accept"
);

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

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

Request      

POST api/deal-rooms/{dealRoom_id}/offers/{offer_id}/accept

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

dealRoom_id   string     

The ID of the dealRoom. Example: ab

offer_id   string     

The ID of the offer. Example: ab

Live Auctions - Attendees

Register or assign a paddle to the authenticated user.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/events/01HFAK7VYB0KS3W0ZW7V4GN7K1/register-paddle" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"paddle_number\": \"301\",
    \"deposit_amount\": 250
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/events/01HFAK7VYB0KS3W0ZW7V4GN7K1/register-paddle"
);

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

let body = {
    "paddle_number": "301",
    "deposit_amount": 250
};

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

Example response (201, Paddle assigned):


{
    "data": {
        "id": "01HFCK0GDESJYCJRR6TF3S9XFT",
        "event_id": "01HFAK7VYB0KS3W0ZW7V4GN7K1",
        "user_id": "01HFBEQ2M9GH9T7M5JXX19P9JQ",
        "paddle_number": "301",
        "deposit_amount": 250,
        "deposit_status": "held",
        "checkin_status": "pending"
    }
}
 

Example response (422, Deposit missing):


{
    "message": "Deposit requirement not satisfied",
    "errors": {
        "deposit_amount": [
            "A held deposit meeting the required amount is necessary before requesting a paddle."
        ]
    }
}
 

Request      

POST api/live-auctions/events/{eventId}/register-paddle

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

eventId   string     

Live auction event ULID. Example: 01HFAK7VYB0KS3W0ZW7V4GN7K1

Body Parameters

paddle_number   string  optional    

optional Preferred paddle to request. When omitted, the next available paddle is assigned. Example: 301

deposit_amount   number  optional    

optional Deposit requirement that must already be held/authorized. Example: 250

Return the current user's paddle assignment for an event.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-auctions/events/01HFAK7VYB0KS3W0ZW7V4GN7K1/my-paddle" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-auctions/events/01HFAK7VYB0KS3W0ZW7V4GN7K1/my-paddle"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Paddle found):


{
    "data": {
        "id": "01HFCK0GDESJYCJRR6TF3S9XFT",
        "event_id": "01HFAK7VYB0KS3W0ZW7V4GN7K1",
        "paddle_number": "301",
        "checkin_status": "checked_in",
        "deposit_status": "held"
    }
}
 

Example response (404, No paddle assigned):


{
    "message": "No paddle assigned for this event"
}
 

Request      

GET api/live-auctions/events/{eventId}/my-paddle

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

eventId   string     

Live auction event ULID. Example: 01HFAK7VYB0KS3W0ZW7V4GN7K1

Mark attendee as checked in.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/events/01HFAK7VYB0KS3W0ZW7V4GN7K1/check-in" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"paddle_number\": \"301\",
    \"qr_code\": \"LIVE-QR-301\",
    \"status\": \"checked_in\",
    \"latitude\": 51.5072,
    \"longitude\": -0.1276
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/events/01HFAK7VYB0KS3W0ZW7V4GN7K1/check-in"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "paddle_number": "301",
    "qr_code": "LIVE-QR-301",
    "status": "checked_in",
    "latitude": 51.5072,
    "longitude": -0.1276
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Checked in):


{
    "data": {
        "id": "01HFCK0GDESJYCJRR6TF3S9XFT",
        "paddle_number": "301",
        "checkin_status": "checked_in",
        "checked_in_at": "2025-01-10T18:05:11.004000Z",
        "latitude": 51.5072,
        "longitude": -0.1276
    }
}
 

Example response (403, Outside geofence):


{
    "message": "Check-in denied: location outside venue"
}
 

Request      

POST api/live-auctions/events/{eventId}/check-in

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

eventId   string     

Live auction event ULID. Example: 01HFAK7VYB0KS3W0ZW7V4GN7K1

Body Parameters

paddle_number   string  optional    

optional Paddle to check in (defaults to the authenticated user's assignment). Example: 301

qr_code   string  optional    

optional QR/NFC token that resolves to the paddle. Example: LIVE-QR-301

status   string  optional    

optional Check-in status override (pending, checked_in, denied). Example: checked_in

latitude   number  optional    

optional Latitude used for geofence enforcement. Example: 51.5072

longitude   number  optional    

optional Longitude used for geofence enforcement. Example: -0.1276

Live Auctions - Events

List live auction events.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-auctions?status=live" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-auctions"
);

const params = {
    "status": "live",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Events paginated):


{
    "data": [
        {
            "id": "01HFAK7VYB0KS3W0ZW7V4GN7K1",
            "event_type": "hybrid",
            "venue": "Babylon HQ",
            "status": "scheduled",
            "start_at": "2025-01-15T18:00:00Z"
        }
    ],
    "links": {
        "next": null
    },
    "meta": {
        "current_page": 1,
        "per_page": 20
    }
}
 

Example response (400, Missing tenant):


{
    "message": "Tenant context required"
}
 

Request      

GET api/live-auctions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

status   string  optional    

Filter by event status (draft, scheduled, live, paused, ended). Example: live

Show live auction event details.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-auctions/01HFAK7VYB0KS3W0ZW7V4GN7K1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-auctions/01HFAK7VYB0KS3W0ZW7V4GN7K1"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Event found):


{
    "id": "01HFAK7VYB0KS3W0ZW7V4GN7K1",
    "event_type": "hybrid",
    "venue": "Babylon HQ",
    "status": "scheduled",
    "settings": {
        "fairness_window_ms": 250
    }
}
 

Example response (404, Event missing):


{
    "message": "No query results for model [LiveAuctionEvent] 01HFAK7VYB0KS3W0ZW7V4GN7K1"
}
 

Request      

GET api/live-auctions/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live auction event ULID. Example: 01HFAK7VYB0KS3W0ZW7V4GN7K1

Create new live auction event.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"event_type\": \"hybrid\",
    \"venue\": \"Babylon Flagship Gallery\",
    \"start_at\": \"2025-01-15T18:00:00Z\",
    \"timezone\": \"Europe\\/London\",
    \"bidding_mode\": \"simulcast\",
    \"stream_config\": {
        \"streaming\": {
            \"provider\": \"mux\",
            \"rtmp_url\": \"rtmp:\\/\\/mux.live\\/babylon\"
        }
    },
    \"roles\": {
        \"auctioneer\": \"01HFC0ZAZFQ86PSNBRYPR5XS14\"
    },
    \"settings\": []
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "event_type": "hybrid",
    "venue": "Babylon Flagship Gallery",
    "start_at": "2025-01-15T18:00:00Z",
    "timezone": "Europe\/London",
    "bidding_mode": "simulcast",
    "stream_config": {
        "streaming": {
            "provider": "mux",
            "rtmp_url": "rtmp:\/\/mux.live\/babylon"
        }
    },
    "roles": {
        "auctioneer": "01HFC0ZAZFQ86PSNBRYPR5XS14"
    },
    "settings": []
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, Event created):


{
    "id": "01HFCS2J3Q8JHW8P4F7Q8WANNH",
    "event_type": "hybrid",
    "venue": "Babylon Flagship Gallery",
    "status": "draft",
    "settings": {
        "fairness_window_ms": 250,
        "deposit_required": false
    }
}
 

Example response (403, Feature disabled):


{
    "message": "Live auctions feature is disabled for this tenant",
    "error": "Please contact support to enable live auctions."
}
 

Request      

POST api/live-auctions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

event_type   string     

Type of event (physical, hybrid, virtual). Example: hybrid

venue   string  optional    

optional Venue label for physical events. Example: Babylon Flagship Gallery

start_at   string  optional    

optional ISO8601 start timestamp. Example: 2025-01-15T18:00:00Z

timezone   string  optional    

optional IANA timezone identifier. Example: Europe/London

bidding_mode   string  optional    

optional Mode (simulcast, floor_only, online_only). Example: simulcast

stream_config   object  optional    

optional RTMP/WebRTC configuration JSON.

roles   object  optional    

optional Auction staff roster (auctioneer, clerks, spotters).

settings   object  optional    

optional Event level settings (fairness_window_ms, deposit_required, hammer_confirmation_required, etc.).

Update live auction event.

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/live-auctions/01HFCS2J3Q8JHW8P4F7Q8WANNH" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"venue\": \"Babylon - King Street\",
    \"start_at\": \"2025-01-16T19:00:00Z\",
    \"timezone\": \"Europe\\/Paris\",
    \"stream_config\": [],
    \"roles\": [],
    \"settings\": []
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/01HFCS2J3Q8JHW8P4F7Q8WANNH"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "venue": "Babylon - King Street",
    "start_at": "2025-01-16T19:00:00Z",
    "timezone": "Europe\/Paris",
    "stream_config": [],
    "roles": [],
    "settings": []
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Event updated):


{
    "id": "01HFCS2J3Q8JHW8P4F7Q8WANNH",
    "venue": "Babylon - King Street",
    "timezone": "Europe/Paris",
    "settings": {
        "fairness_window_ms": 300
    }
}
 

Request      

PUT api/live-auctions/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live auction event ULID. Example: 01HFCS2J3Q8JHW8P4F7Q8WANNH

Body Parameters

venue   string  optional    

optional Updated venue label. Example: Babylon - King Street

start_at   string  optional    

optional ISO8601 timestamp. Example: 2025-01-16T19:00:00Z

timezone   string  optional    

optional IANA timezone identifier. Example: Europe/Paris

stream_config   object  optional    

optional RTMP/WebRTC configuration JSON.

roles   object  optional    

optional Updated staff assignment JSON.

settings   object  optional    

optional Event settings overrides (fairness_window_ms, deposit_required, streaming overrides, etc.).

Start live auction event (go live).

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/01HFCS2J3Q8JHW8P4F7Q8WANNH/start" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-auctions/01HFCS2J3Q8JHW8P4F7Q8WANNH/start"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Event live):


{
    "id": "01HFCS2J3Q8JHW8P4F7Q8WANNH",
    "status": "live"
}
 

Example response (400, Cannot start):


{
    "message": "Event cannot be started"
}
 

Request      

POST api/live-auctions/{id}/start

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live auction event ULID. Example: 01HFCS2J3Q8JHW8P4F7Q8WANNH

Pause live auction event.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/01HFCS2J3Q8JHW8P4F7Q8WANNH/pause" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-auctions/01HFCS2J3Q8JHW8P4F7Q8WANNH/pause"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Event paused):


{
    "id": "01HFCS2J3Q8JHW8P4F7Q8WANNH",
    "status": "paused"
}
 

Example response (400, Cannot pause):


{
    "message": "Event cannot be paused"
}
 

Request      

POST api/live-auctions/{id}/pause

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live auction event ULID. Example: 01HFCS2J3Q8JHW8P4F7Q8WANNH

Resume live auction event.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/01HFCS2J3Q8JHW8P4F7Q8WANNH/resume" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-auctions/01HFCS2J3Q8JHW8P4F7Q8WANNH/resume"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (200, Event resumed):


{
    "id": "01HFCS2J3Q8JHW8P4F7Q8WANNH",
    "status": "live"
}
 

Example response (400, Not paused):


{
    "message": "Event is not paused"
}
 

Request      

POST api/live-auctions/{id}/resume

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live auction event ULID. Example: 01HFCS2J3Q8JHW8P4F7Q8WANNH

Live Auctions - Floor Bids

Submit a floor bid.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/floor-bids" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"auction_id\": \"01HFAX4A6XES6SJT5MH2M2AM5H\",
    \"user_id\": \"01HFBEQ2M9GH9T7M5JXX19P9JQ\",
    \"amount\": 525000,
    \"paddle_number\": \"301\",
    \"clerk_id\": \"01HFC0ZAZFQ86PSNBRYPR5XS14\",
    \"spotter_id\": \"01HFC10565BVC4V22NBTWR0M89\",
    \"command_id\": \"01HFC11K08Z0EZ3MYVXM5M2M3R\",
    \"metadata\": {
        \"ip_address\": \"10.0.10.30\",
        \"latency_ms\": 14
    }
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/floor-bids"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "auction_id": "01HFAX4A6XES6SJT5MH2M2AM5H",
    "user_id": "01HFBEQ2M9GH9T7M5JXX19P9JQ",
    "amount": 525000,
    "paddle_number": "301",
    "clerk_id": "01HFC0ZAZFQ86PSNBRYPR5XS14",
    "spotter_id": "01HFC10565BVC4V22NBTWR0M89",
    "command_id": "01HFC11K08Z0EZ3MYVXM5M2M3R",
    "metadata": {
        "ip_address": "10.0.10.30",
        "latency_ms": 14
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (202, Bid accepted):


{
    "bid_id": "01HFC143HE2ZNGN67P08GW87C1",
    "status": "accepted",
    "idempotency_key": "floor_bid:01HFC11K08Z0EZ3MYVXM5M2M3R"
}
 

Example response (422, Deposit not satisfied):


{
    "message": "The given data was invalid.",
    "errors": {
        "paddle_number": [
            "Attendee must be checked in before bidding."
        ]
    }
}
 

Request      

POST api/live-auctions/floor-bids

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

auction_id   string     

Auction ULID associated with the live lot currently selling. Example: 01HFAX4A6XES6SJT5MH2M2AM5H

user_id   string     

Bidder ULID that owns the paddle. Example: 01HFBEQ2M9GH9T7M5JXX19P9JQ

amount   integer     

Bid amount expressed in cents. Example: 525000

paddle_number   string     

Paddle assigned to the attendee. Example: 301

clerk_id   string  optional    

required_without:spotter_id Clerk user ULID submitting the bid. Example: 01HFC0ZAZFQ86PSNBRYPR5XS14

spotter_id   string  optional    

required_without:clerk_id Spotter user ULID submitting the bid. Example: 01HFC10565BVC4V22NBTWR0M89

command_id   string     

ULID/UUID for idempotency. Example: 01HFC11K08Z0EZ3MYVXM5M2M3R

metadata   object  optional    

optional Additional telemetry (ip_address, user_agent, latency_ms).

Response

Response Fields

bid_id   string     

ULID queued for processing by Bid Ingress.

idempotency_key   string|null     

Key reused for retries.

Live Auctions - Lot Control

List lots for an event.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-auctions/lots?event_id=01HFAK7VYB0KS3W0ZW7V4GN7K1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots"
);

const params = {
    "event_id": "01HFAK7VYB0KS3W0ZW7V4GN7K1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Lots retrieved):


[
    {
        "id": "01HFAX4YTS4X7N1HCYX0G7RB6W",
        "auction_id": "01HFAX4A6XES6SJT5MH2M2AM5H",
        "lot_sequence": 1,
        "status": "standby",
        "current_bid": null,
        "live_auction_event_id": "01HFAK7VYB0KS3W0ZW7V4GN7K1"
    }
]
 

Example response (400, Missing event):


{
    "message": "event_id is required"
}
 

Request      

GET api/live-auctions/lots

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

event_id   string     

The live auction event ULID to filter lots. Example: 01HFAK7VYB0KS3W0ZW7V4GN7K1

Show lot details.

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, Lot found):


{
    "id": "01HFAX4YTS4X7N1HCYX0G7RB6W",
    "auction_id": "01HFAX4A6XES6SJT5MH2M2AM5H",
    "lot_sequence": 1,
    "status": "standby",
    "current_bid": null,
    "live_auction_event_id": "01HFAK7VYB0KS3W0ZW7V4GN7K1"
}
 

Example response (404, Unknown lot):


{
    "message": "No query results for model [LiveLotState] 01HFAX4YTS4X7N1HCYX0G7RB6W"
}
 

Request      

GET api/live-auctions/lots/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The live lot state ULID. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Start a lot.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/start" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"01HFBC10XY9BPR7WP6W7G4G6CM\",
    \"auction_id\": \"01HFAX4A6XES6SJT5MH2M2AM5H\",
    \"absentee_bids\": [
        {
            \"user_id\": \"01HFBEQ2M9GH9T7M5JXX19P9JQ\",
            \"amount\": 450000,
            \"idempotency_key\": \"absentee-01HFBF4RE0S5M\"
        }
    ],
    \"metadata\": {
        \"ip_address\": \"10.0.10.24\",
        \"latency_ms\": 28
    }
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/start"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "command_id": "01HFBC10XY9BPR7WP6W7G4G6CM",
    "auction_id": "01HFAX4A6XES6SJT5MH2M2AM5H",
    "absentee_bids": [
        {
            "user_id": "01HFBEQ2M9GH9T7M5JXX19P9JQ",
            "amount": 450000,
            "idempotency_key": "absentee-01HFBF4RE0S5M"
        }
    ],
    "metadata": {
        "ip_address": "10.0.10.24",
        "latency_ms": 28
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Lot started):


{
    "live_lot_state_id": "01HFAX4YTS4X7N1HCYX0G7RB6W",
    "status": "selling",
    "started_at": "2025-01-10T18:13:44.192000Z",
    "injected_bid_ids": [
        "01HFBG2VH9ZN1R4N38Z5Q1MWY4"
    ]
}
 

Example response (422, Invalid state):


{
    "message": "Lot must be in 'standby' status to start. Current status: selling"
}
 

Request      

POST api/live-auctions/lots/{id}/start

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live lot state ULID to start. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Body Parameters

command_id   string  optional    

ULID or UUID generated by the console for idempotency. Example: 01HFBC10XY9BPR7WP6W7G4G6CM

auction_id   string  optional    

optional Listing/auction ULID used when injecting absentee bids. Example: 01HFAX4A6XES6SJT5MH2M2AM5H

absentee_bids   string[]  optional    

optional Absentee bids to inject when the lot opens.

metadata   object  optional    

optional Client telemetry (ip_address, user_agent, latency_ms, offline_replay).

Response

Response Fields

live_lot_state_id   string     

The lot that entered selling state.

status   string     

Selling status after transition.

started_at   string     

ISO8601 timestamp when the lot began.

injected_bid_ids   string[]     

IDs for absentee bids queued during start.

Pause current lot.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/pause" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"01HFBCJ3V7JQ7H8QNM8DP1X8N9\"
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/pause"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "command_id": "01HFBCJ3V7JQ7H8QNM8DP1X8N9"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Lot paused):


{
    "live_lot_state_id": "01HFAX4YTS4X7N1HCYX0G7RB6W",
    "status": "paused",
    "paused_at": "2025-01-10T18:15:02.981000Z"
}
 

Example response (422, Lot not selling):


{
    "message": "Lot must be in 'selling' status to pause. Current status: paused"
}
 

Request      

POST api/live-auctions/lots/{id}/pause

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live lot state ULID to pause. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Body Parameters

command_id   string  optional    

ULID or UUID for idempotency. Example: 01HFBCJ3V7JQ7H8QNM8DP1X8N9

Response

Response Fields

paused_at   string     

Timestamp captured when the pause command executed.

Resume paused lot.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/resume" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"01HFBDNEK3VY2NRXTPAKAZA7M5\"
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/resume"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "command_id": "01HFBDNEK3VY2NRXTPAKAZA7M5"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Lot resumed):


{
    "live_lot_state_id": "01HFAX4YTS4X7N1HCYX0G7RB6W",
    "status": "selling",
    "resumed_at": "2025-01-10T18:16:07.004000Z"
}
 

Example response (422, Lot not paused):


{
    "message": "Lot must be in 'paused' status to resume. Current status: selling"
}
 

Request      

POST api/live-auctions/lots/{id}/resume

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live lot state ULID to resume. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Body Parameters

command_id   string  optional    

ULID or UUID for idempotency. Example: 01HFBDNEK3VY2NRXTPAKAZA7M5

Hammer a lot.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/hammer" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"01HFBE78V50NXJ5V8VC1JJ99TZ\",
    \"video_timecode\": \"00:42:19:12\",
    \"metadata\": {
        \"latency_ms\": 18,
        \"user_agent\": \"auctioneer-app\\/2.1.0\"
    }
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/hammer"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "command_id": "01HFBE78V50NXJ5V8VC1JJ99TZ",
    "video_timecode": "00:42:19:12",
    "metadata": {
        "latency_ms": 18,
        "user_agent": "auctioneer-app\/2.1.0"
    }
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Hammer recorded):


{
    "hammer_event_id": "01HFBGVPZFJ56NJC5X3GH51KBE",
    "winner_id": "01HFBEQ2M9GH9T7M5JXX19P9JQ",
    "hammer_price": 525000,
    "hammered_at": "2025-01-10T18:18:44.781000Z"
}
 

Example response (422, No bids):


{
    "message": "Cannot hammer lot with no bids"
}
 

Request      

POST api/live-auctions/lots/{id}/hammer

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live lot state ULID to hammer. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Body Parameters

command_id   string  optional    

ULID/UUID used for idempotency. Example: 01HFBE78V50NXJ5V8VC1JJ99TZ

video_timecode   string  optional    

optional SMPTE/OBS marker recorded with the hammer. Example: 00:42:19:12

metadata   object  optional    

optional Device telemetry (ip_address, latency_ms, user_agent).

Response

Response Fields

hammer_event_id   string     

Immutable hammer event ULID.

hammer_price   integer     

Hammered amount in cents.

Pass a lot (mark as unsold).

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/pass" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"01HFBEZ0FR6V8DVFM5FCMYQ3CE\"
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/pass"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "command_id": "01HFBEZ0FR6V8DVFM5FCMYQ3CE"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Lot passed):


{
    "live_lot_state_id": "01HFAX4YTS4X7N1HCYX0G7RB6W",
    "status": "passed",
    "passed_at": "2025-01-10T18:20:01.502000Z"
}
 

Example response (422, Lot not selling):


{
    "message": "Lot must be in 'selling' status to pass. Current status: paused"
}
 

Request      

POST api/live-auctions/lots/{id}/pass

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live lot state ULID. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Body Parameters

command_id   string  optional    

ULID/UUID for idempotency. Example: 01HFBEZ0FR6V8DVFM5FCMYQ3CE

Jump/reorder a lot (change sequence).

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/jump" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"new_sequence\": 7,
    \"command_id\": \"01HFBR0VVJKJED2J3T0B8PKK10\"
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/jump"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "new_sequence": 7,
    "command_id": "01HFBR0VVJKJED2J3T0B8PKK10"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Sequence updated):


{
    "live_lot_state_id": "01HFAX4YTS4X7N1HCYX0G7RB6W",
    "lot_sequence": 7,
    "old_sequence": 2,
    "status": "standby"
}
 

Example response (422, Invalid input):


{
    "message": "The given data was invalid.",
    "errors": {
        "new_sequence": [
            "new_sequence must be between 1 and 25 for this event."
        ]
    }
}
 

Request      

POST api/live-auctions/lots/{id}/jump

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live lot state ULID to move. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Body Parameters

new_sequence   integer     

Destination sequence number (1-based). Example: 7

command_id   string     

ULID/UUID used for idempotency. Example: 01HFBR0VVJKJED2J3T0B8PKK10

Undo the most recent reversible action for the lot.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/undo" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"command_id\": \"01HFBS0WR23H35RZ8VQ8AT1C0N\"
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/undo"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "command_id": "01HFBS0WR23H35RZ8VQ8AT1C0N"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Undo applied):


{
    "live_lot_state_id": "01HFAX4YTS4X7N1HCYX0G7RB6W",
    "undone_action_type": "lot.hammer",
    "undo": {
        "status": "selling",
        "hammer_event_id": "01HFBGVPZFJ56NJC5X3GH51KBE",
        "refund_initiated": true
    }
}
 

Example response (422, Nothing to undo):


{
    "message": "No undoable actions found for this lot"
}
 

Request      

POST api/live-auctions/lots/{id}/undo

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

Live lot state ULID. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Body Parameters

command_id   string  optional    

ULID/UUID for idempotency. Example: 01HFBS0WR23H35RZ8VQ8AT1C0N

Verify that a bidder's deposit meets the required amount for the lot/event.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/live-auctions/events/01HFAK7VYB0KS3W0ZW7V4GN7K1/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/verify-deposit" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"paddle_number\": \"301\",
    \"user_id\": \"01HFBEQ2M9GH9T7M5JXX19P9JQ\",
    \"required_amount\": 250
}"
const url = new URL(
    "http://localhost:8000/api/live-auctions/events/01HFAK7VYB0KS3W0ZW7V4GN7K1/lots/01HFAX4YTS4X7N1HCYX0G7RB6W/verify-deposit"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "paddle_number": "301",
    "user_id": "01HFBEQ2M9GH9T7M5JXX19P9JQ",
    "required_amount": 250
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, Deposit verified):


{
    "verified": true,
    "deposit_amount": 500,
    "deposit_status": "held",
    "paddle_number": "301"
}
 

Example response (404, Attendee not found):


{
    "message": "Attendee not found for this event"
}
 

Request      

POST api/live-auctions/events/{eventId}/lots/{lotId}/verify-deposit

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

eventId   string     

Live auction event ULID. Example: 01HFAK7VYB0KS3W0ZW7V4GN7K1

lotId   string     

Live lot state ULID scoped to the event. Example: 01HFAX4YTS4X7N1HCYX0G7RB6W

Body Parameters

paddle_number   string  optional    

required_without:user_id Paddle assigned to the attendee. Example: 301

user_id   string  optional    

required_without:paddle_number Bidder ULID if paddle not available. Example: 01HFBEQ2M9GH9T7M5JXX19P9JQ

required_amount   number  optional    

optional Deposit threshold in the event currency. Example: 250

Notifications - Consents

Get notification consents for the authenticated user

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/notification-consents" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/notification-consents"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, success):


{
    "consents": {
        "email": true,
        "sms": false,
        "push": true
    }
}
 

Example response (400, tenant missing):


{
    "message": "Tenant context missing"
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/notification-consents

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Start SMS opt-in verification: send a code to the provided phone number.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/notification-consents/sms/opt-in" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"phone_e164\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/notification-consents/sms/opt-in"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "phone_e164": "ab"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/notification-consents/sms/opt-in

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

phone_e164   string     

Example: ab

Verify SMS opt-in code and mark phone verified + SMS opted-in.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/notification-consents/sms/verify" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"347081\"
}"
const url = new URL(
    "http://localhost:8000/api/notification-consents/sms/verify"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "code": "347081"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/notification-consents/sms/verify

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

code   string     

Must match the regex /^\d{6}$/. Example: 347081

Start WhatsApp opt-in verification: send a code to the provided phone number (via SMS).

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/notification-consents/whatsapp/opt-in" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"phone_e164\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/notification-consents/whatsapp/opt-in"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "phone_e164": "ab"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/notification-consents/whatsapp/opt-in

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

phone_e164   string     

Example: ab

Verify WhatsApp opt-in code and mark phone verified + WhatsApp opted-in.

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/notification-consents/whatsapp/verify" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"code\": \"347081\"
}"
const url = new URL(
    "http://localhost:8000/api/notification-consents/whatsapp/verify"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "code": "347081"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/notification-consents/whatsapp/verify

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

code   string     

Must match the regex /^\d{6}$/. Example: 347081

Notifications - Preferences

Get notification preferences for the authenticated user

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/notification-preferences" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/notification-preferences"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, success):


{
    "preferences": {
        "bidding_enabled": true,
        "email_enabled": true
    }
}
 

Example response (400, tenant missing):


{
    "message": "Tenant context missing"
}
 

Example response (401, unauthenticated):


{
    "message": "Unauthenticated"
}
 

Request      

GET api/notification-preferences

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

PUT api/notification-preferences

requires authentication

Example request:
curl --request PUT \
    "http://localhost:8000/api/notification-preferences" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"bidding_enabled\": true,
    \"messages_enabled\": false,
    \"fulfillment_enabled\": false,
    \"reminders_enabled\": false,
    \"commerce_enabled\": true,
    \"security_enabled\": false,
    \"moderation_enabled\": false,
    \"seller_money_enabled\": false,
    \"admin_enabled\": false,
    \"email_enabled\": false,
    \"in_app_enabled\": true,
    \"push_enabled\": true,
    \"web_push_enabled\": false,
    \"quiet_hours_enabled\": true,
    \"quiet_hours_start\": \"47:08\",
    \"quiet_hours_end\": \"47:08\",
    \"quiet_hours_timezone\": \"Pacific\\/Kiritimati\",
    \"locale\": \"cch_NG\",
    \"timezone\": \"Africa\\/Harare\"
}"
const url = new URL(
    "http://localhost:8000/api/notification-preferences"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "bidding_enabled": true,
    "messages_enabled": false,
    "fulfillment_enabled": false,
    "reminders_enabled": false,
    "commerce_enabled": true,
    "security_enabled": false,
    "moderation_enabled": false,
    "seller_money_enabled": false,
    "admin_enabled": false,
    "email_enabled": false,
    "in_app_enabled": true,
    "push_enabled": true,
    "web_push_enabled": false,
    "quiet_hours_enabled": true,
    "quiet_hours_start": "47:08",
    "quiet_hours_end": "47:08",
    "quiet_hours_timezone": "Pacific\/Kiritimati",
    "locale": "cch_NG",
    "timezone": "Africa\/Harare"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/notification-preferences

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

bidding_enabled   boolean  optional    

Example: true

messages_enabled   boolean  optional    

Example: false

fulfillment_enabled   boolean  optional    

Example: false

reminders_enabled   boolean  optional    

Example: false

commerce_enabled   boolean  optional    

Example: true

security_enabled   boolean  optional    

Example: false

moderation_enabled   boolean  optional    

Example: false

seller_money_enabled   boolean  optional    

Example: false

admin_enabled   boolean  optional    

Example: false

email_enabled   boolean  optional    

Example: false

in_app_enabled   boolean  optional    

Example: true

push_enabled   boolean  optional    

Example: true

web_push_enabled   boolean  optional    

Example: false

quiet_hours_enabled   boolean  optional    

Example: true

quiet_hours_start   string  optional    

Must match the regex /^\d{2}:\d{2}$/. Example: 47:08

quiet_hours_end   string  optional    

Must match the regex /^\d{2}:\d{2}$/. Example: 47:08

quiet_hours_timezone   string  optional    

Must not be greater than 64 characters. Example: Pacific/Kiritimati

locale   string  optional    

Must not be greater than 16 characters. Example: cch_NG

timezone   string  optional    

Must not be greater than 64 characters. Example: Africa/Harare

Notifications - Push Tokens

POST api/push-tokens

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/push-tokens" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"platform\": \"android\",
    \"token\": \"ipzdszigdqrrkthq\"
}"
const url = new URL(
    "http://localhost:8000/api/push-tokens"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "platform": "android",
    "token": "ipzdszigdqrrkthq"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/push-tokens

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

platform   string     

Example: android

Must be one of:
  • ios
  • android
token   string     

Must be at least 10 characters. Must not be greater than 4096 characters. Example: ipzdszigdqrrkthq

DELETE api/push-tokens/{id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/push-tokens/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/push-tokens/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/push-tokens/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the push token. Example: ab

Notifications - Templates (Admin)

List notification templates for the tenant

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/notification-templates?channel=email&locale=en" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/notification-templates"
);

const params = {
    "channel": "email",
    "locale": "en",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, success):


{
    "templates": {
        "data": [],
        "meta": {}
    }
}
 

Example response (400, tenant missing):


{
    "message": "Tenant context missing"
}
 

Request      

GET api/notification-templates

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

channel   string  optional    

Filter by channel. Example: email

locale   string  optional    

Filter by locale. Example: en

Create the first tenant override template (version 1).

requires authentication

If content is omitted, we clone from platform DB defaults (if present) or fall back to TemplateCatalog defaults.

Example request:
curl --request POST \
    "http://localhost:8000/api/notification-templates" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"channel\": \"ipzdszigdqrrkthq\",
    \"template_key\": \"pvviwahfxqnyifdn\",
    \"locale\": \"ar_YE\",
    \"activate\": true,
    \"subject\": \"zclnhfpvmsnpkynl\",
    \"body_text\": \"ab\",
    \"body_html\": \"ab\",
    \"title\": \"pzdszigdqrrkthqp\",
    \"message\": \"ab\",
    \"body\": \"ab\",
    \"provider_template_id\": \"pzdszigdqrrkthqp\",
    \"provider_template_language\": \"vviwahfxqnyifdnn\"
}"
const url = new URL(
    "http://localhost:8000/api/notification-templates"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "channel": "ipzdszigdqrrkthq",
    "template_key": "pvviwahfxqnyifdn",
    "locale": "ar_YE",
    "activate": true,
    "subject": "zclnhfpvmsnpkynl",
    "body_text": "ab",
    "body_html": "ab",
    "title": "pzdszigdqrrkthqp",
    "message": "ab",
    "body": "ab",
    "provider_template_id": "pzdszigdqrrkthqp",
    "provider_template_language": "vviwahfxqnyifdnn"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/notification-templates

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

channel   string     

Must not be greater than 32 characters. Example: ipzdszigdqrrkthq

template_key   string     

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

locale   string  optional    

Must not be greater than 16 characters. Example: ar_YE

activate   boolean  optional    

Example: true

subject   string  optional    

Must not be greater than 255 characters. Example: zclnhfpvmsnpkynl

body_text   string  optional    

Example: ab

body_html   string  optional    

Example: ab

title   string  optional    

Must not be greater than 255 characters. Example: pzdszigdqrrkthqp

message   string  optional    

Example: ab

body   string  optional    

Example: ab

provider_template_id   string  optional    

Must not be greater than 191 characters. Example: pzdszigdqrrkthqp

provider_template_language   string  optional    

Must not be greater than 32 characters. Example: vviwahfxqnyifdnn

Preview a template render with provided vars.

requires authentication

Rejects unknown placeholders (not in allowlist) and rejects unknown vars keys.

Example request:
curl --request POST \
    "http://localhost:8000/api/notification-templates/preview" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"channel\": \"ipzdszigdqrrkthq\",
    \"template_key\": \"pvviwahfxqnyifdn\",
    \"locale\": \"ar_YE\",
    \"subject\": \"zclnhfpvmsnpkynl\",
    \"body_text\": \"ab\",
    \"title\": \"pzdszigdqrrkthqp\",
    \"message\": \"ab\",
    \"body\": \"ab\",
    \"provider_template_id\": \"pzdszigdqrrkthqp\",
    \"provider_template_language\": \"vviwahfxqnyifdnn\"
}"
const url = new URL(
    "http://localhost:8000/api/notification-templates/preview"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "channel": "ipzdszigdqrrkthq",
    "template_key": "pvviwahfxqnyifdn",
    "locale": "ar_YE",
    "subject": "zclnhfpvmsnpkynl",
    "body_text": "ab",
    "title": "pzdszigdqrrkthqp",
    "message": "ab",
    "body": "ab",
    "provider_template_id": "pzdszigdqrrkthqp",
    "provider_template_language": "vviwahfxqnyifdnn"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/notification-templates/preview

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

channel   string     

Must not be greater than 32 characters. Example: ipzdszigdqrrkthq

template_key   string     

Must not be greater than 191 characters. Example: pvviwahfxqnyifdn

locale   string  optional    

Must not be greater than 16 characters. Example: ar_YE

subject   string  optional    

Must not be greater than 255 characters. Example: zclnhfpvmsnpkynl

body_text   string  optional    

Example: ab

title   string  optional    

Must not be greater than 255 characters. Example: pzdszigdqrrkthqp

message   string  optional    

Example: ab

body   string  optional    

Example: ab

provider_template_id   string  optional    

Must not be greater than 191 characters. Example: pzdszigdqrrkthqp

provider_template_language   string  optional    

Must not be greater than 32 characters. Example: vviwahfxqnyifdnn

vars   object  optional    

Get a notification template by ID

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/notification-templates/01JBQW8K7V2XZGHJK5MNPQRSTU" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/notification-templates/01JBQW8K7V2XZGHJK5MNPQRSTU"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, success):


{
    "template": {
        "id": "...",
        "channel": "email",
        "template_key": "order_shipped"
    }
}
 

Example response (400, tenant missing):


{
    "message": "Tenant context missing"
}
 

Example response (404, not found):


{
    "message": "Template not found"
}
 

Request      

GET api/notification-templates/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The template ID. Example: 01JBQW8K7V2XZGHJK5MNPQRSTU

Update content by creating a new version and optionally activating it.

requires authentication

For auditability, we do not mutate the prior version row.

Example request:
curl --request PUT \
    "http://localhost:8000/api/notification-templates/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"is_active\": true,
    \"subject\": \"ipzdszigdqrrkthq\",
    \"body_text\": \"ab\",
    \"body_html\": \"ab\",
    \"title\": \"pzdszigdqrrkthqp\",
    \"message\": \"ab\",
    \"body\": \"ab\",
    \"provider_template_id\": \"pzdszigdqrrkthqp\",
    \"provider_template_language\": \"vviwahfxqnyifdnn\"
}"
const url = new URL(
    "http://localhost:8000/api/notification-templates/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "is_active": true,
    "subject": "ipzdszigdqrrkthq",
    "body_text": "ab",
    "body_html": "ab",
    "title": "pzdszigdqrrkthqp",
    "message": "ab",
    "body": "ab",
    "provider_template_id": "pzdszigdqrrkthqp",
    "provider_template_language": "vviwahfxqnyifdnn"
};

fetch(url, {
    method: "PUT",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PUT api/notification-templates/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the notification template. Example: ab

Body Parameters

is_active   boolean  optional    

Example: true

subject   string  optional    

Must not be greater than 255 characters. Example: ipzdszigdqrrkthq

body_text   string  optional    

Example: ab

body_html   string  optional    

Example: ab

title   string  optional    

Must not be greater than 255 characters. Example: pzdszigdqrrkthqp

message   string  optional    

Example: ab

body   string  optional    

Example: ab

provider_template_id   string  optional    

Must not be greater than 191 characters. Example: pzdszigdqrrkthqp

provider_template_language   string  optional    

Must not be greater than 32 characters. Example: vviwahfxqnyifdnn

Notifications - Web Push Subscriptions

POST api/web-push-subscriptions

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/web-push-subscriptions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"endpoint\": \"ipzdszigdqrrkthq\",
    \"p256dh\": \"pvviwahfxqnyifdn\",
    \"auth\": \"nzclnhfpvmsnpkyn\"
}"
const url = new URL(
    "http://localhost:8000/api/web-push-subscriptions"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "endpoint": "ipzdszigdqrrkthq",
    "p256dh": "pvviwahfxqnyifdn",
    "auth": "nzclnhfpvmsnpkyn"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/web-push-subscriptions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

endpoint   string     

Must not be greater than 4096 characters. Example: ipzdszigdqrrkthq

p256dh   string     

Must not be greater than 4096 characters. Example: pvviwahfxqnyifdn

auth   string     

Must not be greater than 4096 characters. Example: nzclnhfpvmsnpkyn

DELETE api/web-push-subscriptions/{id}

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/web-push-subscriptions/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/web-push-subscriptions/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Request      

DELETE api/web-push-subscriptions/{id}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

id   string     

The ID of the web push subscription. Example: ab

Platform Signup

Self-serve workspace signup endpoints that run on Babylon platform hosts before a tenant exists. Email verification is required before workspace details can be saved, and session-authenticated steps use the X-Platform-Signup-Token header instead of tenant or user authentication.

Start platform signup

Create or refresh a self-serve signup session for a founding admin and send the verification email.

Example request:
curl --request POST \
    "http://localhost:8000/api/platform/signup/start" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"founder_name\": \"Alex Founder\",
    \"founder_email\": \"alex@example.com\",
    \"password\": \"Secret123!\",
    \"terms\": true,
    \"utm_source\": \"homepage\",
    \"utm_medium\": \"paid-social\",
    \"utm_campaign\": \"q2-launch\",
    \"utm_content\": \"hero-cta\",
    \"referrer_url\": \"https:\\/\\/www.google.com\\/\",
    \"password_confirmation\": \"Secret123!\"
}"
const url = new URL(
    "http://localhost:8000/api/platform/signup/start"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "founder_name": "Alex Founder",
    "founder_email": "alex@example.com",
    "password": "Secret123!",
    "terms": true,
    "utm_source": "homepage",
    "utm_medium": "paid-social",
    "utm_campaign": "q2-launch",
    "utm_content": "hero-cta",
    "referrer_url": "https:\/\/www.google.com\/",
    "password_confirmation": "Secret123!"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201):


{
    "session_id": "01JTAW0Y28F6VD9J9W7T7Z2Y5J",
    "session_token": "plain-text-session-token",
    "status": "email_pending",
    "email_verification_required": true,
    "expires_at": "2026-04-29T04:00:00+00:00"
}
 

Request      

POST api/platform/signup/start

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

founder_name   string     

Founding admin name. Example: Alex Founder

founder_email   string     

Founding admin email. Example: alex@example.com

password   string     

Founding admin password. Example: Secret123!

terms   boolean     

Accept the terms and privacy policy. Example: true

utm_source   string  optional    

optional Marketing source. Example: homepage

utm_medium   string  optional    

optional Marketing medium. Example: paid-social

utm_campaign   string  optional    

optional Marketing campaign. Example: q2-launch

utm_content   string  optional    

optional Marketing content identifier. Example: hero-cta

referrer_url   string  optional    

optional Referrer URL. Example: https://www.google.com/

password_confirmation   string     

Password confirmation. Example: Secret123!

Resend verification email

Refresh the verification token for an email-pending signup session and send a new email.

Example request:
curl --request POST \
    "http://localhost:8000/api/platform/signup/verify-email/resend" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"session_id\": \"01JTAW0Y28F6VD9J9W7T7Z2Y5J\"
}"
const url = new URL(
    "http://localhost:8000/api/platform/signup/verify-email/resend"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "session_id": "01JTAW0Y28F6VD9J9W7T7Z2Y5J"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (204, Verification resent):

Empty response
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "session_id": [
            "This signup session is not waiting for email verification."
        ]
    }
}
 

Request      

POST api/platform/signup/verify-email/resend

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

session_id   string     

Signup session id. Example: 01JTAW0Y28F6VD9J9W7T7Z2Y5J

Confirm verification email

Confirm the email-verification token for a signup session and rotate the session token.

Example request:
curl --request POST \
    "http://localhost:8000/api/platform/signup/verify-email/confirm" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"session_id\": \"01JTAW0Y28F6VD9J9W7T7Z2Y5J\",
    \"token\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/platform/signup/verify-email/confirm"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "session_id": "01JTAW0Y28F6VD9J9W7T7Z2Y5J",
    "token": "ab"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "session_id": "01JTAW0Y28F6VD9J9W7T7Z2Y5J",
    "session_token": "rotated-session-token",
    "status": "email_verified"
}
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "token": [
            "The verification link is invalid or has expired."
        ]
    }
}
 

Request      

POST api/platform/signup/verify-email/confirm

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

session_id   string     

Signup session id. Example: 01JTAW0Y28F6VD9J9W7T7Z2Y5J

token   string     

Verification token from the email link. Example: ab

Check workspace URL availability

Check whether a requested workspace slug is valid, already used by a tenant, or temporarily reserved.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/platform/signup/slug-availability?slug=acme-auctions" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/platform/signup/slug-availability"
);

const params = {
    "slug": "acme-auctions",
};
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):


{
    "slug": "acme-auctions",
    "available": true,
    "reason": "available"
}
 

Request      

GET api/platform/signup/slug-availability

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

slug   string     

Workspace slug to check. Example: acme-auctions

Save workspace details

Save marketplace details after email verification and reserve the requested workspace slug.

Send the session token in the X-Platform-Signup-Token header.

Example request:
curl --request PATCH \
    "http://localhost:8000/api/platform/signup/ab" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"marketplace_name\": \"Acme Auction House\",
    \"requested_slug\": \"acme-auctions\",
    \"country_code\": \"GB\",
    \"timezone\": \"Europe\\/London\",
    \"currency\": \"GBP\",
    \"use_case\": \"auctions\",
    \"subscription_plan_id\": \"01JTAW3RWK6EN3BX3TBP1R9X2B\"
}"
const url = new URL(
    "http://localhost:8000/api/platform/signup/ab"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "marketplace_name": "Acme Auction House",
    "requested_slug": "acme-auctions",
    "country_code": "GB",
    "timezone": "Europe\/London",
    "currency": "GBP",
    "use_case": "auctions",
    "subscription_plan_id": "01JTAW3RWK6EN3BX3TBP1R9X2B"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200):


{
    "session_id": "01JTAW0Y28F6VD9J9W7T7Z2Y5J",
    "status": "details_complete",
    "marketplace_name": "Acme Auction House",
    "requested_slug": "acme-auctions",
    "country_code": "GB",
    "timezone": "Europe/London",
    "currency": "GBP",
    "use_case": "auctions",
    "subscription_plan_id": "01JTAW3RWK6EN3BX3TBP1R9X2B"
}
 

Request      

PATCH api/platform/signup/{session_id}

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

session_id   string     

The ID of the session. Example: ab

session   string     

Signup session id. Example: 01JTAW0Y28F6VD9J9W7T7Z2Y5J

Body Parameters

marketplace_name   string     

Workspace display name. Example: Acme Auction House

requested_slug   string     

Workspace slug. Example: acme-auctions

country_code   string  optional    

optional ISO 3166-1 alpha-2 country code. Example: GB

timezone   string     

IANA timezone identifier. Example: Europe/London

currency   string     

Supported currency code. Example: GBP

use_case   string  optional    

optional Marketplace use case. Example: auctions

subscription_plan_id   string     

Subscription plan id. Example: 01JTAW3RWK6EN3BX3TBP1R9X2B

Start tenant provisioning

Queue tenant provisioning for a verified signup session. Repeating the request after provisioning starts is safe.

Send the session token in the X-Platform-Signup-Token header.

Example request:
curl --request POST \
    "http://localhost:8000/api/platform/signup/ab/provision" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/platform/signup/ab/provision"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (202):


{
    "status": "provisioning"
}
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "session": [
            "Complete the required signup steps before provisioning."
        ]
    }
}
 

Request      

POST api/platform/signup/{session_id}/provision

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

session_id   string     

The ID of the session. Example: ab

session   string     

Signup session id. Example: 01JTAW0Y28F6VD9J9W7T7Z2Y5J

Abandon signup session

Expire a tenantless signup session and release any held workspace slug so the founder can restart cleanly.

Send the session token in the X-Platform-Signup-Token header.

Example request:
curl --request POST \
    "http://localhost:8000/api/platform/signup/ab/abandon" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/platform/signup/ab/abandon"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (204, Session abandoned):

Empty response
 

Example response (422):


{
    "message": "The given data was invalid.",
    "errors": {
        "session": [
            "This signup session can no longer be restarted automatically."
        ]
    }
}
 

Request      

POST api/platform/signup/{session_id}/abandon

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

session_id   string     

The ID of the session. Example: ab

session   string     

Signup session id. Example: 01JTAW0Y28F6VD9J9W7T7Z2Y5J

Get provisioning status

Poll the current state of a self-serve signup session and receive admin/storefront URLs after provisioning.

Send the session token in the X-Platform-Signup-Token header.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/platform/signup/ab/status" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/platform/signup/ab/status"
);

const headers = {
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200):


{
    "status": "provisioned",
    "last_error_code": null,
    "last_error_message": null,
    "tenant": {
        "id": "01JTAW6DMN8Q0R0C4FQ97HZF6P",
        "name": "Acme Auction House",
        "slug": "acme-auctions"
    },
    "urls": {
        "admin_login_url": "https://admin.acme-auctions.babylon.host/admin/login?email=alex%40example.com",
        "storefront_url": "https://acme-auctions.babylon.host/"
    },
    "poll_interval_ms": 2000
}
 

Request      

GET api/platform/signup/{session_id}/status

Headers

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

session_id   string     

The ID of the session. Example: ab

session   string     

Signup session id. Example: 01JTAW0Y28F6VD9J9W7T7Z2Y5J

Supply

Get supply scorecard

requires authentication

Returns a single data object including kpis, pipeline, work_queues, stage_performance, crm_workload, commission_forecast, and pipeline_target_gap. If start_date / end_date are omitted, the period defaults to approximately the last 30 days (see implementation).

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/scorecard?start_date=2026-03-01&end_date=2026-03-31" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"start_date\": \"2026-05-04T20:47:20\",
    \"end_date\": \"2069-05-25\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/scorecard"
);

const params = {
    "start_date": "2026-03-01",
    "end_date": "2026-03-31",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "start_date": "2026-05-04T20:47:20",
    "end_date": "2069-05-25"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (200, success):


{
    "data": {
        "tenant_id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "period_start": "2026-03-01T00:00:00+00:00",
        "period_end": "2026-03-31T23:59:59+00:00",
        "crm_workload": {
            "open_next_actions_total": 0,
            "open_next_actions_overdue": 0,
            "open_next_actions_due_today": 0,
            "completed_next_actions_this_week": 0
        },
        "commission_forecast": {
            "items_count": 0,
            "currency": "GBP"
        },
        "pipeline_target_gap": {
            "target_configured": false,
            "monthly_seller_commission_target_minor": null,
            "base_forecast_seller_commission_minor": 0,
            "gap_to_target_seller_commission_minor": null,
            "percent_of_monthly_target": null,
            "currency": "GBP"
        }
    }
}
 

Request      

GET api/supply/scorecard

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

start_date   string  optional    

Start of the scorecard period (inclusive, start of day). Example: 2026-03-01

end_date   string  optional    

End of the scorecard period (inclusive, end of day). Example: 2026-03-31

Body Parameters

start_date   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

end_date   string  optional    

Must be a valid date. Must be a date after or equal to start_date. Example: 2069-05-25

List condition reports

requires authentication

Paginated list for the current tenant, optionally filtered by status, consignment item, or intake shipment.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/intake/condition-reports?limit=11&status=ab&consignment_item_id=ab&intake_shipment_id=ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"limit\": 16,
    \"status\": \"completed\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/intake/condition-reports"
);

const params = {
    "limit": "11",
    "status": "ab",
    "consignment_item_id": "ab",
    "intake_shipment_id": "ab",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "limit": 16,
    "status": "completed"
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: f048ee72-d28e-4851-8a8b-5b5c14d64c8f
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/intake/condition-reports

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

limit   integer  optional    

sometimes Page size (default 25). Example: 11

status   string  optional    

sometimes One of draft, completed, attested. Example: ab

consignment_item_id   string  optional    

sometimes ULID of the consignment item. Example: ab

intake_shipment_id   string  optional    

sometimes ULID of the intake shipment. Example: ab

Body Parameters

limit   integer  optional    

Must be at least 1. Must not be greater than 200. Example: 16

status   string  optional    

Example: completed

Must be one of:
  • draft
  • completed
  • attested
consignment_item_id   string  optional    
intake_shipment_id   string  optional    

Create a condition report

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/intake/condition-reports" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"consignment_item_id\": \"ab\",
    \"intake_shipment_id\": \"ab\",
    \"media_ids\": [
        \"ab\"
    ],
    \"status\": \"ab\",
    \"source_type\": \"pzdszigdqrrkthqp\",
    \"source_ref\": \"vviwahfxqnyifdnn\",
    \"external_owner_ref\": \"zclnhfpvmsnpkynl\",
    \"provider_name\": \"nbgjdpzixzkhgmlx\",
    \"summary\": \"ab\",
    \"notes\": \"ab\",
    \"grade\": \"ab\",
    \"structured_fields\": [],
    \"findings\": [],
    \"attestation_type\": \"ab\",
    \"attestation_ref\": \"ab\",
    \"metadata\": []
}"
const url = new URL(
    "http://localhost:8000/api/supply/intake/condition-reports"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "consignment_item_id": "ab",
    "intake_shipment_id": "ab",
    "media_ids": [
        "ab"
    ],
    "status": "ab",
    "source_type": "pzdszigdqrrkthqp",
    "source_ref": "vviwahfxqnyifdnn",
    "external_owner_ref": "zclnhfpvmsnpkynl",
    "provider_name": "nbgjdpzixzkhgmlx",
    "summary": "ab",
    "notes": "ab",
    "grade": "ab",
    "structured_fields": [],
    "findings": [],
    "attestation_type": "ab",
    "attestation_ref": "ab",
    "metadata": []
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, created):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "status": "draft",
        "notes": null,
        "structured_fields": [],
        "metadata": []
    }
}
 

Request      

POST api/supply/intake/condition-reports

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

consignment_item_id   string     

ULID of the consignment item. Example: ab

intake_shipment_id   string  optional    

optional ULID when linking to an intake shipment that includes the item. Example: ab

media_ids   string[]  optional    

optional Listing media ULIDs (tenant-scoped, listing_id null). Same storage as listing uploads.

status   string  optional    

optional draft, completed, or attested (default follows application rules). Example: ab

source_type   string  optional    

Must not be greater than 64 characters. Example: pzdszigdqrrkthqp

source_ref   string  optional    

Must not be greater than 191 characters. Example: vviwahfxqnyifdnn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: zclnhfpvmsnpkynl

provider_name   string  optional    

Must not be greater than 191 characters. Example: nbgjdpzixzkhgmlx

summary   string  optional    

optional Short headline summary. Example: ab

notes   string  optional    

optional Free-text operator notes (also exposed on the listing draft as auctioneer notes when not overridden). Example: ab

grade   string  optional    

optional Short grade label. Example: ab

structured_fields   object  optional    

optional Key-value custom attributes keyed by category attribute slug (inherits from the item category).

findings   object  optional    

optional Key-value findings map.

attestation_type   string  optional    

optional Required when status is attested. Example: ab

attestation_ref   string  optional    

optional Required when status is attested. Example: ab

metadata   object  optional    

optional May include additional_details keyed by category section slug (same shape as listing additional details).

Get a condition report

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/intake/condition-reports/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/intake/condition-reports/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: ecce41e3-5569-48c0-82c1-7bbf34eb3cde
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/intake/condition-reports/{conditionReport}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

conditionReport   string     

Condition report ULID Example: ab

Update a condition report

requires authentication

When media_ids is present, the pivot is replaced with the given ordered set.

Example request:
curl --request PATCH \
    "http://localhost:8000/api/supply/intake/condition-reports/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"media_ids\": [
        \"ab\"
    ],
    \"status\": \"attested\",
    \"source_type\": \"pzdszigdqrrkthqp\",
    \"source_ref\": \"vviwahfxqnyifdnn\",
    \"external_owner_ref\": \"zclnhfpvmsnpkynl\",
    \"provider_name\": \"nbgjdpzixzkhgmlx\",
    \"summary\": \"fmavknkckbhgmqye\",
    \"notes\": \"ab\",
    \"grade\": \"aveihafwfciilryu\",
    \"structured_fields\": [],
    \"attestation_type\": \"bypsenryjduorkex\",
    \"attestation_ref\": \"ffnsuubyteydjena\",
    \"metadata\": []
}"
const url = new URL(
    "http://localhost:8000/api/supply/intake/condition-reports/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "media_ids": [
        "ab"
    ],
    "status": "attested",
    "source_type": "pzdszigdqrrkthqp",
    "source_ref": "vviwahfxqnyifdnn",
    "external_owner_ref": "zclnhfpvmsnpkynl",
    "provider_name": "nbgjdpzixzkhgmlx",
    "summary": "fmavknkckbhgmqye",
    "notes": "ab",
    "grade": "aveihafwfciilryu",
    "structured_fields": [],
    "attestation_type": "bypsenryjduorkex",
    "attestation_ref": "ffnsuubyteydjena",
    "metadata": []
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/supply/intake/condition-reports/{conditionReport}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

conditionReport   string     

Condition report ULID Example: ab

Body Parameters

consignment_item_id   string  optional    

The id of an existing record in the consignment_items table.

intake_shipment_id   string  optional    

The id of an existing record in the intake_shipments table.

media_ids   string[]  optional    

optional Ordered listing media ULIDs to attach.

status   string  optional    

Example: attested

Must be one of:
  • draft
  • completed
  • attested
source_type   string  optional    

Must not be greater than 64 characters. Example: pzdszigdqrrkthqp

source_ref   string  optional    

Must not be greater than 191 characters. Example: vviwahfxqnyifdnn

external_owner_ref   string  optional    

Must not be greater than 191 characters. Example: zclnhfpvmsnpkynl

provider_name   string  optional    

Must not be greater than 191 characters. Example: nbgjdpzixzkhgmlx

summary   string  optional    

Must not be greater than 255 characters. Example: fmavknkckbhgmqye

notes   string  optional    

optional Free-text notes. Example: ab

grade   string  optional    

Must not be greater than 64 characters. Example: aveihafwfciilryu

structured_fields   object  optional    

optional Custom attributes keyed by slug.

findings   object  optional    
attestation_type   string  optional    

Must not be greater than 64 characters. Example: bypsenryjduorkex

attestation_ref   string  optional    

Must not be greater than 191 characters. Example: ffnsuubyteydjena

metadata   object  optional    

optional Include additional_details for category sections.

List next actions

requires authentication

Paginated list filtered by subject, status, owner, overdue, or due_today.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/next-actions?subject_type=ab&status=ab&owner_user_id=ab&overdue=&due_today=&per_page=25" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"subject_type\": \"item\",
    \"status\": \"cancelled\",
    \"overdue\": false,
    \"due_today\": true,
    \"per_page\": 16
}"
const url = new URL(
    "http://localhost:8000/api/supply/next-actions"
);

const params = {
    "subject_type": "ab",
    "status": "ab",
    "owner_user_id": "ab",
    "overdue": "0",
    "due_today": "0",
    "per_page": "25",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "subject_type": "item",
    "status": "cancelled",
    "overdue": false,
    "due_today": true,
    "per_page": 16
};

fetch(url, {
    method: "GET",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 62854d60-3bc2-40cc-9efe-0f7a6ef69708
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/next-actions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

subject_type   string  optional    

sometimes Filter by subject: consignment_lead, consignment_item, etc. Example: ab

status   string  optional    

sometimes open or completed Example: ab

owner_user_id   string  optional    

sometimes ULID of assignee Example: ab

overdue   boolean  optional    

sometimes When true, only open actions past due_at Example: false

due_today   boolean  optional    

sometimes When true, only open actions due today Example: false

per_page   integer  optional    

sometimes 1-100, default 25. Example: 25

Body Parameters

subject_type   string  optional    

Example: item

Must be one of:
  • lead
  • item
status   string  optional    

Example: cancelled

Must be one of:
  • open
  • completed
  • cancelled
owner_user_id   string  optional    

The id of an existing record in the users table.

overdue   boolean  optional    

Example: false

due_today   boolean  optional    

Example: true

per_page   integer  optional    

Must be at least 1. Must not be greater than 100. Example: 16

Create a next action

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/next-actions" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"subject_type\": \"ab\",
    \"subject_id\": \"ab\",
    \"action_type\": \"ab\",
    \"owner_user_id\": \"ab\",
    \"due_at\": \"ab\",
    \"notes\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/next-actions"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "subject_type": "ab",
    "subject_id": "ab",
    "action_type": "ab",
    "owner_user_id": "ab",
    "due_at": "ab",
    "notes": "ab"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Example response (201, created):


{
    "data": {
        "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
        "status": "open"
    }
}
 

Request      

POST api/supply/next-actions

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Body Parameters

subject_type   string     

Example: ab

subject_id   string     

ULID Example: ab

action_type   string     

Example: ab

owner_user_id   string  optional    

optional ULID Example: ab

due_at   string  optional    

optional ISO 8601 datetime Example: ab

notes   string  optional    

optional Example: ab

metadata   object  optional    

Get a next action

requires authentication

Example request:
curl --request GET \
    --get "http://localhost:8000/api/supply/next-actions/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/next-actions/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (404):

Show headers
cache-control: no-cache, private
content-type: application/json
x-request-id: 23840ebb-73cc-4e3c-bd96-78612ac2901b
 

{
    "error": {
        "code": "unknown_host",
        "message": "Unknown host."
    }
}
 

Request      

GET api/supply/next-actions/{supplyNextAction}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplyNextAction   string     

Next action ULID Example: ab

Update a next action

requires authentication

Example request:
curl --request PATCH \
    "http://localhost:8000/api/supply/next-actions/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"action_type\": \"callback\",
    \"due_at\": \"2026-05-04T20:47:20\",
    \"notes\": \"ipzdszigdqrrkthq\",
    \"status\": \"open\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/next-actions/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "action_type": "callback",
    "due_at": "2026-05-04T20:47:20",
    "notes": "ipzdszigdqrrkthq",
    "status": "open"
};

fetch(url, {
    method: "PATCH",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

PATCH api/supply/next-actions/{supplyNextAction}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplyNextAction   string     

Next action ULID Example: ab

Body Parameters

action_type   string  optional    

Example: callback

Must be one of:
  • callback
  • email
  • query
  • other
owner_user_id   string  optional    

The id of an existing record in the users table.

due_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

notes   string  optional    

Must not be greater than 5000 characters. Example: ipzdszigdqrrkthq

status   string  optional    

Example: open

Must be one of:
  • open
  • completed
  • cancelled
metadata   object  optional    

Complete a next action

requires authentication

Marks the action completed (body fields optional for notes/metadata updates on complete).

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/next-actions/ab/complete" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"action_type\": \"other\",
    \"due_at\": \"2026-05-04T20:47:20\",
    \"notes\": \"ipzdszigdqrrkthq\",
    \"status\": \"completed\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/next-actions/ab/complete"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "action_type": "other",
    "due_at": "2026-05-04T20:47:20",
    "notes": "ipzdszigdqrrkthq",
    "status": "completed"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/supply/next-actions/{supplyNextAction}/complete

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplyNextAction   string     

Next action ULID Example: ab

Body Parameters

action_type   string  optional    

Example: other

Must be one of:
  • callback
  • email
  • query
  • other
owner_user_id   string  optional    

The id of an existing record in the users table.

due_at   string  optional    

Must be a valid date. Example: 2026-05-04T20:47:20

notes   string  optional    

Must not be greater than 5000 characters. Example: ipzdszigdqrrkthq

status   string  optional    

Example: completed

Must be one of:
  • open
  • completed
  • cancelled
metadata   object  optional    

Delete a next action

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/supply/next-actions/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/supply/next-actions/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (204, deleted):

Empty response
 

Request      

DELETE api/supply/next-actions/{supplyNextAction}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

supplyNextAction   string     

Next action ULID Example: ab

Create listing draft from consignment item

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/supply/items/ab/listing-draft" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"title\": \"ab\",
    \"description\": \"Est enim iusto corrupti sequi aut eum harum.\",
    \"category_id\": \"ab\",
    \"condition\": \"good\",
    \"listing_type\": \"ab\",
    \"starting_bid\": 29,
    \"reserve_price\": 97,
    \"buy_now_price\": 99,
    \"fixed_price_amount\": 100,
    \"quantity\": 70,
    \"allow_offers\": true,
    \"min_offer_percent\": 2,
    \"auto_accept_percent\": 2,
    \"estimate_low\": 52,
    \"estimate_high\": 38,
    \"bid_increment\": 95,
    \"start_time\": \"2069-05-25\",
    \"end_time\": \"2069-05-25\",
    \"item_location\": \"dszigdqrrkthqpvv\",
    \"shipping_cost\": 8,
    \"is_local_pickup\": true,
    \"is_international_shipping\": true,
    \"currency\": \"wah\",
    \"tax_status\": \"tax_exempt\",
    \"custom_attributes\": [
        \"ab\"
    ],
    \"tags\": [
        \"pzdszigdqrrkthqp\"
    ],
    \"media_ids\": [
        \"ab\"
    ],
    \"price_display_mode\": \"minor_units\",
    \"auctioneer_notes\": \"ab\"
}"
const url = new URL(
    "http://localhost:8000/api/supply/items/ab/listing-draft"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

let body = {
    "title": "ab",
    "description": "Est enim iusto corrupti sequi aut eum harum.",
    "category_id": "ab",
    "condition": "good",
    "listing_type": "ab",
    "starting_bid": 29,
    "reserve_price": 97,
    "buy_now_price": 99,
    "fixed_price_amount": 100,
    "quantity": 70,
    "allow_offers": true,
    "min_offer_percent": 2,
    "auto_accept_percent": 2,
    "estimate_low": 52,
    "estimate_high": 38,
    "bid_increment": 95,
    "start_time": "2069-05-25",
    "end_time": "2069-05-25",
    "item_location": "dszigdqrrkthqpvv",
    "shipping_cost": 8,
    "is_local_pickup": true,
    "is_international_shipping": true,
    "currency": "wah",
    "tax_status": "tax_exempt",
    "custom_attributes": [
        "ab"
    ],
    "tags": [
        "pzdszigdqrrkthqp"
    ],
    "media_ids": [
        "ab"
    ],
    "price_display_mode": "minor_units",
    "auctioneer_notes": "ab"
};

fetch(url, {
    method: "POST",
    headers,
    body: JSON.stringify(body),
}).then(response => response.json());

Request      

POST api/supply/items/{consignmentItem}/listing-draft

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

consignmentItem   string     

Consignment item ULID Example: ab

Body Parameters

title   string  optional    

optional Listing title (defaults from item / valuation snapshot). Example: ab

description   string  optional    

Must not be greater than 10000 characters. Example: Est enim iusto corrupti sequi aut eum harum.

category_id   string  optional    

optional ULID (defaults from item). Example: ab

condition   string  optional    

Example: good

Must be one of:
  • new
  • like_new
  • excellent
  • good
  • fair
  • poor
  • for_parts
listing_type   string  optional    

optional Auction or sale format. Example: ab

starting_bid   integer  optional    

Must be at least 0. Example: 29

reserve_price   integer  optional    

Must be at least 100. Example: 97

buy_now_price   integer  optional    

Must be at least 100. Example: 99

fixed_price_amount   integer  optional    

Must be at least 100. Example: 100

quantity   integer  optional    

Must be at least 1. Example: 70

allow_offers   boolean  optional    

Example: true

min_offer_percent   integer  optional    

Must be between 1 and 100. Example: 2

auto_accept_percent   integer  optional    

Must be between 1 and 100. Example: 2

estimate_low   integer  optional    

Must be at least 0. Example: 52

estimate_high   integer  optional    

Must be at least 0. Example: 38

bid_increment   integer  optional    

Must be at least 100. Example: 95

start_time   string  optional    

Must be a valid date. Must be a date after now. Example: 2069-05-25

end_time   string  optional    

Must be a valid date. Must be a date after start_time. Example: 2069-05-25

item_location   string  optional    

Must not be greater than 255 characters. Example: dszigdqrrkthqpvv

shipping_cost   integer  optional    

Must be at least 0. Example: 8

is_local_pickup   boolean  optional    

Example: true

is_international_shipping   boolean  optional    

Example: true

currency   string  optional    

Must be 3 characters. Example: wah

tax_status   string  optional    

Example: tax_exempt

Must be one of:
  • taxable
  • tax_exempt
  • margin_scheme
custom_attributes   string[]     
additional_details   object  optional    
tags   string[]     

Must not be greater than 50 characters.

media_ids   string[]  optional    

optional Explicit listing media ULIDs; when omitted, inherits from the latest condition report when possible.

valuation_case_id   string  optional    

The id of an existing record in the valuation_cases table.

intake_shipment_id   string  optional    

The id of an existing record in the intake_shipments table.

condition_report_id   string  optional    

The id of an existing record in the condition_reports table.

price_display_mode   string  optional    

Example: minor_units

Must be one of:
  • inherit
  • minor_units
  • whole_units
auctioneer_notes   string  optional    

optional Overrides condition report notes on the draft. Example: ab

Watchlist

Get user's watchlist

requires authentication

Returns paginated list of listings in the user's watchlist.

Example request:
curl --request GET \
    --get "http://localhost:8000/api/watchlist?page=1" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/watchlist"
);

const params = {
    "page": "1",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());

Example response (200, success):


{
    "data": [
        {
            "id": "01JBQW8K7V2XZGHJK5MNPQRSTU",
            "title": "Vintage Camera",
            "current_bid": 15000
        }
    ],
    "links": {},
    "meta": {}
}
 

Request      

GET api/watchlist

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

Query Parameters

page   integer  optional    

Page number. Example: 1

Add listing to watchlist

requires authentication

Example request:
curl --request POST \
    "http://localhost:8000/api/watchlist/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/watchlist/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "POST",
    headers,
}).then(response => response.json());

Example response (201, success):


{
    "message": "Listing added to watchlist"
}
 

Example response (404, listing not found):


{
    "message": "Listing not found"
}
 

Request      

POST api/watchlist/{listing}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing   string     

Example: ab

Remove listing from watchlist

requires authentication

Example request:
curl --request DELETE \
    "http://localhost:8000/api/watchlist/ab" \
    --header "Authorization: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
const url = new URL(
    "http://localhost:8000/api/watchlist/ab"
);

const headers = {
    "Authorization": "Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE",
    "Content-Type": "application/json",
    "Accept": "application/json",
};

fetch(url, {
    method: "DELETE",
    headers,
}).then(response => response.json());

Example response (200, success):


{
    "message": "Listing removed from watchlist"
}
 

Request      

DELETE api/watchlist/{listing}

Headers

Authorization        

Example: Bearer YOUR_API_KEY_OR_SANCTUM_TOKEN_HERE

Content-Type        

Example: application/json

Accept        

Example: application/json

URL Parameters

listing   string     

Example: ab