Build game top-up & gift card reseller integrations
Discover products, read reseller pricing, validate player input, verify wallet balance, create idempotent orders and track asynchronous fulfilment from one documented API.
Quick start
The public catalogue can be read without login. Wallet and order actions are authenticated. Orders are accepted locally first, then supplier fulfilment runs in the background so your API request stays fast.
https://distribution.liogames.com/api/v1Authentication
Signed partner requests use your Member ID and private Secret. Sign the exact raw JSON body with HMAC-SHA256.
x-liog-sign: hash_hmac('sha256', RAW_JSON, SECRET)$body = json_encode($payload, JSON_UNESCAPED_SLASHES);
$signature = hash_hmac('sha256', $body, $secret);Never expose the Secret in browser JavaScript, mobile apps, public repositories or screenshots.
Products & variations
https://distribution.liogames.com/api/v1/productshttps://distribution.liogames.com/api/v1/products/{product_id}/variationsPublic product pages and machine-readable pricing are also available through /catalog/ and /catalog.json. Provider names, supplier credentials and fulfilment IDs are not part of the public contract.
Product input schema
https://distribution.liogames.com/api/v1/product-schema?product_id={ID}&variation_id={VID}Call Product Schema before building the order form. It tells your integration whether the selected product needs a player/user ID, server/zone, region or another supported field.
Reseller price matrix
https://distribution.liogames.com/api/v1/products/{product_id}/price-matrixReturns the published Normal, GOLD, VIP and H2H prices for each variation. Public catalogue pricing is server-rendered so search engines and AI systems can read it without executing client JavaScript.
Username / player verification
https://distribution.liogames.com/api/v1/username-checkUse the signed username endpoint before submitting products where player verification is supported.
{
"member_code": "YOUR_MEMBER_CODE",
"game": "mobile-legends",
"user_id": "1393323764",
"server_id": "15748"
}Wallet balance
https://distribution.liogames.com/api/v1/balance{
"member_code": "YOUR_MEMBER_CODE"
}The wallet is checked before an order is queued. Insufficient balance fails before supplier fulfilment is dispatched.
Create order
https://distribution.liogames.com/api/v1/order-create| Field | Use |
|---|---|
| member_code | Your Member ID. |
| product_id | Product ID from the public catalogue. |
| variation_id | Pack / denomination variation. |
| partner_ref | Your unique idempotency reference. Reuse it on retries. |
| user_id / player_id | When Product Schema requires it. |
| server_id | When Product Schema requires it. |
{
"member_code": "YOUR_MEMBER_CODE",
"product_id": 65482,
"variation_id": 393960,
"user_id": "1739190042",
"server_id": "18419",
"partner_ref": "ORDER-100042"
}Order status & delivery
https://distribution.liogames.com/api/v1/order-statusPoll by LioGames order ID or your stable partner reference. Processing orders should not be recreated. Completed voucher orders can include saved delivery/SN data after provider completion is verified.
Webhooks
Set your HTTPS callback URL in the reseller panel. Webhook events are notifications; your integration should treat the authenticated LioGames order-status endpoint as the reconciliation source when needed.
Return a 2xx response quickly and process heavy work asynchronously.
Error handling
Parse ok, code, message and data. Keep the same partner_ref after a network timeout.
| Code | Meaning | Action |
|---|---|---|
| INSUFFICIENT_BALANCE | Wallet cannot cover the order. | Fund wallet before retrying. |
| INVALID_SIGNATURE | HMAC validation failed. | Sign the exact raw JSON body. |
| NOT_ALLOWED | Product/access rule rejected. | Refresh access/product data. |
| PROCESSING | Order is not terminal yet. | Wait for webhook or poll status. |
Fast catalogue updates
Supplier catalogue refresh is handled by background jobs. Current configured intervals are approximately 15 minutes for top-ups and 15 minutes for gift cards. Product/price changes invalidate the public catalogue version automatically.
/catalog.json supports short public caching and ETag validation so integrations and crawlers can refresh efficiently without repeatedly downloading unchanged data.