ReSellCodesAPI v1

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

https://resell.codes/api/v1

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
Your key grants full read access to your account — keep it secret and never expose it in client-side code. If it leaks, contact support to rotate it.

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:

HeaderMeaning
X-RateLimit-Limit-MinuteRequests allowed per minute
X-RateLimit-Remaining-MinuteRemaining this minute
X-RateLimit-Limit-DayRequests allowed per day
X-RateLimit-Remaining-DayRemaining 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."
  }
}
StatustypeWhen
400invalid_requestA query parameter was invalid
401unauthorizedMissing or invalid API key
403forbiddenAccount suspended
404not_foundResource does not exist or isn't yours
429rate_limitedRate 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

GET /me

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

GET /transactions

Your balance transactions, newest first. You only ever see your own.

Query parameters

NameTypeDescription
limitintegeroptional1–100, default 20
cursorintegeroptionalA transaction number; returns items older than it
directionstringoptionalCREDIT or DEBIT
typestringoptionalDEPOSIT, ORDER or ADJUSTMENT
statusstringoptionalPENDING, 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
}
Fetch the next page by passing cursor=1007.

Get a transaction

GET /transactions/{number}

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

GET /steam-topup/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

POST /steam-topup/check-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

POST /steam-topup/order

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

FieldTypeDescription
steam_loginstringrequiredThe Steam account login
currencystringrequiredUSD, RUB, UAH or KZT
amountstringrequiredAmount 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" }
  ]
}
Statuses: createdprocessingcompleted. failed means it could not be delivered; refund means the charge was returned to your balance.

List orders

GET /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

GET /orders/{number}

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

POST /telegram/stars/buy

Send Stars to a Telegram username. Your balance is charged immediately; delivery is asynchronous. Quantity 50–10000. Live pricing: GET /telegram/stars.

Body

FieldTypeDescription
telegram_usernamestringrequiredRecipient (with or without @)
quantityintegerrequired50–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": [ ... ]
}

Buy Telegram Premium

POST /telegram/premium/buy

Gift Telegram Premium to a username. Charged immediately. Plans: 3, 6 or 12 months. Live pricing: GET /telegram/premium.

Body

FieldTypeDescription
telegram_usernamestringrequiredRecipient (with or without @)
monthsintegerrequired3, 6 or 12
curl -X POST https://resell.codes/api/v1/telegram/premium/buy \
  -H "Authorization: Bearer rsc_live_xxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{"telegram_username":"durov","months":3}'

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.

GET /manual-services
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": "..." }
  ]
}
GET /manual-services/{id}/offers

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

POST /manual-services/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"}}'
The order runs through the same lifecycle as other orders (created → processing → completed/failed/refund). Track it via 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.

GET /orders/{number}/chat
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": [ ... ] }
POST /orders/{number}/chat

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).

GET /steam-gifts/games?limit=100
{ "object": "list", "data": [ { "app_id": 730, "name": "Counter-Strike 2" }, { "app_id": 570, "name": "Dota 2" } ] }
GET /steam-gifts/games/{appid}

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

POST /steam-gifts/order

Charges your balance immediately. The gift is delivered to the Steam friend invite URL you provide.

FieldTypeDescription
app_idintegerrequiredSteam app id
sub_idintegerrequiredThe offer/edition
regionstringrequiredRegion from the offer (e.g. RU, UA, KZ, CIS)
invite_urlstringrequiredSteam friend invite link
app_namestringoptionalFor 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.

GET /gift-cards/categories?q=
{ "object": "list", "total": 1, "data": [ { "category_id": "roblox_ru", "name": "Roblox (RU)", "image": "/api/media/..." } ] }
GET /gift-cards/categories/{id}/cards
{
  "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.

GET /gift-cards/brands?q=
{
  "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

POST /gift-cards/order

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.

GET /game-keys?q=&region=&platform=
{
  "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"
    }
  ]
}
GET /game-keys/{game_id}/keys
{
  "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.

GET /game-keys/{game_id}/region-restriction
{
  "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

POST /game-keys/order

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.

GET /top-ups/categories?q=
{ "object": "list", "total": 1, "data": [ { "category_id": "pubg_mobile_auto", "name": "PUBG Mobile (Auto)", "note": "Region: Global…", "image": "/api/media/..." } ] }
GET /top-ups/categories/{id}/offers

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" }
  ]
}
GET /top-ups/brands?q=

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

POST /top-ups/order

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"
}