Skip to main content

2.1 Create withdrawal

POST /api/v2/withdrawals

Send one JSON object and no query string. Use the v2 authentication headers. The successful response is HTTP 200.

FieldTypeRequiredDescription
order_idstring, max 255 charactersYesYour withdrawal identifier. Unique per merchant and operation type for idempotency.
amountJSON numberYesPositive amount, at most two decimal places. Do not send a quoted string.
currencystring, 3 lettersYesUse BOB for this guide; it must match the selected shop's currency.
methodstringNoExact active shop code. Omit to use your default active shop. Do not add surrounding spaces.
customer_account_idJSON integerNoYour customer's account identifier used by the shared payment checks. Send an integer, not a quoted number; 0 is preserved. Omit or use null when unavailable.
callback_urlHTTPS URLYesAbsolute callback URL without embedded credentials.
account_numberstring, max 255 charactersYesRecipient account. For a card shop, 12–19 digits; for a mobile shop, + followed by 8–15 digits, with the first digit non-zero. Other formats depend on the shop.
fieldsJSON objectNo*Additional data defined by the selected shop's PayOut schema. See shop fields.
fields.merchant_user_ipstring (IPv4 or IPv6)Shop-dependentCustomer IP address. Supported for every shop; required only when the selected shop's input schema requires it. Omit or use null when optional and unavailable.

The mobile rule applies to the selected shop's mobile method, not every wallet or opaque identifier. Card identifiers contain digits only, without spaces or hyphens. callback_url must be an absolute HTTPS URL string without embedded credentials, whitespace, or control characters.

The v2 protocol does not require fields, but the selected shop may require individual keys. fields must be a JSON object, not an array. It cannot override protocol fields such as method, customer_account_id, account_number, recipient_account, or account_channel.

Example for an active BOB card shop configured with recipient_name and bank_name. Replace your_bob_shop with your actual shop code and use the field schema assigned to that shop:

{
"order_id": "WD-BOB-1001",
"amount": 500,
"currency": "BOB",
"method": "your_bob_shop",
"customer_account_id": 77,
"callback_url": "https://merchant.example.com/webhooks/payfield",
"account_number": "4111111111111111",
"fields": {
"recipient_name": "Ana Perez",
"bank_name": "Banco Ejemplo",
"merchant_user_ip": "203.0.113.10"
}
}

Response 200:

{
"transaction_id": "12345"
}

A successful create response does not confirm that the recipient was paid. Retrieve the current result even after HTTP 200.

Store transaction_id and check its status. A retry with the same order_id and equivalent request returns the same response without creating another withdrawal. Reusing the order_id with different request data returns 409. Idempotency is scoped to the merchant and withdrawal type, across shops; an existing v1 withdrawal with the same ID also conflicts. See API errors.