API Docs
A free, public REST API that returns the in-game name for a game ID. No API key is needed.
https://api.bingogameshop.com
| Game | Endpoint | Needs zone |
|---|---|---|
| Mobile Legends: Bang Bang | GET /mlbb | Yes |
| Magic Chess: Go Go | GET /mcgg | Yes |
| PUBG Mobile | GET /pubg | No |
| Honor of Kings | GET /hok | No |
Quick start
curl "https://api.bingogameshop.com/pubg?id=5123456789"
const res = await fetch("https://api.bingogameshop.com/mlbb?id=247311514&zone=9313");
const body = await res.json();
if (body.ok) console.log(body.data.name);
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | digits, 4–20 | Always | The player / game ID |
zone | digits, 1–6 | MLBB, MCGG | The server (zone) ID shown next to the player ID |
Responses
Every response is JSON with the same envelope:
| Field | Type | Description |
|---|---|---|
ok | boolean | true when the player was found |
game | string | mlbb, mcgg, pubg or hok |
cached | boolean | true when served from cache |
data | object | Player details (only when ok is true) |
error | string | Machine-readable error code (only when ok is false) |
message | string | Human-readable error message |
MLBB — GET /mlbb?id=…&zone=…
{
"ok": true,
"game": "mlbb",
"cached": false,
"data": {
"id": "247311514",
"zone": "9313",
"name": "Deja Vu",
"region": "Myanmar",
"availability_checked": true,
"dd50": true,
"dd150": true,
"dd250": false,
"dd500": true,
"weekly_diamond_pass": true,
"weekly_elite_bundle": true,
"monthly_epic_bundle": true,
"twilight_pass": true
}
}
dd50…dd500— whether the first-recharge Double Diamonds bonus for that pack is still available.weekly_diamond_pass,weekly_elite_bundle,monthly_epic_bundle,twilight_pass— whether the account can still buy that item.availability_checked—falsewhen the offer flags could not be read this time; the name and region are still valid.
MCGG — GET /mcgg?id=…&zone=…
{
"ok": true,
"game": "mcgg",
"cached": false,
"data": { "id": "123456789", "zone": "1234", "name": "Player", "dd50": true, "dd150": true, "dd250": true, "dd500": false }
}
PUBG Mobile — GET /pubg?id=…
{
"ok": true,
"game": "pubg",
"cached": false,
"data": { "id": "5123456789", "name": "Eliah2", "isbanned": false }
}
Honor of Kings — GET /hok?id=…
Same shape as PUBG Mobile: id, name, isbanned.
Errors
| HTTP | error | Meaning |
|---|---|---|
| 400 | invalid_id / invalid_zone | The ID or zone is not digits or has the wrong length |
| 404 | not_found | No player with that ID |
| 429 | rate_limited | Over the rate limit; wait for Retry-After seconds |
| 502 | upstream_error | The game shop did not answer; try again |
| 503 | busy | Too many checks are waiting; try again shortly |
| 504 | timeout | The check took too long; try again |
{ "ok": false, "game": "pubg", "cached": false, "error": "not_found", "message": "Game ID not found" }
Rate limits
- 5 requests per minute per IP. Requests answered from cache do not count.
- Over the limit you get
429with aRetry-Afterheader.
Caching
Answers are cached on the server, so asking for the same ID again is instant:
| Game | What | Cached for |
|---|---|---|
| MLBB | name + region | 24 hours |
| MLBB | offer flags (dd50, passes, bundles) | 1 minute |
| MCGG | everything | 1 minute |
| PUBG Mobile, Honor of Kings | name | 24 hours |
| any | "not found" answers | 1 minute |
Check the X-Cache response header (HIT or MISS) or the cached field.
CORS
All endpoints send Access-Control-Allow-Origin: *, so you can call the API straight from a browser.
PUBG Mobile and Honor of Kings checks run one at a time per game. The first check after a quiet period can take a few seconds; the next ones take under a second.