Overview
Send one top-up order per JSON request. Only newly accepted top-up orders consume token quota.
orderid is your idempotency key. Reusing it returns or continues the existing order instead of creating a second delivery.Authentication
Use your UpBot token as a Bearer token. Keep it only on your server.
HTTP headers
Authorization: Bearer UPBOT_YOUR_TOKEN Content-Type: application/json
Request fields
| FIELD | TYPE | REQUIRED | DESCRIPTION |
|---|---|---|---|
orderid | string | YES | Your unique order reference. |
playerid | string | YES | Customer Free Fire UID. |
code | string | YES | Configured voucher or product code. |
package, qty | string / integer | SHELL | Package and quantity for a configured Shell route. |
username, password, autocode | string | SHELL | Shell account fields when required by your integration. |
For standard UniPin requests, send only
orderid, playerid and code.Code examples
cURL
Shell
curl -X POST "https://api.upbot.top/topup-instant"
-H "Authorization: Bearer UPBOT_YOUR_TOKEN"
-H "Content-Type: application/json"
-d '{"orderid":"SHOP-10001","playerid":"2444465764","code":"BDMB-Q-S-12345678"}'PHP
PHP 8+
<?php
$data=['orderid'=>'SHOP-10001','playerid'=>'2444465764','code'=>'BDMB-Q-S-12345678'];
$ch=curl_init('https://api.upbot.top/topup-instant');
curl_setopt_array($ch,[CURLOPT_POST=>true,CURLOPT_RETURNTRANSFER=>true,CURLOPT_HTTPHEADER=>['Authorization: Bearer UPBOT_YOUR_TOKEN','Content-Type: application/json'],CURLOPT_POSTFIELDS=>json_encode($data),CURLOPT_TIMEOUT=>30]);
$result=json_decode(curl_exec($ch),true);
curl_close($ch);JavaScript (server-side)
Node.js
const response=await fetch('https://api.upbot.top/topup-instant',{
method:'POST',
headers:{Authorization:'Bearer UPBOT_YOUR_TOKEN','Content-Type':'application/json'},
body:JSON.stringify({orderid:'SHOP-10001',playerid:'2444465764',code:'BDMB-Q-S-12345678'})
});
const result=await response.json();Responses
Successful response
200 OK · representative
{"status":"success","orderid":"SHOP-10001","message":"Top-up completed","nickname":"Player Name"}Provider-specific fields may vary. Read the HTTP code and status first.
Processing response
202 Accepted
{"status":"processing","code":"TEMPORARY_ERROR","message":"Provider is temporarily busy. This order is queued for automatic retry.","orderid":"SHOP-10001","provider_http":503,"retry_after":1}Wait at least
retry_after seconds, then send the same data with the same orderid.HTTP status codes
200Final response
A final provider response was returned.
202Processing
Order is queued or still running.
401Unauthorized
Token is missing or invalid.
403Forbidden
Token is disabled, expired or over quota.
422Validation error
A required field is missing.
503Unavailable
The selected service is disabled.
