Buy accounts

Charge your balance and get the accounts back in the same response.

POSTGET/api/v1/cs2Buy CS2 accounts
POSTGET/api/v1/rustBuy Rust accounts
POSTGET/api/v1/extraBuy accounts for other games

/cs2, /rust and /extra share one shape. Pass type and quantity as query parameters. POST and GET both work and read the same query string; a POST body is only read for extended_warranty.

Request
curl -X POST "https://www.nfa.pub/api/v1/cs2?type=prime&quantity=1&result=json" \  -H "X-Api-Key: rsk_..." \  -H "Idempotency-Key: order-1001"
Response
{  "ok": true,  "order_id": "4b53000e7b4677d2-c69a8e94132d75e8",  "accounts": ["76561198168801886----eyAid..."],  "count": 1,  "charged_eur": 0.3,  "cached": false}

Keep order_id. /order, /replace, /orders and the webhooks all use it.

Parameters

ParameterDescription
typerequiredThe product type, such as prime. Each endpoint sells its own; see Types below.
quantityWhole number from 1 to 100. Default 1.
resultjson for a JSON body. Anything else gives plain text, one account per line.
Idempotency-KeyHeader, up to 200 characters. A retry with the same key and parameters returns the first result (cached: true) instead of charging again. A longer key is ignored, so that call is not protected. Clients that cannot set headers can send idempotency_key on the query string; the header wins.
extended_warranty1 or true adds the extended warranty: 12 hours of cover instead of 6 on every account in the order, for €0.30 per account, outside volume pricing. On the query string, or {"extended_warranty": true} in a POST JSON body (the query string wins). 0, false or absent: the normal warranty. Anything else is E1101, before anything is charged.
preorder1 or true to pre-order when the product is sold out. See Pre-orders below. Only 1, true, 0 and false are accepted (any case); anything else is E1101.
deliver_fromWith preorder=1 only: the start of your delivery hours, HH:MM (24-hour). Send it with deliver_to and tz, or none of the three for any time.
deliver_toWith preorder=1 only: the end of your delivery hours, HH:MM. At least 2 hours after the start; it may run past midnight (22:00 to 02:00).
tzWith preorder=1 only: the time zone of your delivery hours, an IANA name such as Europe/Berlin or America/New_York.

Types

EndpointTypes
/cs2prime, premier, premier-4-medals, premier-10-medals, premier-inactive, premier-10k, premier-15k, premier-20k, premier-rare
/rust1-99, 100-199, 200-499, 500-999, 1000-plus, inactive, premium-1-99, premium-100-199, premium-200-499, premium-500-999, premium-1000-plus, premium-inactive
/extrar6, dayz, bf6, wardogs-0-100, wardogs-100-201, wardogs-201-301, arc-0-100, arc-100-200, arc-200-plus, apex-0-100, apex-100-200, apex-200-plus, r6-100-201, r6-201-301, r6-ranked, dayz-100-plus, bf6-100-plus, arc-50-100, tarkov-0-100, tarkov-100-200, tarkov-200-plus, ark-0-100, ark-100-plus, ark-inactive, mw4-0-50, mw4-50-100, mw4-100-200, mw4-200-plus

The Rust premium- types come with a Rust skin inventory worth $15 or more.

Charging

  • You pay the priceCents that /products shows you, per account delivered.
  • Your balance is checked before anything is reserved, so a shortfall costs nothing (E1401).
  • Only delivered accounts are charged. A short fill is refunded down to what shipped. If nothing can be delivered, the whole charge is reversed and you get an error, never a silent loss.
  • With extended_warranty=1 the JSON answer also has "warranty_hours": 12 and "warranty_extended": true, and charged_eur includes €0.30 for every account delivered. An account that is not delivered gets its €0.30 back with its price.
  • Send an Idempotency-Key on every buy, so a retry after a timeout never charges twice. The extended warranty and the delivery hours are part of the parameters: the same key with different ones is E1301, never a second charge.
  • Rate limited to 30 buys a minute per account: every key on the account shares the same 30, across all three endpoints. Separately, 120 requests a minute per IP address.

Pre-orders

Pre-orders are charged now, filled oldest-first when stock returns, only inside your delivery hours if you set them; cancel any time before it's filled for a full refund to your balance.

Add preorder=1. If the product is sold out, with nothing at all on the shelf, you get a pre-order instead of E1501. If there is stock, the flag changes nothing: you get your accounts, or E1501 with nothing charged if you asked for more than there is.

Request
curl -X POST "https://www.nfa.pub/api/v1/cs2?type=prime&quantity=2&preorder=1&deliver_from=09:00&deliver_to=23:00&tz=Europe/Berlin&result=json" \  -H "X-Api-Key: rsk_..." \  -H "Idempotency-Key: order-1182"
Response
{  "ok": true,  "order_id": "4b53000e7b4677d2-c69a8e94132d75e8",  "state": "preorder",  "preorder": true,  "quantity": 2,  "accounts": [],  "count": 0,  "charged_eur": 0.9,  "deliveryWindow": { "from": "09:00", "to": "23:00", "timezone": "Europe/Berlin" },  "cached": false}
  • state is preorder, accounts is empty and count is 0. Without result=json the body is the single word preorder, and the order id is in the X-Order-Id header.
  • charged_eur is taken from your balance now, at exactly the price a normal buy would charge.
  • deliveryWindow is your delivery hours, or null for any time. The warranty (6 hours, 12 with extended_warranty=1) starts at delivery, so hours keep a pre-order from landing while you sleep.
  • Your balance, your API protection limits and Idempotency-Key work exactly as for a normal buy. Read-only keys cannot place one (E1701).
  • At most 10 accounts and one product per pre-order (E1505), and only while pre-orders are switched on (E1504).
  • How the queue fills them, partial fills and supplier outages are in the Pre-orders guide. Change the hours with /preorder/hours and cancel with /preorder/cancel.

Errors

CodeHTTPMeaning
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.
E1612403Purchases and replacements are blocked for this customer.
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.
E1000500Something went wrong on our side. Retry, and contact support if it keeps happening.
Buy accounts · API reference · nfa.pub