API Documentation
A simple, fast REST API to read your ReSellCodes reseller account and transaction history. JSON only. HTTPS only.
Open the interactive reference →
Overview
The API lets you programmatically access your own account. Authentication is a single API key you carry as a Bearer token. Every response is JSON; all monetary values are strings with four decimals in USD (for example "150.0000") so you never lose precision to floating point.
The surface is intentionally small for now — your account and your transactions — and will grow. Existing fields will not be removed without a new version.
Base URL
All endpoints below are relative to this base. Requests must use HTTPS.
Authentication
Find your API key in your dashboard under API. Send it in the Authorization header of every request:
Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx
Requests without a valid key return 401 Unauthorized. A suspended account returns 403 Forbidden.
Rate limits
Each account has a per-minute and a per-day request limit. Every response includes your current budget in headers:
| Header | Meaning |
|---|---|
X-RateLimit-Limit-Minute | Requests allowed per minute |
X-RateLimit-Remaining-Minute | Remaining this minute |
X-RateLimit-Limit-Day | Requests allowed per day |
X-RateLimit-Remaining-Day | Remaining today |
Exceeding a limit returns 429 Too Many Requests with a Retry-After header (seconds to wait). Back off until then.
Errors
Errors use standard HTTP status codes and a consistent JSON body:
{
"error": {
"type": "unauthorized",
"message": "Invalid API key."
}
}
| Status | type | When |
|---|---|---|
| 400 | invalid_request | A query parameter was invalid |
| 401 | unauthorized | Missing or invalid API key |
| 403 | forbidden | Account suspended |
| 404 | not_found | Resource does not exist or isn't yours |
| 429 | rate_limited | Rate limit exceeded |
Pagination
List endpoints are cursor-paginated and return the newest items first. Pass limit (1–100, default 20). The response includes has_more and next_cursor; to fetch the next page, send next_cursor back as the cursor parameter. When next_cursor is null, you've reached the end.
Get account
Returns your account: balance, lifetime totals and rate limits.
Example
curl https://resell.codes/api/v1/me \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx"
Response
{
"object": "account",
"nickname": "reseller1",
"email": "you@example.com",
"status": "ACTIVE",
"balance_usd": "150.0000",
"total_orders": 12,
"total_spent_usd": "1840.5000",
"created_at": "2026-06-01T09:12:44.000Z"
}
List transactions
Your balance transactions, newest first. You only ever see your own.
Query parameters
| Name | Type | Description | |
|---|---|---|---|
limit | integer | optional | 1–100, default 20 |
cursor | integer | optional | A transaction number; returns items older than it |
direction | string | optional | CREDIT or DEBIT |
type | string | optional | DEPOSIT, ORDER or ADJUSTMENT |
status | string | optional | PENDING, COMPLETED or CANCELLED |
Example
curl "https://resell.codes/api/v1/transactions?limit=2&direction=CREDIT" \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx"
Response
{
"object": "list",
"data": [
{
"object": "transaction",
"number": 1024,
"direction": "CREDIT",
"type": "DEPOSIT",
"status": "COMPLETED",
"amount_usd": "50.0000",
"balance_after": "150.0000",
"note": "USDT · TRC-20",
"created_at": "2026-07-25T19:03:14.530Z"
},
{
"object": "transaction",
"number": 1007,
"direction": "CREDIT",
"type": "DEPOSIT",
"status": "COMPLETED",
"amount_usd": "100.0000",
"balance_after": "100.0000",
"note": "USDT · TON",
"created_at": "2026-07-20T11:41:02.100Z"
}
],
"limit": 2,
"has_more": true,
"next_cursor": 1007
}
cursor=1007.Get a transaction
Fetch a single transaction by its number. A number that isn't yours returns 404 — the API never reveals whether someone else's transaction exists.
Example
curl https://resell.codes/api/v1/transactions/1024 \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx"
Response
{
"object": "transaction",
"number": 1024,
"direction": "CREDIT",
"type": "DEPOSIT",
"status": "COMPLETED",
"amount_usd": "50.0000",
"balance_after": "150.0000",
"note": "USDT · TRC-20",
"created_at": "2026-07-25T19:03:14.530Z"
}
Steam top-up rates
Current exchange rates for Steam wallet top-ups. Four currencies are supported: USD, RUB, UAH, KZT. The minimum top-up is 0.15 USD.
curl https://resell.codes/api/v1/steam-topup/rates \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx"
{
"object": "steam_rates",
"base": "USD",
"rates": { "USD": 1, "RUB": 78.12, "UAH": 44.87, "KZT": 474.84 },
"min_topup_usd": "0.15",
"updated_at": "2026-07-25T20:38:10.220Z"
}
Check a Steam login
Verify a Steam login can receive a wallet top-up before creating an order.
curl -X POST https://resell.codes/api/v1/steam-topup/check-login \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"steam_login":"ricardomoe3y"}'
{
"object": "steam_login_check",
"steam_login": "ricardomoe3y",
"can_refill": true
}
Create a Steam top-up
Places a Steam wallet top-up for a given login. Your balance is charged immediately (face value minus your discount); the top-up is then fulfilled asynchronously. If the provider rejects it, the charge is refunded automatically. Each order type has its own creation endpoint.
Body
| Field | Type | Description | |
|---|---|---|---|
steam_login | string | required | The Steam account login |
currency | string | required | USD, RUB, UAH or KZT |
amount | string | required | Amount in that currency (USD ≤ 2 decimals) |
Example
curl -X POST https://resell.codes/api/v1/steam-topup/order \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"steam_login":"ricardomoe3y","currency":"USD","amount":"10"}'
Response
{
"object": "order",
"number": 12,
"type": "steam_topup",
"status": "processing",
"steam_login": "ricardomoe3y",
"currency": "USD",
"amount": "10",
"amount_usd": "10.0000",
"charged_usd": "9.7000",
"status_reason": null,
"created_at": "2026-07-25T21:00:00.000Z",
"status_history": [
{ "status": "created", "reason": null, "at": "2026-07-25T21:00:00.000Z" },
{ "status": "processing", "reason": null, "at": "2026-07-25T21:00:01.000Z" }
]
}
List orders
Your orders, newest first. Same cursor pagination as transactions; optional status filter (CREATED, PROCESSING, COMPLETED, FAILED, REFUND).
curl "https://resell.codes/api/v1/orders?limit=20&status=COMPLETED" \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx"
Get an order
One of your orders by number, including full status history. A number that isn't yours returns 404.
curl https://resell.codes/api/v1/orders/12 \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx"
Buy Telegram Stars
Send Stars to a Telegram username. Your balance is charged immediately; delivery is asynchronous. Quantity 50–10000. Live pricing: GET /telegram/stars.
Body
| Field | Type | Description | |
|---|---|---|---|
telegram_username | string | required | Recipient (with or without @) |
quantity | integer | required | 50–10000 stars |
curl -X POST https://resell.codes/api/v1/telegram/stars/buy \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"telegram_username":"durov","quantity":50}'
{
"object": "order",
"number": 42,
"type": "telegram_stars",
"status": "processing",
"telegram_username": "durov",
"stars": 50,
"charged_usd": "0.7631",
"status_reason": null,
"created_at": "2026-07-26T22:40:00.000Z",
"status_history": [ ... ]
}
Manual services — list & offers
Manually-fulfilled services. Some (e.g. Roblox Robux via login) require buyer input (account credentials) and have a provider chat; others (loaded accounts) are simple transfers. Prices from the offers endpoint already include your markup.
curl https://resell.codes/api/v1/manual-services \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx"
{
"object": "list",
"data": [
{ "id": "roblox", "name": "Roblox (Robux via login)", "kind": "replenishment", "chat": true, "info": "...", "image": "..." },
{ "id": "xbox_loaded_accounts_us", "name": "Xbox Loaded Accounts (US)", "kind": "transfer", "chat": false, "info": "...", "image": "..." }
]
}
Returns the offers and the fields the buyer must provide when ordering.
{
"object": "manual_offers",
"service_id": "roblox",
"kind": "replenishment",
"chat": true,
"fields": [ { "code": "username", "name": "Username" }, { "code": "password", "name": "Password" } ],
"offers": [ { "id": "62148018", "name": "80 Robux", "price_usd": "0.9741", "delivery_minutes": 180, "note": null } ]
}
Create a manual-service order
Charges your balance immediately. fields must contain every field code from the offers response.
curl -X POST https://resell.codes/api/v1/manual-services/order \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"service_id":"roblox","product_id":"62148018","fields":{"username":"myacct","password":"secret"}}'
GET /orders/{number}.Order chat
Manual services with chat: true have a provider chat — the supplier may ask for a code or confirmation. Text and image attachments are supported.
curl https://resell.codes/api/v1/orders/42/chat \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx"
{ "object": "chat", "chat_frozen": false, "chat_opened": true, "chat_read_only": false, "messages": [ ... ] }
Send a message — multipart/form-data with body (text) and/or image (file).
curl -X POST https://resell.codes/api/v1/orders/42/chat \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-F "body=Here is the code: 123456" \
-F "image=@screenshot.png"
Steam Gifts — games & offers
Gift a Steam game or edition to a friend. The catalog is huge (~173k games); the games list returns the top games (cached ~10 min), and per-game offers/prices are fetched on demand (cached ~30 min).
{ "object": "list", "data": [ { "app_id": 730, "name": "Counter-Strike 2" }, { "app_id": 570, "name": "Dota 2" } ] }
Offers (editions) with per-region prices — prices already include your markup.
{
"object": "steam_gift_offers",
"app_id": 730,
"offers": [
{
"sub_id": 54029,
"name": "Prime Status Upgrade",
"regions": [
{ "region": "RU", "price_usd": "14.4467" },
{ "region": "UA", "price_usd": "14.3357" }
]
}
]
}
Order a Steam gift
Charges your balance immediately. The gift is delivered to the Steam friend invite URL you provide.
| Field | Type | Description | |
|---|---|---|---|
app_id | integer | required | Steam app id |
sub_id | integer | required | The offer/edition |
region | string | required | Region from the offer (e.g. RU, UA, KZ, CIS) |
invite_url | string | required | Steam friend invite link |
app_name | string | optional | For display in your order history |
curl -X POST https://resell.codes/api/v1/steam-gifts/order \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"app_id":730,"sub_id":54029,"region":"RU","invite_url":"https://s.team/p/xxxxx","app_name":"Counter-Strike 2"}'
Gift cards — categories & cards
Buy gift-card codes. Prices already include your markup. Order 1–100 at once; codes are delivered on the order once it completes.
{ "object": "list", "total": 1, "data": [ { "category_id": "roblox_ru", "name": "Roblox (RU)", "image": "/api/media/..." } ] }
{
"object": "gift_card_offers",
"category_id": "roblox_ru",
"name": "Roblox (RU)",
"offers": [
{ "card_id": "199_robux", "name": "199 Robux", "price_usd": "2.5750", "stock": 689, "min_quantity": 1, "max_quantity": 100 }
]
}
Gift cards — brands
The flat provider categories grouped into brands with per-region subcategories (e.g. App Store & iTunes → CA, AT, …). Handy for building a storefront. Use the category_id of a subcategory with the endpoints above.
{
"object": "list",
"total": 1,
"data": [
{ "brand": "App Store & iTunes", "subcategories": [
{ "category_id": "appstore_ca", "region": "CA", "image": "/api/media/..." },
{ "category_id": "appstore_at", "region": "AT", "image": "/api/media/..." }
] }
]
}
Buy gift-card codes
Charges your balance immediately. Poll GET /orders/{number} — once status is completed, the codes array is populated.
curl -X POST https://resell.codes/api/v1/gift-cards/order \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"category_id":"roblox_ru","card_id":"199_robux","quantity":2}'
{
"object": "order",
"number": 12,
"type": "gift_card",
"status": "completed",
"category_name": "Roblox (RU)",
"card_name": "199 Robux",
"quantity": 2,
"charged_usd": "5.1500",
"codes": ["RBXXXXXXXXXXXXXX", "RBYYYYYYYYYYYYYY"]
}
Game keys — games & offers
Buy game key codes (Steam, Xbox, EA, Rockstar). Prices already include your markup. Order 1–100 at once; keys are delivered on the order once it completes.
{
"object": "list",
"total": 1,
"data": [
{
"game_id": "7_days_to_die_global",
"name": "7 Days to Die",
"region": "GLOBAL",
"platform": "Steam",
"region_restriction": false,
"image": "https://cdn.cloudflare.steamstatic.com/steam/apps/251570/header.jpg"
}
]
}
{
"object": "game_key_offers",
"game_id": "7_days_to_die_global",
"name": "7 Days to Die",
"region": "GLOBAL",
"platform": "Steam",
"region_restriction": false,
"keys": [
{ "key_id": "7_days_to_die", "name": "7 Days to Die", "price_usd": "17.2971", "stock": 1, "min_quantity": 1, "max_quantity": 1 }
]
}
Game keys — region restriction
When a game has region_restriction: true, check which countries can activate the key before selling it.
{
"object": "region_restriction",
"game_id": "ace_attorney_investigations_collection_cis",
"region": "CIS",
"has_availability": true,
"available": [ { "code": "AM", "name": "Armenia" }, { "code": "BY", "name": "Belarus" } ],
"unavailable": [ { "code": "US", "name": "United States" } ]
}
Buy game keys
Charges your balance immediately. Poll GET /orders/{number} — once status is completed, the keys array is populated.
curl -X POST https://resell.codes/api/v1/game-keys/order \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"game_id":"7_days_to_die_global","key_id":"7_days_to_die","quantity":1}'
{
"object": "order",
"number": 15,
"type": "game_key",
"status": "completed",
"game_name": "7 Days to Die",
"key_name": "7 Days to Die",
"quantity": 1,
"region": "GLOBAL",
"platform": "Steam",
"charged_usd": "17.2971",
"keys": ["XXXXX-YYYYY-ZZZZZ"]
}
Game top-ups — categories & offers
In-game top-ups (UC, diamonds, robux, …) delivered straight to the player's account. Prices already include your markup. One top-up per order.
{ "object": "list", "total": 1, "data": [ { "category_id": "pubg_mobile_auto", "name": "PUBG Mobile (Auto)", "note": "Region: Global…", "image": "/api/media/..." } ] }
Each category declares the buyer inputs (fields) you must collect and send with the order.
{
"object": "top_up_offers",
"category_id": "pubg_mobile_auto",
"name": "PUBG Mobile (Auto)",
"fields": [ { "key": "player_id", "label": "Player ID", "type": "text" } ],
"offers": [
{ "offer_id": "60_uc", "name": "60 UC", "price_usd": "0.9161" },
{ "offer_id": "325_uc", "name": "325 UC", "price_usd": "4.5835" }
]
}
Categories grouped into brands with per-region subcategories (region defaults to GLOBAL when unspecified). Delivery-mode suffixes like "(Auto)" become the subcategory's variant — one brand, many modes.
{
"object": "list",
"total": 1,
"data": [
{ "brand": "PUBG Mobile", "subcategories": [
{ "category_id": "pubg_mobile_auto", "name": "PUBG Mobile (Auto)", "region": "GLOBAL", "variant": "Auto", "image": "/api/media/..." },
{ "category_id": "pubg_mobile_fast", "name": "PUBG Mobile (Fast)", "region": "GLOBAL", "variant": "Fast", "image": "/api/media/..." }
] }
]
}
Buy a game top-up
Charges your balance immediately. fields keys must match the category's fields[].key. Poll GET /orders/{number} until completed — delivery goes straight to the player's account, there are no codes.
curl -X POST https://resell.codes/api/v1/top-ups/order \
-H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"category_id":"pubg_mobile_auto","offer_id":"60_uc","fields":{"player_id":"5123456789"}}'
{
"object": "order",
"number": 16,
"type": "game_topup",
"status": "processing",
"category_name": "PUBG Mobile (Auto)",
"offer_name": "60 UC",
"fields": { "player_id": "5123456789" },
"charged_usd": "0.9161"
}