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

CodeHTTPMeaning
E1000500Something went wrong on our side. Retry, and contact support if it keeps happening.
E1001401The key is missing, malformed, revoked or unknown.
E1002429Too many requests. Wait for the minute to roll over and retry. See Rate limits.
E1003413The request body is over 4 KB. Only the buy endpoints answer this.
E1101400A required parameter is missing, or one is not valid (a bad limit, date or cursor on the list endpoints, for example).
E1102400The type is missing, or not one this endpoint sells.
E1103400Quantity must be a whole number from 1 to 100.
E1104400No product matches that id or type.
E1105400The 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.
E1201409The shop is closed for the moment. Try again later.
E1202409The product is misconfigured on our side. Contact support.
E1301409That Idempotency-Key was already used with different parameters.
E1302409A call with the same Idempotency-Key is still running. Retry shortly.
E1401402Your balance does not cover the purchase. Nothing was charged. Top up and retry.
E1501409Not 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.
E1502503Delivery failed and your balance was refunded. Retry.
E1503503Our supplier is briefly unavailable. Nothing was charged. Retry shortly.
E1504409The product is sold out and pre-orders are switched off right now. Nothing was charged.
E1505409The product is sold out and a pre-order can hold at most 10 accounts. Ask for fewer. Nothing was charged.
E1506503The 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.
E1601403This key is not allowed to do that.
E1602404No order with that id.
E1603403That order was not bought by this key's account, so this key cannot see or act on it.
E1604409That order has not been delivered yet, so there is nothing to replace.
E1605409The warranty on that order has run out.
E1606400That account is not on that order.
E1607409That account was already replaced. Report the new one instead.
E1608409That order has used all of its replacements.
E1609409No replacement in stock. Nothing was used. Try again when it restocks.
E1610409Our check says the account works, so it was not replaced. Nothing was used.
E1611503The account check was inconclusive. Try again in a few minutes.
E1612403Purchases and replacements are blocked for this customer.
E1613409A claim made too long after delivery. The API does not return this code today.
E1614409Held for review. A person has to look before more replacements go through.
E1615503Replacements are paused right now. Try again later.
E1616409A CS2 cooldown is not a fault and runs out on its own, so it is not replaced.
E1617409The warranty on that account ended with an earlier cooldown or ban claim. Other accounts on the order keep theirs.
E1618409A VAC ban, or a ban after delivery, is not covered, so the account is not replaced.
E1619409That order was refunded in full, so it has no warranty left.
E1620409A chargeback is open on that order. Replacements wait until it is settled.
E1621409Another replacement on that order is still running. Retry in a few seconds.
E1622409That order is not a pre-order.
E1623409That pre-order is not waiting any more: it is being delivered, or it was delivered, cancelled or refunded. Nothing changed.
E1624500The pre-order is cancelled, but the refund needs a person. We credit it to your balance by hand. Do not retry.
E1701403This 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.
E1702403The request came from an IP that is not on your allowlist.
E1703403You paused API purchases on your account.
E1704403That product is not on your allowed products list.
E1705400More accounts in one request than your maximum per request.
E1706403The order costs more than your per-order limit.
E1707429You reached your purchases-per-hour limit.
E1708403The order would go over your daily spending limit. It resets at 00:00 UTC.
E1801400That 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.
E1802409The account already has 3 webhook endpoints. Delete one first.
E1803404No webhook with that id on this account. An id that belongs to another account gets the same answer.
E1804503Webhooks are not available right now, so nothing was created or rotated. Try again later.
E1805400The events list is not valid. Send a non-empty list of known event types; the error sentence lists them.
Errors · API reference · nfa.pub