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

FieldTypeRequiredNotes
account_holder_namestringyesFull name of the destination account holder. It comes from the name input or a saved account.
account_typenumberyesDestination bank account type. It comes from the account type selector.
account_holder_document_typenumberyesDestination account holder document type. It comes from the document type selector.
account_holder_documentstringyesDestination account holder document number.
account_numberstringyesDestination account number. The app strips non-digit characters before sending it.
bank_namenumberyesDestination bank ID loaded from the third-party withdrawal bank list. This is not the bank name as text.
overridebooleanyesFlag sent by the app to continue creating the withdrawal.
amountnumberyesWithdrawal amount in COP.
latitudestringyesLatitude sent by the app.
longitudestringyesLongitude sent by the app.
idempotency_keystringyesUnique identifier for deduplicating payout attempts.
descriptionstringnoOptional payout note or internal description.
couponstringnoCoupon code, or an empty string when it does not apply.

Values used by the app

Account type

ValueMeaning
0Savings
1Checking

Document type

ValueMeaning
0Colombian citizenship ID
1Foreigner ID
3NIT
4Passport
5Temporary 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 override should always be sent as true or 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

SignalMeaning
R010Invalid account data or payout rejection by banking validation.
P002Processing or provider-side failure.
E001Generic 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.

On this page