Replacements and warranty

Every order is covered for 6 hours from delivery. If an account stops working in that time, you swap it yourself with one API call. No ticket, no waiting for staff.

6 hoursof cover, from the moment the order is delivered
12 hourswith the extended warranty, €0.30 per account
3 swapsper order, however many accounts it holds

What is covered

An account that stops working inside the warranty. Before we swap it, we check it with the supplier. If it still works, it is not replaced and nothing is used up.

Not covered

These are not faults, so we never replace them:

  • CS2 cooldowns. The account works, and the cooldown runs out on its own. Wait it out.
  • VAC bans on CS2 and Rust accounts. Not covered at any point.
  • Bans after delivery on CS2 and Rust accounts. Treated the same as a VAC ban.

On every other game a VAC ban or a cooldown does not affect play, so it is never held against the account.

Asking to replace one of these ends the warranty on that account for good. Every later request for it is refused with E1617, on the website too. The other accounts on the order keep their cover. Your account is also put in front of a person, and replacement requests get E1614 until they have looked.

How long it lasts

The clock starts when the order is delivered, not when it is paid. A pre-order is covered from the moment its stock arrives.

WarrantyCoverPrice
Standard6 hoursIncluded
Extended12 hours€0.30 per account

To get 12 hours, add extended_warranty=1 to the buy. It covers every account in the order and is charged for each one, outside volume pricing. An account that is never delivered gets its €0.30 back.

Buy with the extended warranty
curl -X POST \  "https://www.nfa.pub/api/v1/cs2?type=prime&quantity=5&extended_warranty=1" \  -H "X-Api-Key: rsk_..." \  -H "Idempotency-Key: order-1002"

To see how long an order has left, call GET /order. It returns warranty_hours and warranty_ends_at.

Asking in time is what counts. If we have no replacement in stock, nothing is used up, and the time you had left is kept while the product is out of stock, for up to 14 days. Ask again once it restocks.

Three per order

  • Each order gets three replacements in total, however many accounts are on it. Replacements made on the website count toward the same three.
  • A replacement can be replaced. That uses another of the three.
  • The same account is only replaced once.
  • Only a real swap uses one. A working account or an empty shelf costs you nothing.

An order with one account, step by step:

You reportWhat happensUsed
Account AA is faulty. You get account B.1 of 3
Account BB is faulty too. You get account C.2 of 3
Account COur check finds C working. E1610, nothing changes.2 of 3

Request a replacement

Send the order and the steam id of the faulty account to POST /replace. The new account comes back in the same response. Any full key can do this. Read-only keys cannot.

Request
curl -X POST "https://www.nfa.pub/api/v1/replace?result=json" \  -H "X-Api-Key: rsk_..." \  -H "Content-Type: application/json" \  -d '{    "order": "4b53000e7b4677d2-c69a8e94132d75e8",    "account": "76561199...",    "reason": "cannot log in"  }'
FieldDescription
orderrequiredThe order_id from the buy. order_id and invoice also work.
accountrequiredThe steam id of the faulty account. steam_id also works.
reasonOptional free text, kept with the request.
resultQuery parameter. json for a JSON body. Without it you get the new account line as plain text.

order, account and reason also work as query parameters. Prefer a JSON body.

The response

200 OK
{  "ok": true,  "account": "76561199...----...",  "replaced": "76561199...",  "used": 1,  "remaining": 2,  "warranty_ends_at": "2026-10-25T20:31:04.472Z",  "paused_ms": 0,  "reason": "login_failed"}
  • account is the new account line, in the same format as a purchase.
  • replaced is the steam id of that new account, not of the one you reported.
  • used and remaining count this order's three replacements.
  • warranty_ends_at is when the order's cover ends, in UTC.
  • reason is what our check found wrong. It is also in the X-Replace-Reason header, in both formats.

API protection

API protection is the set of limits you choose for your keys on your account page. Two of them apply to replacements:

  • Read-only keys cannot replace. The request is refused with E1701.
  • The IP allowlist. A request from an address that is not on it is refused with E1702.

Pause, the spending limits, purchases per hour, max accounts per request and allowed products only apply to purchases. They never block a replacement. With alerts on, you get a Discord DM when a request is blocked.

Fair use

Replacements per account also have hourly, daily and weekly limits, which grow with what you buy, and a limit on the share of your purchases that gets replaced. Past them, your account is held for a person to review, and replacement requests get E1614 until they have looked.

Common errors

A refusal carries a stable code in the X-Error-Code header. With result=json the body has it too.

409 Conflict
{  "ok": false,  "code": "E1608",  "error": "That order has used all of its replacements. Reference E1608."}
CodeHTTPMeaning
E1605409The warranty on that order has run out.
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.
E1614409Held for review. A person has to look before more replacements go through.
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.
E1621409Another replacement on that order is still running. Retry in a few seconds.
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.

Every other code is in Error codes. Replacements are limited to 60 requests a minute per IP and 20 a minute per key.

Replacements and warranty · API docs · nfa.pub