Payli Partner API
REST API для получения каталога, создания заказов, отслеживания статусов, получения результата, проверки баланса и возврата заказов.
/api/partner/v1application/jsonAuthorization: Bearer <API_TOKEN>GET — 600 / мин · POST — 60 / минАвторизация
Все запросы выполняются с API-токеном.
Authorization: Bearer <API_TOKEN>Общие правила
- Заголовок запроса:
Content-Type: application/json. - Все суммы передаются и возвращаются в рублях:
100.00. - Все даты возвращаются в формате RFC3339:
2026-05-06T09:31:09Z. - Неизвестные поля в POST-запросах не допускаются. Если передать поле, которого нет в документации, API вернёт ошибку.
- Для безопасных повторов
POST /ordersиспользуйтеidempotency_key.
GETКаталог · Services
Список доступных сервисов каталога.
{
"services": [
{
"code": "steam",
"name": "Steam",
"available": true,
"min_rub": 100.00,
"max_rub": 15000.00,
"base_commission_percent": 4.00
}
]
}codenameavailablemin_rubmax_rubbase_commission_percentGETКаталог · Categories
Список категорий с подкатегориями.
{
"categories": [
{
"id": 33,
"name": "Mobile Legends",
"description": "Пополнение Mobile Legends",
"available": true,
"sort": 100,
"subcategories": [
{
"id": 36,
"name": "Global",
"description": "",
"available": true,
"sort": 100
}
]
}
]
}idnamedescriptionavailablesortsubcategoriesGETКаталог · Products by category
Товары выбранной категории.
{
"category": {
"id": 33,
"name": "Mobile Legends",
"available": true
},
"products": [
{
"id": 681,
"category_id": 33,
"subcategory_id": 36,
"subcategory_name": "Global",
"name": "156 + 16 алмазов",
"description": "Пакет алмазов",
"help_description": "Укажите User ID и Server",
"type": "topup",
"available": true,
"price_rub": 214.00,
"fields": [
{
"key": "Input1",
"placeholder": "User ID"
}
]
}
]
}idcategory_id / subcategory_idsubcategory_namename / description / help_descriptiontypeavailableprice_rubfieldsGETКаталог · Product by id
Один товар по идентификатору.
{
"product": {
"id": 681,
"category_id": 33,
"subcategory_id": 36,
"subcategory_name": "Global",
"name": "156 + 16 алмазов",
"description": "Пакет алмазов",
"help_description": "Укажите User ID и Server",
"type": "topup",
"available": true,
"price_rub": 214.00,
"fields": [
{
"key": "Input1",
"placeholder": "User ID"
}
]
}
}Товар eSIM содержит дополнительный объект esim:
{
"product": {
"id": 1042,
"category_id": 50,
"subcategory_id": 51,
"subcategory_name": "Европа",
"name": "Европа · 10 ГБ · 30 дней",
"type": "esim",
"available": true,
"price_rub": 390.00,
"fields": [],
"esim": {
"country_code": "EU",
"geo_scope": "region",
"package_type": "data",
"data_unit": "GB",
"data_qty": 10,
"data_unlimited": false,
"validity_days": 30,
"voice_minutes": 0,
"voice_unlimited": false,
"sms": 0,
"sms_unlimited": false,
"sms_incoming_only": false,
"operator": "Orange",
"max_generation": "5G",
"can_renew": true,
"coverage_count": 39,
"coverage_country_codes": ["FR", "DE", "IT", "ES"]
}
}
}POSTСоздание заказа
Создаёт заказ и возвращает ссылку на оплату. После оплаты статус заказа можно получить через GET /api/partner/v1/orders/{public_id}.
Поля
typereqaccountamount_pay_rubproduct_idfieldspartner_commission_percentredirect_urlwebhook_urlwebhook_secretidempotency_keyrenew_order_idrenew_iccidSteam
{
"type": "steam",
"account": "my_steam_login_or_url",
"amount_pay_rub": 1000.00,
"partner_commission_percent": 4.00,
"redirect_url": "https://partner.example/return",
"webhook_url": "https://partner.example/payli/webhook",
"webhook_secret": "your-random-secret",
"idempotency_key": "order-10001"
}Topup
{
"type": "topup",
"product_id": 681,
"fields": {
"Input1": "123456789",
"Input2": "11"
},
"partner_commission_percent": 1.50,
"redirect_url": "https://partner.example/return",
"webhook_url": "https://partner.example/payli/webhook",
"webhook_secret": "your-random-secret",
"idempotency_key": "order-10002"
}Voucher
{
"type": "voucher",
"product_id": 777,
"fields": {
"email": "customer@example.com"
},
"partner_commission_percent": 2.00,
"redirect_url": "https://partner.example/return",
"webhook_url": "https://partner.example/payli/webhook",
"webhook_secret": "your-random-secret",
"idempotency_key": "order-10003"
}Voucher без email:
{
"type": "voucher",
"product_id": 777,
"fields": {
"email": ""
},
"partner_commission_percent": 2.00,
"redirect_url": "https://partner.example/return",
"webhook_url": "https://partner.example/payli/webhook",
"webhook_secret": "your-random-secret",
"idempotency_key": "order-10004"
}eSIM
{
"type": "esim",
"product_id": 1042,
"fields": {
"email": "customer@example.com"
},
"partner_commission_percent": 2.00,
"redirect_url": "https://partner.example/return",
"webhook_url": "https://partner.example/payli/webhook",
"webhook_secret": "your-random-secret",
"idempotency_key": "order-10005"
}Продление eSIM
По исходному заказу:
{
"type": "esim",
"renew_order_id": "5f44b1b0-2f8d-45a9-82f5-4b0a26cda111",
"fields": {
"email": "customer@example.com"
},
"partner_commission_percent": 2.00,
"redirect_url": "https://partner.example/return",
"webhook_url": "https://partner.example/payli/webhook",
"webhook_secret": "your-random-secret",
"idempotency_key": "order-10006"
}По ICCID:
{
"type": "esim",
"renew_iccid": "8943108170000000000",
"product_id": 1042,
"fields": {
"email": "customer@example.com"
},
"partner_commission_percent": 2.00,
"redirect_url": "https://partner.example/return",
"webhook_url": "https://partner.example/payli/webhook",
"webhook_secret": "your-random-secret",
"idempotency_key": "order-10007"
}Ответ
{
"order": {
"public_id": "8af8e6b2-19f1-48d1-9e3e-67e9e8c0a814",
"type": "voucher",
"status": "pending_payment",
"product_id": 777,
"amount_base_rub": 117.65,
"partner_commission_percent": 2.00,
"partner_commission_rub": 2.35,
"partner_fee_rub": 2.35,
"amount_pay_rub": 120.00
},
"payment": {
"pay_url": "https://payment.example/pay?id=..."
}
}Статусы заказов
pending_paymentpayment_receivedprocessing_payoutcompletedfailedcanceledrefundedchargebackcreation_failedGETПолучение заказа
Возвращает заказ: статус, суммы и результат выдачи. Код ваучера (voucher_code) и данные eSIM (esim_code, esim) появляются после статуса completed.
pending_payment:
{
"order": {
"public_id": "8af8e6b2-19f1-48d1-9e3e-67e9e8c0a814",
"type": "voucher",
"status": "pending_payment",
"product_id": 777,
"amount_pay_rub": 120.00,
"created_at": "2026-05-06T09:31:00Z"
},
"payment": {
"pay_url": "https://payment.example/pay?id=..."
}
}completed · voucher:
{
"order": {
"public_id": "8af8e6b2-19f1-48d1-9e3e-67e9e8c0a814",
"type": "voucher",
"status": "completed",
"product_id": 777,
"amount_pay_rub": 120.00,
"voucher_code": "ABCD-EFGH-IJKL",
"created_at": "2026-05-06T09:31:00Z",
"paid_at": "2026-05-06T09:31:09Z"
}
}completed · eSIM:
{
"order": {
"public_id": "8af8e6b2-19f1-48d1-9e3e-67e9e8c0a814",
"type": "esim",
"status": "completed",
"product_id": 1042,
"amount_pay_rub": 390.00,
"esim_code": "LPA:1$consumer.rsp.world$XXXX",
"esim": {
"qr_code": "LPA:1$consumer.rsp.world$XXXX",
"smdp_address": "consumer.rsp.world",
"matching_id": "XXXX",
"iccid": "8943108170000000000",
"can_renew": true,
"apple_link": "https://...",
"android_link": "https://..."
}
}
}GETСписок заказов
Список заказов партнёра. Параметры: limit (по умолчанию 50, макс 200), offset.
{
"orders": [
{
"public_id": "8af8e6b2-19f1-48d1-9e3e-67e9e8c0a814",
"type": "voucher",
"status": "completed",
"product_id": 777,
"amount_pay_rub": 120.00,
"created_at": "2026-05-06T09:31:00Z",
"paid_at": "2026-05-06T09:31:09Z"
}
],
"limit": 50,
"offset": 0
}POSTRefund order
Возвращает оплату по заказу, который был оплачен через платёжную ссылку и завершился ошибкой выдачи.
Условия
- Заказ должен принадлежать партнёру.
- Заказ должен быть в статусе
failed. - Заказ должен быть оплачен через платёжную ссылку.
{
"reason": "manual_refund"
}{
"order": {
"public_id": "5f44b1b0-2f8d-45a9-82f5-4b0a26cda111",
"status": "refunded"
},
"fee": {
"rub": 30.00,
"percent": 3.00
}
}GETБаланс
Возвращает текущий баланс партнёра и последние операции.
{
"balance_rub": 1520.45,
"transactions": [
{
"id": 1912,
"amount_rub": -97.50,
"tx_type": "order_debit",
"order_public_id": "7a85c2c1-3e9f-4ba2-91g6-5c1b27deb222",
"created_at": "2026-05-06T09:12:44Z"
}
],
"transactions_limit": 50
}Типы операций (tx_type)
invoice_topupinvoice_refundinvoice_chargebackinvoice_chargeback_releaseorder_debitorder_debit_refundorder_refund_feeaccrualwithdrawaladjustmentWebhooks
Если в запросе создания заказа передан webhook_url, Payli будет отправлять POST-уведомления при изменении статуса заказа.
Параметры (в POST /orders)
webhook_urlwebhook_secretPayload
{
"event": "order.status",
"entity": "order",
"public_id": "f80d95fb-2888-4108-8b6c-79704eb09b92",
"order_public_id": "f80d95fb-2888-4108-8b6c-79704eb09b92",
"status": "completed",
"amount_rub": 500.00,
"attempt": 1,
"ts": "2026-05-21T07:09:43Z"
}amount_rub — в рублях, число с 2 знаками (например 500.00), не в копейках.
Headers
Content-Type: application/json
X-Payli-Event-Id: 12345
X-Payli-Signature: sha256=<hmac>Подпись
X-Payli-Signature = sha256=<HMAC-SHA256(raw_body, webhook_secret)>. Если webhook_secret не передан — заголовок подписи не отправляется.
Гарантии доставки
- Терминальные статусы гарантированы (
completed,failed,refunded,chargeback) — доставляются с ретраями. - Промежуточный
payment_received— best-effort (может не прийти при быстром переходе в терминальный статус). Ориентируйтесь на терминальные статусы. - Дедуплицируйте по
X-Payli-Event-Id(возможны повторы при ретраях).
Ошибки
Ошибки возвращаются в JSON: { "error": "<code>", "message": "<optional>" }.
| HTTP | error | Когда возникает | Что делать |
|---|---|---|---|
| 400 | invalid_json | неверный JSON или неизвестное поле | исправить тело запроса |
| 400 | invalid_webhook_url | неверный webhook_url | проверить URL |
| 400 | invalid_webhook_secret | webhook_secret длиннее 512 символов | сократить секрет |
| 401 | unauthorized | неверный токен | проверить Authorization |
| 403 | forbidden | операция недоступна | обратиться в поддержку |
| 404 | not_found | сущность не найдена | проверить public_id |
| 409 | request_in_progress | тот же idempotency_key уже выполняется | повторить после Retry-After |
| 409 | idempotency_key_reused_with_different_payload | тот же Idempotency-Key с другими параметрами (сумма/redirect/webhook/TTL) | использовать новый ключ для нового запроса |
| 409 | invalid_state | статус не позволяет операцию | проверить статус сущности |
| 429 | rate_limited | превышен лимит | повторить позже |
| 503 | fee_config_unavailable | временный сбой при чтении тарифа (создание инвойса) | повторить позже |
| 503 | payment_init_recovery_pending | заказ/инвойс создан(а), но pay_url ещё дозаписывается (сбой записи provider_ref) | повторить тот же запрос с тем же Idempotency-Key через пару секунд |
| 503 | idempotency_unavailable | временный сбой | повторить позже |