#Webhook
При смене статуса транзакции отправляем POST на webhook_url (из запроса) или из настроек мерчанта.
#Заголовки
Content-Type: application/json
Authorization: Bearer <merchant.webhook_token>
X-Signature: <hex HMAC-SHA256(body + path + search, secret)>#Тело — для PayIn (card)
{
"id": "Kx7mN2pQ4rT9wY",
"merchant_transaction_id": "ord_001",
"client_id": "user_42",
"type": "in",
"payment_method": "card",
"amount": "5000",
"paid_amount": "5000",
"currency": "RUB",
"currency_rate": "0",
"amount_in_usd": "54.05",
"rate": "92.5",
"commission": "1.62",
"status": "paid",
"paid_at": "2026-05-04T10:23:45.123Z",
"expires_at": "2026-05-04T11:00:00.000Z",
"created_at": "2026-05-04T10:00:00.000Z",
"card_number": "2200000000000000",
"owner_name": "IVAN IVANOV",
"bank_id": "...",
"bank_name": "Сбер"
}#Тело — для PayOut (card)
{
"id": "Kx7mN2pQ4rT9wY",
"merchant_transaction_id": "payout_001",
"client_id": "user_42",
"type": "out",
"payment_method": "card-out",
"amount": "5000",
"paid_amount": "5000",
"currency": "RUB",
"currency_rate": "0",
"amount_in_usd": "54.05",
"rate": "92.5",
"commission": "1.62",
"status": "paid",
"paid_at": "2026-05-04T10:23:45.123Z",
"expires_at": null,
"created_at": "2026-05-04T10:00:00.000Z",
"card_number": "2200000000000000",
"owner_name": "IVAN IVANOV",
"bank_id": "...",
"bank_name": "Сбер"
}#Поля webhook'а — что меняется по методу
Метод (payment_method в webhook) | Поля реквизита |
|---|---|
card, card-internal, card-cross, card-out | card_number, owner_name, bank_id, bank_name |
sbp, sbp-internal, sbp-cross, sbp-out | phone_number, owner_name, bank_id, bank_name |
account, account-out | account_number, owner_name, bank_id, bank_name |
qr, qr-internal, qr-cross, qr-nspk | (только базовые поля, без реквизита) |
mobile, mobile-internal, mobile-cross | phone_number, owner_name, operator_id, operator |
#Возможные status в webhook
process · paid · underpaid · overpaid · cancel · expired · disputed · chargeback · error