Quick start
1. Create a partner account and wait for approval. 2. Connect a provider account in the dashboard. 3. Generate an API key. 4. Check the player, then place the order:
curl "$BASE/api/v2/check-id?provider=smileone®ion=br&game=mobilelegends&user_id=123456789&zone_id=2214" \
-H "x-api-key: sk_live_..."
curl -X POST "$BASE/api/v2/orders" \
-H "x-api-key: sk_live_..." -H "content-type: application/json" \
-d '{"provider":"smileone","region":"br","game":"mobilelegends","product_id":"212",
"user_id":"123456789","zone_id":"2214","reference":"order-0001"}'Authentication
Create an API key in your dashboard and send it on every request except /ping, using either header:
x-api-key: sk_live_xxx
# or
Authorization: Bearer sk_live_xxxErrors
Every response has success. Errors use an HTTP 4xx/5xx status and a stable machine-readable code:
{ "success": false, "error": "Daily order limit reached (300)...", "code": "DAILY_LIMIT" }| Code | HTTP | Meaning |
|---|---|---|
| INVALID_API_KEY | 401 | Missing or wrong API key. |
| SELLER_PENDING | 403 | Your partner account is awaiting approval. |
| SELLER_SUSPENDED | 403 | Your partner account is suspended. |
| MISSING_FIELD | 400 | A required field is missing. |
| UNKNOWN_PROVIDER | 400 | The provider value is not recognised. |
| PROVIDER_DISABLED | 400 | That provider is temporarily unavailable. |
| NO_CONNECTION | 400 | You haven't connected an account for this provider/region. |
| CONNECTION_DISABLED | 400 | The connection has been disabled. |
| INSUFFICIENT_FEE_BALANCE | 402 | Your fee wallet can't cover this order's fee. Includes balance and required. |
| SESSION_EXPIRED | 409 | Your provider session expired — reconnect it in the dashboard. |
| ORDER_FAILED | 400 | The provider rejected the order. Includes the failed order; the fee is refunded. |
| DAILY_LIMIT | 429 | Daily order limit reached. |
| RATE_LIMITED | 429 | Too many requests per minute. See the Retry-After header. |
| NOT_FOUND | 404 | Order or resource not found. |
| UPSTREAM_ERROR | 502 | The provider could not be reached or errored; the fee is refunded. |
| INTERNAL | 500 | Unexpected server error. |
Idempotency
Send a unique reference (up to 80 characters) with every order. If a request times out or you aren't sure it went through, retry with the same reference: you get the original order back with "idempotent": true and HTTP 200, and the player is never topped up twice.
Limits & fees
| Rate limit | 60 requests per minute per partner (all endpoints). |
| Daily orders | A daily order cap applies per partner; new accounts have a lower cap during their first 7 days. |
| Service fee | $0.05 per order by default; some products have their own fee (see fee_usd in /products). Held when the order is placed and refunded automatically if it fails. |
{ "success": true, "ts": 1767000000000 }Returns each provider's id, regions, default_region, whether it is per_region, and the fields needed to connect it.
Lists your connections with provider, region, status (active · expired · error · disabled), last balance and last check time. Session values are never returned.
Answered from FARAMENG's stored catalog (fast, no shop account needed). A region that isn't stored is fetched live from the shop on your connected account. source says which: "stored" or "live". Each game includes image — the shop's own image link for that game.
| Query | Description |
|---|---|
| providerREQUIRED | smileone · garena · midasbuy · neteasegames |
| regionREQUIRED | Smile.One e.g. br · ph · id, Garena sg · my · ph · tw, Midasbuy kh, NetEase us. The full list per provider is in /providers; a missing or unknown region returns MISSING_REGION / INVALID_REGION with the valid list. |
curl "$BASE/api/v2/games?provider=smileone®ion=br" -H "x-api-key: sk_live_..."
Like /games, answered from the stored catalog when the game is stored (source: "stored"), otherwise live from the shop (source: "live"). Stored prices are the shop's price when the catalog was saved; the order itself is always charged at the shop's current price. Each product includes fee_usd — the service fee you'll pay for it — and fee_custom: true when that product has its own fee. Like games, each product has image — the shop's own image link for that item.
| Query | Description |
|---|---|
| providerREQUIRED | Provider id. |
| gameREQUIRED | Game slug / app id from /games. |
| regionREQUIRED | Same region as in /games. |
| packed_role_idGARENA | From /check-id. |
| urlSMILE.ONE | Game page path, for Smile.One games that need it. |
Many NetEase games have several servers (for example Identity V: Asia, NA and EU). Send the chosen host_id to /check-id and /orders. A game with a single server uses it automatically.
| Query | Description |
|---|---|
| providerREQUIRED | neteasegames |
| gameREQUIRED | Game slug from /games, e.g. identityv. |
| regionREQUIRED | A NetEase region, e.g. us. If the game isn't sold there, its own region is used. |
{ "success": true, "servers": [ { "host_id": "2001", "name": "Asia", "zone": "" }, { "host_id": "2011", "name": "NA and EU", "zone": "" } ], "count": 2 }Returns the player's nickname when the id is valid. For Garena it also returns packed_role_id to pass to /products and /orders. Always check before ordering.
| Query | Description |
|---|---|
| providerREQUIRED | Provider id. |
| regionREQUIRED | Same region as in /games. |
| gameREQUIRED | Game slug / app id. |
| user_idREQUIRED | In-game player id. |
| zone_idOPTIONAL | Server / zone, for games that use one (e.g. Mobile Legends). |
| host_idNETEASE | Game server id, only for NetEase games that have several servers. Leave out for the default server. |
| product_id, urlOPTIONAL | Some providers need these for the check. |
Places the order through your connected account. Returns 201 for a new order, or 200 with "idempotent": true when the reference was already used.
| Body | Description |
|---|---|
| providerREQUIRED | Provider id. |
| gameREQUIRED | Game slug / app id. |
| product_idREQUIRED | From /products. |
| user_idREQUIRED | Player id (player_id is also accepted). |
| zone_idOPTIONAL | Server / zone if the game needs one. |
| referenceRECOMMENDED | Your unique order id — see Idempotency. |
| regionREQUIRED | Same region as in /games and /products. |
| packed_role_id, channel_idGARENA | From /check-id. |
| host_idNETEASE | Game server id, same as for /check-id. NetEase orders are paid from your NetEase Credit. |
| urlSMILE.ONE | Game page path, for Smile.One games that need it. |
curl -X POST "$BASE/api/v2/orders" \
-H "x-api-key: sk_live_..." -H "content-type: application/json" \
-d '{"provider":"smileone","region":"br","game":"mobilelegends",
"product_id":"212","user_id":"123456789","zone_id":"2214",
"reference":"order-0001"}'{
"success": true,
"idempotent": false,
"order": {
"id": "6f1c2a9e-...",
"reference": "order-0001",
"provider": "smileone",
"game": "mobilelegends",
"product_id": "212",
"player_id": "123456789",
"zone_id": "2214",
"status": "success",
"upstream_order_id": "SO123456789",
"fee_usd": 0.05,
"created_at": "2026-11-06T08:00:00.000Z"
},
"fee_balance": 9.95
}status is success or failed. A failed order returns an error (ORDER_FAILED, SESSION_EXPIRED or UPSTREAM_ERROR) and its fee is refunded to your wallet.• Smile.One BR Mobile Legends:
16642x2 … 16642x10 (Weekly Diamond Pass 2 to 10 times), and 23+16642 and 25+16642 (diamonds, then the Weekly Diamond Pass).• Garena MY Free Fire:
8067x2 … x10 (Monthly Membership), 67386x2 … x10 (Weekly Lite), 8066x2 … x10 (Weekly Membership), and 8067+67386+8066 (all three).• Garena SG Free Fire:
35642x2 … x10 (Monthly Membership), 67383x2 … x10 (Weekly Lite), 35637x2 … x10 (Weekly Membership), and 35642+67383+35637 (all three).A Garena x10 can take several minutes, so keep your request open, or send a
reference and look the order up with it.Their price and fee are the sum of their parts. The order adds
quantity and delivered, and upstream_order_id lists every shop order ID, comma-separated. If a pass fails partway, the order stops there with status partial. The passes already delivered stay delivered, you pay the fee only for those, and the rest is refunded.Fetch an order by its id or by your reference. Smile.One orders refresh their upstream_status from the provider when fetched.
| Query | Description |
|---|---|
| limitOPTIONAL | 1–100, default 20. Newest first. |
With no query, returns your fee wallet as fee_balance. With ?provider= and region (required with a provider), also returns the connected account's upstream balance — available for Smile.One and Garena; Midasbuy and NetEase Games balances can't be read.
Redeems Smile.One voucher codes (Smile Cards) straight into the Smile Coin balance of your connected Smile.One account. Each code is checked first; only valid codes are redeemed. Every Smile.One region has its own Smile Coin balance and a code only works in its own country, so region is required: a code for another country is refused before it is used (wrong_region). Up to 20 codes per call (they are sent one at a time, so a full batch takes up to a minute); at most 60 codes per 10 minutes. Codes are never stored in full.
POST /api/v2/vouchers/check takes the same body and only looks the codes up (value and country) without using them. GET /api/v2/vouchers lists your last redemptions.
| Body | Description |
|---|---|
| regionREQUIRED | The Smile.One region whose balance receives the coins, e.g. br, ph, id (see /providers). |
| codesREQUIRED | An array of codes, or one text with a code per line. Codes are 11 or more letters and digits. |
curl -X POST "$BASE/api/v2/vouchers/redeem" -H "x-api-key: sk_live_..." -H "content-type: application/json" -d '{"region":"br","codes":["ABCDEFGHIJK","LMNOPQRSTUV"]}'{ "success": true, "region": "br", "count": 2, "redeemed": 1,
"balance_before": 120, "balance_after": 1120,
"coins_by_country": { "Brasil(Brazil)": 1000 },
"results": [
{ "code": "ABCD…IJK", "status": "redeemed", "coins": 1000, "country": "Brasil(Brazil)" },
{ "code": "LMNO…TUV", "status": "used", "message": "This voucher code was already used." }
] }Each result's status: redeemed, valid (check only), used, invalid, illegal (not bought from an official seller), wrong_region (the code is for another country), failed or error. /vouchers/check also returns the region's current balance.
