Create withdrawal
Create a bank withdrawal to a Colombian bank account.
This page documents the best-known Colombian third-party withdrawal contract from legacy Cobru exports. Re-verify the exact behavior in sandbox before making it a production dependency.
Endpoint
POST /thirdpartywithdraw/
Example payload
{
"account_holder_name": "Carlos Alberto Perez Gomez",
"account_type": 0,
"account_holder_document_type": 0,
"account_holder_document": "1045672890",
"account_number": "1234567890",
"bank_name": 7,
"override": true,
"amount": 50000,
"latitude": "10.9711",
"longitude": "-74.7837",
"idempotency_key": "6f3e8b7e-0b7d-4e4c-8c32-6b0d0f8c9a21",
"description": "Supplier payment",
"coupon": ""
}Request fields
| Field | Type | Required | Notes |
|---|---|---|---|
account_holder_name | string | yes | Full name of the destination account holder. It comes from the name input or a saved account. |
account_type | number | yes | Destination bank account type. It comes from the account type selector. |
account_holder_document_type | number | yes | Destination account holder document type. It comes from the document type selector. |
account_holder_document | string | yes | Destination account holder document number. |
account_number | string | yes | Destination account number. The app strips non-digit characters before sending it. |
bank_name | number | yes | Destination bank ID loaded from the third-party withdrawal bank list. This is not the bank name as text. |
override | boolean | yes | Flag sent by the app to continue creating the withdrawal. |
amount | number | yes | Withdrawal amount in COP. |
latitude | string | yes | Latitude sent by the app. |
longitude | string | yes | Longitude sent by the app. |
idempotency_key | string | yes | Unique identifier for deduplicating payout attempts. |
description | string | no | Optional payout note or internal description. |
coupon | string | no | Coupon code, or an empty string when it does not apply. |
Values used by the app
Account type
| Value | Meaning |
|---|---|
0 | Savings |
1 | Checking |
Document type
| Value | Meaning |
|---|---|
0 | Colombian citizenship ID |
1 | Foreigner ID |
3 | NIT |
4 | Passport |
5 | Temporary Protection Permit |
Destination bank
The bank_name field uses the selected bank value from the bank list, not the label.
{
"value": 7,
"label": "BANCOLOMBIA"
}The request then sends:
{
"bank_name": 7
}What to confirm with Cobru before go-live
- whether
overrideshould always be sent astrueor depends on a previous validation - whether callbacks are still supported or if webhooks replaced them
- payout settlement timeline and terminal states
Error signals seen in older materials
| Signal | Meaning |
|---|---|
R010 | Invalid account data or payout rejection by banking validation. |
P002 | Processing or provider-side failure. |
E001 | Generic validation or downstream provider error. |
Production notes
- Always send an idempotency key if Cobru confirms it remains supported.
- Keep the withdrawal identifier returned by Cobru to reconcile async state changes.
- Treat bank withdrawals as asynchronous even when the initial response is successful.
- Use the numeric bank ID in
bank_name; do not send the visible selector label.