Create Payout
Merchants call this endpoint to initiate a payout to a payee. Once accepted, the API returns a unified payout ID and its initial status.
Fund safety notice
- Submit each
merchantOrderIdonly once. Never reuse the same merchant order ID for another payout request. - If the order status is not final or is unclear, call Query Payout or wait for the payout callback. Do not submit the payout again.
- If the order has failed, contact Velora to confirm its final result before initiating another payout with a new merchant order ID.
Duplicate submissions may cause duplicate payouts and financial loss. Implement idempotency controls for every payout order.
Request
- Method:
POST - Path:
/api/v1/payout/createPayout - Content-Type:
application/json - Authentication: See Authentication
Request fields
| Field | Type | Length / constraints | Required | Example | Description |
|---|---|---|---|---|---|
merchantOrderId | string | ≤ 64 characters | Yes | PAYOUT_1786700000721_DDHTLU | Merchant payout order ID, unique per merchant |
country | string | 2 characters, ISO-3166 | Yes | RU | Two-letter country code |
amount | object | — | Yes | — | Payout amount; see amount object |
payoutMethod | object | — | Yes | — | Payout method; see payoutMethod object |
beneficiary | object | — | Yes | — | Beneficiary information; see beneficiary object |
notifyUrl | string | ≤ 256 characters, URL | Yes | https://merchant.example/payout/callback | Asynchronous payout result notification URL |
description | string | ≤ 256 characters | Yes | Payout test order | Briefly state the purpose of the payout, the payout contract number (ContractNo, preferably including the date), and the user's full name exactly as shown on their passport. Failure to provide the required information may trigger system risk controls |
amount object
| Field | Type | Length / constraints | Required | Example | Description |
|---|---|---|---|---|---|
value | string | Greater than 0; ≤ 12 characters | Yes | 100.00 | Payout amount |
currency | string | 3 characters, ISO-4217 | Yes | RUB | Three-letter currency code |
payoutMethod object
| Field | Type | Length / constraints | Required | Example | Description |
|---|---|---|---|---|---|
type | string | Enum: bank | Yes | bank | Payout method type |
bank | object | — | Conditional | — | Required bank payout details when type is bank |
payoutMethod.bank object
| Field | Type | Length / constraints | Required | Example | Description |
|---|---|---|---|---|---|
payoutBrand | string | ≤ 20 characters | Yes | sbp | Payout brand |
accountNumber | string | ≤ 128 characters | Yes | 79261234567 | Beneficiary account number. When payoutBrand is sbp, use an 11-digit account number beginning with 7, for example 79261234567 |
bankCode | string | ≤ 32 characters | Yes | NORVIK | Beneficiary bank code. Call Get Supported Payout Parameters to retrieve values supported by the payout brand |
For an sbp/RU/RUB bank payout, bankCode must exactly match a code returned by the supported parameters endpoint. Otherwise, the request returns C0002.
beneficiary object
| Field | Type | Length / constraints | Required | Example | Description |
|---|---|---|---|---|---|
type | string | Enum: individual | Yes | individual | Beneficiary type |
name | object | — | Yes | — | Beneficiary name |
phone | string | ≤ 50 characters | Yes | 09171234567 | Beneficiary phone number |
email | string | ≤ 254 characters | No | test@example.com | Beneficiary email address |
beneficiary.name object
| Field | Type | Length / constraints | Required | Example | Description |
|---|---|---|---|---|---|
firstName | string | ≤ 64 characters | Yes | Test | Given name |
lastName | string | ≤ 64 characters | Yes | User | Family name |
Request example
json
{
"merchantOrderId": "PAYOUT_1786700000721_DDHTLU",
"country": "RU",
"amount": {
"value": "100.00",
"currency": "RUB"
},
"payoutMethod": {
"type": "bank",
"bank": {
"payoutBrand": "sbp",
"accountNumber": "79261234567",
"bankCode": "NORVIK"
}
},
"beneficiary": {
"type": "individual",
"name": {
"firstName": "Test",
"lastName": "User"
},
"phone": "09171234567",
"email": "test@example.com"
},
"notifyUrl": "*******",
"description": "Payout test order"
}Response example
json
{
"result": {
"code": "S0000",
"msg": "Payout request accepted"
},
"data": {
"payoutId": "payout_20260814032225670788850",
"channelOrderId": "89821020319231231",
"merchantOrderId": "PAYOUT_1786677623288_5TI24J",
"status": "Processing",
"amount": {
"value": "100.00",
"currency": "RUB"
},
"createdAt": "2026-08-14T03:22:25+00:00",
"updatedAt": "2026-08-14T03:22:26+00:00"
}
}Response fields
| Field | Type | Length / constraints | Always returned | Description |
|---|---|---|---|---|
result | object | — | Yes | Request acceptance result |
data | object | — | On success | Payout order created by the request |
result object
| Field | Type | Length / constraints | Always returned | Example | Description |
|---|---|---|---|---|---|
code | string | ≤ 32 characters | Yes | S0000 | Response code |
msg | string | ≤ 255 characters | Yes | Payout request accepted | Response message |
data object
| Field | Type | Length / constraints | Always returned | Example | Description |
|---|---|---|---|---|---|
payoutId | string | ≤ 64 characters | Yes | payout_20260814032225670788850 | Velora payout ID |
channelOrderId | string | ≤ 64 characters | No | 89821020319231231 | PSP channel order ID |
merchantOrderId | string | ≤ 64 characters | Yes | PAYOUT_1786677623288_5TI24J | Merchant payout order ID |
status | string | Enum | Yes | Processing | Payout order status |
amount | object | — | Yes | — | Payout amount |
createdAt | string | ISO 8601 | Yes | 2026-08-14T03:22:25+00:00 | Payout creation time |
updatedAt | string | ISO 8601 | Yes | 2026-08-14T03:22:26+00:00 | Payout update time |
data.amount object
| Field | Type | Length / constraints | Always returned | Example | Description |
|---|---|---|---|---|---|
value | string | Numeric string | Yes | 100.00 | Payout amount |
currency | string | 3 characters, ISO-4217 | Yes | RUB | Three-letter currency code |