Справочник API

REST API v2 — актуальная версия.

Редакция от 21 апреля 2026 г.

Базовый URL

https://amypay.ru/api/v2

Все эндпоинты работают только по HTTPS. Запросы по HTTP автоматически перенаправляются на HTTPS. Версия v1 ещё принимается, но помечена как deprecated — рекомендуем сразу использовать v2.

Авторизация

Все эндпоинты (кроме /ping) требуют передачи API-ключа кассы.

Bearer-токен кассы (основной способ)

Authorization: Bearer amypay_live_8f3d...9a2b

Ключ берётся в «Кассы → [название] → Реквизиты API». У каждой кассы свой ключ; действия в API привязаны к кассе, которой принадлежит ключ.

Нужно показывать реквизиты внутри вашего интерфейса? Используйте отдельное руководство «API выдачи реквизитов»: список методов, точная сумма, карта/СБП/криптоадрес, TTL и загрузка чека без перехода покупателя на страницу Amypay.

Формат ошибок

Все ответы — JSON. Успех:

{ "ok": true, ... }

Ошибка:

{
    "ok": false,
    "error": "unauthorized"
}

Или с детализацией по полям (HTTP 422):

{
    "ok": false,
    "errors": {
        "amount": ["Минимум 0.01"]
    }
}
КодЗначение
200 / 201Успех
401Неверный или отсутствующий API-ключ
403Доступ запрещён (IP не в whitelist, касса приостановлена)
404Ресурс не найден
422Ошибка валидации
429Rate limit exceeded
500Внутренняя ошибка — напишите в поддержку

Ограничение частоты запросов

Базовый лимит: 60 запросов в минуту на один API-ключ. При превышении возвращается 429 Too Many Requests с заголовком Retry-After, указывающим сколько секунд подождать. Если вам нужен увеличенный лимит — напишите на support@amypay.ru.

GET /ping

Проверка доступности. Авторизация не требуется.

curl https://amypay.ru/api/v2/ping
{
    "ok": true,
    "service": "Amypay",
    "version": "v2",
    "time": 1745251200
}

POST /orders — создать заказ

Параметры

ПолеТипОбязательноеОписание
amountnumberдаСумма в рублях, 0.01 — 10 000 000
external_order_idstringнетВаш внутренний идентификатор, до 128 символов
descriptionstringнетОписание для Плательщика, до 255 символов
payer_emailstringнетEmail Плательщика — придёт чек
metadataobjectнетПроизвольный JSON до 4 КБ, вернётся в вебхуке

Пример

curl -X POST https://amypay.ru/api/v2/orders \
    -H "Authorization: Bearer $API_KEY" \
    -H "Content-Type: application/json" \
    -d '{
        "amount": 1490.00,
        "external_order_id": "ORDER-123",
        "description": "Подписка Pro",
        "payer_email": "user@example.com",
        "metadata": { "plan": "pro" }
    }'

Ответ 201 Created:

{
    "ok": true,
    "order": {
        "number": "AMY-20260421-000123",
        "amount": 1490.00,
        "currency": "RUB",
        "status": "pending",
        "external_order_id": "ORDER-123",
        "pay_url": "https://amypay.ru/pay?t=eyJhbGciOi...",
        "pay_token": "eyJhbGciOi...",
        "created_at": 1745251200
    }
}

GET /orders/{number} — получить заказ

curl https://amypay.ru/api/v2/orders/AMY-20260421-000123 \
    -H "Authorization: Bearer $API_KEY"
{
    "ok": true,
    "order": {
        "number": "AMY-20260421-000123",
        "external_order_id": "ORDER-123",
        "description": "Подписка Pro",
        "amount": "1490.00",
        "amount_rub": "1490.00",
        "currency": "RUB",
        "pay_currency": "RUB",
        "pay_amount": "1490.00",
        "pay_address": "79001234567",
        "amount_credited": "1475.10",
        "fee_merchant": "14.90",
        "fee_client": "0.00",
        "status": "paid",
        "payer_email": "user@example.com",
        "metadata": "{\"plan\":\"pro\"}",
        "created_at": 1745251200,
        "paid_at":    1745251500
    }
}

GET /orders — список заказов

Параметр page — номер страницы (1 по умолчанию). Размер страницы фиксирован (50 записей).

curl "https://amypay.ru/api/v2/orders?page=2" \
    -H "Authorization: Bearer $API_KEY"
{
    "ok": true,
    "items": [ { "number": "AMY-...", "status": "paid", ... }, ... ],
    "total": 317
}

GET /wallets — балансы пользователя

curl https://amypay.ru/api/v2/wallets \
    -H "Authorization: Bearer $API_KEY"
{
    "ok": true,
    "wallets": [
        { "currency": "RUB",  "balance": "12450.75", "balance_hold": "0.00" },
        { "currency": "USDT", "balance": "138.52",   "balance_hold": "0.00" },
        { "currency": "BTC",  "balance": "0.00452",  "balance_hold": "0.00" }
    ]
}

balance_hold — сумма, временно заморожена (например, под оформленную, но ещё не одобренную заявку на вывод).

Вебхуки

Вебхуки отправляются на notify_url кассы методом POST с телом application/x-www-form-urlencoded.

Поля

ПолеОписание
merchant_idID кассы в Amypay
order_numberНомер заказа в Amypay
external_order_idВаш идентификатор из POST /orders
amountСумма заказа в рублях
currencyВсегда RUB
pay_currencyВалюта оплаты: RUB / USDT / BTC
pay_amountСумма в валюте оплаты
amount_creditedСколько зачислено на кошелёк мерчанта (минус комиссия)
providerИспользованный метод: p2p_sbp, p2p_card, p2p_yoomoney, crypto_btc, crypto_ltc, crypto_doge, crypto_bch, crypto_trx, crypto_eth, crypto_bnb, crypto_usdt, crypto_usdt_erc20, crypto_usdt_bep20, crypto_usdc_erc20, crypto_usdc_bep20, balance_rub
test_mode1 — тестовый заказ, 0 — боевой
signПодпись, см. ниже
metadata[...]Ваши метаданные (если передавались)

Подпись

sign = sha256( api_key + ":" + order_number + ":" + amount + ":" + secret_word_2 )

Пример проверки (PHP)

$expected = hash('sha256', implode(':', [
    $apiKey,
    $_POST['order_number'],
    $_POST['amount'],
    $secretWord2,
]));
if (!hash_equals($expected, $_POST['sign'] ?? '')) {
    http_response_code(400);
    exit('bad sign');
}
// безопасно обновляем заказ в БД, отвечаем 200 OK
echo 'OK';

Ретраи

Если ваш сервер вернул не 2xx или таймаут (>10 сек), Amypay повторит попытку по расписанию: 30 сек → 2 мин → 10 мин → 30 мин → 2 часа (всего 5 попыток). Перезапуск ретраев из админки — «Заказы → [номер] → Повторить вебхук».

Статусы заказа

СтатусЧто означает
pendingСоздан, ожидает действий Плательщика
reviewЧек загружен и ожидает решения модератора
paidУспешно оплачен, средства зачислены на кошелёк мерчанта
canceledОтменён Плательщиком или по таймауту
failedОшибка проведения платежа
refundedВозвращён полностью

OpenAPI спецификация

Машиночитаемое описание API в формате OpenAPI 3: /api/openapi.json. Можно открыть в Swagger Editor или использовать для генерации клиентов.