Содержание
Введение

Все запросы отправляются на базовый URL. Ответы всегда в формате JSON (UTF-8). Признак успеха — поле ok: true.

https://nervixy.digital/api.php

Нужный метод выбирается параметром action в query-строке, например ?action=api_me. Тело POST-запросов — JSON с заголовком Content-Type: application/json.

Аутентификация и ключ
Пример авторизованного запроса
curl "https://nervixy.digital/api.php?action=api_me" \
  -H "X-API-Key: ВАШ_КЛЮЧ"

Дополнительно действует белый список IP: запросы принимаются только с адресов, добавленных в разделе Настройки. Запрос с постороннего IP будет отклонён даже с верным ключом.

Коды ответов и ошибки
200Успешный запрос. 400Неверные параметры. 401Неверный API-ключ или IP не в белом списке. 403Аккаунт заблокирован. 404Объект не найден. 429Превышен лимит запросов. 500Внутренняя ошибка сервера. 502Поставщик отклонил заказ.
Формат ошибки
{
  "ok": false,
  "error": "Описание ошибки"
}
Информация об аккаунте
POST/api.php?action=api_me
Логин, текущий баланс и персональная скидка.
Ответ
{
  "ok": true,
  "login": "client123",
  "balance": 42.50,
  "discount": 2.00
}
Курсы валют
GET/api.php?action=api_rates
Актуальные курсы валют.
Ответ
{
  "ok": true,
  "base": "USD",
  "rates": {
    "KZT": 471.45016,
    "RUB": 78.57377,
    "UAH": 44.68123
  },
  "updated_at": "2026-07-18 06:23:43"
}
Статус заказа
POST/api.php?action=api_status
Текущий статус любого заказа — пополнения или гифта — по его order_id.
Запрос
curl "https://nervixy.digital/api.php?action=api_status" \
  -H "X-API-Key: ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"order_id": "a1b2c3..."}'
Ответ
{
  "ok": true,
  "order": "a1b2c3...",
  "status": "delivered",
  "created_at": "2026-07-18 12:00:00"
}

Статусы: processing · delivered (успешно, пополнение и гифт) · rejected — если заказ не найден, вернётся код 404

История платежей
POST/api.php?action=api_payments
Все движения по балансу: пополнения, списания за заказы, возвраты. Отрицательный amount — списание.
Параметры
ПолеТипОписание
limitintegerКол-во записей, макс 100
offsetintegerСмещение для пагинации
Пример запроса
curl "https://nervixy.digital/api.php?action=api_payments" \
  -H "X-API-Key: ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"limit": 50, "offset": 0}'
Ответ
{
  "ok": true,
  "total": 340,
  "limit": 50,
  "offset": 0,
  "payments": [
    {
      "id": "a1b2c3...",
      "amount": "-6.16",
      "comment": "API заказ Steam: mylogin (номинал $6.29)",
      "created_at": "2026-07-18 12:00:00"
    }
  ]
}
Создать заказ на пополнение
POST/api.php?action=api_order
Пополнение баланса Steam по логину. Средства списываются с вашего баланса с учётом скидки.
Параметры
ПолеТипОписание
amountnumberСумма в выбранной валюте; лимиты: от 15 ₽ до 30 000 ₽ (эквивалент)
steam_loginstringЛогин Steam, 3–64 символа (латиница, цифры, _ - .)
currencystringВалюта: USD, RUB, KZT, UAH. По умолчанию USD
partner_idstringНеобязательно. Ваш внутренний ID клиента, латиница/цифры. Не передан — сгенерируется автоматически
Пример запроса
curl -X POST "https://nervixy.digital/api.php?action=api_order" \
  -H "X-API-Key: ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 500,
    "currency": "RUB",
    "steam_login": "mylogin",
    "partner_id": "MYPARTNER01"
  }'
Ответ
{
  "ok": true,
  "order_id": "a1b2c3...",
  "currency": "RUB",
  "amount": 6.29,
  "paid": 6.16,
  "original_amount": 500,
  "original_paid": 490,
  "steam_login": "mylogin",
  "partner_id": "MYPARTNER01",
  "created_at": "2026-07-18T12:00:00+03:00"
}

currency — валюта из запроса; amount — номинал заказа в USD, paid — списано с баланса в USD с учётом скидки; original_amount и original_paid — те же суммы в валюте запроса. При нехватке средств вернётся ошибка с полями balance и required.

Список заказов
POST/api.php?action=api_orders
История ваших заказов на пополнение, новые первыми.
Параметры
ПолеТипОписание
limitintegerКол-во записей, макс 100
offsetintegerСмещение для пагинации
Пример запроса
curl "https://nervixy.digital/api.php?action=api_orders" \
  -H "X-API-Key: ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"limit": 50, "offset": 0}'
Ответ
{
  "ok": true,
  "total": 128,
  "limit": 50,
  "offset": 0,
  "orders": [
    {
      "id": "a1b2c3...",
      "amount": "6.29",
      "paid": "6.16",
      "currency": "RUB",
      "original_amount": "500.00",
      "original_paid": "490.00",
      "steam_login": "mylogin",
      "status": "delivered",
      "created_at": "2026-07-18 12:00:00"
    }
  ]
}

amount/paid — в USD; original_amount/original_paid — в валюте заказа (currency).

Проверка Steam-логина
POST/api.php?action=api_check_login
Проверяет, можно ли пополнить указанный Steam-аккаунт, до создания заказа.
Параметры
ПолеТипОписание
steam_loginstringЛогин Steam, 3-64 символа (латиница, цифры, _ - .)
Пример запроса
curl -X POST "https://nervixy.digital/api.php?action=api_check_login" \
  -H "X-API-Key: ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{"steam_login": "myLogin"}'
Пример ответа
{
  "ok": true,
  "steam_login": "myLogin",
  "valid": true,
  "status_message": "Steam account validated"
}

Поле valid: true — аккаунт можно пополнить, false — нельзя (см. status_message)

Webhooks

Вместо опроса статусов мы сами отправим POST-запрос на ваш URL при каждой смене статуса заказа — пополнения и гифта. Укажите URL (только https) в личном кабинете в разделе Настройки → Webhooks — там же вы получите секретный ключ whsec_... (показывается один раз) и сможете отправить тестовое событие.

POSTваш URL
Тело запроса — JSON (UTF-8), заголовки: Content-Type: application/json и X-Nervixy-Signature — подпись HMAC-SHA256 тела запроса вашим секретом.
Пример события
{
  "event": "topup.delivered",
  "type": "topup",
  "order_id": "a1b2c3...",
  "status": "delivered",
  "amount": 6.29,
  "paid": 6.16,
  "steam_login": "mylogin",
  "game_name": null,
  "region": null,
  "created_at": "2026-07-19 12:00:00"
}
Поля
ПолеОписание
eventtopup.<статус> / gift.<статус> — тип заказа + статус, напр. topup.delivered, gift.rejected; webhook.test — тест из настроек
typetopup — пополнение, gift — Steam Gift
statusprocessing · delivered (успешно, пополнение и гифт) · rejected
amount / paidНоминал и списанная сумма, USD
game_name / regionТолько для type: "gift", иначе null
Подтверждение и повторы

Ответьте кодом 2xx в течение 5 секунд — событие считается доставленным. Иначе мы повторим отправку через 1, 5, 15 и 60 минут (всего 5 попыток). Если все попытки неудачны, событие помечается как неотправленное, а вам придёт уведомление в Telegram-бот.

Проверка подписи — PHP
$body = file_get_contents('php://input');
$sig  = $_SERVER['HTTP_X_NERVIXY_SIGNATURE'] ?? '';
$calc = hash_hmac('sha256', $body, 'ВАШ_СЕКРЕТ_whsec');

if (!hash_equals($calc, $sig)) { http_response_code(403); exit; }

$data = json_decode($body, true);
// защита от повтора: отклоняем события старше 5 минут
if (abs(time() - strtotime($data['created_at'])) > 300) { http_response_code(403); exit; }

// ... ваша обработка ...
http_response_code(200);
Проверка подписи — Python
import hmac, hashlib, json

def verify(body_bytes, signature_header, secret):
    calc = hmac.new(secret.encode(), body_bytes, hashlib.sha256).hexdigest()
    return hmac.compare_digest(calc, signature_header)

# body_bytes — сырое тело запроса, signature_header — заголовок X-Nervixy-Signature
# при несовпадении отвечайте 403, при успехе — 200

Сравнивайте подписи только через hash_equals / compare_digest — обычное сравнение строк уязвимо к timing-атакам.