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_idPackageBulk example
2525 Diamond43434344343 my-25
100100 Diamond43434344343 my-100
310310 Diamond43434344343 my-310
520520 Diamond43434344343 my-520
10601060 Diamond43434344343 my-1060
21802180 Diamond43434344343 my-2180
56005600 Diamond43434344343 my-5600
1150011500 Diamond43434344343 my-11500
WeeklyWeekly Membership43434344343 my-Weekly
WeeklyLiteWeekly Lite Membership43434344343 my-WeeklyLite
MonthlyMonthly Membership43434344343 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": "…" } }
401Missing or wrong API key
no_creditsPlan used up or expired — buy a plan
duplicateSame player + item within 90 s; send "allow_duplicate": true if intended
player_id must be 8–12 digitsInvalid Free Fire ID
Unknown item_idCode not in the table for that region

Other endpoints

GET /api/products?region=MYPackage list for a region
GET /api/ordersOrder history (?q=, ?status=)
GET /api/orders/{id}Full details of one order
GET /api/billingBalance, 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.