Payout / Alternative payment methods / Dominican
Bank Transfer#
POST https://payments.apipro.io/v2/payout
How Bank Transfer Payouts Work#
-
Request: Your application makes a
POSTrequest to the ApiPro payout endpoint to create a transaction. -
Processing: ApiPro processes the payout, interacting with the corresponding banking provider in Dominicana.
-
Notification: Once the transaction reaches a terminal state (e.g.,
successorerror), ApiPro sends a callback (webhook) to your specifiedcallback_url.
Supported Banks (requisites.bank_code)#
When creating a payout, you must provide a valid bank_code in the requisites.bank_code field. The following values are supported for the Dominican Republic (DO):
bank_code |
Bank Name |
|---|---|
2001 |
Banco Popular |
2002 |
Banreservas |
2003 |
BHD-Leon |
2004 |
Scotiabank |
2027 |
ASOC. LA NACIONAL |
2028 |
ASOC. POPULAR DE AHORROS Y PRESTAMOS |
2029 |
ASOCIACION BONAO DE AHORROS Y PRESTAMOS |
2030 |
ASOCIACION CIBAO DE A/P |
2031 |
ASOCIACION DUARTE DE AHORROS Y PRESTAMOS |
2032 |
ASOCIACION LA VEGA REAL DE AHORROS Y PRESTAMOS |
2033 |
ASOCIACION MAGUANA DE AHORROS Y PRESTAMOS |
2034 |
ASOCIACION MOCANA DE AHORROS Y PRESTAMOS |
2035 |
ASOCIACION PERAVIA DE AHORROS Y PRESTAMOS |
2036 |
ASOCIACION ROMANA DE AHORROS Y PRESTAMOS |
Headers#
| Header | Value |
|---|---|
Content-Type |
application/json |
Authorization |
{{authorization}} |
Digest |
{{digest}} |
Host |
{{host}} |
Date |
{{date}} |
See Authentication & Signature for how to build the signed headers.
Request body#
Annotations in the example are the field requirements: required, optional or conditional. Comments are stripped automatically by the Postman collection before signing; remove them in your own requests.
{
"method": "bank_transfer_dominican", // required, snake_case / lower case only: "bank_transfer_dominican" (not "BANK_TRANSFER_DOMINICAN" or "BankTransferDominican")
"reference": "DominicanaTestPayout#1", // required
"currency": "DOP", // required
"amount": 200, // required
"description": "Test Payout for John Doe", // optional
"customer": {
"identifier": "test-customer-12345", // required
"email": "test-customer@example.com", // required
"phone": "+18095550100", // optional
"first_name": "John", // required
"last_name": "Doe", // required
"middle_name": "Anonym", // optional
"country": "do", // required
"state_code": "do-01", // optional
"city": "santo domingo", // optional
"address": "av. winston churchill 101", // optional
"zip_code": "10101", // optional
"itn": "00000000000", // required, Cédula de Identidad y Electoral / RNC (Registro Nacional de Contribuyentes)
"birthday": "1995-05-15", // optional
"ip": "127.0.0.1", // optional
"gender": "male" // optional
},
"bank_transfer_dominican": {
"account_number": "99999999999999", // required
"account_type": "savings", // required
"bank_code": "0117", // required
"beneficiary_first_name": "jane", // required
"beneficiary_last_name": "smith", // required
"beneficiary_email": "test-beneficiary@example.com", // required
"beneficiary_phone": "+18095550199", // optional
"beneficiary_document_value": "10123456789" // required
},
"lang": "es", // optional
"redirect_url": "https://example.com/redirect", // conditional
"cancel_url": "https://example.com/cancel", // optional
"callback_url": "https://example.com/callback", // optional
"extra": [ // optional
{
"test_key_1": "test_value_1"
},
{
"test_key_2": "test_value_2"
}
]
}
Fields#
| Field | Type | Requirement / note |
|---|---|---|
method |
string | required, snake_case / lower case only: "bank_transfer_dominican" (not "BANK_TRANSFER_DOMINICAN" or "BankTransferDominican") |
reference |
string | required |
currency |
string | required |
amount |
integer | required |
description |
string | optional |
customer |
object | |
customer.identifier |
string | required |
customer.email |
string | required |
customer.phone |
string | optional |
customer.first_name |
string | required |
customer.last_name |
string | required |
customer.middle_name |
string | optional |
customer.country |
string | required |
customer.state_code |
string | optional |
customer.city |
string | optional |
customer.address |
string | optional |
customer.zip_code |
string | optional |
customer.itn |
string | required, Cédula de Identidad y Electoral / RNC (Registro Nacional de Contribuyentes) |
customer.birthday |
string | optional |
customer.ip |
string | optional |
customer.gender |
string | optional |
bank_transfer_dominican |
object | |
bank_transfer_dominican.account_number |
string | required |
bank_transfer_dominican.account_type |
string | required |
bank_transfer_dominican.bank_code |
string | required |
bank_transfer_dominican.beneficiary_first_name |
string | required |
bank_transfer_dominican.beneficiary_last_name |
string | required |
bank_transfer_dominican.beneficiary_email |
string | required |
bank_transfer_dominican.beneficiary_phone |
string | optional |
bank_transfer_dominican.beneficiary_document_value |
string | required |
lang |
string | optional |
redirect_url |
string | conditional |
cancel_url |
string | optional |
callback_url |
string | optional |
extra |
array | optional |
extra.test_key_1 |
string | |
test_key_2 |
string |
Responses#
Response Examples
Card can only be used with specific methods. Check documentation
{
"error_code": 30,
"error_reason": "Invalid params",
"description": "Card can only be used with specific methods. Check documentation",
"request_id": "YOUR_REFERENCE",
"status": "error",
"timestamp": "2025-10-26T14:05:00.00Z"
}
Customer is blocked
{
"error_code": 451,
"error_reason": "General risk decline",
"description": "Customer is blocked",
"request_id": "YOUR_REFERENCE",
"status": "error",
"timestamp": "2025-10-26T14:06:00.00Z"
}
Customer is blocked for all merchant projects
{
"error_code": 451,
"error_reason": "General risk decline",
"description": "Customer is blocked for all merchant projects",
"request_id": "YOUR_REFERENCE",
"status": "error",
"timestamp": "2025-10-26T14:08:02.00Z"
}
Customer is blocked for the specified project
{
"error_code": 451,
"error_reason": "General risk decline",
"description": "Customer is blocked for the specified project",
"request_id": "YOUR_REFERENCE",
"status": "error",
"timestamp": "2025-10-26T14:08:04.00Z"
}
Customer is blocked system-wide
{
"error_code": 451,
"error_reason": "General risk decline",
"description": "Customer is blocked system-wide",
"request_id": "YOUR_REFERENCE",
"status": "error",
"timestamp": "2025-10-26T14:08:06.00Z"
}
Customer is globally locked
{
"error_code": 451,
"error_reason": "General risk decline",
"description": "Customer is globally locked",
"request_id": "YOUR_REFERENCE",
"status": "error",
"timestamp": "2025-10-26T14:08:08.00Z"
}
Resource not found
{
"error_code": 35,
"error_reason": "Resource not found",
"description": "The requested resource is undefined",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:15:00.00Z"
}
Routing failed
{
"error_code": 121,
"error_reason": "Routing failed",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Unknown routing error
{
"error_code": 1,
"error_reason": "Unknown routing error",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Routing service error: Value cannot be null. (Parameter 'data')
{
"error_code": 1,
"error_reason": "Routing service error: Value cannot be null. (Parameter 'data')",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Routing request timeout
{
"error_code": 2,
"error_reason": "Routing request timeout",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Required fields are missing: method, reference, amount, currency
{
"error_code": 31,
"error_reason": "Required fields are missing: method, reference, amount, currency",
"timestamp": "2025-10-02T14:16:00.00Z"
}
Routing service error: Endpoint type cannot be null or empty
{
"error_code": 1,
"error_reason": "Routing service error: Endpoint type cannot be null or empty",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Routing service error
{
"error_code": 1,
"error_reason": "Routing service error",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Payment transaction timeout after seconds
{
"error_code": 1,
"error_reason": "Payment transaction timeout after 30 seconds",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Internal error: Mid {MidId} no longer exists in configuration
{
"error_code": 1,
"error_reason": "Internal error: Mid {MidId} no longer exists in configuration",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Internal error: Value cannot be null. (Parameter 'tcs')
{
"error_code": 1,
"error_reason": "Internal error: Value cannot be null. (Parameter 'tcs')",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Payment transaction was cancelled
{
"error_code": 1,
"error_reason": "Payment transaction was cancelled",
"timestamp": "2025-10-02T14:17:00.00Z"
}
Error while trying to process filling data
{
"error_code": 200,
"error_reason": "Error while trying to process filling data",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:18:00.00Z"
}
Invalid method challenge configuration. Please reconfigure method challenge type settings
{
"error_code": 121,
"error_reason": "Invalid method challenge configuration. Please reconfigure method challenge type settings",
"timestamp": "2025-10-02T14:19:00.00Z"
}
There is more than one challenge setting for a method. Please reconfigure method challenge type settings
{
"error_code": 121,
"error_reason": "There is more than one challenge setting for a method. Please reconfigure method challenge type settings",
"timestamp": "2025-10-02T14:20:00.00Z"
}
MID not found in cache while getting currency rate
{
"error_code": 35,
"error_reason": "Resource not found",
"description": "MID not found in cache while getting currency rate",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:21:00.00Z"
}
Transaction processing error: error while getting currency rate
{
"error_code": 200,
"error_reason": "Transaction processing error",
"description": "Unexpected error while getting currency rate",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:22:00.00Z"
}
Transaction processing error: error with payment configurations during calculation
{
"error_code": 200,
"error_reason": "Transaction processing error",
"description": "Error with payment configurations during calculation",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:23:00.00Z"
}
Exceeded amount limits for project
{
"error_code": 1132,
"error_reason": "Limit exceeded",
"description": "Amount is outside the allowed project limits",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:24:00.00Z"
}
Exceeded amount limits for MID
{
"error_code": 1132,
"error_reason": "Limit exceeded",
"description": "Amount is outside the allowed MID limits",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:24:00.00Z"
}
Transaction processing error: error while getting withdrawal rates
{
"error_code": 200,
"error_reason": "Transaction processing error",
"description": "Unexpected error while getting withdrawal rates",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:24:00.00Z"
}
Invalid params: transactions constraints were violated
{
"error_code": 30,
"error_reason": "Invalid params",
"description": "Transaction contraints were violated",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:26:00.00Z"
}
Failed to create transaction for unfamiliar reason
{
"error_code": 200,
"error_reason": "Transaction processing error",
"description": "Failed to create transaction",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:27:00.00Z"
}
Account payout has negative balance after update
{
"error_code": 1,
"error_reason": "Insufficient funds on account",
"description": "Account payout has negative balance after update",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:28:00.00Z"
}
Error with wallet
{
"error_code": 200,
"error_reason": "Transaction processing error",
"description": "Error with wallet",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:29:00.00Z"
}
Mid is disabled
{
"error_code": 32,
"error_reason": "Invalid MID",
"description": "Mid is disabled",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:30:00.00Z"
}
Blocked routing for transaction: Invalid currency
{
"error_code": 31,
"error_reason": "Invalid currency",
"description": "Blocked routing for transaction: Invalid currency",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:31:00.00Z"
}
Blocked routing for transaction: Invalid method
{
"error_code": 1054,
"error_reason": "Invalid method",
"description": "Blocked routing for transaction: Invalid method",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:32:00.00Z"
}
Blocked routing for transaction: Invalid payment type
{
"error_code": 1054,
"error_reason": "Invalid type",
"description": "Blocked routing for transaction: Invalid payment type",
"request_id": "value_from_data_reference",
"status": "error",
"timestamp": "2025-10-02T14:33:00.00Z"
}
Requisites - Invalid JSON format
{
"error_code": 31,
"error_reason": "Required fields are missing: requisites - invalid JSON format",
"timestamp": "2025-10-02T14:34:00.00Z"
}
Mid configuration error
{
"error_code": 200,
"error_reason": "Mid configuration error",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:35:00.00Z"
}
Mid request timeout
{
"error_code": 200,
"error_reason": "Mid request timeout",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:36:00.00Z"
}
Communication error
{
"error_code": 200,
"error_reason": "Communication error",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:36:00.00Z"
}
Invalid adapter response format
{
"error_code": 200,
"error_reason": "Invalid adapter response format",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:37:00.00Z"
}
Failed to register card transaction
{
"error_code": 200,
"error_reason": "Failed to register card transaction",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:48:00.00Z"
}
Failed to register cascade transaction
{
"error_code": 200,
"error_reason": "Failed to register cascade transaction",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:48:00.00Z"
}
Mid with ID '[MidId]' not found
{
"error_code": 200,
"error_reason": "Mid with ID '[MidId]' not found",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:49:00.00Z"
}
Mid [MidName] ([MidId]) is not active
{
"error_code": 200,
"error_reason": "Mid [MidName] ([MidId]) is not active",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:49:00.00Z"
}
Mid [MidId] no longer exists in configuration
{
"error_code": 200,
"error_reason": "Mid [MidId] no longer exists in configuration",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:49:00.00Z"
}
Some unexpected error occured
{
"error_code": 200,
"error_reason": "<Some unexpected error message>",
"request_id": null,
"reference": "value_from_data_reference",
"timestamp": "2025-10-02T14:49:00.00Z"
}
Request cannot be null
{
"code": 0,
"reason": "",
"error_code": 1,
"error_reason": "Request cannot be null",
"request_id": "",
"reference": "",
"status": "error",
"timestamp": "2025-09-29T11:52:39.25Z",
"description": ""
}
Flow cache limit exceeded
{
"code": 0,
"reason": "",
"error_code": 1,
"error_reason": "Flow cache limit exceeded",
"request_id": "",
"reference": "",
"status": "error",
"timestamp": "2025-09-29T11:52:39.25Z",
"description": ""
}
Flow configuration not found for project: {projectId}
{
"code": 0,
"reason": "",
"error_code": 1,
"error_reason": "Flow configuration not found for project: {projectId}",
"request_id": "",
"reference": "",
"status": "error",
"timestamp": "2025-09-29T11:52:39.25Z",
"description": ""
}
Invalid flow configuration
{
"code": 0,
"reason": "",
"error_code": 1,
"error_reason": "Invalid flow configuration",
"request_id": "",
"reference": "",
"status": "error",
"timestamp": "2025-09-29T11:52:39.25Z",
"description": ""
}
Flow execution failed: some unexpected error
{
"code": 0,
"reason": "",
"error_code": 1,
"error_reason": "Flow execution failed:",
"request_id": "",
"reference": "",
"status": "error",
"timestamp": "2025-09-29T11:52:39.25Z",
"description": ""
}
Node not found: {NodeIdentifier}
{
"code": 0,
"reason": "",
"error_code": 1,
"error_reason": "Node not found: {NodeIdentifier}",
"request_id": "",
"reference": "",
"status": "error",
"timestamp": "2025-09-29T11:52:39.25Z",
"description": ""
}
Flow execution limit exceeded
{
"code": 0,
"reason": "",
"error_code": 1,
"error_reason": "Flow execution limit exceeded",
"request_id": "",
"reference": "",
"status": "error",
"timestamp": "2025-09-29T11:52:39.25Z",
"description": ""
}
Flow ended without result
{
"code": 0,
"reason": "",
"error_code": 1,
"error_reason": "Flow ended without result",
"request_id": "",
"reference": "",
"status": "error",
"timestamp": "2025-09-29T11:52:39.25Z",
"description": ""
}
'bank_transfer_dominican' missing field
{
"error_code": 31,
"error_reason": "Required fields are missing: bank_transfer_dominican",
"timestamp": "2025-10-02T14:25:00.00Z"
}
Succesful transaction
{
"error_code": 0,
"error_reason": "",
"identifier": "BAN003105682",
"request_id": "80c711f9-c8ee-47a9-99ad-1e9cd9375156",
"reference": "DominicanaTestPayout#1",
"status": "pending",
"type": "payout",
"method": "bank_transfer_dominican",
"mode": "initial",
"currency": "DOP",
"amount": "200.00",
"Timestamp": "2026-05-27T14:06:08.7116637Z"
}
Duplicated reference
{
"error_code": 108,
"error_reason": "Duplicated reference",
"request_id": "3829f5bd-6dcb-41f9-a4ba-3ff8b65a3cfc",
"reference": "",
"timestamp": "2025-11-10T08:47:22.81Z"
}
Invalid Authorization header format
{
"error_code": 31,
"error_reason": "Invalid Authorization header format",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Invalid Signature format
{
"error_code": 31,
"error_reason": "Invalid signature format",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Unsupported algorithm
{
"error_code": 31,
"error_reason": "Unsupported algorithm",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Invalid API key
{
"error_code": 31,
"error_reason": "Invalid API key",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Invalid date format
{
"error_code": 31,
"error_reason": "Invalid date format",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Date is outdated or invalid
{
"error_code": 31,
"error_reason": "Date is outdated or invalid",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Missing Digest header
{
"error_code": 31,
"error_reason": "Invalid digest",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Invalid digest
{
"error_code": 31,
"error_reason": "Missing Digest header",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Invalid signature
{
"error_code": 31,
"error_reason": "Invalid signature",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Invalid headers specification
{
"error_code": 31,
"error_reason": "Invalid headers specification",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Request timestamp has already been used
{
"error_code": 31,
"error_reason": "Request timestamp has already been used",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Missing required authentication headers
{
"error_code": 31,
"error_reason": "Missing required authentication headers",
"timestamp": "2025-10-26T14:04:00.00Z"
}
Missing Authorization header
{
"error_code": 31,
"error_reason": "Missing Authorization header",
"timestamp": "2025-10-26T16:01:00.00Z"
}
Missing Date header
{
"error_code": 31,
"error_reason": "Missing Date header",
"timestamp": "2025-10-26T16:06:00.00Z"
}
Processing error:
{
"error_code": 210,
"error_reason": "Processing error:",
"description": "Processing error:",
"request_id": "your_transaction_reference",
"status": "error",
"timestamp": "2025-10-26T12:03:00.000Z"
}
Callback Notifications
The system sends an HTTP callback to the callback_url of your request when a transaction reaches a final state. Always verify the callback signature; see Callback Verification.
Callback Payload
Callback request
{
"identifier": "BAN003105682",
"creation_date": "2026-05-27T14:06:08.711663",
"request_id": "80c711f9-c8ee-47a9-99ad-1e9cd9375156",
"reference": "DominicanaTestPayout#1",
"method": "bank_transfer_dominican",
"type": "payout",
"mode": "initial",
"status": "success",
"status_date": "2026-05-27T14:08:41.204518",
"bank_transfer": {
"account_number": "99999999999999",
"account_type": "savings",
"bank_code": "0117",
"beneficiary_first_name": "jane",
"beneficiary_last_name": "smith",
"beneficiary_email": "test-beneficiary@example.com",
"beneficiary_phone": "+18095550199",
"beneficiary_document_value": "10123456789"
},
"customer": {
"identifier": "test-customer-12345",
"email": "test-customer@example.com",
"phone": "+18095550100",
"first_name": "John",
"last_name": "Doe",
"country": "DO",
"city": "santo domingo",
"address": "av. winston churchill 101",
"zip_code": "10101",
"birthday": "1995-05-15",
"ip": "127.0.0.1"
},
"amount": "200.00",
"currency": "DOP",
"billing_amount": "200.00",
"billing_currency": "DOP",
"fee_amount": "4.00",
"fee_currency": "DOP",
"error_code": 0,
"error_reason": "",
"timestamp": "2026-05-27T14:08:43.918307"
}