Construir sobre Sellix.

Uno JSON API. La misma superficie que usa el tablero. Acuña un token de portador con alcance, elige un punto final a continuación y presiona el botón Pruébalo.

api.sellix.gg/v1 v1 estable JSON · UTF-8
Autenticación

Tokens al portador, con alcance por clave.

Crea una clave en Desarrolladores -> API claves. Elija las capacidades en el momento de la creación; por ejemplo, una clave de solo lectura para análisis, una clave de solo escritura para cumplimiento. Revocar instantáneamente sin tocar a los demás.

clave en vivo
sx_live_…

Pagos reales. Carteras reales. Acuerdo real.

clave de prueba
sx_test_…

Sandbox: sin movimiento en cadena, mismas formas de respuesta.

Errores

RFC 7807. Siempre JSON.

Cada uno que no sea 2xx devuelve un cuerpo estructurado, nunca HTML simple. Bifurcación en la babosa type.

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.
Límites de tarifas e idempotencia

Valores predeterminados sensatos, grabados en piedra.

Límites de tarifas

120 req/min en escrituras, 600 req/min en lecturas. Las ráfagas sostenidas reciben back-pressure con Retry-After.

Idempotencia

Envíe Idempotency-Key en cada escritura que mueva dinero. La misma clave + el mismo cuerpo devuelve la misma respuesta, sin efectos secundarios duplicados.

Products

GET
/v1/products
List products
Returns a paginated list of your products, newest first.
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.
POST
/v1/products
Create a product
Publishes a new product on the active shop.
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
Request body · editable
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.
GET
/v1/products/{id}
Fetch a product
Returns a single product by id, including its stock count.
Parameters
  • id required string path
    The product identifier. values:prod_…
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.
PATCH
/v1/products/{id}
Update a product
Patch any subset of editable fields. Sends back the full updated object.
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.
Request body · editable
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.
DELETE
/v1/products/{id}
Archive a product
Soft-deletes the product. Existing orders keep working.
Parameters
  • id required string path
    The product identifier. values:prod_…
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.
POST
/v1/products/{id}/keys
Bulk-import license keys
Adds keys to a license-key product's pool. Up to 5,000 per call.
Parameters
  • id required string path
    License-key product id.
  • keys required array<string> body
    List of opaque key strings to add to the pool. values:1 – 5,000
Request body · editable
Example response 201
{
    "imported": 3,
    "duplicates": 0,
    "stock_after": 50
}
Try it - runs in your browser against a sandbox mock.

Orders

GET
/v1/orders
List orders
Returns a paginated list of orders for the active shop.
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.
GET
/v1/orders/{uuid}
Fetch an order
Returns one order with items, payment details and delivery state.
Parameters
  • uuid required string path
    The order identifier. values:ord_…
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.
POST
/v1/orders/{uuid}/refund
Refund an order
Refunds the full amount, or a partial amount if you set `amount_cents`.
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.
Request body · editable
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.
POST
/v1/orders/{uuid}/resend
Re-send delivery email
Re-fires the delivery email for a paid order (license key, file links, etc.).
Parameters
  • uuid required string path
    The order identifier. values:ord_…
Request body · editable
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.

Customers

GET
/v1/customers
List customers
Returns a paginated list of unique customer emails for the active shop.
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.
GET
/v1/customers/{id}
Fetch a customer
Returns one customer with their order history and lifetime metrics.
Parameters
  • id required string path
    Customer identifier. values:cus_…
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.

Payouts

GET
/v1/payouts
List payouts
Returns a paginated list of payouts triggered from this tenant.
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.
POST
/v1/payouts
Trigger a payout
Queues a payout from your BlockPN wallet to the destination address.
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.
Request body · editable
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.

Webhooks

GET
/v1/webhooks
List endpoints
Returns every webhook endpoint registered for the active shop.
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.
POST
/v1/webhooks
Register an endpoint
Subscribes a URL to one or more event types. Returns the signing secret.
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.
Request body · editable
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.
POST
/v1/webhooks/{id}/test
Fire a test event
Sends a synthetic event to the endpoint so you can verify your handler.
Parameters
  • id required string path
    Endpoint identifier.
  • event optional enum body
    Which event type to send. values:order.paid | order.refunded | … default:order.paid
Request body · editable
Example response 200
{
    "delivered": true,
    "response_code": 200,
    "delivery_ms": 184
}
Try it - runs in your browser against a sandbox mock.
DELETE
/v1/webhooks/{id}
Remove an endpoint
Stops further deliveries. In-flight retries are cancelled.
Parameters
  • id required string path
    Endpoint identifier. values:wh_…
Example response 200
{
    "id": "wh_01J2PVT0KZ",
    "deleted": true
}
Try it - runs in your browser against a sandbox mock.

API keys

GET
/v1/api-keys
List API keys
Returns metadata for every key minted under this tenant. Secret values are never returned twice.
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.
POST
/v1/api-keys
Mint a key
Mints a scoped key. The secret value is only returned in this response - store it.
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
Request body · editable
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.
DELETE
/v1/api-keys/{id}
Revoke a key
Revokes a key instantly. Any in-flight request using it returns 401 from this point on.
Parameters
  • id required string path
    Key identifier. values:apik_…
Example response 200
{
    "id": "apik_01J2PW2F88",
    "revoked": true
}
Try it - runs in your browser against a sandbox mock.