Zad Top HTTP API

Connect your shop, website, or bot to the same redeem engine that runs @ZadTopBot. One key to authenticate, asynchronous redeem and check jobs, and a detailed result for every code.

Base URL

https://api.zadtop.com

Get a key

  1. Open @ZadTopBot → Subscription → HTTP API.
  2. Hold an active plan together with the API add-on, 15 USDT per 30 days.
  3. Tap New API key. Creating a key revokes the previous one immediately.

Authentication

Send the key in an X-API-Key header on every request. Access pauses when either your plan or the API add-on expires, and resumes on renewal with the same key.

X-API-Key: pk_YOUR_KEY_HERE

How jobs work

Redeems and bulk checks are asynchronous. A POST validates your request and returns a job_id straight away; you then read the result from GET /v1/jobs/{id} — or add ?wait=25 so the request returns as soon as the job finishes, instead of polling.

A job reaching done does not mean every card succeeded. It means the work was carried out. The outcome of each card is in results[].success and, on failure, err_code.

curl -sS -X POST https://api.zadtop.com/v1/jobs/instant-redeem \
  -H "X-API-Key: pk_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"player_id":"2186053213","codes":["4233939008625064"],"game":"freefire"}'

Check codes without redeeming

Each card comes back with a status — valid, used, invalid and a few more — and with with_value the pack it is worth. Nothing is redeemed, so a good card stays good.

curl -sS -X POST https://api.zadtop.com/v1/codes/check \
  -H "X-API-Key: pk_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"codes":["7397062240255931","5539151276341494"],"with_value":true}'

Main routes

POST/v1/jobs/instant-redeemRedeem Free Fire, PUBG, Yalla Ludo or Jawaker codes for a player ID.
POST/v1/jobs/stock-redeemRedeem from your stored stock by choosing packs.
POST/v1/codes/checkRead up to 20 cards without redeeming them.
POST/v1/jobs/code-checkThe same check for up to 200 cards, as a job.
GET/v1/player/lookupThe in-game name and region for a player ID.
GET/v1/jobs/{id}The state and result of one job.
GET/v1/stock/summaryWhat you hold, per game and per pack.
POST/v1/order/screenshotThe shop's order confirmation as a PNG.
GET/v1/me · /v1/quota · /v1/history · /v1/playersAccount, remaining allowance, past orders, saved players.
POST/v1/subscription/purchase · purchase-api-addonBuy or extend a plan from your USDT balance.

Games

The same routes serve every game — change game. Full shapes, packs and errors are in the API reference and on the game pages.

freefire16-digit code · ID 6–12 · check + redeem + lookup
pubg18-character code · ID 8–11 starting with 5 · check + redeem + lookup
ludo / ludogold12-character code · ID 6–16 · redeem with tier (no standalone check)
jawaker10-character voucher or 12-character Mintroute pin · ID 6–12 · redeem + lookup (no standalone check)

Daily allowance

Every plan carries a daily request allowance that resets at midnight UTC. A redeem costs 1 request per code, charged when the worker runs. A card check costs 1 as well, for each card the shop gave a verdict on. A player lookup costs 0.25. What is charged is the answer you asked for, so a refusal from the shop counts; only a failure on our side — network, captcha, a blocked session — is returned to your allowance automatically. The bot charges the same price for a redeem and a card check, from the same allowance.

Errors

Validation answers 400 with a code inside detail.error; authentication answers 401 or 403; too many calls answer 429. During a safe restart new jobs answer 503 SERVICE_DRAINING — retry shortly. The complete list of statuses, structured error codes, and per-code err_code values is in the full reference.

Regions

Players from almost every country are supported. Where Garena sells no vouchers at all — the United States, Argentina, Chile and Russia — a player lookup answers 422 UNSUPPORTED_REGION, before a single code is at risk.