API DocumentationNexa API Documentation
Automated API for Free Fire UniPin vouchers and Garena Shells delivery.
https://api.teamnexa.shopOverview
Welcome to the Nexa API documentation. Integrate our automated topup service into your application to deliver Free Fire UniPin vouchers and Garena Shells seamlessly to your customers.
Base URL
All API requests must be made to this base URL.
Authentication
Every request to the Nexa API requires authentication using an API Key. You must include your API Key in the Authorization header of every request.
Errors & Status Codes
All error responses return JSON with a human-readable error message and a machine-readable code.
{ "status": "failed", "error": "Human readable message", "code": "MACHINE_CODE" }
| HTTP | Code | Meaning |
|---|---|---|
| 401 | UNAUTHORIZED | Missing or invalid API key |
| 402 | INSUFFICIENT_CREDITS | API key has no credits remaining |
| 400 | INVALID_INPUT | Missing required field or wrong type |
| 400 | INVALID_PLAYERID | playerid must be 6–12 digits |
| 400 | INVALID_VOUCHER | code field missing or malformed |
| 400 | INVALID_PACKAGE | Unknown package for the chosen shop |
| 400 | MISSING_PACKAGE | package field missing for shell orders |
| 409 | ORDER_IN_FLIGHT | Same orderid is already processing |
| 429 | RATE_LIMITED | Too many requests |
| 503 | SHELL_UNAVAILABLE | Shell shop not configured or unavailable |
| 503 | QUEUE_FULL | Server queue full — retry shortly |
| 503 | SERVER_BUSY | Instant endpoint at capacity — use /topup |
POST /topup
Unipin Voucher Top-up
Redeems one or more UniPin voucher codes for a Free Fire player. This is the async endpoint — it accepts the order, responds immediately with processing, then sends the final result to your url as a webhook callback.
Body parameters
orderid
Your unique order ID (1–128 chars). Used to track this order and match the webhook callback. required
playerid
The Free Fire player UID being topped up. Must be 6–12 digits. required
code
One or more UniPin voucher codes, comma-separated (max 5). Each code is SERIAL PIN format (serial and pin separated by a space). Example: UPBD-Q-S-02710989 4333-3334-6353-3344. required
url
your webhook URL. The order result is POSTed here when processing finishes. required
Example request
curl -X POST https://api.teamnexa.shop/topup \
-H "Authorization: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"orderid": "order-001",
"playerid": "5006149700",
"code": "UPBD-Q-S-02710989 4333-3334-6353-3344, UPBD-T-S-01885045 6591-4164-9992-5148",
"url": "https://your-webhook.com/callback"
}'
Immediate response
The server accepts the order and starts processing in the background.
200 OK
status: processing
Callback — all success
Sent to your url once every voucher in the batch has been redeemed.
webhook POST
{
"status": "success",
"orderid": "order-001",
"nickname": "KG MIRAZ ツ",
"content": {
"batch": [
{
"uc": "UPBD-Q-S-02710989 4333-3334-6353-3344",
"ok": true,
"detail": "✅ Success"
},
{
"uc": "UPBD-T-S-01885045 6591-4164-9992-5148",
"ok": true,
"detail": "✅ Success"
}
],
"callback_url": "https://your-webhook.com/callback"
}
}
Callback — all failed
webhook POST
{
"status": "failed",
"orderid": "order-001",
"nickname": "KG MIRAZ ツ",
"content": {
"batch": [
{
"uc": "UPBD-Q-S-02710989 4333-3334-6353-3344",
"ok": false,
"detail": "❌ Consumed Voucher"
},
{
"uc": "UPBD-T-S-01885045 6591-4164-9992-5148",
"ok": false,
"detail": "❌ Consumed Voucher"
}
],
"callback_url": "https://your-webhook.com/callback"
}
}
Callback — partial success
Some vouchers redeemed, others failed. Check each batch item's ok field individually.
webhook POST
{
"status": "partial",
"orderid": "order-001",
"nickname": "KG MIRAZ ツ",
"content": {
"batch": [
{
"uc": "UPBD-Q-S-02710989 4333-3334-6353-3344",
"ok": true,
"detail": "✅ Success"
},
{
"uc": "UPBD-T-S-01885045 6591-4164-9992-5148",
"ok": false,
"detail": "❌ Consumed Voucher"
}
],
"callback_url": "https://your-webhook.com/callback"
}
}
Possible detail values
❌ Consumed Voucher
Voucher was already used
Uid is invalid
The provided Player ID doesn't exist
Invalid PIN
The voucher serial/PIN is incorrect
POST /topup-instant
Unipin Voucher Top-up — Instant
Same Unipin redemption, but synchronous: the full result comes back in the HTTP response itself. No url field, no callback — useful when you would rather wait on the request than handle a webhook.
Example request
Note the codes use a colon SERIAL:PIN format on this endpoint.
curl -X POST https://api.teamnexa.shop/topup-instant \
-H "Authorization: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"orderid": "order-002",
"playerid": "5006149700",
"code": "UPBD-Q-S-02710989:4333-3334-6353-3344,UPBD-T-S-01885045:6591-4164-9992-5148"
}'
Response — all success
200 OK
{
"status": "success",
"orderid": "order-002",
"nickname": "KG MIRAZ ツ",
"content": {
"batch": [
{ "uc": "UPBD-Q-S-02710989 4333-3334-6353-3344", "ok": true, "detail": "✅ Success" },
{ "uc": "UPBD-T-S-01885045 6591-4164-9992-5148", "ok": true, "detail": "✅ Success" }
]
}
}
Response — all failed / partial
Same batch shape as the async endpoint — see the /topup examples above for the all-failed and partial-success formats. The same detail values apply.
POST /topup
Shell Top-up (Async)
Tops up Garena Shell on SG, MY, or Indonesia shop backend. Uses the same /topup endpoint — the code field switches it into shell mode. Async — responds immediately with accepted, then POSTs the result to your url.
Request Body (JSON)
orderid
Your unique system order ID. Required
playerid
The customer's Free Fire UID. Required
code
Shop selector: sgshell (Singapore), myshell (Malaysia), indoshell (Indonesia). Required
package
Package alias (e.g. lite, weekly). Required
username
Garena account username. Optional (falls back to saved account)
password
Garena account password. Optional (falls back to saved account)
autocode
Your secret OTP/auth key for the account. Optional (falls back to saved account)
qty
Quantity (default is 1). Optional
url
Your webhook URL for the callback. Required
Example Request
curl -X POST https://api.teamnexa.shop/topup \
-H "Authorization: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"orderid": "shell-001",
"playerid": "123456789",
"code": "shell",
"package": "lvl6",
"qty": 1,
"username": "your_username",
"password": "your_password",
"autocode": "your_secret_key",
"url": "https://your-webhook.com/callback"
}'
Webhook Response
{
"status": "success",
"orderid": "shell-001",
"nickname": "KG MIRAZ ツ",
"content": {
"batch": [
{ "package": "LITE", "ok": true, "detail": "Success" }
]
}
}
POST /topup-instant
Shell Top-up (Instant)
Same shell payload as async /topup, but synchronous. Drop the url field — the result comes back immediately in the HTTP response. If the instant endpoint is at capacity, returns 503 SERVER_BUSY.
Example Request
curl -X POST https://api.teamnexa.shop/topup-instant \
-H "Authorization: your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"orderid": "shell-001",
"playerid": "123456789",
"code": "shell",
"package": "lvl6",
"qty": 1,
"username": "your_username",
"password": "your_password",
"autocode": "your_secret_key"
}'
Response — success (single)
{
"status": "success",
"orderid": "shell-002",
"nickname": "KG MIRAZ ツ",
"content": {
"batch": [
{ "package": "LITE", "ok": true, "detail": "Success" }
]
}
}
Response — multiple qty (partial)
{
"status": "failed",
"orderid": "shell-002",
"nickname": "KG MIRAZ ツ",
"content": {
"batch": [
{ "package": "LITE", "ok": true, "detail": "Success" },
{ "package": "LITE", "ok": false, "detail": "Provider Rejected" }
]
}
}
Response — server busy
{ "status": "failed", "error": "Instant endpoint busy — use /topup instead.", "code": "SERVER_BUSY" }
GET /search
Search previous orders by orderid or playerid. Returns matching orders from your account.
By Order ID
curl -X GET "https://api.teamnexa.shop/search?orderid=shell-001" \ -H "Authorization: your_api_key_here"
By Player ID
curl -X GET "https://api.teamnexa.shop/search?playerid=5006149700" \ -H "Authorization: your_api_key_here"
Example response — Shell order
{
"count": 1,
"results": [
{
"orderid": "shell-001",
"playerid": "5006149700",
"status": "success",
"shop_code": "sgshell",
"package": "lite",
"qty": 1,
"nickname": "KG MIRAZ ツ",
"created_at": "2026-08-21T09:30:39.000Z",
"items": [
{ "package": "LITE", "ok": true, "detail": "Success" }
]
}
]
}
Example response — UniPin order
{
"count": 1,
"results": [
{
"orderid": "order-001",
"playerid": "5006149700",
"status": "success",
"shop_code": "voucher",
"qty": 2,
"nickname": "KG MIRAZ ツ",
"created_at": "2026-08-21T09:41:22.000Z",
"items": [
{ "uc": "UPBD-Q-S-02710989 4333-3334-6353-3344", "ok": true, "detail": "✅ Success" },
{ "uc": "UPBD-T-S-01885045 6591-4164-9992-5148", "ok": true, "detail": "✅ Success" }
]
}
]
}
Shell Package Reference
package field. Each shop supports different packages — check the shop-specific sections.
| Package Code | Package |
|---|---|
| lite / weeklylite | Weekly Lite |
| weekly | Weekly Membership |
| monthly | Monthly Membership |
| 115 | 115 Diamonds |
| 240 | 240 Diamonds |
| 610 | 610 Diamonds |
| 1240 | 1240 Diamonds |
| 2530 | 2530 Diamonds |
| lvl6 - lvl30 | Level Up packs |
| 108588 - 108593 | Level Up (numeric aliases) |
Indonesia Server
| Package Code | Package |
|---|---|
| weekly | Weekly Membership |
| monthly | Monthly Membership |
| 5, 50, 70, 140... | Indo Diamonds (5, 50, 70, 140, 355, 720, 7290, 36500, 73100) |
| 115, 240, 610... | BD Fallback Diamonds (115, 240, 610, 1240, 2530) |
| fulllevelup | Full Level Up Pass |
| lvl6 - lvl30 | Specific Tier (lvl6, 10, 15, 20, 25, 30) |
| 5 | 5 Diamonds |
| 50 | 50 Diamonds |
| 70 | 70 Diamonds |
| 140 | 140 Diamonds |
| 355 | 355 Diamonds |
| 720 | 720 Diamonds |
| 7290 | 7290 Diamonds |
| 36500 | 36500 Diamonds |
| 73100 | 73100 Diamonds |
Singapore Server
| Package Code | Package |
|---|---|
| lite / weeklylite | Weekly Lite |
| weekly | Weekly Membership |
| monthly | Monthly Membership |
| 25, 100, 310, 520... | SG Diamonds (25, 100, 310, 520, 1060, 2180, 5600, 11500) |
| fulllevelup | Full Level Up Pass |
| lvl6 - lvl30 | Specific Tier (lvl6, 10, 15, 20, 25, 30) |
| 25 | 25 Diamonds |
| 100 | 100 Diamonds |
| 310 | 310 Diamonds |
| 520 | 520 Diamonds |
| 1060 | 1060 Diamonds |
| 2180 | 2180 Diamonds |
| 5600 | 5600 Diamonds |
| 11500 | 11500 Diamonds |
Malaysia Server
| Package Code | Package |
|---|---|
| lite / weeklylite | Weekly Lite |
| weekly | Weekly Membership |
| monthly | Monthly Membership |
| 25, 100, 310, 520... | MY Diamonds (25, 100, 310, 520, 1060, 2180, 5600, 11500) |
| 115, 240, 610... | BD Fallback Diamonds (115, 240, 610, 1240, 2530) |
| fulllevelup | Full Level Up Pass |
| lvl6 - lvl30 | Specific Tier (lvl6, 10, 15, 20, 25, 30) |