Free Fire top-up API documentation
A simple JSON API to send Free Fire diamonds and memberships to a player in Malaysia, Singapore, the Philippines, Vietnam or Indonesia. Every order verifies the player first and returns the Garena order ID.
Authentication
Create an API key in the panel under API & bot and send it with every request:
X-Api-Key: apifire_xxxxxxxxxxxxxxxxxxxxxxxx
Base URL: https://api.apifire.net. All requests and responses are JSON.
Place an order
POST /api/topup
Content-Type: application/json
X-Api-Key: apifire_...
{
"region": "MY", // MY | SG | PH | VN | ID
"player_id": "43434344343", // 8–12 digit Free Fire ID
"item_id": "100", // item code, see table below
"order_ref": "shop-000123" // optional, makes retries safe
}Successful response:
{
"error": false,
"msg": "success",
"data": {
"order_id": "4823019938",
"region": "MY",
"player_id": "43434344343",
"player": "NickFF",
"item_id": "100",
"item_name": "100 Diamond",
"product": "Free Fire MY — 100 Diamond",
"when": "15-10-2026 04:33 PM",
"status": "Success"
}
}An order usually takes 15–45 seconds (player check + payment). Use a client timeout of at least 180 seconds. Sending the same order_ref again returns the original result instead of paying twice.
Python example:
import requests
r = requests.post(
"https://api.apifire.net/api/topup",
headers={"X-Api-Key": "apifire_..."},
json={"region": "SG", "player_id": "43434344343", "item_id": "Weekly", "order_ref": "order-001"},
timeout=180,
)
print(r.json())Bulk orders
Up to 20 orders per request, one per line or comma-separated, in the format PLAYERID REGION-ITEM. Different regions are processed in parallel.
POST /api/bot/order
X-Api-Key: apifire_...
{ "orders": "43434344343 ph-100,43434344343 sg-Weekly,43434344343 id-50" }
→ { "error": false, "msg": "3 ok",
"data": { "total": 3, "ok": 3, "failed": 0, "results": [ … ] } }Order status
GET /api/topup/status?order_ref=shop-000123 X-Api-Key: apifire_...
Also accepts ?order_id=. Your full history is at GET /api/orders.
Item codes
Use the code in item_id (or after the region in bulk orders, e.g. sg-Weekly). Codes are not case-sensitive.
| item_id | Package | Bulk example |
|---|---|---|
25 | 25 Diamond | 43434344343 my-25 |
100 | 100 Diamond | 43434344343 my-100 |
310 | 310 Diamond | 43434344343 my-310 |
520 | 520 Diamond | 43434344343 my-520 |
1060 | 1060 Diamond | 43434344343 my-1060 |
2180 | 2180 Diamond | 43434344343 my-2180 |
5600 | 5600 Diamond | 43434344343 my-5600 |
11500 | 11500 Diamond | 43434344343 my-11500 |
Weekly | Weekly Membership | 43434344343 my-Weekly |
WeeklyLite | Weekly Lite Membership | 43434344343 my-WeeklyLite |
Monthly | Monthly Membership | 43434344343 my-Monthly |
All regions in one list
Free Fire Malaysia (MY): 25 — 25 Diamond · 100 — 100 Diamond · 310 — 310 Diamond · 520 — 520 Diamond · 1060 — 1060 Diamond · 2180 — 2180 Diamond · 5600 — 5600 Diamond · 11500 — 11500 Diamond · Weekly — Weekly Membership · WeeklyLite — Weekly Lite Membership · Monthly — Monthly Membership
Free Fire Singapore (SG): 25 — 25 Diamond · 100 — 100 Diamond · 310 — 310 Diamond · 520 — 520 Diamond · 1060 — 1060 Diamond · 2180 — 2180 Diamond · 5600 — 5600 Diamond · 11500 — 11500 Diamond · Weekly — Weekly Membership · WeeklyLite — Weekly Lite Membership · Monthly — Monthly Membership
Free Fire Philippines (PH): 20 — 20 Diamond · 40 — 40 Diamond · 100 — 100 Diamond · 205 — 205 Diamond · 420 — 420 Diamond · 650 — 650 Diamond · 1100 — 1100 Diamond · 2250 — 2250 Diamond
Free Fire Vietnam (VN): 25 — 25 Diamond · 51 — 51 Diamond · 113 — 113 Diamond · 283 — 283 Diamond · 566 — 566 Diamond · 1132 — 1132 Diamond · 2830 — 2830 Diamond · Weekly — Weekly Membership · WeeklyLite — Weekly Lite Membership · Monthly — Monthly Membership · Booyah — Booyah Card
Free Fire Indonesia (ID): 5 — 5 Diamond · 50 — 50 Diamond · 70 — 70 Diamond · 140 — 140 Diamond · 355 — 355 Diamond · 720 — 720 Diamond · 7290 — 7290 Diamond · 36500 — 36500 Diamond · 73100 — 73100 Diamond · Weekly — Weekly Membership · Monthly — Monthly Membership · Booyah — Booyah Card
Responses & errors
Every response has error (true/false), msg and data. Failed orders do not use a request credit.
{ "error": true, "msg": "No request credits left — buy a plan on Billing.",
"data": { "no_credits": true } }
{ "error": true, "msg": "Duplicate blocked — same player/item already succeeded within 90s …",
"data": { "duplicate": true, "order_id": "…" } }401 | Missing or wrong API key |
no_credits | Plan used up or expired — buy a plan |
duplicate | Same player + item within 90 s; send "allow_duplicate": true if intended |
player_id must be 8–12 digits | Invalid Free Fire ID |
Unknown item_id | Code not in the table for that region |
Other endpoints
GET /api/products?region=MY | Package list for a region |
GET /api/orders | Order history (?q=, ?status=) |
GET /api/orders/{id} | Full details of one order |
GET /api/billing | Balance, request credits and plan |
Telegram bot
Link your Telegram ID in the panel, then order by chat with the same credits:
/sg 43434344343 100 region command 43434344343 ph-100 short format /ph 43434344343 100, 55667788990 20 /w 43434344343 your own shortcut (e.g. /w = SG Weekly)
Need an API key?
Create a free account to get the panel, API keys and the Telegram bot.