Send funds via Bank Transfer
Send funds via bank transfer using Localpayment's API. This guide covers everything you need to know about creating payouts, handling responses, managing transaction status, and meeting country-specific requirements.
Bank transfer payouts allow you to send funds directly to beneficiary bank accounts. You can initiate these transfers through either:
- Localpayment Business Portal: User-friendly interface for manual transaction management.
- API Integration: Programmatic access for automated payout processing.
This guide focuses on API implementation, covering the complete flow from initialization to completion.
Before You Begin
Ensure you have:
- Valid API credentials (access token).
- Complete beneficiary information.
- Proper account setup for your target country.
- Understanding of country-specific requirements (see Country Requirements below).
Step 1: Initialize the Payout Transaction
To create a bank transfer payout, send a POST request to the Create a Payout endpoint with paymentMethod.type set to "BankTransfer".
Endpoint
POST https://api.stage.localpayment.com/api/payout/
Required Headers
Authorization: Bearer <your_access_token>Key Request Parameters
The request requires several key objects:
| Object | Description | Required |
|---|---|---|
beneficiary | Recipient details including bank information | ✅ |
sender | Sender information for compliance | ✅ |
merchant | Merchant/business details | ✅ |
paymentMethod | Payment method configuration | ✅ |
amount | Transaction amount | ✅ |
currency | Transaction currency code | ✅ |
country | Target country code | ✅ |
Example Request (Argentina)
curl --request POST \
--url https://api.stage.localpayment.com/api/payout/ \
--header 'Authorization: Bearer <your_access_token>' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--data '[
{
"externalId": "212407f5-0c86-4687-91e4-df3ab8a513ab",
"country": "ARG",
"currency": "ARS",
"amount": 500.18,
"paymentMethod": {
"type": "BankTransfer",
"code": "0010",
"flow": "DIRECT"
},
"beneficiary": {
"name": "John",
"lastName": "Doe",
"type": "INDIVIDUAL",
"document": {
"type": "CUIT",
"id": "20907920276"
},
"userReference": "Test",
"email": "[email protected]",
"phone": {
"countryCode": "54",
"areaCode": "11",
"number": "12345678"
},
"birthDate": "2021-11-08",
"nationality": "Argentine",
"address": {
"street": "Avenida Principal",
"number": "234",
"city": "La Plata",
"state": "Buenos Aires",
"country": "Argentina",
"zipCode": "C1420",
"comment": "TEST"
},
"bank": {
"name": "BANCO DE GALICIA Y BUENOS AIRES S.A.U.",
"code": "007",
"account": {
"number": "0070145330004020870169",
"type": "S"
}
}
},
"sender": {
"type": "INDIVIDUAL",
"name": "David",
"lastName": "Doe",
"document": {
"type": "CUIT",
"id": "20907920276"
},
"userReference": "Test",
"email": "[email protected]",
"phone": {
"countryCode": "54",
"areaCode": "11",
"number": "12345678"
},
"birthDate": "2021-11-08",
"nationality": "Argentine",
"address": {
"street": "Avenida Principal",
"number": "234",
"city": "La Plata",
"state": "Buenos Aires",
"country": "Argentina",
"zipCode": "C1420",
"comment": "TEST"
}
},
"merchant": {
"type": "COMPANY",
"name": "Company Name",
"document": {
"type": "CUIT",
"id": "20907920276"
},
"userReference": "Test",
"email": "[email protected]",
"phone": {
"countryCode": "54",
"areaCode": "11",
"number": "12345678"
},
"birthDate": "2021-11-08",
"nationality": "Argentine",
"address": {
"street": "Avenida Principal",
"number": "234",
"city": "La Plata",
"state": "Buenos Aires",
"country": "Argentina",
"zipCode": "C1420",
"comment": "TEST"
}
},
"accountNumber": "{{accountNumber}}",
"conceptCode": "0039",
"comment": "ARG TEST",
"requireAuth": true
}
]'Step 2: Handle the Response
Successful Response
A successful response includes detailed transaction information and tracking identifiers:
{
"externalId": "212407f5-0c86-4687-91e4-df3ab8a513ab",
"internalId": "095a5d8d-53ff-4a8d-9665-7ceb6eaa94df",
"paymentMethod": {
"code": "0010",
"name": "INTERBANKING",
"description": "string",
"paymentMethodType": "BankTransfer"
},
"country": "ARG",
"currency": "ARS",
"amount": 500.18,
"accountNumber": "{{accountNumber}}",
"clientCode": "0001",
"clientName": "Acme",
"status": {
"code": "104",
"description": "PendingAuth",
"detail": "The payout is pending of authorization by client"
},
"beneficiary": {
"bank": {
"name": "BANCO DE GALICIA Y BUENOS AIRES S.A.U.",
"code": "007",
"countryISOCode3": null,
"branch": null,
"account": {
"number": "0070145330004020870169",
"type": "S",
"alias": null,
"pixKey": null,
"phone": null
}
},
"type": "INDIVIDUAL",
"name": "John",
"lastname": "Doe",
"document": {
"type": "CUIT",
"id": "20907920276"
},
"userReference": "Test",
"email": "[email protected]",
"phone": {
"countryCode": "54",
"areaCode": "11",
"number": "12345678"
},
"birthdate": "2021-11-08T00:00:00Z",
"nationality": "Argentine",
"address": {
"street": "Avenida Principal",
"number": "234",
"city": "La Plata",
"state": "Buenos Aires",
"country": "Argentina",
"zipCode": "C1420",
"comment": "TEST"
}
},
"merchant": {
"type": "COMPANY",
"name": "Company Name",
"lastname": null,
"document": {
"type": "CUIT",
"id": "20907920276"
},
"userReference": "Test",
"email": "[email protected]",
"phone": {
"countryCode": "54",
"areaCode": "11",
"number": "12345678"
},
"birthdate": "2021-11-08T00:00:00Z",
"nationality": "Argentine",
"address": {
"street": "Avenida Principal",
"number": "234",
"city": "La Plata",
"state": "Buenos Aires",
"country": "Argentina",
"zipCode": "C1420",
"comment": "TEST"
}
},
"sender": {
"type": "INDIVIDUAL",
"name": "David",
"lastname": "Doe",
"document": {
"type": "CUIT",
"id": "20907920276"
},
"userReference": "Test",
"email": "[email protected]",
"phone": {
"countryCode": "54",
"areaCode": "11",
"number": "12345678"
},
"birthdate": "2021-11-08T00:00:00Z",
"nationality": "Argentine",
"address": {
"street": "Avenida Principal",
"number": "234",
"city": "La Plata",
"state": "Buenos Aires",
"country": "Argentina",
"zipCode": "C1420",
"comment": "TEST"
}
},
"comment": "ARG TEST",
"exchangeRateToken": null,
"date": {
"creationDate": "2025-10-10T21:04:44.2729228Z",
"processedDate": "2025-10-10T21:04:44.2731812Z"
},
"errors": null,
"internalLoteID": "151840"
}Key Response Fields
| Field | Description | Use Case |
|---|---|---|
internalId | Localpayment's unique transaction identifier | Transaction tracking and support |
externalId | Your reference number | Internal reconciliation |
status.code | Current transaction status code | Status monitoring |
date.creationDate | When transaction was created | Audit trail |
date.processedDate | When transaction began processing | Processing time calculation |
Error Response
When a request fails, you'll receive detailed error information:
[
{
"externalId": "1736488884",
"internalId": "cd052d8c-8406-45f8-98aa-aff9876c3285",
"status": {
"code": "801",
"description": "Rejected",
"detail": "Params error"
},
"errors": [
{
"code": "300",
"description": "Invalid param + [paymentMethod.code] + doesn't exist for PAYMENT_METHOD_TYPE BankTransf"
},
{
"code": "300",
"description": "Invalid param + [beneficiary.document.id] + doesn´t match regex ^(20|23|24|25|26|27|30|33|34)-?\\d{2}[.]?\\d{3}[.]?\\d{3}-?\\d$"
}
],
"comment": "Addicional informetion"
}
]Step 3: Track Transaction Status
After submitting a payout, monitor its progress through these methods:
Receive real-time notifications when transaction status changes. Most efficient for production environments.
Query transaction status programmatically. Useful for polling or recovering lost webhook notifications.
Visual interface for monitoring transactions. Great for manual oversight and detailed transaction analysis.
Common Status Codes
| Code | Status | Description |
|---|---|---|
100 | Received | The payout was received. |
101 | Locked | The payout has been confirmed and passed AML validations. |
102 | In Progress | The payout has been sent to the bank. |
104 | PendingAuth | The payout is pending of authorization by client. |
200 | Completed | The payout was debited. |
300 | Rejected | Invalid param + [param name] + [reason]. |
Complete Reference
View all status codes in our Transaction Status Documentation.
Step 4: Transaction Approval
For enhanced security, certain transactions require two-person approval:
- Initiator: Submits the payout request.
- Approver: Reviews and confirms the transaction.
This process can be managed through the Business Portal or API endpoints.
Security Note
Approval requirements help prevent unauthorized transactions and ensure compliance with local regulations.
Country-Specific Requirements
Implementation details vary by country. Any country not explicitly mentioned adheres to the standard procedure without special requirements. Review these requirements before integration:
Special Requirements:
beneficiary.bank.branchis optional, as are its owncodeandnamedetails:code: The branch code in the bank's required format.name: The full name of the bank branch.
Sending Funds with Chave Pix:
As an alternative to traditional bank details, you can send funds using a Pix key. Pix is Brazil's instant payment system, allowing transfers 24/7, including weekends and holidays.
To use this method:
-
The recipient must have a registered Pix key.
-
You must provide this key in the
beneficiary.bank.account.aliasproperty.Note: The beneficiary.bank.account.type and beneficiary.bank.account.number properties must be excluded from the request.
Supported Pix Key Types:
You can use any of the following five key types:
- CPF (Individual Taxpayer Registry)
- CNPJ (National Registry of Legal Entities)
- Cellphone Number
- Email Address
- Random Key: A unique, 32-character code generated by the Central Bank. This option allows recipients to receive payments without sharing personal information.
Special Requirements:
- When the currency is set to CLP, the amount must be specified as an integer value. Decimal places are not permitted.
Available banks depend on the chosen payment method. Colombia supports three payment rails: ACH (0060), Transfiya (0061), and Bre-B (0062).
Transfiya (0061)
Transfiya identifies beneficiaries by mobile phone number. This is different from ACH (
0060), which requires a bank account number and bank code.
Transfiya routes payments using the beneficiary’s registered mobile phone number. Once initiated, the beneficiary receives a text notification and can accept or reject the transfer from their banking app.
| Field | Value |
|---|---|
beneficiary.bank.account.type | "P" |
beneficiary.bank.account.number | 12-digit string starting with +573 |
Supported institutions:
- BANCO AGRARIO DE COLOMBIA
- BANCO COOPERATIVO COOPCENTRAL DIGITAL
- BANCO CREZCAMOS
- BANCO DE LAS MICROFINANZAS BANCAMIA SA
- BANCO FALABELLA
- BANCO FINANDINA
- BANCO ITAÚ
- BANCO POWWI
- BANCO SERFINANZA
- BANCOCOOPCENTRAL
- BANCOLOMBIA
- CFA COOPERATIVA FINANCIERA
- CONFIAR COOPERATIVA FINANCIERA
- DAVIVIENDA
- MOVII
- NEQUI
Not currently supported:
- Banco AV Villas (intermittent service)
- Banco de Bogotá
- Banco de Occidente SA
- Dale
- Scotiabank Colpatria
Bre-B (0062)
Bre-B is Colombia’s instant payment system for real-time transfers between financial institutions. It uses simple identifiers — such as phone numbers or ID numbers — instead of full bank account details.
Before you begin, consult the available banks list to verify which institutions support Bre-B.
To use this method:
- The recipient must have a registered Bre-B key with their bank.
- Provide the key in
beneficiary.bank.account.alias.
When using Bre-B, exclude
beneficiary.bank.account.typeandbeneficiary.bank.account.numberfrom the request.
Supported Bre-B key types:
- Identity Document — Identity Card, Immigration Card, Citizenship Card, or Passport
- Merchant Code
- Cellphone Number
- Email Address
- Alphanumeric Key — a unique bank-generated code (e.g.,
@alphamunKey01) that allows payments without sharing personal information
Before sending the payout, you can optionally check whether the Bre-B key is active and see its masked owner details. See Verify a Payout Alias.
Special Requirements:
- The
beneficiary.bank.account.numbercan be provided in either a national or IBAN format. Both represent the same underlying account.- National Format: The standard domestic account number.
Example: 830640009 - IBAN Format: The 28-character international standard. A Dominican IBAN starts with "DO".
Example: DO42BPDO00000000000830640009
- National Format: The standard domestic account number.
Special Requirements:
- The
beneficiary.document.typeis optional. - Specifications for Mobile Number Payments:
beneficiary.bank.account.type: Must be set to "P".beneficiary.bank.account.number: Must be a 10-digit number.
Special Requirements:
- To validate a CCI, we recommend using the official resource provided by the Peruvian banks:
https://www.transferenciasinterbancarias.pe/
Testing Your Integration
Sandbox Environment
Use the staging environment for testing:
https://api.stage.localpayment.com/api/payout/
Test Scenarios
Verify your integration handles these scenarios:
- Successful Transaction: Standard payout flow
- Validation Errors: Invalid bank account, missing fields
- Processing Delays: Transactions that take time to process
- Failed Transactions: Insufficient funds, blocked beneficiaries
- Status Updates: Webhook handling and status polling
Resources & Next Steps
Maximize your integration success with these essential resources
Set up real-time notifications for transaction status updates.
Access detailed analytics, reporting tools, and reconciliation features.
Learn to query transaction status and implement comprehensive tracking.
Complete endpoint documentation with interactive examples.
Pro Tip
Always test your workflow in our sandbox environment before deploying to production. This ensures your error handling, webhook processing, and status tracking work correctly across all scenarios.
Need Help?
Contact our support team if you experience any issues or need assistance for integration.
Updated 6 days ago
