Withdraw to Venezuela

Send USD through Pago Móvil or a bank transfer.

POST /withdraw/ve/ supports two modes. For either mode, first call GET /withdraw/ve/banks/ and send the selected bank's code as bank_code.

Send "USD" as currency_code. The accepted document_type values are "4", "13", "14", and "15".

List banks

GET https://dev.cobru.co/withdraw/ve/banks/
Authorization: Bearer <access_token>
x-api-key: <api_key>

The response contains available banks in banks.data:

{
  "success": true,
  "banks": {
    "status": "Success",
    "statusCode": 200,
    "message": "Lista de bancos obtenida exitosamente",
    "data": [
      {
        "codigo": "0156",
        "nombre": "100% BANCO",
        "logo": "https://example.com/bank-logo.png"
      }
    ]
  }
}

Send codigo as bank_code. Keep it as a string so leading zeroes are not lost.

Get the rate and commission

Before creating the withdrawal, fetch the USD/VES rate and commission. To retrieve only the base values, send no body and omit amount. This response was verified against production:

GET https://prod.cobru.co/withdraw/ve/rates/
Authorization: Bearer <access_token>
x-api-key: <api_key>
{
  "success": true,
  "rates": {
    "rate": 711.0,
    "commission": 1.0
  }
}

To quote a withdrawal, send the USD amount as a query parameter:

GET https://prod.cobru.co/withdraw/ve/rates/?amount=333
Authorization: Bearer <access_token>
x-api-key: <api_key>
{
  "success": true,
  "rates": {
    "rate": 711.0,
    "commission": 1.0,
    "debit_amount": 334.0,
    "ves_amount": 236763.0
  }
}
FieldMeaning
rateVenezuelan bolívares delivered per USD.
commissionCommission added to the USD debit.
debit_amountTotal USD debit; returned only when amount is provided.
ves_amountTotal VES delivered; returned only when amount is provided.

In this example, amount=333, debit_amount=334.0, and ves_amount=236763.0. Without amount, use only rate and commission; debit_amount and ves_amount do not apply.

Case 1: Pago Móvil

POST https://dev.cobru.co/withdraw/ve/
Content-Type: application/json
Authorization: Bearer <access_token>
x-api-key: <api_key>
{
  "amount": 1,
  "is_movil_pay": true,
  "document_type": "14",
  "document": "15396329",
  "phone": "0414249980",
  "currency_code": "USD",
  "bank_code": "0174"
}

Document-type validation

Send the code as a string. Any value other than "4", "13", "14", or "15" returns 400 Bad Request.

{
  "document_type": [
    "Tipo de documento no válido para Venezuela. Códigos permitidos: 4, 13, 14, 15."
  ]
}

Case 2: bank transfer

{
  "amount": 20.00,
  "is_movil_pay": false,
  "document_type": "14",
  "document": "18184460",
  "account_holder_name": "Juan Perez",
  "account_number": "01380040500400254789",
  "currency_code": "USD",
  "description": "Retiro VE prueba",
  "callback": "https://example.com/webhooks/withdrawals",
  "bank_code": "0138"
}
FieldPago MóvilBank transfer
is_movil_paytruefalse
phonerequiredomitted
account_holder_nameomittedrequired
account_numberomittedrequired

Both modes send document_type, document, currency_code, bank_code, and amount. Always use "USD" as currency_code. The available evidence shows description and callback as optional.

Creation response

The sandbox returned 201 Created:

{
  "amount": "8350.08",
  "paid_amount": "20.00",
  "fee": "7000.00",
  "fee_iva": "1330.00",
  "gmf": "0.08",
  "id": 5055,
  "success": true
}

Store id and use the callback to reconcile state changes. These values came from one test and do not represent a fixed exchange rate or fee.

On this page