Reseller API documentation
The SHOP2TOPUP reseller API is a JSON REST API for selling game top-ups, game recharges and voucher codes from your own shop, storefront or bot. This reference documents every public endpoint, its parameters and its responses.
Base URL and transport
Every path in this reference is relative to the base URL below. Requests and responses are JSON over HTTPS, amounts are strings so no float rounding can creep in, and every timestamp is UTC in ISO 8601.
https://shop2topup.com/api/endpoints/v1
Authentication
Every request carries one header. The key pair is issued from the API Access page of your reseller panel and can be restricted to an IP allowlist; a call from any other address is rejected with IP_NOT_ALLOWED before it reaches any business logic.
Authorization: Bearer <keyId>.<secret>A first call
Nothing to install. Swap in your own key and this returns live catalog data.
curl -s "https://shop2topup.com/api/endpoints/v1/catalog/categories?bigCategoryId=1" \
-H "Authorization: Bearer YOUR_KEY_ID.YOUR_KEY_SECRET"Response conventions
- Every response carries a boolean success field, so one branch separates the happy path from every failure.
- Failures return an error object with a stable code, a human message and optional details. Branch on the code, never on the message.
- Money is always a decimal string such as "0.950000" in USD. Do not parse it into a binary float before you compare or sum it.
- List endpoints return a pagination object with page, limit, total and total_pages.
- Order creation is idempotent on the order_id UUID you supply, so a retry can never charge twice.
{
"success": false,
"error": {
"code": "PRICE_INCREASED",
"message": "Price has increased beyond expected",
"details": {
"expected_unit_price": "0.950000",
"current_unit_price": "0.980000"
}
}
}Reference sections
Rate limits
Limits are per account on a rolling window. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset, and a throttled call answers 429 with a Retry-After header.
| Route | Requests | Window | Counted per |
|---|---|---|---|
| GET /catalog/* (all five) | 80 | 60s | per account |
| POST /orders/create | 120 | 60s | per account |
| GET /orders/:orderId | 3 | 60s | per account + order id |
| POST /orders/batch | 2 | 60s | per account |
| GET /orders | 2 | 60s | per account |
| GET /account | 60 | 60s | per account |
| POST /player/validate | dedicated limiter | β | per account |
Webhooks
Order outcomes are pushed to an HTTPS endpoint you register, signed with HMAC-SHA256 over the raw body. The event list, header list, payload shape and a verification snippet are documented on the API overview page.
Read the webhook payload and signature referenceNew to the platform? Start with the game top-up API overview for resellers, or read the SHOP2TOPUP reseller programme overview for how the partner account works.