Register a payout beneficiary
POST/beneficiariesProbar
La llamada la hace tu navegador, contra el servidor que elijas arriba. Si la documentación no está servida desde el mismo origen que la API, el navegador puede bloquear la respuesta por CORS: en ese caso abre estas páginas desde la propia API (/docs) o usa el curl de arriba.
const url = 'http://localhost:3000/v1/beneficiaries';const options = { method: 'POST', headers: {'x-api-key': '<x-api-key>', 'Content-Type': 'application/json'}, body: '{"fullName":"María Gómez","nationalId":"V12345678","bankCode":"0134","accountNumber":"01340000123456789012","phone":"04141234567"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://localhost:3000/v1/beneficiaries \ --header 'Content-Type: application/json' \ --header 'x-api-key: <x-api-key>' \ --data '{ "fullName": "María Gómez", "nationalId": "V12345678", "bankCode": "0134", "accountNumber": "01340000123456789012", "phone": "04141234567" }'Scope beneficiaries:write. Registration is idempotent by (national ID, bank, instrument): sending the same data again returns the same beneficiary (created: false) instead of duplicating it.
phone is required for pago_movil, where it is the destination. For transferencia you need accountNumber, and phone is optional.
It is validated before spending a call to the payment network:
- national ID or RIF
V/E/J/G/P+ 6 to 9 digits (V12345678); - a 4-digit
bankCode, from the catalog of the instrument you will use (GET /payouts/banks?method=…); accountNumberdigits only, 16 to 20 —in Venezuelan practice they are 20— and it starts with thebankCode;phoneas04XXXXXXXXX(required to pay out by pago móvil; optional for bank transfer).
The most common rejection by a Venezuelan bank is that the name or national ID don’t match the holder of that account or phone: send fullName exactly as the destination bank has it.
Authorizations
Sección titulada «Authorizations»Request Bodyrequired
Sección titulada «Request Bodyrequired»phone es necesario para dispersar por pago_movil (es el destino); accountNumber, para transferencia, donde el phone es opcional.
El alta exige al menos uno de los dos campos. Un beneficiario sin phone sólo cobra por transferencia; si se le dispersa por pago móvil, falla con beneficiary_missing_phone.
object
Nombre del titular TAL COMO lo tiene el banco destino
Cédula o RIF: V/E/J/G/P + 6 a 9 dígitos
Banco destino, 4 dígitos
Sólo dígitos, de 16 a 20 (en la práctica venezolana, 20), y debe empezar por el bankCode. Necesario para transferencia.
Móvil del beneficiario, formato 04XXXXXXXXX. Obligatorio para pago móvil; opcional en transferencia.
Decimales: BS y USD 2; USDT y USDC 6 (1000000 = 1 USDT).
Examples
Abono en cuenta (transferencia) — el móvil también hace falta
{ "fullName": "María Gómez", "nationalId": "V12345678", "bankCode": "0134", "accountNumber": "01340000123456789012", "phone": "04141234567"}Pago móvil
{ "fullName": "José Marcano", "nationalId": "V18234112", "bankCode": "0138", "phone": "04141234567"}Responses
Sección titulada «Responses»Beneficiario (nuevo o ya existente)
object
Decimales: BS y USD 2; USDT y USDC 6 (1000000 = 1 USDT).
Cuántas dispersiones le han llegado bien. Señal antifraude.
False si ya existía con esos datos
Example
{ "id": "8ade3e33-6f1c-4d0a-9d33-2c6b0a41f7e2", "full_name": "María Gómez", "national_id": "V12345678", "bank_code": "0134", "account_number": "01340000123456789012", "phone": "04141234567", "asset": "BS", "country": "VE", "status": "active", "payout_count": 0, "last_success_at": null, "last_failure_reason": null, "created_at": "2026-08-31T19:02:11.004Z", "created": true}Error con código estable
object
object
Contexto estructurado del error cuando lo hay: qué límite se superó y de cuánto, qué campo es inválido, cuánto saldo había. No aparece en errores internos.
object
Código ESTABLE. Programa contra esto.
Example
{ "error": { "type": "invalid_request_error", "code": "insufficient_balance", "request_id": "req_8a0312ba896772bc441134cd" }}Error con código estable
object
object
Contexto estructurado del error cuando lo hay: qué límite se superó y de cuánto, qué campo es inválido, cuánto saldo había. No aparece en errores internos.
object
Código ESTABLE. Programa contra esto.
Example
{ "error": { "type": "invalid_request_error", "code": "insufficient_balance", "request_id": "req_8a0312ba896772bc441134cd" }}Error con código estable
object
object
Contexto estructurado del error cuando lo hay: qué límite se superó y de cuánto, qué campo es inválido, cuánto saldo había. No aparece en errores internos.
object
Código ESTABLE. Programa contra esto.
Example
{ "error": { "type": "invalid_request_error", "code": "insufficient_balance", "request_id": "req_8a0312ba896772bc441134cd" }}