Send transfers
Recipes for sending money from a customer's current account. For the model, states, and endpoints, see Transfers.
Before you start
- You need the
sourceAccountId: the ID of the current account the funds come from. - Every creation carries the
Idempotency-Keyheader to avoid duplicates on a retry. See Idempotency. - The
currencyCodemust match the source account's currency (currentlyARS).
Outgoing transfer to a third party
Specify the destination inline with its cbuCvu (or alias) and the counterparty data.
POST /v1/transfers
Idempotency-Key: erp-pay-9001
Content-Type: application/json
{
"type": "OUTGOING_TRANSFER",
"sourceAccountId": 17,
"amount": 150000.00,
"currencyCode": "ARS",
"destination": {
"cbuCvu": "0000000088776655443322",
"counterParty": {
"name": "Transportes del Sur S.R.L.",
"taxId": "30123456789"
}
},
"description": "Pago flete mayo",
"externalId": "ERP-PAY-9001"
}
Response
201 Created
Location: /v1/transfers/90021
{
"id": 90021,
"type": "OUTGOING_TRANSFER",
"status": "PENDING",
"sourceAccountId": 17,
"amount": 150000.00,
"currencyCode": "ARS",
"destination": {
"cbuCvu": "0000000088776655443322",
"counterParty": { "name": "Transportes del Sur S.R.L.", "taxId": "30123456789" }
},
"externalId": "ERP-PAY-9001",
"creationDate": "2026-05-27T09:15:00-03:00"
}
The transfer is accepted in PENDING and processed asynchronously. The final result (COMPLETED or FAILED) arrives via webhook or by querying GET /v1/transfers/{id}.
alias if you don't have the CBU/CVUYou can replace destination.cbuCvu with destination.alias. One or the other is resolved; you don't need to send both.
Transfer to a recipient from the address book
If the destination is already saved in your recipients address book, reference it with contactId and omit the destination block.
POST /v1/transfers
Idempotency-Key: erp-pay-9002
Content-Type: application/json
{
"type": "OUTGOING_TRANSFER",
"sourceAccountId": 17,
"amount": 150000.00,
"currencyCode": "ARS",
"contactId": 540,
"description": "Pago flete mayo"
}
The CBU/CVU, alias, and counterparty data are taken from the recipient. The response includes the resolved destination and contactId.
Internal transfer between your own accounts
To move funds between two current accounts of the same customer, use INTERNAL_TRANSFER and specify the destination account with destination.accountId.
POST /v1/transfers
Idempotency-Key: erp-mov-int-77
Content-Type: application/json
{
"type": "INTERNAL_TRANSFER",
"sourceAccountId": 17,
"amount": 50000.00,
"currencyCode": "ARS",
"destination": {
"accountId": 18
},
"description": "Fondeo subcuenta impuestos"
}
Schedule a transfer for the future
Add scheduledDate (format YYYY-MM-DD) so the transfer executes on that day. It stays in SCHEDULED status until then.
POST /v1/transfers
Idempotency-Key: erp-pay-9050
Content-Type: application/json
{
"type": "OUTGOING_TRANSFER",
"sourceAccountId": 17,
"amount": 150000.00,
"currencyCode": "ARS",
"contactId": 540,
"scheduledDate": "2026-06-02"
}
Transfers that require approval
If the customer has approval control enabled, the transfer is created in PENDING_APPROVAL instead of PENDING. It is held until an authorized operator approves it according to the customer's internal controls; only then does it move to PENDING and execute.
While it is in PENDING_APPROVAL (or SCHEDULED) you can cancel it.
Cancel a transfer
Only transfers in SCHEDULED or PENDING_APPROVAL status can be cancelled.
POST /v1/transfers/90050/cancellations
200 OK
{
"id": 90050,
"status": "CANCELLED",
...
}
If the transfer is already in PENDING or later, the API responds 422 with transfer-not-cancelable.
Common errors
code | HTTP | When |
|---|---|---|
unmatching-transfer-currency-code | 422 | The currencyCode does not match the source account's currency |
equal-origin-destination | 422 | Source and destination are the same account |
source-account-not-active | 422 | The source account is not active |
transfer-not-cancelable | 422 | An attempt was made to cancel a transfer that is no longer SCHEDULED/PENDING_APPROVAL |
Full catalog in Error codes.