JinBot API
Home Garena Shell JinBot API Updates v1
JinBot-api.sh
$
>
Docs

JinBot API

The JinBot Merchant API gives you programmatic access to Unipin voucher purchasing, Garena Shell card purchasing, direct Free Fire top-ups, payment verification, and player lookups — all under one base URL with a single API key.

Base URL

base url
http://api.pinbot.shop

Sync vs Async: /uc and /shell are synchronous — they return voucher codes immediately in the response. /tp is async — it accepts the order and sends the result to your url webhook when done.

Authentication

Pass your API key in the X-API-Key header on every request. Your merchant ID goes in the query string.

headers
X-API-Key: fl_yourkey
query param
?merchant=YOUR_MERCHANT_ID

Contact your Unipin seller and bot developer to receive your API key and merchant ID.

Common Errors

ResponseStatusMeaning
{"detail": "Invalid API key"}401Wrong or missing API key
{"detail": "User not found"}401You are not signed up in the bot
{"detail": "orders is required"}400Item field was empty
{"detail": "currency must be bdt or usdt"}400Invalid currency value
{"detail": "USDT not active"}403USDT not enabled for your account
{"detail": "Unknown product: xyz"}400Invalid UC product code
{"detail": "Unknown shell products: xyz"}400Invalid shell product code
{"detail": "Price not configured"}400Price not set for your account
{"detail": "Baki system is off"}403Due/credit system disabled
{"error": "insufficient_balance"}402Not enough balance
{"error": "due_limit_exceeded"}402Due limit reached
{"error": "out_of_stock"}409Stock empty — retry in ~40s
GET /getinfo Sync

Free Fire Player Info

Look up any Free Fire player by UID and region. Returns the player's nickname instantly — useful for verification before placing a top-up order.

Query parameters

FieldTypeRequired
uidstringrequired
regionstringrequired
tokenstringrequired

region — e.g. BD, SG, MY, IND

Example request

curl
curl "http://api.pinbot.shop/getinfo?uid=2716319203�ion=BD&token=your_api_key"
POST /uc Sync

Buy Unipin Voucher Codes

Purchase Unipin voucher codes instantly. The response contains the actual voucher codes ready to deliver to your customer. No webhook needed — codes come back in the HTTP response.

Body parameters

FieldTypeRequired
itemstringrequired
currencystringrequired
creditstringrequired
orderidstringrequired

item — UC denomination and quantity, e.g. 80:5,161:2 (see item reference below).
currencybdt or usdt.
creditbalance (deduct from balance) or baki (use due/credit system).

Example — pay with balance

curl
curl -X POST "http://api.pinbot.shop/uc?merchant=7024464702" \
  -H "X-API-Key: fl_yourkey" \
  -H "Content-Type: application/json" \
  -d '{
    "item": "80:5,161:5,405:5",
    "currency": "bdt",
    "credit": "balance",
    "orderid": "191"
  }'

Response

200 OK
{
  "status": "success",
  "orderid": "191",
  "currency": "bdt",
  "payment": "balance",
  "total": 750.00,
  "balance_after": 250.00,
  "due_after": 0.0,
  "codes": {
    "80UC": {
      "label": "115 ",
      "codes": [
        "BDMB-J-S-03811638 5562-1363-6736-1546",
        "BDMB-J-S-03814108 8717-4446-3425-9452"
      ],
      "qty": 2,
      "price": 50.00
    },
    "161UC": {
      "label": "Weekly ",
      "codes": [
        "BDMB-Q-S-12511213 1111-7557-1794-1734"
      ],
      "qty": 1,
      "price": 60.00
    }
  }
}

Response — with due (baki) credit

When credit: "baki" and balance runs out, the shortfall is added to due_after.

200 OK
{
  "status": "success",
  "orderid": "191",
  "payment": "baki",
  "total": 750.00,
  "balance_after": 0.00,
  "due_after": 350.00,
  "codes": { "...": "same structure as above" }
}

UC Item Reference

Use these item codes in the item field, formatted as code:qty. Multiple items comma-separated.

Item CodeUC AmountDiamond Value
20:120 UC25
36:136 UC50
80:180 UC115
160:1160 UC240
161:1161 UCWeekly
405:1405 UC610
800:1800 UCMonthly
810:1810 UC1240
1625:11625 UC2530
2000:12000 UCWallet-loadable UC

Alternate aliases also accepted: 25:1 = 20UC, 50:1 = 36UC, 115:1 = 80UC, 240:1 = 160UC, weekly:1 = 161UC, 610:1 = 405UC, monthly:1 = 800UC, etc.

POST /shell Sync

Buy Garena Shell Codes

Purchase Garena Prepaid Card PINs (shell codes) instantly. Codes are returned directly in the response — no webhook.

Body parameters

FieldTypeRequired
itemstringrequired
currencystringrequired
creditstringrequired
orderidstringrequired

Example — single shell type

curl
curl -X POST "http://api.pinbot.shop/shell?merchant=7024464702" \
  -H "X-API-Key: fl_yourkey" \
  -H "Content-Type: application/json" \
  -d '{
    "item": "50:2",
    "currency": "bdt",
    "credit": "balance",
    "orderid": "192"
  }'

Response

200 OK
{
  "status": "success",
  "orderid": "192",
  "currency": "bdt",
  "payment": "balance",
  "total": 300.00,
  "balance_after": 700.00,
  "due_after": 0.0,
  "codes": {
    "50Sgshell": {
      "codes": ["SGSHELL-CODE-XXXXX", "SGSHELL-CODE-YYYYY"],
      "qty": 2,
      "price": 150.00
    }
  }
}

Example — multiple shell types

curl
"item": "50:2,100:1"
200 OK
{
  "status": "success",
  "orderid": "192",
  "total": 450.00,
  "balance_after": 550.00,
  "codes": {
    "50Sgshell": { "codes": ["SGSHELL-XXXXX","SGSHELL-YYYYY"], "qty": 2, "price": 150.00 },
    "100Sgshell": { "codes": ["SGSHELL-ZZZZZ"], "qty": 1, "price": 150.00 }
  }
}

Shell Code Item Reference

Item CodeProductRegion
50:150SgshellSingapore
100:1100SgshellSingapore
250:1250SgshellSingapore
320:1320SgshellSingapore
1000:11000SgshellSingapore
33:133IndoshellIndonesia
66:166IndoshellIndonesia
165:1165IndoshellIndonesia
330:1330IndoshellIndonesia
65:165MyshellMalaysia
130:1130MyshellMalaysia
260:1260MyshellMalaysia
390:1390MyshellMalaysia
650:1650MyshellMalaysia
1300:11300MyshellMalaysia
2600:12600MyshellMalaysia
POST /tp Async · Webhook

Direct Top-up

Top up a Free Fire player directly — UC diamonds via Unipin vouchers, or Garena Shell packages. Unlike /uc and /shell, this endpoint is async: it returns processing immediately and POSTs the full result to your url when done.

Body parameters

FieldTypeRequired
playeridstringrequired
itemstringrequired
currencystringrequired
creditstringrequired
orderidstringrequired
urlstringrequired

Immediate response

200 OK
{"status": "processing", "orderid": "191"}

If playerid has fewer than 5 digits, you get {"detail": "player_id must be 5+ digits"} (400). If the top-up service is down: {"detail": "UC topup is currently disabled"} or {"detail": "Shell topup is currently disabled"} (503).

UC Direct Top-up — Callback Formats

Example request

curl
curl -X POST "http://api.pinbot.shop/tp?merchant=7024464702" \
  -H "X-API-Key: fl_yourkey" \
  -H "Content-Type: application/json" \
  -d '{
    "playerid": "12345678",
    "item": "80:1",
    "currency": "bdt",
    "credit": "balance",
    "orderid": "191",
    "url": "https://yourcallback.com/result"
  }'

Callback — success

webhook POST
{
  "status": "success",
  "orderid": "191",
  "player_id": "12345678",
  "player_name": "PlayerName",
  "currency": "bdt",
  "total": 50.00,
  "balance_after": 950.00,
  "due_after": 0.0,
  "fail_reason": null,
  "elapsed_sec": 35.2,
  "timestamp": "2026-06-27T10:00:00+00:00",
  "voucher_detail": {
    "api_status": "success",
    "items": [
      {
        "status": "success",
        "code": "BDMB-J-S-03811638 5562-1363-6736-1546",
        "product": "80UC",
        "label": "115 ",
        "unit_price": 50.00,
        "fail_reason": ""
      }
    ],
    "summary": { "total": 1, "success": 1, "consumed": 0, "failed": 0 }
  }
}

Callback — failed (voucher issue)

webhook POST
{
  "status": "failed",
  "orderid": "191",
  "total": 0.0,
  "balance_after": 1000.00,
  "fail_reason": "Voucher top-up failed",
  "voucher_detail": {
    "api_status": "failed",
    "items": [
      {
        "status": "failed",
        "code": "HIDDEN",
        "product": "80UC",
        "label": "115 ",
        "unit_price": 50.00,
        "fail_reason": "Voucher top-up failed"
      }
    ],
    "summary": { "total": 1, "success": 0, "consumed": 0, "failed": 1 }
  }
}

Callback — consumed voucher

When a voucher was already used, balance is still deducted and status is consumed.

webhook POST
{
  "status": "failed",
  "fail_reason": "Consumed Voucher",
  "total": 50.00,
  "balance_after": 950.00,
  "voucher_detail": {
    "items": [{ "status": "consumed", "fail_reason": "Consumed Voucher" }],
    "summary": { "total": 1, "success": 0, "consumed": 1, "failed": 0 }
  }
}

Callback — partial success

Some items succeeded, some failed. Check each items entry's status individually.

webhook POST
{
  "status": "partial",
  "orderid": "191",
  "total": 100.00,
  "balance_after": 900.00,
  "voucher_detail": {
    "api_status": "partial",
    "items": [
      { "status": "success", "code": "BDMB-J-S-03811638...", "product": "80UC", "unit_price": 50.00 },
      { "status": "consumed", "code": "BDMB-J-S-03814108...", "product": "80UC", "fail_reason": "Consumed Voucher" },
      { "status": "failed", "code": "HIDDEN", "product": "80UC", "fail_reason": "Voucher top-up failed" }
    ],
    "summary": { "total": 3, "success": 1, "consumed": 1, "failed": 1 }
  }
}

Shell Direct Top-up — Callback Formats

Example request

curl
curl -X POST "http://api.pinbot.shop/tp?merchant=7024464702" \
  -H "X-API-Key: fl_yourkey" \
  -H "Content-Type: application/json" \
  -d '{
    "playerid": "12345678",
    "item": "lite:1",
    "currency": "bdt",
    "credit": "balance",
    "orderid": "192",
    "url": "https://yourcallback.com/result"
  }'

Callback — success

webhook POST
{
  "status": "success",
  "orderid": "192",
  "player_id": "12345678",
  "player_name": "PlayerName",
  "total": 150.00,
  "balance_after": 850.00,
  "shell_detail": {
    "api_status": "success",
    "label": "Weekly Lite",
    "qty": 1,
    "items": [
      { "component": "Weeklylite", "status": "success", "unit_price": 150.00 }
    ],
    "summary": { "total": 1, "success": 1, "failed": 0 }
  }
}

Callback — partial (e.g. full Level Up pass)

webhook POST
{
  "status": "partial",
  "orderid": "192",
  "total": 75.00,
  "balance_after": 925.00,
  "fail_reason": "Shell top-up failed",
  "shell_detail": {
    "api_status": "partial",
    "label": "Full Level Up Pass (6→30)",
    "items": [
      { "component": "Levelup6",  "status": "success", "unit_price": 25.00 },
      { "component": "Levelup10", "status": "success", "unit_price": 25.00 },
      { "component": "Levelup15", "status": "failed",  "detail": "Shell top-up failed" },
      { "component": "Levelup20", "status": "failed",  "detail": "Shell top-up failed" }
    ],
    "summary": { "total": 4, "success": 2, "failed": 2 }
  }
}

Callback component names

The component field identifies each sub-item in a shell order so you can parse results per piece.

ComponentItem
WeeklyliteWeekly Lite pass
Evo33-day Evo pass
Evo77-day Evo pass
Evo3030-day Evo pass
Levelup6Level Up 6
Levelup10Level Up 10
Levelup15Level Up 15
Levelup20Level Up 20
Levelup25Level Up 25
Levelup30Level Up 30
ComponentItem
5Indodiamond5 Indo Diamond
50Indodiamond50 Indo Diamond
70Indodiamond70 Indo Diamond
140Indodiamond140 Indo Diamond
355Indodiamond355 Indo Diamond
720Indodiamond720 Indo Diamond
7290Indodiamond7290 Indo Diamond
IndoLvl6–30Indo Level Up passes

Direct Top-up Item Reference

Use these in the item field for /tp only.

UC items

Item CodeUC / Diamonds
20:1 or 25:120UC / 25
36:1 or 50:136UC / 50
80:1 or 115:180UC / 115
160:1 or 240:1160UC / 240
161:1 or weekly:1Weekly
405:1 or 610:1610
800:1 or monthly:1Monthly
810:1 or 1240:11240
1625:1 or 2530:12530

Shell items

Item CodeProduct
lite:1Weekly Lite
evo3:1 / evo7:1 / evo30:1Evo passes
lvl6:1 → lvl30:1Level Up 6–30
lvlall:1Full Level Up (6→30)
indo5:1 → indo7290:1Indo Diamonds
indoweekly:1Indo Weekly
indomonthly:1Indo Monthly
indobp:1Indo Booyah Pass
indolvl6:1 → indolvl30:1Indo Level Up
POST /verify Sync

Verify BDT Payment

Verify a mobile banking transaction (bKash, Nagad, Rocket, Upay). When verified, the amount is credited to your bot balance automatically — no manual approval needed. You can embed your merchant payment details in your platform so customers send money directly.

Body parameters

FieldTypeRequired
trxidstringrequired

Example

curl
curl -X POST "http://api.pinbot.shop/verify?merchant=xxxxx" \
  -H "X-API-Key: fl_yourkey" \
  -H "Content-Type: application/json" \
  -d '{"trxid": "ABC123456"}'

Response — success

200 OK
{
  "success": true,
  "trxid": "ABC123456",
  "gateway": "bkash",
  "subtype": null,
  "raw_amount": 500.00,
  "fee_pct": 1.5,
  "fee_deducted": 7.50,
  "credited": 492.50,
  "prev_balance": 1000.00,
  "new_balance": 1492.50,
  "currency": "BDT"
}

Error responses

ResponseStatusMeaning
{"detail": "Transaction already verified"}409Already credited before
{"detail": "Transaction ID not found"}404TRX not in database
POST /usdverify Sync

Verify USDT Payment

Verify a USDT transaction and credit your bot balance. Supports Binance Pay, TRC20, BEP20, and Polygon.

Body parameters

FieldTypeRequired
trxidstringrequired

trxid format by network:
Binance Pay — numeric order ID
BEP20 / Polygon0x + 64 hex characters
TRC20 — 64 hex characters, no 0x

Example

curl
curl -X POST "http://api.pinbot.shop/usdverify?merchant=7024464702" \
  -H "X-API-Key: fl_yourkey" \
  -H "Content-Type: application/json" \
  -d '{"trxid": "a1b2c3d4e5f6..."}'

Response — success

200 OK
{
  "success": true,
  "trxid": "123456789",
  "network": "BinancePay",
  "raw_amount": 10.00,
  "fee_pct": 0.0,
  "fee_deducted": 0.00,
  "credited": 10.00,
  "prev_balance": 50.00,
  "new_balance": 60.00,
  "from": "",
  "pay_date": "2026-06-27T10:00:00+00:00",
  "currency": "USDT"
}

Error responses

ResponseStatusMeaning
{"detail": "USDT not active for your account"}403Not signed up for USDT
{"detail": "Transaction already verified"}409Already credited
{"detail": "Unrecognised transaction ID format..."}400Wrong TRX ID format
POST /shell?balance Sync

Check Shell Account Balance

Returns the current Garena shell balance for a given account.

Example

curl
curl -X POST "https://api.pinbot.shop/shell?balance" \
  -H "Authorization: your_api_key" \
  -d "username=youruser&password=yourpass"

Response

success
{"username": "Hasina-Magi", "shells": "69"}
failed
{"status": "failed", "reason": "Error text"}
POST /shell?redeem= Sync

Redeem Shell PINs

Redeem Garena Prepaid Card PINs into a shell account. Multiple PINs can be submitted in one request, comma-separated.

Country codes

CodeAccount Region
sgSingapore shell account
myMalaysia shell account
indoIndonesia shell account

Example

curl
curl -X POST "https://api.pinbot.shop/shell?redeem=sg" \
  -H "Authorization: your_api_key" \
  -d "username=youruser&password=yourpass&pin=pin1,pin2"

Response

200 OK
{
  "status": "success",
  "batch": {
    "pin": "71828822828",
    "ok": true,
    "status": "success"
  }
}

Possible batch status values

StatusMeaning
successPIN redeemed successfully
failedRedemption failed
Invalid CardPIN is not valid
Used CardPIN already redeemed
Wrong Region CardPIN is for a different region