Base URL

https://api.novatopup.com

All API requests require an API key sent via the x-api-key header.

Authentication

Every request must include your API key in the header:

curl -H "x-api-key: ntk_your_api_key_here" \
  https://api.novatopup.com/api/v1/status

Important: Keep your API key secret. Never share it in client-side code, public repos, or chat messages.

Topup API

POST/api/v1/topup

Send a diamond topup to a Free Fire player.

Request Body

{
  "player_id": "10133799447",
  "product": "FF100",
  "region": "MY",
  "idempotency_key": "order_abc123"
}

Success Response (200)

{
  "ok": true,
  "status": "success",
  "transaction_id": "TXN_123456",
  "nickname": "PlayerName",
  "shells_charged": 385,
  "duration": 4.2
}

Parameters

FieldTypeRequiredDescription
player_idstringYesFree Fire player UID
productstringYesProduct code (see Products section)
regionstringNoSG or MY (default: MY)
idempotency_keystringNoUnique key to prevent duplicate charges

Redeem API

POST/api/v1/redeem

Redeem prepaid PIN codes to add shells to the linked Garena account. Supports single PIN or bulk (up to 100 PINs per request).

Single PIN

{
  "pin": "XXXX-XXXX-XXXX-XXXX",
  "region": "SG"
}

Bulk Redeem (up to 100 PINs)

{
  "pins": [
    "XXXX-XXXX-XXXX-XXXX",
    "YYYY-YYYY-YYYY-YYYY",
    "ZZZZ-ZZZZ-ZZZZ-ZZZZ"
  ],
  "region": "SG"
}

Parameters

FieldTypeRequiredDescription
pinstring*Single PIN code to redeem
pinsstring[]*Array of PIN codes (max 100)
regionstringYesSG or MY

* Either pin or pins is required. If both are provided, pins takes priority.

Success Response (200)

{
  "success": true,
  "total": 3,
  "succeeded": 2,
  "failed": 1,
  "durationSeconds": 4.5,
  "region": "SG",
  "results": [
    {
      "pin": "XXXX-XXXX-XXXX-XXXX",
      "status": "success",
      "success": true,
      "transactionId": "123456",
      "shellsAdded": "330",
      "message": "Redeemed! +330 Shells (tx 123456)"
    },
    {
      "pin": "YYYY-...",
      "status": "invalid_pin",
      "success": false,
      "message": "Invalid or expired PIN"
    }
  ]
}

Bulk Limitations

  • Maximum 100 PINs per request
  • Each PIN counts against your monthly redeem limit
  • Timeout scales with PIN count (~15s per PIN)
  • If CAPTCHA is triggered, remaining PINs may fail

Level Up Pass Eligibility Check

POST/api/v1/levelup-checkFREE

Check which Level Up Pass tiers a player is eligible to purchase. This is a read-only check — no shells are charged and nothing is purchased. All 6 tiers (Level 6, 10, 15, 20, 25, 30) are checked in a single request. Included free with the Full Plan.

Request Body

{
  "player_id": "13565228584",
  "region": "MY"
}

Parameters

FieldTypeRequiredDescription
player_idstringYesFree Fire player UID (5-15 digits)
regionstringNoSG or MY (default: MY)

Success Response (200)

{
  "success": true,
  "player_id": "13565228584",
  "nickname": "NARUTO•™##",
  "region": "MY",
  "results": {
    "level6":  { "name": "Level Up Pass - Level 6",  "eligible": true },
    "level10": { "name": "Level Up Pass - Level 10", "eligible": false },
    "level15": { "name": "Level Up Pass - Level 15", "eligible": true },
    "level20": { "name": "Level Up Pass - Level 20", "eligible": true },
    "level25": { "name": "Level Up Pass - Level 25", "eligible": true },
    "level30": { "name": "Level Up Pass - Level 30", "eligible": true }
  },
  "duration_seconds": 3.2
}

How it works

  • eligible: true — player can purchase this Level Up Pass tier
  • eligible: false — player already owns this tier or is above that level
  • This endpoint does NOT count against your topup or redeem limits
  • Typical response time: 2-5 seconds

Status

GET/api/v1/status

Check your subscription status and API usage.

{
  "ok": true,
  "subscription": {
    "topup_used": 150,
    "topup_limit": 10000,
    "redeem_used": 42,
    "redeem_limit": 200,
    "includes_topup": true
  }
}

Packages

GET/api/v1/packages

List available diamond topup packages with product codes and shell costs for both MY and SG regions.

Query Parameters

ParamDescription
regionSG or MY — sets the default shells field. Both shellsMY and shellsSG are always returned.

Response

{
  "success": true,
  "region": "MY",
  "packages": [
    {
      "product": "FF100",
      "name": "100 Diamonds",
      "region": "MY",
      "levelUp": false,
      "shells": 50,
      "shellsMY": 50,
      "shellsSG": 50
    }
  ]
}

Products

Available product codes for the product field in the Topup API. Shell costs differ between Malaysia (MY) and Singapore (SG).

Diamond Packages

Product CodeNameShells (MY)Shells (SG)
FF2525 Diamonds1313
FF100100 Diamonds5050
FF310310 Diamonds152150
FF520520 Diamonds254250
FF10601,060 Diamonds500500
FF21802,180 Diamonds1,0101,000
FF56005,600 Diamonds2,5002,500
FF1150011,500 Diamonds5,1505,000

Memberships

Product CodeNameShells (MY)Shells (SG)
WEEKLY_LITEWeekly Lite Membership1814
WEEKLYWeekly Membership8685
MONTHLYMonthly Membership430399

Level Up Passes

Product CodeNameShells (MY)Shells (SG)
LVL6Level Up Pass - Level 61616
LVL10Level Up Pass - Level 103434
LVL15Level Up Pass - Level 153434
LVL20Level Up Pass - Level 203434
LVL25Level Up Pass - Level 253434
LVL30Level Up Pass - Level 305050

Note: Level Up Passes are one-time purchases, only available if the player is below the specified level. Use the /api/v1/packages endpoint for the live catalog.

Error Codes

StatusErrorDescription
401unauthorizedMissing or invalid API key
403plan_requiredNo active subscription or plan doesn't include this feature
429limit_reachedMonthly request limit exceeded
400invalid_playerPlayer ID not found in the specified region
400invalid_pinPIN code is invalid or already used
400captcha_requiredCAPTCHA triggered — wait and retry
500engine_errorInternal processing error — retry after a moment