Havale Payout Payload
Direct and data-collection payloads for Havale payouts.
Payment Method Identifier: HAVALE_PAYOUT | Payment Type: BANK_TRANSFER
Havale Payout is a TRY bank-transfer payout. For direct S2S processing, submit the beneficiary's account-holder name and IBAN in apmPayload.
If these fields are omitted and data collection is enabled for the configured route, Exirom returns a customer-verification redirect. The customer enters the missing details on Exirom's page, and the payout then continues.
Currently supported for payouts via POST /api/v1/payouts/apm.
#Choose One Submission Mode
- Direct S2S: Send both
accountHolderNameandiban. No customer redirect is required. - Exirom data collection: Omit both fields. The route's external MID must have data collection enabled.
Do not send only one beneficiary field. A partial payload does not start data collection and fails validation.
#Requirements
- Currency must be
TRY. - Amount must be a positive whole number.
- The account-holder name and IBAN are required to process the payout. They may be supplied directly or collected by Exirom.
- The IBAN is normalized and validated before the payout is sent.
#Payload Structure
{
"paymentMethod": "HAVALE_PAYOUT",
"paymentType": "BANK_TRANSFER",
"accountHolderName": "Demo Customer",
"iban": "TR000000000000000000000000"
}#Payload Fields
| Field | Type | Required | Description |
|---|---|---|---|
paymentMethod | Enum | Yes | Must be HAVALE_PAYOUT |
paymentType | Enum | Yes | Must be BANK_TRANSFER |
accountHolderName | String | Conditional | Required for direct S2S processing; omit only when using Exirom data collection |
iban | String | Conditional | Required for direct S2S processing; omit only when using Exirom data collection |
#Direct S2S Response
{
"paymentMethod": "HAVALE_PAYOUT",
"paymentType": "BANK_TRANSFER",
"actionType": "NONE",
"providerTransactionId": "39662324"
}#Response Fields
| Field | Type | Description |
|---|---|---|
paymentMethod | Enum | Always HAVALE_PAYOUT |
paymentType | Enum | Always BANK_TRANSFER |
actionType | Enum | NONE for direct processing; REDIRECTION when Exirom must collect data |
providerTransactionId | String | Provider transaction identifier |
With complete beneficiary data, the initial payout response is normally PROCESSING.
#Direct Payout Request Example
Use dummy data only in examples. This is a direct S2S request with all beneficiary data present:
{
"accountId": "123456789012345678",
"requestId": "00000000-0000-4000-8000-000000000001",
"amount": "5000",
"currency": "TRY",
"callbackUrl": "https://merchant.example/webhooks/apm",
"device": {
"ip": "203.0.113.10"
},
"billingDetails": {
"email": "customer@example.com"
},
"apmPayload": {
"paymentMethod": "HAVALE_PAYOUT",
"paymentType": "BANK_TRANSFER",
"accountHolderName": "Demo Customer",
"iban": "TR000000000000000000000000"
}
}#Rejected Direct Payout Example
A provider can reject a direct payout before it is accepted for processing. In that case, Exirom returns FAILED and no customer action is required:
{
"requestId": "00000000-0000-4000-8000-000000000001",
"transactionId": "900000000000000001",
"paymentType": "APM",
"transactionStatus": "FAILED",
"declineCode": 82,
"apmResponseData": {
"paymentMethod": "HAVALE_PAYOUT",
"paymentType": "BANK_TRANSFER",
"actionType": "NONE"
}
}#Transaction Details After Rejection
The transaction-details response can retain the sanitized request and final rejection data for troubleshooting:
{
"requestBody": {
"accountId": "123456789012345678",
"createdAt": "2026-08-31T12:00:00Z",
"requestId": "00000000-0000-4000-8000-000000000001",
"transactionId": "900000000000000001",
"callbackUrl": "https://merchant.example/webhooks/apm",
"transactionStatus": "FAILED",
"declineCode": "82",
"declineSubReason": "Payout was rejected",
"apmRequestPayload": {
"paymentMethod": "HAVALE_PAYOUT",
"paymentType": "BANK_TRANSFER",
"accountHolderName": "Demo Customer",
"iban": "TR000000000000000000000000"
},
"apmResponseData": {
"paymentMethod": "HAVALE_PAYOUT",
"paymentType": "BANK_TRANSFER",
"actionType": "NONE"
}
}
}This is transaction detail data, not the provider callback. Use the merchant callbackUrl for final asynchronous status updates.
#Data-Collection Redirect
To request Exirom collection, submit only the method identifiers in apmPayload:
{
"paymentMethod": "HAVALE_PAYOUT",
"paymentType": "BANK_TRANSFER"
}Exirom returns the payout in customer verification:
{
"transactionId": "869898069059073246",
"transactionStatus": "CUSTOMER_VERIFICATION",
"apmResponseData": {
"paymentMethod": "HAVALE_PAYOUT",
"paymentType": "BANK_TRANSFER",
"actionType": "REDIRECTION",
"redirectUrl": "https://checkout.example.com/?token=..."
}
}The merchant must open apmResponseData.redirectUrl in the customer's browser. Exirom cannot redirect a server-to-server API call automatically. After the customer submits the account-holder name and IBAN on Exirom's checkout page, the same payout continues to the provider.
If the merchant cannot redirect the customer, it must collect both fields itself and use direct S2S mode. If the returned URL is not opened and completed, the payout remains in CUSTOMER_VERIFICATION.
Use the callback as the authoritative final result. Duplicate callbacks must not be processed more than once.
For provider-independent routing, send the same beneficiary fields with paymentMethod: SMART_BANK_TRANSFER_PAYOUT.