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.

Request header
Authorization: Bearer <keyId>.<secret>

A first call

Nothing to install. Swap in your own key and this returns live catalog data.

Request - cURL
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.
Error response
{
  "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.

RouteRequestsWindowCounted per
GET /catalog/* (all five)8060sper account
POST /orders/create12060sper account
GET /orders/:orderId360sper account + order id
POST /orders/batch260sper account
GET /orders260sper account
GET /account6060sper account
POST /player/validatededicated 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 reference

New 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.

Reseller API Documentation β€” Game Top-Up & Voucher API