Play Cards API

A simple HTTP API to check your balance, browse products, place orders, and track their status — built for resellers and automation.

Base URL  https://api.play-cards.net
Drop-in compatible Idempotent orders Webhooks Stable error codes

Introduction #

The API speaks JSON over HTTPS. If you already integrate with a standard reseller API in this market, you migrate by changing only the base URL and your token — the paths, envelopes, and error codes match.

All endpoints are GET requests and return JSON. Send your token on every request. Orders are idempotent via order_uuid.

Authentication #

Every request must include your API token in the api-token header. You can generate and manage your token, allowed IPs, and callback URL from your account.

HEADER
api-token: YOUR_API_TOKEN

Two additional header forms are accepted for convenience: x-api-key: YOUR_API_TOKEN and Authorization: Bearer YOUR_API_TOKEN.

IP allowlist. If your account has an IP list configured, requests from any other IP are rejected with code 123. Leave the list empty (or enable “allow all IPs”) to accept requests from anywhere.

Rate limits #

API requests are rate-limited per token. Stay under the limits below and you will never see an HTTP 429.

ScopeLimitWhen exceeded
newOrder120 requests per minute per tokenHTTP 429
products (catalog sync: plain or price=1)1 request per minute per token — the full catalog in one response; syncing every 1–2 minutes is the intended paceHTTP 429 with a Retry-After header (seconds)
products with base=1 (product-linking list)6 requests per minute, up to 60 per hour per token — sized for a human linking products, not for automated pollingHTTP 429 with a Retry-After header (seconds)
other endpoints1200 requests per minute per token (content, check, profile)HTTP 429
checkId60 lookups per minute per token by default; cached repeats are freeHTTP 429 · code 135

These are counted per token, not per IP, so spreading requests across servers does not raise the limit. On HTTP 429, pause and retry after a few seconds — the response message includes how long to wait.

Syncing prices or stock? Fetch the whole catalog in one call with /client/api/products?price=1 — it returns a lightweight payload for every product. Do not call the API once per product: a large catalog synced product-by-product burns through the read limit for no benefit.

Webhooks #

Instead of polling /check, set a callback URL on your account and we’ll POST to it whenever one of your orders reaches a final state. This is optional and complements the polling endpoint.

POSThttps://your-server.com/your-callback

Headers we send

HeaderDescription
X-PlayCore-Eventorder_completed or order_rejected
X-PlayCore-Callback-IdUnique id of this callback attempt (delivery is retried on failure)
REQUEST BODY (we POST this to you)
{
  "event": "order_completed",
  "order": {
    "id": 10231,
    "publicId": "ID_9fffb0d849a45215",
    "orderUuid": "ecbdd545-e616-4aee-8770-7eefa977bcd0",
    "apiClientReference": null,
    "status": "completed",
    "totalPrice": "1.26048",
    "currencyCode": "USD",
    "inputs": { "playerId": "test" },
    "completedAt": "2026-07-06T13:55:48.000Z",
    "failedAt": null,
    "createdAt": "2026-07-06T13:55:40.000Z",
    "updatedAt": "2026-07-06T13:55:48.000Z"
  }
}
🔒
Respond with HTTP 2xx to acknowledge. Any other status is retried. To verify authenticity, look the order up with /client/api/check?orders=[publicId] before acting on it.

Errors #

Every error returns the same envelope with a stable numeric code. Build your integration against the code, not the message text.

ERROR RESPONSE
{
  "status": "error",
  "code": 100,
  "message": "Insufficient balance"
}

Authentication codes

CodeMeaning
120Api Token is required
121Token error (invalid token)
122Not allowed to use the API (disabled / inactive account)
123IP not allowed

Order codes

CodeMeaning
100Insufficient balance
106Quantity not allowed
107Missing required field
108Invalid field value / option
109Product deleted or not found
110Product not available now
111Too many orders for the same ID within a minute
112Quantity is too small
113Quantity is too large
114Bad request / unknown order error
115Site under maintenance
116Purchase not allowed for this user
500Unknown internal error

Player ID verification codes

CodeMeaning
130No active subscription — subscribe from the API page in your account (HTTP 403)
131This product does not support ID verification
132Product id missing or not found
133Player id is required
134The player id is not valid — check the value, and the server/charname if the game needs one
135Too many lookups — slow down and retry (HTTP 429)
136Service busy — retry shortly
137Service unavailable (not enabled)