Errors
Every failure returns a stable code you can branch on.
Every failed request carries a code like E1401 in the X-Error-Code header, whatever the format. With result=json, and always on the JSON-only endpoints, the body has the same code and an error sentence. With text, the body is the bare code.
Branch on the code. The error sentence says what went wrong in plain words and ends with the reference. It is safe to show your own customers, but do not parse it: the wording may improve, the code will not change.
402 Payment Required
{ "ok": false, "code": "E1401", "error": "Not enough balance on the account this key belongs to. Reference E1401."}Only E1506 comes with a Retry-After header (seconds), and its JSON body has the same number as retry_after.
All codes
| Code | HTTP | Meaning |
|---|---|---|
E1000 | 500 | Something went wrong on our side. Retry, and contact support if it keeps happening. |
E1001 | 401 | The key is missing, malformed, revoked or unknown. |
E1002 | 429 | Too many requests. Wait for the minute to roll over and retry. See Rate limits. |
E1003 | 413 | The request body is over 4 KB. Only the buy endpoints answer this. |
E1101 | 400 | A required parameter is missing, or one is not valid (a bad limit, date or cursor on the list endpoints, for example). |
E1102 | 400 | The type is missing, or not one this endpoint sells. |
E1103 | 400 | Quantity must be a whole number from 1 to 100. |
E1104 | 400 | No product matches that id or type. |
E1105 | 400 | The delivery hours are not valid. Send a start and an end as HH:MM (24-hour), at least 2 hours apart and not the same time, and a real IANA time zone such as Europe/Berlin. Nothing was charged or changed. |
E1201 | 409 | The shop is closed for the moment. Try again later. |
E1202 | 409 | The product is misconfigured on our side. Contact support. |
E1301 | 409 | That Idempotency-Key was already used with different parameters. |
E1302 | 409 | A call with the same Idempotency-Key is still running. Retry shortly. |
E1401 | 402 | Your balance does not cover the purchase. Nothing was charged. Top up and retry. |
E1501 | 409 | Not enough stock, and nothing was charged. With preorder=1 it means there was some stock but less than you asked for, or, rarely, that the supplier had nothing after all. |
E1502 | 503 | Delivery failed and your balance was refunded. Retry. |
E1503 | 503 | Our supplier is briefly unavailable. Nothing was charged. Retry shortly. |
E1504 | 409 | The product is sold out and pre-orders are switched off right now. Nothing was charged. |
E1505 | 409 | The product is sold out and a pre-order can hold at most 10 accounts. Ask for fewer. Nothing was charged. |
E1506 | 503 | The supplier's account checks are down for this product. Nothing was charged. Retry after the Retry-After seconds, or send preorder=1 to queue it. |
E1601 | 403 | This key is not allowed to do that. |
E1602 | 404 | No order with that id. |
E1603 | 403 | That order was not bought by this key's account, so this key cannot see or act on it. |
E1604 | 409 | That order has not been delivered yet, so there is nothing to replace. |
E1605 | 409 | The warranty on that order has run out. |
E1606 | 400 | That account is not on that order. |
E1607 | 409 | That account was already replaced. Report the new one instead. |
E1608 | 409 | That order has used all of its replacements. |
E1609 | 409 | No replacement in stock. Nothing was used. Try again when it restocks. |
E1610 | 409 | Our check says the account works, so it was not replaced. Nothing was used. |
E1611 | 503 | The account check was inconclusive. Try again in a few minutes. |
E1612 | 403 | Purchases and replacements are blocked for this customer. |
E1613 | 409 | A claim made too long after delivery. The API does not return this code today. |
E1614 | 409 | Held for review. A person has to look before more replacements go through. |
E1615 | 503 | Replacements are paused right now. Try again later. |
E1616 | 409 | A CS2 cooldown is not a fault and runs out on its own, so it is not replaced. |
E1617 | 409 | The warranty on that account ended with an earlier cooldown or ban claim. Other accounts on the order keep theirs. |
E1618 | 409 | A VAC ban, or a ban after delivery, is not covered, so the account is not replaced. |
E1619 | 409 | That order was refunded in full, so it has no warranty left. |
E1620 | 409 | A chargeback is open on that order. Replacements wait until it is settled. |
E1621 | 409 | Another replacement on that order is still running. Retry in a few seconds. |
E1622 | 409 | That order is not a pre-order. |
E1623 | 409 | That pre-order is not waiting any more: it is being delivered, or it was delivered, cancelled or refunded. Nothing changed. |
E1624 | 500 | The pre-order is cancelled, but the refund needs a person. We credit it to your balance by hand. Do not retry. |
E1701 | 403 | This key is read-only. It can look things up, but not buy, replace, change or cancel a pre-order, export logins with include=accounts or change webhooks. |
E1702 | 403 | The request came from an IP that is not on your allowlist. |
E1703 | 403 | You paused API purchases on your account. |
E1704 | 403 | That product is not on your allowed products list. |
E1705 | 400 | More accounts in one request than your maximum per request. |
E1706 | 403 | The order costs more than your per-order limit. |
E1707 | 429 | You reached your purchases-per-hour limit. |
E1708 | 403 | The order would go over your daily spending limit. It resets at 00:00 UTC. |
E1801 | 400 | That webhook URL cannot be used. It must be https:// on port 443, a public hostname (not an IP address, a private or reserved name, or one of our domains), at most 500 characters, and resolve only to public addresses. The error sentence says which rule it broke. |
E1802 | 409 | The account already has 3 webhook endpoints. Delete one first. |
E1803 | 404 | No webhook with that id on this account. An id that belongs to another account gets the same answer. |
E1804 | 503 | Webhooks are not available right now, so nothing was created or rotated. Try again later. |
E1805 | 400 | The events list is not valid. Send a non-empty list of known event types; the error sentence lists them. |