{
    "format": "bot-manager-public-api-full-spec",
    "version": 1,
    "generated_at": "2026-09-27T12:17:49+00:00",
    "language": "ru",
    "brand": "GMXAZ Bot",
    "documentation": {
        "version": "v1",
        "base_url": "https://gmx.az/api/v1",
        "currency": "USD",
        "currency_symbol": "$",
        "auth_header": "X-API-KEY",
        "idempotency_header": "X-Idempotency-Key",
        "request_id_header": "X-Request-Id",
        "rate_limit_per_minute": 60,
        "api_enabled": true,
        "require_ip_whitelist": false,
        "limits": {
            "max_per_page": 100,
            "max_voucher_qty": 500,
            "max_topup_qty": 1,
            "default_callback_mode": "legacy"
        },
        "endpoints": [
            {
                "id": "get-me",
                "group": "Аккаунт",
                "method": "GET",
                "path": "/getMe",
                "title": "Проверить API аккаунт",
                "summary": "Возвращает API пользователя, баланс и валюту.",
                "description": "Используйте этот адрес для проверки API ключа и статуса аккаунта.",
                "success_status": 200,
                "parameters": [],
                "request_example": null,
                "response_example": {
                    "success": true,
                    "data": {
                        "user_id": 579365494,
                        "username": "reseller_pro",
                        "balance": "1250.5000",
                        "currency": "USD",
                        "webhook_secret_configured": true
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    }
                ],
                "url": "https://gmx.az/api/v1/getMe",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/getMe' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "games",
                "group": "Каталог",
                "method": "GET",
                "path": "/games",
                "title": "Список игр",
                "summary": "Возвращает активные игры и категории.",
                "description": "Игры можно фильтровать по типу и искать по названию.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "type",
                        "location": "query",
                        "type": "string",
                        "required": false,
                        "description": "Фильтр типа товара.",
                        "example": "topup",
                        "options": [
                            "voucher",
                            "topup"
                        ]
                    },
                    {
                        "name": "q",
                        "location": "query",
                        "type": "string",
                        "required": false,
                        "description": "Поиск по названию игры.",
                        "example": "pubg",
                        "options": []
                    }
                ],
                "request_example": null,
                "response_example": {
                    "success": true,
                    "data": [
                        {
                            "id": 1,
                            "name": "PUBG Mobile",
                            "type": "TOPUP",
                            "categories": [
                                {
                                    "id": 10,
                                    "name": "Global",
                                    "per_page_count": 12
                                }
                            ]
                        }
                    ]
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "VALIDATION_ERROR",
                        "status": 422,
                        "description": "Параметр type или q имеет неверный формат."
                    }
                ],
                "url": "https://gmx.az/api/v1/games",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/games?type=topup&q=pubg' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "categories",
                "group": "Каталог",
                "method": "GET",
                "path": "/categories",
                "title": "Список категорий",
                "summary": "Возвращает активные категории выбранной игры.",
                "description": "game_id обязателен и берётся из ответа /games.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "game_id",
                        "location": "query",
                        "type": "integer",
                        "required": true,
                        "description": "ID активной игры.",
                        "example": 1,
                        "options": []
                    }
                ],
                "request_example": null,
                "response_example": {
                    "success": true,
                    "data": [
                        {
                            "id": 10,
                            "name": "Global",
                            "per_page_count": 12
                        }
                    ]
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "VALIDATION_ERROR",
                        "status": 422,
                        "description": "game_id не передан или не является целым числом."
                    },
                    {
                        "code": "GAME_NOT_FOUND",
                        "status": 404,
                        "description": "Игра не найдена или неактивна."
                    }
                ],
                "url": "https://gmx.az/api/v1/categories",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/categories?game_id=1' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "products",
                "group": "Каталог",
                "method": "GET",
                "path": "/products",
                "title": "Список товаров",
                "summary": "Возвращает товары, цены, остатки, поля и пагинацию.",
                "description": "Фильтры можно использовать вместе. Возвращаются товары активных игр и категорий.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "type",
                        "location": "query",
                        "type": "string",
                        "required": false,
                        "description": "voucher или topup.",
                        "example": "topup",
                        "options": [
                            "voucher",
                            "topup"
                        ]
                    },
                    {
                        "name": "game",
                        "location": "query",
                        "type": "string",
                        "required": false,
                        "description": "Частичный поиск по названию игры.",
                        "example": "PUBG",
                        "options": []
                    },
                    {
                        "name": "category",
                        "location": "query",
                        "type": "string",
                        "required": false,
                        "description": "Частичный поиск по названию категории.",
                        "example": "Global",
                        "options": []
                    },
                    {
                        "name": "game_id",
                        "location": "query",
                        "type": "integer",
                        "required": false,
                        "description": "ID игры.",
                        "example": 1,
                        "options": []
                    },
                    {
                        "name": "category_id",
                        "location": "query",
                        "type": "integer",
                        "required": false,
                        "description": "ID категории.",
                        "example": 10,
                        "options": []
                    },
                    {
                        "name": "q",
                        "location": "query",
                        "type": "string",
                        "required": false,
                        "description": "Поиск по названию товара.",
                        "example": "60 UC",
                        "options": []
                    },
                    {
                        "name": "page",
                        "location": "query",
                        "type": "integer",
                        "required": false,
                        "description": "Номер страницы.",
                        "example": 1,
                        "options": []
                    },
                    {
                        "name": "per_page",
                        "location": "query",
                        "type": "integer",
                        "required": false,
                        "description": "Размер страницы. Текущий максимум: 100.",
                        "example": 50,
                        "options": []
                    }
                ],
                "request_example": null,
                "response_example": {
                    "success": true,
                    "data": [
                        {
                            "id": 91,
                            "name": "PUBG Mobile 60 UC",
                            "game_id": 1,
                            "game": "PUBG Mobile",
                            "category_id": 10,
                            "category": "Global",
                            "type": "TOPUP",
                            "fulfillment_type": "standard",
                            "is_qr_login": false,
                            "price": "0.8800",
                            "currency": "USD",
                            "stock_status": "INFINITE",
                            "stock_count": null,
                            "min_qty": 1,
                            "max_qty": 1,
                            "fields": [
                                {
                                    "key": "player_id",
                                    "label": "ID игрока",
                                    "required": true
                                }
                            ],
                            "supports_player_validation": true
                        }
                    ],
                    "meta": {
                        "current_page": 1,
                        "last_page": 1,
                        "per_page": 50,
                        "total": 1
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "VALIDATION_ERROR",
                        "status": 422,
                        "description": "Неверный фильтр или параметр пагинации."
                    }
                ],
                "url": "https://gmx.az/api/v1/products",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/products?type=topup&game=PUBG&category=Global&game_id=1&category_id=10&q=60+UC&page=1&per_page=50' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "validate-player",
                "group": "Проверка",
                "method": "POST",
                "path": "/validate-player",
                "title": "Проверить игрока",
                "summary": "Проверяет ID игрока и при необходимости ID сервера.",
                "description": "Если проверка необязательна, может вернуться validation_optional=true.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "product_id",
                        "location": "body",
                        "type": "integer",
                        "required": true,
                        "description": "ID товара пополнения.",
                        "example": 91,
                        "options": []
                    },
                    {
                        "name": "player_id",
                        "location": "body",
                        "type": "string",
                        "required": true,
                        "description": "ID игрока.",
                        "example": "51515969536",
                        "options": []
                    },
                    {
                        "name": "server_id",
                        "location": "body",
                        "type": "string",
                        "required": false,
                        "description": "ID сервера или зоны, если требуется.",
                        "example": "1234",
                        "options": []
                    },
                    {
                        "name": "input_2...input_8",
                        "location": "body",
                        "type": "string",
                        "required": false,
                        "description": "Дополнительные значения input_2...input_8 согласно списку fields продукта.",
                        "example": "Additional mapped values",
                        "options": []
                    }
                ],
                "request_example": {
                    "product_id": 91,
                    "player_id": "51515969536",
                    "server_id": "1234",
                    "input_3": "CharacterName"
                },
                "response_example": {
                    "success": true,
                    "data": {
                        "nickname": "PlayerOne",
                        "player_name": "PlayerOne",
                        "region": "TR",
                        "country": "TR",
                        "server": "1234",
                        "nickname_verified": true,
                        "validation_optional": false
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "VALIDATION_ERROR",
                        "status": 422,
                        "description": "Обязательное поле тела отсутствует или имеет неверный формат."
                    },
                    {
                        "code": "PRODUCT_NOT_FOUND",
                        "status": 404,
                        "description": "Товар пополнения не найден или неактивен."
                    },
                    {
                        "code": "PLAYER_NOT_FOUND",
                        "status": 404,
                        "description": "Игрок не прошёл обязательную проверку."
                    }
                ],
                "url": "https://gmx.az/api/v1/validate-player",
                "curl": "curl -s -X POST 'https://gmx.az/api/v1/validate-player' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  --data '{\n    \"product_id\": 91,\n    \"player_id\": \"51515969536\",\n    \"server_id\": \"1234\",\n    \"input_3\": \"CharacterName\"\n}'"
            },
            {
                "id": "place-order",
                "group": "Заказы",
                "method": "POST",
                "path": "/order",
                "title": "Создать заказ",
                "summary": "Создаёт ваучерный заказ или пополнение и списывает сумму с баланса.",
                "description": "Этот адрес создаёт реальную финансовую операцию. Используйте X-Idempotency-Key для повторных запросов.",
                "success_status": 200,
                "side_effect": true,
                "warning": "Запрос создаёт реальный заказ и списывает сумму с баланса.",
                "parameters": [
                    {
                        "name": "X-Idempotency-Key",
                        "location": "header",
                        "type": "string",
                        "required": false,
                        "description": "Уникальный ключ повтора. Обязателен для операций, меняющих баланс; для POST /order client_order_id может использоваться как резервный ключ.",
                        "example": "550e8400-e29b-41d4-a716-446655440000",
                        "options": []
                    },
                    {
                        "name": "product_id",
                        "location": "body",
                        "type": "integer",
                        "required": true,
                        "description": "ID активного товара.",
                        "example": 91,
                        "options": []
                    },
                    {
                        "name": "qty",
                        "location": "body",
                        "type": "integer",
                        "required": false,
                        "description": "Максимум ваучеров: 500; максимум пополнений: 1.",
                        "example": 1,
                        "options": []
                    },
                    {
                        "name": "player_id",
                        "location": "body",
                        "type": "string",
                        "required": false,
                        "description": "Обязательно для пополнения.",
                        "example": "51515969536",
                        "options": []
                    },
                    {
                        "name": "server_id",
                        "location": "body",
                        "type": "string",
                        "required": false,
                        "description": "ID сервера или зоны, если требуется.",
                        "example": "1234",
                        "options": []
                    },
                    {
                        "name": "input_2...input_8",
                        "location": "body",
                        "type": "string",
                        "required": false,
                        "description": "Дополнительные значения input_2...input_8 согласно списку fields продукта.",
                        "example": "Additional mapped values",
                        "options": []
                    },
                    {
                        "name": "client_order_id",
                        "location": "body",
                        "type": "string",
                        "required": false,
                        "description": "Ваш собственный идентификатор заказа. Если в POST /order нет X-Idempotency-Key, это значение также используется как ключ повтора.",
                        "example": "client-order-10001",
                        "options": []
                    },
                    {
                        "name": "callback_url",
                        "location": "body",
                        "type": "string",
                        "required": false,
                        "description": "Безопасный HTTPS URL обратного вызова.",
                        "example": "https://customer.example/webhooks/bot-manager",
                        "options": []
                    },
                    {
                        "name": "callback_mode",
                        "location": "body",
                        "type": "string",
                        "required": false,
                        "description": "Формат обратного вызова. По умолчанию: legacy.",
                        "example": "legacy",
                        "options": [
                            "legacy",
                            "events"
                        ]
                    }
                ],
                "request_example": {
                    "product_id": 91,
                    "qty": 1,
                    "player_id": "51515969536",
                    "server_id": "1234",
                    "input_3": "CharacterName",
                    "client_order_id": "client-order-10001",
                    "callback_url": "https://customer.example/webhooks/bot-manager",
                    "callback_mode": "events"
                },
                "response_example": {
                    "success": true,
                    "data": {
                        "order_id": 8821,
                        "order_uuid": "a80f63d7-cabb-4e1d-a177-045f6467e7b2",
                        "client_order_id": "order-10001",
                        "product_id": 91,
                        "product_name": "PUBG Mobile 60 UC",
                        "product_type": "TOPUP",
                        "qty": 1,
                        "player_id": "51515969536",
                        "server_id": "1234",
                        "player_name": "PlayerOne",
                        "region": "TR",
                        "status": "PROCESSING",
                        "price": "0.8800",
                        "currency": "USD",
                        "delivery": null,
                        "manual_action_required": false,
                        "delivery_message": null,
                        "created_at": "2026-07-25T13:30:00+04:00",
                        "completed_at": null
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "VALIDATION_ERROR",
                        "status": 422,
                        "description": "Одно из полей тела запроса неверно."
                    },
                    {
                        "code": "PRODUCT_NOT_FOUND",
                        "status": 404,
                        "description": "Товар не найден или неактивен."
                    },
                    {
                        "code": "INVALID_QUANTITY",
                        "status": 422,
                        "description": "Количество превышает лимит товара или API."
                    },
                    {
                        "code": "PLAYER_ID_REQUIRED",
                        "status": 422,
                        "description": "Для пополнения требуется player_id."
                    },
                    {
                        "code": "SERVER_ID_REQUIRED",
                        "status": 422,
                        "description": "Для товара требуется server_id."
                    },
                    {
                        "code": "PLAYER_NOT_FOUND",
                        "status": 404,
                        "description": "Обязательная проверка игрока не пройдена."
                    },
                    {
                        "code": "INSUFFICIENT_FUNDS",
                        "status": 400,
                        "description": "Недостаточно средств для заказа."
                    },
                    {
                        "code": "OUT_OF_STOCK",
                        "status": 409,
                        "description": "Не удалось создать или обработать заказ."
                    },
                    {
                        "code": "IDEMPOTENCY_KEY_REQUIRED",
                        "status": 422,
                        "description": "Для этой операции требуется стабильный ключ идемпотентности."
                    },
                    {
                        "code": "IDEMPOTENCY_KEY_INVALID",
                        "status": 422,
                        "description": "Ключ идемпотентности недействителен или длиннее 128 символов."
                    },
                    {
                        "code": "IDEMPOTENCY_CONFLICT",
                        "status": 409,
                        "description": "Один ключ использован с другим содержимым запроса."
                    },
                    {
                        "code": "CLIENT_ORDER_ID_CONFLICT",
                        "status": 409,
                        "description": "Этот client_order_id уже назначен другому заказу."
                    },
                    {
                        "code": "SECURITY_ERROR",
                        "status": 400,
                        "description": "URL обратного вызова не соответствует требованиям безопасности."
                    },
                    {
                        "code": "ORDER_FAILED",
                        "status": 409,
                        "description": "Не удалось создать или обработать заказ."
                    }
                ],
                "url": "https://gmx.az/api/v1/order",
                "curl": "curl -s -X POST 'https://gmx.az/api/v1/order' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY' \\\n  -H 'X-Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000' \\\n  -H 'Content-Type: application/json' \\\n  --data '{\n    \"product_id\": 91,\n    \"qty\": 1,\n    \"player_id\": \"51515969536\",\n    \"server_id\": \"1234\",\n    \"input_3\": \"CharacterName\",\n    \"client_order_id\": \"client-order-10001\",\n    \"callback_url\": \"https://customer.example/webhooks/bot-manager\",\n    \"callback_mode\": \"events\"\n}'"
            },
            {
                "id": "qr-login-status",
                "group": "Заказы",
                "method": "GET",
                "path": "/order/{id}/qr-login/status",
                "title": "Статус QR Login",
                "summary": "Получить текущее состояние QR Login для своего заказа.",
                "description": "Возвращает наличие QR, версию, состояние оператора, срок действия и разрешённые действия.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "id",
                        "location": "path",
                        "type": "string",
                        "required": true,
                        "description": "Order ID, order_uuid или client_order_id.",
                        "example": "8821",
                        "options": []
                    }
                ],
                "request_example": null,
                "response_example": {
                    "success": true,
                    "data": {
                        "order_id": 8821,
                        "order_status": "PROCESSING",
                        "session_status": "QR_READY",
                        "status_label": "QR code is ready.",
                        "has_qr": true,
                        "qr_version": 1,
                        "qr_image_url": "https://gmx.az/api/v1/order/8821/qr-login/preview?v=1",
                        "expires_at": "2026-08-17T16:30:00+04:00",
                        "can_mark_scanned": true,
                        "can_request_new_qr": true,
                        "can_submit_otp": false,
                        "is_final": false
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "ORDER_NOT_FOUND",
                        "status": 404,
                        "description": "Заказ не найден или принадлежит другому API пользователю."
                    }
                ],
                "url": "https://gmx.az/api/v1/order/{id}/qr-login/status",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/order/8821/qr-login/status' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "qr-login-preview",
                "group": "Заказы",
                "method": "GET",
                "path": "/order/{id}/qr-login/preview",
                "title": "QR Login изображение",
                "summary": "Получить текущее активное QR-изображение.",
                "description": "Возвращает приватный JPEG только пока QR активен. Используйте тот же API-ключ. Обычный тег <img> не может отправить X-API-KEY, поэтому загрузите изображение авторизованным binary/blob-запросом и покажите полученный object URL.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "id",
                        "location": "path",
                        "type": "string",
                        "required": true,
                        "description": "Order ID, order_uuid или client_order_id.",
                        "example": "8821",
                        "options": []
                    },
                    {
                        "name": "v",
                        "location": "query",
                        "type": "integer",
                        "required": false,
                        "description": "Необязательная версия QR для обхода кеша.",
                        "example": 1,
                        "options": []
                    }
                ],
                "request_example": null,
                "response_example": "Бинарный ответ image/jpeg.",
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "ORDER_NOT_FOUND",
                        "status": 404,
                        "description": "Заказ не найден или принадлежит другому API пользователю."
                    }
                ],
                "url": "https://gmx.az/api/v1/order/{id}/qr-login/preview",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/order/8821/qr-login/preview?v=1' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "qr-login-scanned",
                "group": "Заказы",
                "method": "POST",
                "path": "/order/{id}/qr-login/scanned",
                "title": "Подтвердить сканирование QR",
                "summary": "Сообщить назначенному оператору, что клиент отсканировал активный QR.",
                "description": "Используйте только после реального сканирования QR клиентом. Это не завершает заказ автоматически.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "id",
                        "location": "path",
                        "type": "string",
                        "required": true,
                        "description": "Order ID, order_uuid или client_order_id.",
                        "example": "8821",
                        "options": []
                    }
                ],
                "request_example": {},
                "response_example": {
                    "success": true,
                    "data": {
                        "session_status": "customer_scanned",
                        "has_qr": true
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "ORDER_NOT_FOUND",
                        "status": 404,
                        "description": "Заказ не найден или принадлежит другому API пользователю."
                    }
                ],
                "url": "https://gmx.az/api/v1/order/{id}/qr-login/scanned",
                "curl": "curl -s -X POST 'https://gmx.az/api/v1/order/8821/qr-login/scanned' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  --data '{}'"
            },
            {
                "id": "qr-login-new-qr",
                "group": "Заказы",
                "method": "POST",
                "path": "/order/{id}/qr-login/new-qr",
                "title": "Запросить новый QR",
                "summary": "Сделать текущий QR недействительным и запросить замену.",
                "description": "Используйте если QR истёк или не сканируется.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "id",
                        "location": "path",
                        "type": "string",
                        "required": true,
                        "description": "Order ID, order_uuid или client_order_id.",
                        "example": "8821",
                        "options": []
                    }
                ],
                "request_example": {},
                "response_example": {
                    "success": true,
                    "data": {
                        "session_status": "awaiting_new_qr",
                        "has_qr": false
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "ORDER_NOT_FOUND",
                        "status": 404,
                        "description": "Заказ не найден или принадлежит другому API пользователю."
                    }
                ],
                "url": "https://gmx.az/api/v1/order/{id}/qr-login/new-qr",
                "curl": "curl -s -X POST 'https://gmx.az/api/v1/order/8821/qr-login/new-qr' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  --data '{}'"
            },
            {
                "id": "qr-login-otp",
                "group": "Заказы",
                "method": "POST",
                "path": "/order/{id}/qr-login/otp",
                "title": "Отправить OTP для QR Login",
                "summary": "Отправить одноразовый код, запрошенный назначенным оператором.",
                "description": "OTP принимается только на этапе awaiting_otp и передаётся оператору без сохранения в базе.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "id",
                        "location": "path",
                        "type": "string",
                        "required": true,
                        "description": "Order ID, order_uuid или client_order_id.",
                        "example": "8821",
                        "options": []
                    },
                    {
                        "name": "otp",
                        "location": "body",
                        "type": "string",
                        "required": true,
                        "description": "Одноразовый код из 4-10 цифр.",
                        "example": "123456",
                        "options": []
                    }
                ],
                "request_example": {
                    "otp": "123456"
                },
                "response_example": {
                    "success": true,
                    "data": {
                        "session_status": "customer_scanned",
                        "has_qr": true
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "VALIDATION_ERROR",
                        "status": 422,
                        "description": "OTP должен содержать 4-10 цифр."
                    },
                    {
                        "code": "ORDER_NOT_FOUND",
                        "status": 404,
                        "description": "Заказ не найден или принадлежит другому API пользователю."
                    }
                ],
                "url": "https://gmx.az/api/v1/order/{id}/qr-login/otp",
                "curl": "curl -s -X POST 'https://gmx.az/api/v1/order/8821/qr-login/otp' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY' \\\n  -H 'Content-Type: application/json' \\\n  --data '{\n    \"otp\": \"123456\"\n}'"
            },
            {
                "id": "order-status",
                "group": "Заказы",
                "method": "GET",
                "path": "/order/{id}",
                "title": "Получить статус заказа",
                "summary": "Находит заказ по ID, UUID или client_order_id.",
                "description": "Возвращает текущий статус и коды выдачи ваучера, если они доступны.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "id",
                        "location": "path",
                        "type": "string",
                        "required": true,
                        "description": "Order ID, order_uuid или client_order_id.",
                        "example": "8821",
                        "options": []
                    }
                ],
                "request_example": null,
                "response_example": {
                    "success": true,
                    "data": {
                        "order_id": 8821,
                        "order_uuid": "a80f63d7-cabb-4e1d-a177-045f6467e7b2",
                        "client_order_id": "order-10001",
                        "product_id": 17,
                        "product_name": "Steam Wallet 10 USD",
                        "product_type": "VOUCHER",
                        "qty": 2,
                        "player_id": null,
                        "server_id": null,
                        "player_name": null,
                        "region": null,
                        "status": "COMPLETED",
                        "price": "19.9800",
                        "currency": "USD",
                        "delivery": [
                            "CODE-ONE-XXXX",
                            "CODE-TWO-XXXX"
                        ],
                        "manual_action_required": false,
                        "delivery_message": null,
                        "created_at": "2026-07-25T13:30:00+04:00",
                        "completed_at": "2026-07-25T13:31:10+04:00"
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "ORDER_NOT_FOUND",
                        "status": 404,
                        "description": "Заказ не найден или принадлежит другому API пользователю."
                    }
                ],
                "url": "https://gmx.az/api/v1/order/{id}",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/order/8821' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "order-status-legacy",
                "group": "Заказы",
                "method": "GET",
                "path": "/order-status/{id}",
                "title": "Старый адрес статуса",
                "summary": "Совместимый адрес для /order/{id}.",
                "description": "Для новых интеграций используйте /order/{id}.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "id",
                        "location": "path",
                        "type": "string",
                        "required": true,
                        "description": "Order ID, order_uuid или client_order_id.",
                        "example": "8821",
                        "options": []
                    }
                ],
                "request_example": null,
                "response_example": {
                    "success": true,
                    "data": {
                        "order_id": 8821,
                        "status": "COMPLETED",
                        "delivery": [
                            "CODE-ONE-XXXX"
                        ],
                        "manual_action_required": false,
                        "delivery_message": null
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "ORDER_NOT_FOUND",
                        "status": 404,
                        "description": "Заказ не найден."
                    }
                ],
                "url": "https://gmx.az/api/v1/order-status/{id}",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/order-status/8821' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "orders",
                "group": "Заказы",
                "method": "GET",
                "path": "/orders",
                "title": "История заказов",
                "summary": "Возвращает заказы текущего API пользователя с фильтрами и пагинацией.",
                "description": "Клиент может видеть только свои заказы. Максимум per_page — 100.",
                "success_status": 200,
                "parameters": [
                    {
                        "name": "status",
                        "location": "query",
                        "type": "string",
                        "required": false,
                        "description": "Статус заказа.",
                        "example": "completed",
                        "options": [
                            "pending",
                            "processing",
                            "completed",
                            "failed",
                            "canceled",
                            "cancelled",
                            "refunded"
                        ]
                    },
                    {
                        "name": "type",
                        "location": "query",
                        "type": "string",
                        "required": false,
                        "description": "Тип товара.",
                        "example": "voucher",
                        "options": [
                            "voucher",
                            "topup"
                        ]
                    },
                    {
                        "name": "page",
                        "location": "query",
                        "type": "integer",
                        "required": false,
                        "description": "Номер страницы.",
                        "example": 1,
                        "options": []
                    },
                    {
                        "name": "per_page",
                        "location": "query",
                        "type": "integer",
                        "required": false,
                        "description": "Размер страницы. Максимум 100.",
                        "example": 50,
                        "options": []
                    }
                ],
                "request_example": null,
                "response_example": {
                    "success": true,
                    "data": [
                        {
                            "order_id": 8821,
                            "product_name": "Steam Wallet 10 USD",
                            "product_type": "VOUCHER",
                            "qty": 1,
                            "status": "COMPLETED",
                            "price": "9.9900",
                            "currency": "USD",
                            "delivery": [
                                "CODE-ONE-XXXX"
                            ],
                            "manual_action_required": false,
                            "delivery_message": null
                        }
                    ],
                    "meta": {
                        "current_page": 1,
                        "last_page": 1,
                        "per_page": 50,
                        "total": 1
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "VALIDATION_ERROR",
                        "status": 422,
                        "description": "Неверный фильтр или параметр пагинации."
                    }
                ],
                "url": "https://gmx.az/api/v1/orders",
                "curl": "curl -s -X GET 'https://gmx.az/api/v1/orders?status=completed&type=voucher&page=1&per_page=50' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY'"
            },
            {
                "id": "redeem-check",
                "group": "Проверка кода",
                "method": "POST",
                "path": "/redeem-check",
                "title": "Проверить данные кода",
                "summary": "Проверяет код и списывает сумму, соответствующую результату.",
                "description": "Этот адрес создаёт реальную операцию с балансом. Неиспользованная часть резерва возвращается.",
                "success_status": 200,
                "side_effect": true,
                "warning": "Запрос выполняет реальную проверку кода и может списать баланс.",
                "parameters": [
                    {
                        "name": "X-Idempotency-Key",
                        "location": "header",
                        "type": "string",
                        "required": true,
                        "description": "Обязательный уникальный ключ повтора. Повтор с тем же кодом возвращает исходный результат без повторного списания и повторной внешней проверки.",
                        "example": "4d83ae61-b98b-4d4d-bf11-58f3bc028a71",
                        "options": []
                    },
                    {
                        "name": "code",
                        "location": "body",
                        "type": "string",
                        "required": true,
                        "description": "Проверяемый код. 6-160 символов.",
                        "example": "REDEEM-CODE-EXAMPLE",
                        "options": []
                    }
                ],
                "request_example": {
                    "code": "REDEEM-CODE-EXAMPLE"
                },
                "response_example": {
                    "success": true,
                    "data": {
                        "id": 142,
                        "status": "found",
                        "code_masked": "REDE********MPLE",
                        "charged_amount": "0.0500",
                        "charged_amount_text": "$ 0.05",
                        "balance": "1250.4500",
                        "balance_text": "$ 1250.45",
                        "currency_code": "USD",
                        "currency_symbol": "$",
                        "redemption_time": "2026-07-25 13:30:00",
                        "expiration_time": null,
                        "amount": 60,
                        "product_name": "PUBG Mobile 60 UC",
                        "player_id": "51515969536",
                        "player_name": "PlayerOne",
                        "created_at": "2026-07-25 13:30:02"
                    },
                    "meta": {
                        "idempotent_replay": false
                    }
                },
                "errors": [
                    {
                        "code": "API_DISABLED",
                        "status": 503,
                        "description": "Public API отключён администратором."
                    },
                    {
                        "code": "API_KEY_MISSING",
                        "status": 401,
                        "description": "Заголовок X-API-KEY не передан."
                    },
                    {
                        "code": "INVALID_API_KEY",
                        "status": 401,
                        "description": "API ключ недействителен или отключён, либо клиент неактивен."
                    },
                    {
                        "code": "IP_NOT_ALLOWED",
                        "status": 403,
                        "description": "IP адрес запроса не разрешён."
                    },
                    {
                        "code": "RATE_LIMIT_EXCEEDED",
                        "status": 429,
                        "description": "Превышен лимит запросов в минуту."
                    },
                    {
                        "code": "IDEMPOTENCY_KEY_REQUIRED",
                        "status": 422,
                        "description": "Для этой операции требуется стабильный ключ идемпотентности."
                    },
                    {
                        "code": "IDEMPOTENCY_KEY_INVALID",
                        "status": 422,
                        "description": "Ключ идемпотентности недействителен или длиннее 128 символов."
                    },
                    {
                        "code": "IDEMPOTENCY_CONFLICT",
                        "status": 409,
                        "description": "Один ключ использован с другим содержимым запроса."
                    },
                    {
                        "code": "VALIDATION_ERROR",
                        "status": 422,
                        "description": "Код отсутствует или имеет неверную длину."
                    },
                    {
                        "code": "REDEEM_CHECK_FAILED",
                        "status": 422,
                        "description": "Проверка кода не удалась, сервис отключён или недостаточно средств."
                    }
                ],
                "url": "https://gmx.az/api/v1/redeem-check",
                "curl": "curl -s -X POST 'https://gmx.az/api/v1/redeem-check' \\\n  -H 'Accept: application/json' \\\n  -H 'X-API-KEY: YOUR_API_KEY' \\\n  -H 'X-Idempotency-Key: 4d83ae61-b98b-4d4d-bf11-58f3bc028a71' \\\n  -H 'Content-Type: application/json' \\\n  --data '{\n    \"code\": \"REDEEM-CODE-EXAMPLE\"\n}'"
            }
        ],
        "status_lifecycle": [
            {
                "status": "PENDING",
                "terminal": false,
                "description": "Заказ создан и ожидает обработки."
            },
            {
                "status": "PROCESSING",
                "terminal": false,
                "description": "Заказ обрабатывается."
            },
            {
                "status": "COMPLETED",
                "terminal": true,
                "description": "Заказ успешно завершён. Для ваучера возвращаются коды."
            },
            {
                "status": "FAILED",
                "terminal": true,
                "description": "Заказ завершился ошибкой или отменён."
            },
            {
                "status": "CANCELED",
                "terminal": true,
                "description": "Заказ отменён."
            },
            {
                "status": "REFUNDED",
                "terminal": true,
                "description": "Сумма возвращена на баланс."
            }
        ],
        "webhook": {
            "event": "order.status_changed",
            "events": [
                "order.status_changed",
                "qr_login.waiting_worker",
                "qr_login.worker_assigned",
                "qr_login.qr_ready",
                "qr_login.customer_scanned",
                "qr_login.new_qr_requested",
                "qr_login.otp_required",
                "qr_login.otp_submitted"
            ],
            "method": "POST",
            "content_type": "application/json",
            "headers": [
                {
                    "name": "X-EPINBULK-Signature-V2",
                    "description": "Рекомендуется: sha256=HMAC_SHA256(timestamp + \".\" + event_id + \".\" + raw_json_body, webhook_secret). Используйте заголовки timestamp и event-id, указанные выше."
                },
                {
                    "name": "X-EPINBULK-Signature-Version",
                    "description": "2"
                },
                {
                    "name": "X-EPINBULK-Signature",
                    "description": "sha256=HMAC_SHA256(сырое_тело_json, секрет_webhook)"
                },
                {
                    "name": "X-EPINBULK-Timestamp",
                    "description": "Время отправки webhook в ISO-8601. При проверке подписи V2 проверяйте также актуальность времени."
                },
                {
                    "name": "X-EPINBULK-Event-Id",
                    "description": "Уникальный UUID попытки обратного вызова."
                },
                {
                    "name": "X-EPINBULK-Event",
                    "description": "Actual event name: order.status_changed or qr_login.*"
                }
            ],
            "requirements": [
                "Принимаются только HTTPS URL.",
                "Принимается только порт 443.",
                "Частные, зарезервированные и localhost адреса блокируются.",
                "Учётные данные в URL не принимаются.",
                "Перенаправления не выполняются.",
                "Сервер должен вернуть ответ 2xx."
            ],
            "retry_schedule": [
                "1 → 1 минута",
                "2 → 5 минут",
                "3 → 15 минут",
                "4-6 → 60 минут",
                "7-20 → 6 часов"
            ],
            "max_attempts": 20,
            "legacy_example": {
                "event_id": "47c8c6ba-16a5-4089-9f62-7ae1e51d4c0f",
                "order_id": 8821,
                "client_order_id": "order-10001",
                "status": "COMPLETED",
                "product_name": "Steam Wallet 10 USD",
                "qty": 2,
                "player_id": null,
                "player_name": null,
                "server_id": null,
                "region": null,
                "price": "19.9800",
                "currency": "USD",
                "delivery": [
                    "CODE-ONE-XXXX",
                    "CODE-TWO-XXXX"
                ],
                "manual_action_required": false,
                "delivery_message": null,
                "timestamp": "2026-07-25T13:31:10+04:00"
            },
            "events_example": {
                "event_id": "47c8c6ba-16a5-4089-9f62-7ae1e51d4c0f",
                "event": "order.status_changed",
                "callback_mode": "events",
                "order_id": 8821,
                "client_order_id": "order-10001",
                "product_id": 91,
                "product_name": "PUBG Mobile 60 UC",
                "product_type": "TOPUP",
                "game_id": 1,
                "game_name": "PUBG Mobile",
                "player_id": "51515969536",
                "player_name": "PlayerOne",
                "server_id": "1234",
                "region": "TR",
                "qty": 1,
                "price": "0.8800",
                "currency": "USD",
                "delivery": [],
                "manual_action_required": false,
                "delivery_message": null,
                "status": "COMPLETED",
                "message": "Заказ успешно завершён.",
                "timestamp": "2026-07-25T13:30:10+04:00"
            }
        },
        "error_catalog": [
            {
                "code": "API_DISABLED",
                "status": 503,
                "description": "Public API отключён администратором."
            },
            {
                "code": "API_KEY_MISSING",
                "status": 401,
                "description": "Заголовок X-API-KEY не передан."
            },
            {
                "code": "CLIENT_ORDER_ID_CONFLICT",
                "status": 409,
                "description": "Этот client_order_id уже назначен другому заказу."
            },
            {
                "code": "GAME_NOT_FOUND",
                "status": 404,
                "description": "Игра не найдена или неактивна."
            },
            {
                "code": "IDEMPOTENCY_CONFLICT",
                "status": 409,
                "description": "Один ключ использован с другим содержимым запроса."
            },
            {
                "code": "IDEMPOTENCY_KEY_INVALID",
                "status": 422,
                "description": "Ключ идемпотентности недействителен или длиннее 128 символов."
            },
            {
                "code": "IDEMPOTENCY_KEY_REQUIRED",
                "status": 422,
                "description": "Для этой операции требуется стабильный ключ идемпотентности."
            },
            {
                "code": "INSUFFICIENT_FUNDS",
                "status": 400,
                "description": "Недостаточно средств для заказа."
            },
            {
                "code": "INVALID_API_KEY",
                "status": 401,
                "description": "API ключ недействителен или отключён, либо клиент неактивен."
            },
            {
                "code": "INVALID_QUANTITY",
                "status": 422,
                "description": "Количество превышает лимит товара или API."
            },
            {
                "code": "IP_NOT_ALLOWED",
                "status": 403,
                "description": "IP адрес запроса не разрешён."
            },
            {
                "code": "ORDER_FAILED",
                "status": 409,
                "description": "Не удалось создать или обработать заказ."
            },
            {
                "code": "ORDER_NOT_FOUND",
                "status": 404,
                "description": "Заказ не найден или принадлежит другому API пользователю."
            },
            {
                "code": "OUT_OF_STOCK",
                "status": 409,
                "description": "Не удалось создать или обработать заказ."
            },
            {
                "code": "PLAYER_ID_REQUIRED",
                "status": 422,
                "description": "Для пополнения требуется player_id."
            },
            {
                "code": "PLAYER_NOT_FOUND",
                "status": 404,
                "description": "Игрок не прошёл обязательную проверку."
            },
            {
                "code": "PRODUCT_NOT_FOUND",
                "status": 404,
                "description": "Товар пополнения не найден или неактивен."
            },
            {
                "code": "RATE_LIMIT_EXCEEDED",
                "status": 429,
                "description": "Превышен лимит запросов в минуту."
            },
            {
                "code": "REDEEM_CHECK_FAILED",
                "status": 422,
                "description": "Проверка кода не удалась, сервис отключён или недостаточно средств."
            },
            {
                "code": "SECURITY_ERROR",
                "status": 400,
                "description": "URL обратного вызова не соответствует требованиям безопасности."
            },
            {
                "code": "SERVER_ID_REQUIRED",
                "status": 422,
                "description": "Для товара требуется server_id."
            },
            {
                "code": "VALIDATION_ERROR",
                "status": 422,
                "description": "Параметр type или q имеет неверный формат."
            }
        ],
        "common_error_shape": {
            "success": false,
            "error": {
                "code": "VALIDATION_ERROR",
                "message": "Поле product_id обязательно.",
                "details": {
                    "max": 1
                }
            }
        },
        "changelog": [
            {
                "date": "2026-07-25",
                "title": "Рабочая область запросов",
                "description": "Добавлены инструменты запросов, ответов и проверки подписи."
            },
            {
                "date": "2026-07-25",
                "title": "Усиление безопасности",
                "description": "Усилена защита callback и повторных запросов."
            }
        ]
    }
}