Developers
API Docs
Authentication
Bearer tokens, scoped per key.
Mint a key under Developers → API keys . Pick the abilities at creation — for example, a read-only key for analytics, a write-only key for fulfilment. Revoke instantly without touching the others.
Live key
sx_live_…
Real payouts. Real wallets. Real settlement.
Test key
sx_test_…
Sandbox — no on-chain motion, same response shapes.
Errors
RFC 7807. Always JSON.
Every non-2xx returns a structured body — never bare HTML. Branch on the type slug.
400
invalid_request
Bad JSON or missing parameter.
401
unauthenticated
Missing or invalid bearer token.
403
forbidden_scope
Key is valid but lacks the ability for this endpoint.
404
not_found
The resource doesn't exist or isn't yours.
409
conflict
Idempotency key already used with a different payload.
422
unprocessable
Validation failed. Body has an `errors` map per-field.
429
rate_limited
You're going too fast. `Retry-After` is set.
500
server_error
Our side broke. Includes a `trace_id` for support.
Rate limits & idempotency
Sane defaults, set in stone.
Rate limits
120 req/min on writes, 600 req/min on reads. Sustained bursts back-pressure with Retry-After .
Idempotency
Send Idempotency-Key on every write that moves money. Same key + same body returns the same response, no duplicate side-effect.
Parameters
limit
optional
integer
query
How many items to return per page.
values: 1 – 100
default: 25
cursor
optional
string
query
Opaque pagination cursor from a previous response.
status
optional
enum
query
Filter by lifecycle status.
values: active | archived | draft
type
optional
enum
query
Filter by product kind.
values: license_key | account | file_download | physical | subscription
Example response
200
{
"object": "list",
"has_more": false,
"next_cursor": null,
"data": [
{
"id": "prod_01J2PVQR41",
"name": "Adobe Creative Cloud Key",
"type": "license_key",
"price_cents": 12900,
"currency": "USD",
"stock": 47,
"status": "active"
},
{
"id": "prod_01J2PVQS6X",
"name": "VIP Discord Role",
"type": "account",
"price_cents": 999,
"currency": "USD",
"stock": null,
"status": "active"
}
]
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
name
required
string
body
Display name shown on the storefront.
type
required
enum
body
Decides which delivery strategy fires on payment.
values: license_key | account | file_download | dynamic | physical | subscription
price_cents
required
integer
body
Price in the smallest unit of `currency`.
values: ≥ 0
currency
required
string
body
Three-letter fiat currency code.
values: ISO-4217 — e.g. USD, EUR, GBP
description
optional
string
body
Markdown-flavoured description body.
stock
optional
integer
body
`null` = unlimited / pool-driven.
values: ≥ 0 or null
Example response
201
{
"id": "prod_01J2PVQR41",
"name": "Adobe Creative Cloud Key",
"slug": "adobe-creative-cloud-key",
"type": "license_key",
"price_cents": 12900,
"currency": "USD",
"stock": 0,
"status": "active",
"created_at": "2026-05-26T07:18:03Z"
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"id": "prod_01J2PVQR41",
"name": "Adobe Creative Cloud Key",
"slug": "adobe-creative-cloud-key",
"type": "license_key",
"price_cents": 12900,
"currency": "USD",
"stock": 47,
"status": "active",
"created_at": "2026-05-26T07:18:03Z"
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
id
required
string
path
The product identifier.
name
optional
string
body
New display name.
price_cents
optional
integer
body
New price in smallest currency unit.
values: ≥ 0
status
optional
enum
body
Lifecycle status.
values: active | archived | draft
description
optional
string
body
Markdown body.
Example response
200
{
"id": "prod_01J2PVQR41",
"price_cents": 9900,
"status": "active",
"updated_at": "2026-05-26T07:32:18Z"
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"id": "prod_01J2PVQR41",
"deleted": true,
"archived_at": "2026-05-26T07:36:51Z"
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
201
{
"imported": 3,
"duplicates": 0,
"stock_after": 50
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
limit
optional
integer
query
Items per page.
values: 1 – 100
default: 25
status
optional
enum
query
Filter by order status.
values: pending | awaiting_payment | paid | delivering | completed | failed | refunded
from
optional
string
query
Created at or after this date.
values: ISO-8601 date
to
optional
string
query
Created at or before this date.
values: ISO-8601 date
Example response
200
{
"object": "list",
"has_more": false,
"next_cursor": null,
"data": [
{
"id": "ord_01J2PVP4XJ",
"status": "paid",
"total_cents": 4900,
"currency": "USD",
"customer_email": "[email protected] ",
"paid_at": "2026-05-26T07:14:22Z"
},
{
"id": "ord_01J2PVN29D",
"status": "paid",
"total_cents": 12900,
"currency": "USD",
"customer_email": "[email protected] ",
"paid_at": "2026-05-26T07:09:58Z"
}
]
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"id": "ord_01J2PVP4XJ",
"status": "paid",
"total_cents": 4900,
"currency": "USD",
"customer_email": "[email protected] ",
"paid_at": "2026-05-26T07:14:22Z",
"payment": {
"provider": "blockpn",
"chain": "tron",
"asset": "USDT",
"tx_hash": "0xae9c2\u2026"
},
"items": [
{
"product": "Adobe Creative Cloud Key",
"qty": 1,
"subtotal_cents": 4900
}
],
"delivery": {
"kind": "license_key",
"state": "delivered",
"delivered_at": "2026-05-26T07:14:24Z"
}
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
uuid
required
string
path
The order identifier.
amount_cents
optional
integer
body
Defaults to the full order total.
values: > 0 and ≤ order total
reason
optional
enum
body
For your accounting + the buyer receipt.
values: requested_by_buyer | duplicate | fraud | other
note
optional
string
body
Internal note attached to the refund record.
Example response
200
{
"id": "rf_01J2PVS78B",
"order_id": "ord_01J2PVP4XJ",
"status": "processing",
"amount_cents": 4900,
"reason": "requested_by_buyer",
"destination_tx": null,
"created_at": "2026-05-26T07:22:51Z"
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"sent_at": "2026-05-26T07:41:09Z",
"recipient": "[email protected] ",
"delivery_kind": "license_key"
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
limit
optional
integer
query
Items per page.
values: 1 – 100
default: 25
cursor
optional
string
query
Opaque pagination cursor.
Example response
200
{
"object": "list",
"has_more": false,
"data": [
{
"id": "cus_01J2PR9M5C",
"email": "[email protected] ",
"orders_count": 8,
"lifetime_cents": 103200
},
{
"id": "cus_01J2PRA1FE",
"email": "[email protected] ",
"orders_count": 3,
"lifetime_cents": 149700
}
]
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"id": "cus_01J2PR9M5C",
"email": "[email protected] ",
"orders_count": 8,
"lifetime_cents": 103200,
"first_seen_at": "2026-04-12T09:21:55Z",
"last_seen_at": "2026-05-26T07:14:22Z",
"orders": [
{
"id": "ord_01J2PVP4XJ",
"total_cents": 4900,
"paid_at": "2026-05-26T07:14:22Z"
},
{
"id": "ord_01J0HE83KW",
"total_cents": 12900,
"paid_at": "2026-05-19T22:01:08Z"
}
]
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
limit
optional
integer
query
Items per page.
values: 1 – 100
default: 25
status
optional
enum
query
Filter by payout status.
values: queued | broadcast | confirmed | failed
Example response
200
{
"object": "list",
"has_more": false,
"data": [
{
"id": "po_01J2PVZ8KK",
"status": "confirmed",
"chain": "tron",
"asset": "USDT",
"amount_cents": 25000,
"tx_hash": "0xfa3b\u2026",
"confirmed_at": "2026-05-26T08:01:11Z"
}
]
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
chain
required
enum
body
Network to broadcast on.
values: tron | base | ethereum | bitcoin | solana | polygon | bsc
asset
required
string
body
Asset symbol on that chain.
values: USDT | USDC | BTC | ETH | SOL | …
amount_cents
required
integer
body
Amount in fiat-cents (we convert on the way out).
values: > 0
destination_address
required
string
body
On-chain address to send to.
memo
optional
string
body
Optional memo/tag for chains that need one.
Example response
201
{
"id": "po_01J2PW01GG",
"status": "queued",
"chain": "tron",
"asset": "USDT",
"amount_cents": 25000,
"destination_address": "T...",
"created_at": "2026-05-26T08:03:47Z"
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"object": "list",
"data": [
{
"id": "wh_01J2PTR7QW",
"url": "https://your.app/sellix/webhook",
"events": [
"order.paid",
"order.refunded"
],
"status": "active"
}
]
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
url
required
string
body
HTTPS URL we POST to.
events
required
array<string>
body
Events to subscribe to. Use `*` for all.
values: order.paid | order.refunded | order.delivered | order.failed | product.* | payout.* | customer.created
description
optional
string
body
Human-readable note. Shown in the dashboard.
Example response
201
{
"id": "wh_01J2PVT0KZ",
"url": "https://your.app/sellix/webhook",
"events": [
"order.paid",
"order.refunded"
],
"signing_secret": "whsec_29Ax\u2026",
"status": "active",
"created_at": "2026-05-26T08:08:14Z"
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"delivered": true,
"response_code": 200,
"delivery_ms": 184
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"id": "wh_01J2PVT0KZ",
"deleted": true
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"object": "list",
"data": [
{
"id": "apik_01J2PR\u2026",
"name": "Fulfilment worker",
"abilities": [
"orders:read",
"orders:write"
],
"last_used_at": "2026-05-26T08:11:00Z"
},
{
"id": "apik_01J2PS\u2026",
"name": "Analytics dash",
"abilities": [
"orders:read",
"customers:read"
],
"last_used_at": null
}
]
}
Try it — runs in your browser against a sandbox mock.
Send request
Parameters
name
required
string
body
Human-readable label.
abilities
required
array<string>
body
Permission set this key grants.
values: orders:read | orders:write | products:read | products:write | customers:read | payouts:read | payouts:write | webhooks:read | webhooks:write
mode
optional
enum
body
Live or sandbox.
values: live | test
default: live
Example response
201
{
"id": "apik_01J2PW2F88",
"name": "Fulfilment worker",
"abilities": [
"orders:read",
"orders:write"
],
"secret": "sx_live_9kzQ7xV9c4fT2mN8rY",
"created_at": "2026-05-26T08:15:31Z"
}
Try it — runs in your browser against a sandbox mock.
Send request
Example response
200
{
"id": "apik_01J2PW2F88",
"revoked": true
}
Try it — runs in your browser against a sandbox mock.
Send request
Keep going
More for builders