API

Gaming Goods — API Documentation

Integrate the Gaming Goods catalog into your applications. REST API with JSON responses, JWT authentication and a predictable error structure.

Base URL

Production
https://gaming-goods.ru/api/v1

All endpoints share this base URL. Responses are returned as JSON.

Authentication

The API uses JWT Bearer tokens. Pass the token in the Authorization header on every request. Tokens are issued after SMS authentication, or on request for integration scenarios.

HTTP Header
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...

Public endpoints (catalog, search, categories, brands) work without a token. Authentication is required to create and view orders.

Product catalog

GET/products

Returns a paginated list of products with optional filters.

ParameterTypeDescription
categorystringFilter by category (e.g. Steam, Xbox)
brandstringFilter by brand
localestringResponse locale: ru or en
sortstringSort order: price_asc, price_desc, name, newest
pageintegerPage number (default 1)
page_sizeintegerItems per page (default 20, max 100)
Response
{
  "data": {
    "products": [
      {
        "id": "a1b2c3d4-...",
        "name": "Cyberpunk 2077",
        "slug": "cyberpunk-2077-steam-key",
        "category": "Steam",
        "brand": "CD Projekt",
        "price": 19.99,
        "currency": "EUR",
        "stock_quantity": 12,
        "image_url": "https://gaming-goods.ru/...",
        "is_active": true
      }
    ],
    "total": 1542,
    "page": 1,
    "page_size": 20
  }
}

Product detail

GET/products/:slug

Returns full details of a single product by slug.

Response
{
  "data": {
    "id": "a1b2c3d4-...",
    "name": "Cyberpunk 2077",
    "slug": "cyberpunk-2077-steam-key",
    "category": "Steam",
    "brand": "CD Projekt",
    "description": "Open-world action-adventure...",
    "price": 19.99,
    "currency": "EUR",
    "stock_quantity": 12,
    "image_url": "https://gaming-goods.ru/...",
    "is_active": true,
    "meta": { "activation_details": "..." }
  }
}

Search

GET/products/search

Full-text search across the product catalog.

ParameterTypeDescription
qstringSearch query (minimum 2 characters)
localestringResponse locale: ru or en
pageintegerPage number
page_sizeintegerItems per page
Response
{
  "data": {
    "products": [
      {
        "id": "a1b2c3d4-...",
        "name": "Cyberpunk 2077",
        "slug": "cyberpunk-2077-steam-key",
        "price": 19.99,
        "stock_quantity": 12,
        "is_active": true
      }
    ],
    "total": 3,
    "page": 1,
    "page_size": 20
  }
}

Categories

GET/categories

Returns all categories with the number of products in each.

Response
{
  "data": [
    { "name": "Steam", "product_count": 842 },
    { "name": "Xbox", "product_count": 215 },
    { "name": "PlayStation", "product_count": 187 },
    { "name": "Nintendo", "product_count": 94 }
  ]
}

Brands

GET/brands

Returns all brands with the number of products.

Response
{
  "data": [
    { "name": "Microsoft", "product_count": 312 },
    { "name": "Electronic Arts", "product_count": 198 },
    { "name": "Ubisoft", "product_count": 156 }
  ]
}

Create order

POST/orders

Creates a new order. Authentication required. Use the Idempotency-Key header to avoid duplicate orders.

ParameterTypeDescription
Idempotency-KeyheaderUUID to prevent duplicate orders
Request Body
{
  "items": [
    {
      "product_id": "a1b2c3d4-...",
      "quantity": 1
    }
  ],
  "payment_method": "balance",
  "promo_code": "SALE10"
}
Response
{
  "data": {
    "id": "e5f6a7b8-...",
    "status": "pending_payment",
    "items": [
      {
        "product_id": "a1b2c3d4-...",
        "product_name": "Cyberpunk 2077",
        "price": 1999,
        "quantity": 1
      }
    ],
    "total": 1799,
    "currency": "EUR",
    "payment_url": "https://...",
    "created_at": "2026-03-14T12:00:00Z"
  }
}

Order status

GET/orders/:id

Returns order details including activation keys (after payment). Authentication required.

Response
{
  "data": {
    "id": "e5f6a7b8-...",
    "status": "completed",
    "items": [
      {
        "product_id": "a1b2c3d4-...",
        "product_name": "Cyberpunk 2077",
        "price": 1999,
        "quantity": 1,
        "keys": ["XXXXX-XXXXX-XXXXX-XXXXX"]
      }
    ],
    "total": 1999,
    "currency": "EUR",
    "created_at": "2026-03-14T12:00:00Z",
    "completed_at": "2026-03-14T12:00:05Z"
  }
}

Partner API

The Partner API is for third-party marketplace integrations. Authentication uses the X-API-Key header. To request a key, contact business@gaming-goods.com.

Base URL
https://gaming-goods.ru/api/partner/v1

Partner: Brands

GET/catalog/brands

Returns the list of brands with the number of available products.

ParameterTypeDescription
limitintegerItems per page (default 20, max 100)
offsetintegerPagination offset
Response
{
  "items": [
    { "brand": "Steam", "product_count": 842 },
    { "brand": "Xbox", "product_count": 215 }
  ],
  "limit": 20,
  "offset": 0,
  "total": 156
}

Partner: Brand categories

GET/catalog/brands/{brand}/categories

Returns product categories for the given brand.

Response
{
  "brand": "Steam",
  "categories": [
    { "category": "Game Keys", "product_count": 650 },
    { "category": "Gift Card", "product_count": 42 }
  ]
}

Partner: Product catalog

GET/catalog/products

Returns paginated products. Prices are in euro cents.

ParameterTypeDescription
brandstringFilter by brand
categorystringFilter by category
searchstringSearch by title
sortstringSort: price_asc, price_desc, newest
limitintegerItems per page (default 20, max 100)
offsetintegerPagination offset
Response
{
  "items": [
    {
      "id": "a1b2c3d4-...",
      "title": "Cyberpunk 2077 Steam Key",
      "brand": "CD Projekt",
      "category": "Game Keys",
      "price": 1999,
      "currency": "EUR",
      "quantity": 12,
      "is_available": true,
      "delivery_type": "EXTERNAL",
      "product_type": "KINGUIN",
      "images": ["https://gaming-goods.ru/..."],
      "short_description": ""
    }
  ],
  "total": 1542,
  "limit": 20,
  "offset": 0
}

Partner: Product detail

GET/catalog/products/{productId}

Full product details by UUID.

Response
{
  "id": "a1b2c3d4-...",
  "title": "Cyberpunk 2077 Steam Key",
  "brand": "CD Projekt",
  "category": "Game Keys",
  "price": 1999,
  "currency": "EUR",
  "quantity": 12,
  "is_available": true,
  "delivery_type": "EXTERNAL",
  "product_type": "KINGUIN",
  "images": ["https://gaming-goods.ru/..."],
  "description": "Open-world action-adventure...",
  "short_description": "",
  "specifications": [
    { "key": "platform", "value": "Steam" }
  ]
}

Partner: Checkout

POST/buyer/checkout/virtual

Creates an order. Source: "cart" (from the cart) or "lines" (products in the request body). Requires X-API-Key.

Request Body
// From cart:
{ "source": "cart" }

// Or with explicit line items:
{
  "source": "lines",
  "lines": [
    { "product_id": "a1b2c3d4-...", "quantity": 1 }
  ]
}
Response
{
  "orders": [
    {
      "id": "e5f6a7b8-...",
      "status": "created",
      "total": 1999,
      "currency": "EUR"
    }
  ]
}

Partner: Order list

GET/buyer/orders

Returns the partner's paginated order list. Requires X-API-Key.

ParameterTypeDescription
limitintegerItems per page (default 20)
offsetintegerOffset
statusstringFilter by status (created, paid, completed, cancelled_before_payment, cancelled_after_payment)
Response
{
  "items": [
    {
      "id": "e5f6a7b8-...",
      "status": "completed",
      "total": 1999,
      "currency": "EUR",
      "created_at": "2026-03-14T12:00:00Z"
    }
  ],
  "limit": 20,
  "offset": 0,
  "total": 47
}

Partner: Order detail

GET/buyer/orders/{orderId}

Order details. Activation keys are available in delivery.codes once fulfilled. Requires X-API-Key.

Response
{
  "id": "e5f6a7b8-...",
  "buyer_id": "c3d4e5f6-...",
  "status": "completed",
  "items": [
    {
      "product_id": "a1b2c3d4-...",
      "title": "Cyberpunk 2077 Steam Key",
      "unit_price": 1999,
      "quantity": 1
    }
  ],
  "amounts": {
    "buyer_total": 1999,
    "platform_fee": 0
  },
  "payment": {
    "method": "balance",
    "state": "paid"
  },
  "delivery": {
    "type": "EXTERNAL",
    "codes": ["XXXXX-XXXXX-XXXXX"]
  },
  "created_at": "2026-03-14T12:00:00Z",
  "updated_at": "2026-03-14T12:00:05Z"
}

Rate Limiting

The API is throttled to 100 requests per minute per IP address. When the limit is exceeded the server returns 429 Too Many Requests. Use exponential backoff when retrying.

Response Headers
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1710403200

Error format

All errors share the same shape. The code field is a machine-readable identifier; message is a human-readable description.

Error Response
{
  "error": {
    "code": "invalid_request",
    "message": "Parameter 'page' must be a positive integer"
  }
}
400Bad Request — invalid request parameters
401Unauthorized — missing or invalid token
403Forbidden — insufficient permissions
404Not Found — resource does not exist
429Too Many Requests — rate limit exceeded
500Internal Server Error — server-side failure

Get API access

Email us to request an API token and discuss your integration.