API Documentation
Automated Free Fire UniPin & Garena Shell top-up API
Overview
Register an account and generate an API key from your dashboard to integrate automated top-up delivery directly into your own application, shop, or bot.
https://mail.aurponff.com/api
Authentication
Every request must include your api_key as a field in
the request (JSON body for POST, query string for GET). Your key is issued automatically
when you register and is visible on your dashboard.
{
"api_key": "AMz-XXXXXXXXXXXXXXXXXXXXXXXX",
...
}
Every successfully processed order deducts the amount above from your wallet balance.
If your balance is too low, /api/topup and
/api/topup-instant return 402 Payment Required.
Top up your wallet from the dashboard. /api/search is always free.
UniPin Voucher — Async
/api/topup
Redeems one or more UniPin voucher codes for a Free Fire player. Returns immediately with a
"processing" status; the final result is POSTed to your url once it's ready.
Send no package field — its absence is what tells the API this is a UniPin order.
| Field | Required | Description |
|---|---|---|
| api_key | Yes | Your account's API key |
| orderid | Yes | Your own unique order reference |
| playerid | Yes | Free Fire player UID |
| code | Yes | Voucher serial/PIN(s), comma-separated for multiple |
| url | Yes | Your webhook URL for the final result |
curl -X POST https://mail.aurponff.com/api/topup \
-H "Content-Type: application/json" \
-d '{
"api_key": "AMz-XXXXXXXXXXXXXXXXXXXXXXXX",
"orderid": "order-001",
"playerid": "123456789",
"code": "BDMB-T-S-01234567 1234-5678-9012-3456",
"url": "https://your-webhook.com/callback"
}'
200 OK
{ "status": "processing" }
{
"status": "success",
"orderid": "order-001",
"nickname": "PlayerName",
"content": {
"batch": [
{ "uc": "BDMB-T-S-01234567 1234-5678-9012-3456", "ok": true, "detail": "Success" }
]
}
}
UniPin Voucher — Instant
/api/topup-instant
Same as UniPin Async above, but synchronous — the final result comes back directly in this
HTTP response. Do not send a url field, and don't send
package — its absence marks this as a UniPin order.
curl -X POST https://mail.aurponff.com/api/topup-instant \
-H "Content-Type: application/json" \
-d '{
"api_key": "AMz-XXXXXXXXXXXXXXXXXXXXXXXX",
"orderid": "order-002",
"playerid": "123456789",
"code": "BDMB-T-S-01234567:1234-5678-9012-3456"
}'
{
"status": "success",
"orderid": "order-002",
"content": {
"batch": [
{ "uc": "BDMB-T-S-01234567:1234-5678-9012-3456", "ok": true, "detail": "Success" }
]
},
"nickname": "PlayerName"
}
Garena Shell — Async
/api/topup
Purchases a Garena Shell package for a Free Fire player. Returns immediately with a
"processing" status; the final result is POSTed to your url once it's ready.
Sending a package field is what tells the API this is a Shell order.
| Field | Required | Description |
|---|---|---|
| api_key | Yes | Your account's API key |
| orderid | Yes | Your own unique order reference |
| playerid | Yes | Free Fire player UID |
| code | Yes | Shop code — see region table below |
| package | Yes | Package alias — see region table below |
| username | Yes | Garena account username |
| password | Yes | Garena account password |
| autocode | No | OTP/secret key, if required |
| qty | No | Quantity (default 1) |
| url | Yes | Your webhook URL for the final result |
curl -X POST https://mail.aurponff.com/api/topup \
-H "Content-Type: application/json" \
-d '{
"api_key": "AMz-XXXXXXXXXXXXXXXXXXXXXXXX",
"orderid": "shell-001",
"playerid": "123456789",
"code": "shell",
"package": "lvl6",
"username": "garena_username",
"password": "garena_password",
"url": "https://your-webhook.com/callback"
}'
Garena Shell — Instant
/api/topup-instant
Same as Shell Async above, but synchronous — the final result comes back directly in this
HTTP response. Do not send a url field. If the provider
is busy you'll get a 503 — fall back to
/api/topup in that case.
curl -X POST https://mail.aurponff.com/api/topup-instant \
-H "Content-Type: application/json" \
-d '{
"api_key": "AMz-XXXXXXXXXXXXXXXXXXXXXXXX",
"orderid": "shell-002",
"playerid": "123456789",
"code": "shell",
"package": "lvl6",
"username": "garena_username",
"password": "garena_password"
}'
{
"status": "success",
"orderid": "shell-002",
"content": {
"batch": [
{ "package": "LVL6", "ok": true, "detail": "Success" }
]
},
"nickname": "PlayerName"
}
{
"error": "Server busy — use /api/topup instead.",
"code": "SERVER_BUSY"
}
Check Order Status
/api/search
Query the status of a previously placed order by orderid
or playerid. Doesn't count against your request limit.
curl -X GET "https://mail.aurponff.com/api/search?api_key=AMz-XXXXXXXXXXXXXXXXXXXXXXXX&orderid=order-001"
Shell Region & Package Codes
BD Server — code: shell
lite, weekly, monthly, fulllevelup, lvl6, lvl10, lvl15, lvl20, lvl25, lvl30, 115, 240, 610, 1240, 2530
SG Server — code: sgshell
lite, weekly, monthly, fulllevelup, lvl6, lvl10, lvl15, lvl20, lvl25, lvl30, 25, 100, 310, 520, 1060, 2180, 5600, 11500
MY Server — code: myshell
lite, weekly, monthly, fulllevelup, lvl6, lvl10, lvl15, lvl20, lvl25, lvl30, 25, 100, 310, 520, 1060, 2180, 5600, 11500, 115, 240, 610, 1240, 2530
Indonesia Server — code: indoshell
weekly, monthly, bp, lite, fulllevelup, lvl6, lvl10, lvl15, lvl20, lvl25, lvl30, 5, 50, 70, 140, 355, 720, 7290, 36500, 73100, 115, 240, 610, 1240, 2530
Response Values
| Detail | Meaning |
|---|---|
| Consumed Voucher | Voucher was already used |
| Uid is invalid | The provided Player ID doesn't exist |
| Invalid PIN | The voucher serial/PIN is incorrect |
| Wrong OTP | Garena account OTP/autocode was rejected |
A batch can also return an overall success,
failed, or partial
status — check each item's ok field individually when it's partial.