PayOut
Create a payout to a customer
POST /host2host/payout
Creates a PayOut operation. The merchant pays to the customer.
Authentication
Authorization: Bearer YOUR_JWT_TOKENRequest Body
| Field | Type | Required | Description |
|---|---|---|---|
paymentMethod | string | Yes | Payment method code (see Payment Methods) |
idTransactionMerchant | string | Yes | Your unique transaction identifier |
amount | decimal | Yes | Payout amount in the operation currency |
number | string | Yes | Recipient's card number, phone, or account number |
bankName | string | Yes | Recipient's bank. For sbp — the name or bankCode from GET /masterdata/bank/list. For other methods — a free-form bank name (see below) |
nameMediator | string | No | Recipient's full name |
clientID | string | Yes | Unique customer identifier in your system |
clientIP | string | Yes | Customer's IP address |
clientDateCreated | datetime | Yes | Customer registration date in your system |
integrationMerhcnatData | object | No | Webhook configuration |
integrationMerhcnatData.webHook | string | No | Webhook URL for this operation |
Identifying the bank
How bankName is handled depends on paymentMethod.
sbp — validated against the bank classifier. Three interchangeable forms are accepted, resolved in this order:
- The bank's
name— e.g."Сбербанк". - The bank's
bankCode— the SBP (NSPK) member id, e.g."100000000111". This is the value ofschemain qr.nspk.ru/proxyapp/c2bmembers.json without thebankprefix; thebank100000000111form is accepted as well. - A known alias — a former, abbreviated or transliterated name (e.g.
"sberbank","Тинькофф").
Matching on name is case-sensitive; aliases and bankCode are not. Whichever form you send, the platform normalizes it to the canonical name before routing the payout, so the provider always receives the same value. An unrecognized bank returns Not found bankName and no operation is created.
Sending bankCode is the more robust option: display names get renamed over time, member ids do not.
All other methods — passed through as-is. bankName is not validated against the classifier and reaches the provider verbatim. This is what makes payouts to banks outside the SBP registry possible ("Kapital Bank", "Kaspi Bank", "Axis Bank", "Leobank" and so on). Two consequences:
- A typo will not be rejected — it is forwarded to the provider, which may decline the payout.
- Commission tiering only recognizes the literal values
"Сбербанк"and"sber". For a non-sbppayout to Sberbank, send one of those rather than the numericbankCode, otherwise the interbank rate applies.
Example: Card PayOut
curl -X POST 'https://api.admin-pixelwave.com/host2host/payout' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"paymentMethod": "toCard",
"idTransactionMerchant": "payout-12345",
"amount": 3000,
"number": "4276123456789012",
"bankName": "Sberbank",
"nameMediator": "Ivanov Ivan",
"clientID": "user-67890",
"clientIP": "192.168.1.100",
"clientDateCreated": "2025-01-15T10:30:00Z"
}'Example: SBP PayOut
curl -X POST 'https://api.admin-pixelwave.com/host2host/payout' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"paymentMethod": "sbp",
"idTransactionMerchant": "payout-sbp-001",
"amount": 3000,
"number": "+79991234567",
"bankName": "100000000111",
"clientID": "user-67890",
"clientIP": "192.168.1.100",
"clientDateCreated": "2025-01-15T10:30:00Z"
}'Here bankName is Sberbank's SBP member id. "Сбербанк" and "Sberbank" address the same bank and are equally valid.
Example: AZN Card PayOut
curl -X POST 'https://api.admin-pixelwave.com/host2host/payout' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"paymentMethod": "azn_c2c",
"idTransactionMerchant": "payout-azn-001",
"amount": 100,
"number": "4169738812345678",
"bankName": "Kapital Bank",
"nameMediator": "Aliyev Eldar",
"clientID": "user-67890",
"clientIP": "192.168.1.100",
"clientDateCreated": "2025-01-15T10:30:00Z"
}'Example: Mobile PayOut
curl -X POST 'https://api.admin-pixelwave.com/host2host/payout' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"paymentMethod": "mobile",
"idTransactionMerchant": "payout-mob-001",
"amount": 1000,
"number": "+79991234567",
"bankName": "Sberbank",
"phoneNumber": "+79991234567",
"clientID": "user-67890",
"clientIP": "192.168.1.100",
"clientDateCreated": "2025-01-15T10:30:00Z"
}'Example: KZT Card PayOut
curl -X POST 'https://api.admin-pixelwave.com/host2host/payout' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"paymentMethod": "kzt_c2c",
"idTransactionMerchant": "payout-kzt-001",
"amount": 5000,
"number": "4400430123426873",
"bankName": "Kaspi Bank",
"nameMediator": "Nurlanov Erlan",
"clientID": "user-67890",
"clientIP": "192.168.1.100",
"clientDateCreated": "2025-01-15T10:30:00Z"
}'Example: KZT Mobile PayOut
curl -X POST 'https://api.admin-pixelwave.com/host2host/payout' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"paymentMethod": "kzt_mobile",
"idTransactionMerchant": "payout-kzt-002",
"amount": 5000,
"number": "+77001234567",
"bankName": "Kaspi Bank",
"phoneNumber": "+77001234567",
"clientID": "user-67890",
"clientIP": "192.168.1.100",
"clientDateCreated": "2025-01-15T10:30:00Z"
}'Example: ARS CBU PayOut
curl -X POST 'https://api.admin-pixelwave.com/host2host/payout' \
-H 'Authorization: Bearer YOUR_JWT_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"paymentMethod": "ars_cbu",
"idTransactionMerchant": "payout-ars-001",
"amount": 10000,
"number": "4530000800012792304206",
"bankName": "Banco Nacion",
"clientID": "user-67890",
"clientIP": "192.168.1.100",
"clientDateCreated": "2025-01-15T10:30:00Z"
}'Success Response
{
"result": {
"status": "success",
"x-request-id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"codeError": "none",
"codeErrorExt": "none",
"message": ""
},
"data": {
"id": "f1e2d3c4-b5a6-7890-abcd-ef1234567890",
"dateAdded": "2025-01-15T10:30:01Z",
"dateUpdated": "2025-01-15T10:30:01Z",
"typeOperation": "payOut",
"status": "in_progress",
"idTransactionMerchant": "payout-12345",
"amountInitial": 3000,
"amountRandomized": 0,
"amount": 3000,
"amountComission": 90,
"currency": "RUB",
"amountInCurrencyBalance": 37.50,
"amountComissionInCurrencyBalance": 1.125,
"exchangeRate": 80.00
},
"totalNumberRecords": 0
}Response Fields
| Field | Type | Description |
|---|---|---|
id | uuid | Platform operation ID |
status | string | in_progress — payout is being processed |
amount | decimal | Payout amount |
amountComission | decimal | Commission charged |
currency | string | Operation currency |
amountInCurrencyBalance | decimal | Amount deducted from your balance (USDT) |
exchangeRate | decimal | Exchange rate used |
PayOut responses do not include
paymentDetailsData— the recipient details are the ones you provided in the request.
Error Responses
| Error Code | Description |
|---|---|
invalidRequestParameters | Missing or invalid fields |
duplicateIdentifier | idTransactionMerchant already exists |
noSuitableTariffForRequest | No tariff for this method/amount |
notEnoughMoneyOnBalance | Insufficient merchant balance |
noPaymentDetailsAvailable | No providers available |
Important Notes
- Your balance must cover the payout amount plus commission
- For SBP payouts,
numbermust be a phone number in format+7XXXXXXXXXX - For card payouts,
numbermust be a valid card number (16 digits) - For mobile payouts,
numberandbankNameare still required. Setnumberto the phone number and provide the bank name. Additionally passphoneNumberfield - For KZT mobile payouts, same as above —
number,bankName, andphoneNumberare all required - For ARS CBU payouts,
numbermust be a 22-digit CBU account number - The
bankNameaffects commission calculation — see Identifying the bank - Final status comes via webhook