Documentación Técnica
Especificaciones completas de la API, flujos de autenticación, webhooks y ejemplos de código detallados.
Documentación Técnica API R4 Conecta
Desarrollado por: dPana Soft
Tabla de Contenidos
- Introducción
- Requisitos Técnicos
- Autenticación y Seguridad
- Endpoints
- Códigos de Error
- Ejemplos con Bruno API
Introducción
La API R4 Conecta permite la integración con servicios bancarios para procesamiento de pagos móviles, transferencias, débitos y créditos inmediatos.
URL Base: https://r4conecta.mibanco.com.ve
Protocolo: HTTPS (TLS 1.2+)
Formato: JSON
Requisitos Técnicos
Infraestructura Requerida
- Dominio propio registrado a nombre de la empresa
- Certificado TLS 1.2+ válido emitido por autoridad certificadora confiable
- IP Whitelisting para endpoints de notificación:
- 45.175.213.98
- 200.74.203.91
- 204.199.249.3
Headers Requeridos
Todos los endpoints requieren los siguientes headers:
```http Content-Type: application/json Authorization: {TOKEN_HMAC_SHA256} Commerce: {COMMERCE_TOKEN} X-License-Key: {LICENSE_KEY} ```
Generación del Token de Autorización
El token de autorización se genera usando HMAC-SHA256:
```javascript const crypto = require('crypto');
function generateAuthToken(data, commerceSecret) { return crypto .createHmac('sha256', commerceSecret) .update(data) .digest('hex'); } ```
Autenticación y Seguridad
Sistema de Licencias
La API utiliza un sistema de licencias con validación de fechas. El hash de licencia se genera usando:
- Token COMMERCE: Usado como clave de encriptación AES-256
- Rango de fechas: Fecha de inicio y fin en formato YYYY-MM-DD
Generación del hash:
```bash
Establecer el token COMMERCE en el ambiente
export COMMERCE=tu_commerce_token
Generar hash de licencia
node dist/tools/generateLicense.js 2024-01-01 2025-12-31 ```
El hash generado debe:
- Copiarse a la variable
_LICen el archivo.env - Incluirse en el header
X-License-Keyen cada petición
Importante: Si cambias el token COMMERCE, debes regenerar el hash de licencia.
Token COMMERCE
El token COMMERCE es un valor único proporcionado por el banco que se utiliza para:
- Autenticación: Header
Commerceen cada petición - Firma HMAC-SHA256: Clave para generar el header
Authorization - Encriptación de licencia: Clave para encriptar/desencriptar el hash de licencia
Rate Limiting
- Límite: 100 peticiones por 15 minutos por IP
- Header de respuesta:
X-RateLimit-Remaining
Endpoints
1. Consulta Tasa BCV
Obtiene la tasa de cambio oficial del Banco Central de Venezuela.
Endpoint: POST /api/bcv
Authorization Token: HMAC-SHA256 de fechavalor + moneda
Request: ```json { "Moneda": "USD", "Fechavalor": "2024-07-23" } ```
Response (Éxito): ```json { "code": "00", "fechavalor": "2024-07-23", "tipocambio": 36.5314 } ```
Validaciones:
Moneda: Código ISO de 3 caracteres (USD, EUR, etc.)Fechavalor: Formato YYYY-MM-DD
2. Consulta Cliente (Webhook)
Endpoint implementado por el cliente para validar usuarios antes de aceptar pagos móviles.
Endpoint: POST {dominio_cliente}/R4consulta
Authorization: UUID generado por el comercio
Request: ```json { "IdCliente": "13536734", "Monto": "135.36", "TelefonoComercio": "04129196699" } ```
Response (Cliente Aceptado): ```json { "status": true } ```
Response (Cliente Rechazado): ```json { "status": false } ```
3. Notificación Pago Móvil (Webhook)
Endpoint implementado por el cliente para recibir notificaciones de pagos móviles entrantes.
Endpoint: POST {dominio_cliente}/R4notifica
Authorization: UUID generado por el comercio
Request: ```json { "IdComercio": "13536734", "TelefonoComercio": "04125555555", "TelefonoEmisor": "04145555555", "Concepto": "PRUEBA", "BancoEmisor": "134", "Monto": "123.13", "FechaHora": "2024-12-05T16:50:48.421Z", "Referencia": "83736278", "CodigoRed": "00" } ```
Response (Notificación Aceptada): ```json { "abono": true } ```
Validaciones:
IdComercio: 8 dígitos numéricosTelefonoComercio,TelefonoEmisor: 11 dígitos (formato 04XXXXXXXXX)BancoEmisor: 3-4 dígitosMonto: Máximo 8 enteros y 2 decimalesCodigoRed: Código de respuesta interbancaria
4. Gestión de Pagos (Dispersión)
Permite realizar pagos a múltiples beneficiarios desde una transacción recibida.
Endpoint: POST /api/pagos
Authorization Token: HMAC-SHA256 de monto + fecha
Request: ```json { "monto": "10.00", "fecha": "07/08/2024", "Referencia": "1293912", "personas": [ { "nombres": "Victor Maceros", "documento": "V05503673", "destino": "01020488760100026670", "montoPart": "4.00" }, { "nombres": "Jorge Perez", "documento": "J696886684", "destino": "01341032660321048077", "montoPart": "6.00" } ] } ```
Response (Éxito): ```json { "success": true, "message": "Dispersión exitosa" } ```
Response (Error): ```json { "error": "ERROR SECRETO NO VALIDO", "success": false, "message": "No se pudo completar la dispersión" } ```
5. Vuelto (Pago Móvil Saliente)
Procesa un pago móvil a un beneficiario.
Endpoint: POST /api/vuelto
Authorization Token: HMAC-SHA256 de TelefonoDestino + Monto + Banco + Cedula
Request: ```json { "TelefonoDestino": "04145555555", "Cedula": "V12345678", "Banco": "0102", "Monto": "1000.00", "Concepto": "PRUEBA", "Ip": "0.0.0.0" } ```
Response (Aprobado): ```json { "code": "00", "message": "TRANSACCION EXITOSA", "reference": "15558293" } ```
Códigos de Error Comunes:
08: Token Inválido14: Combo celular-cédula no registrado51: No tiene fondos disponibles55: Teléfono origen no existe56: Número de celular no coincide con cédula80: Cédula del receptor inválida
6. Generar OTP
Inicia el proceso de generación de OTP para débito inmediato.
Endpoint: POST /api/otp/generar
Authorization Token: HMAC-SHA256 de Banco + Monto + Telefono + Cedula
Request: ```json { "Banco": "0192", "Monto": "50.00", "Telefono": "04145555555", "Cedula": "V12345678" } ```
Response: ```json { "code": "202", "message": "Se ha recibido el mensaje de forma satisfactoria", "success": true } ```
7. Débito Inmediato
Completa la operación de débito inmediato usando el OTP generado.
Endpoint: POST /api/debito/inmediato
Authorization Token: HMAC-SHA256 de Banco + Cedula + Telefono + Monto + OTP
Request: ```json { "Banco": "0191", "Monto": "50.00", "Telefono": "04145555555", "Cedula": "V12345678", "Nombre": "Maria Perez", "OTP": "19807849", "Concepto": "pago Condominio1" } ```
Response (Aceptado): ```json { "code": "ACCP", "message": "Operación Aceptada", "reference": "16142940", "id": "6785d97e-2092-49f0-9f7d-3d5921f0b13f" } ```
Response (En Espera): ```json { "code": "AC00", "message": "Operación en Espera de Respuesta del Receptor", "Id": "e63a7892-f00f-46a4-b7d1-a6e8ac7ab094" } ```
8. Crédito Inmediato (Por Teléfono)
Realiza un crédito inmediato usando el número de teléfono del beneficiario.
Endpoint: POST /api/credito/inmediato
Authorization Token: HMAC-SHA256 de Banco + Cedula + Telefono + Monto
Request: ```json { "Banco": "0163", "Cedula": "V12345678", "Telefono": "04145555555", "Monto": "1.00", "Concepto": "Prueba 854" } ```
Response: ```json { "code": "ACCP", "message": "Operación Aceptada", "reference": "87882878", "id": "ce85d97e-2092-49f0-9f7d-3d5921f0b13c" } ```
9. Crédito Inmediato (Por Cuenta)
Realiza un crédito inmediato usando el número de cuenta de 20 dígitos.
Endpoint: POST /api/credito/cuenta
Authorization Token: HMAC-SHA256 de Cedula + Cuenta + Monto
Request: ```json { "Cedula": "V12345678", "Cuenta": "01690547895468745212", "Monto": "1.00", "Concepto": "Prueba 854" } ```
10. Domiciliación por Cuenta
Domicilia pagos usando número de cuenta de 20 dígitos.
Endpoint: POST /api/domiciliacion/cuenta
Authorization Token: HMAC-SHA256 de cuenta
Request: ```json { "docId": "V12345678", "nombre": "Raul Rojas", "cuenta": "01344578987450000015", "monto": "1.33", "concepto": "Pago" } ```
Response (Éxito): ```json { "codigo": "202", "mensaje": "Se ha recibido el mensaje de forma satisfactoria", "uuid": "04c8a596-f1c5-4c68-a984-2216ff984317" } ```
11. Domiciliación por Teléfono
Domicilia pagos usando número de teléfono.
Endpoint: POST /api/domiciliacion/telefono
Authorization Token: HMAC-SHA256 de telefono
Request: ```json { "docId": "V12345678", "telefono": "04145555555", "nombre": "Raul Lopez", "banco": "0134", "monto": "1.20", "concepto": "Pago" } ```
Nota: El primer envío es para afiliación, no genera cobro.
12. Consultar Operaciones
Consulta el estado de operaciones realizadas usando el UUID.
Endpoint: POST /api/consulta-operaciones
Authorization Token: HMAC-SHA256 de Id
Request: ```json { "Id": "e63a7892-f00f-46a4-b7d1-a6e8ac7ab094" } ```
Response: ```json { "code": "ACCP", "reference": "16413121", "success": true } ```
13. Cobro C2P
Procesa un cobro de cliente a comercio (C2P).
Endpoint: POST /api/c2p/cobro
Authorization Token: HMAC-SHA256 de TelefonoDestino + Monto + Banco + Cedula
Request: ```json { "TelefonoDestino": "04145555555", "Cedula": "V12345678", "Concepto": "PRUEBA", "Banco": "0105", "Ip": "192.168.1.20", "Monto": "1.15", "Otp": "13309525" } ```
Response (Aprobado): ```json { "message": "TRANSACCION EXITOSA", "code": "00", "reference": "59707278" } ```
14. Anulación C2P
Anula una transacción C2P previamente procesada.
Endpoint: POST /api/c2p/anular
Authorization Token: HMAC-SHA256 de Banco
Request: ```json { "Cedula": "V12345678", "Banco": "0105", "Referencia": "58945790" } ```
Response (Aprobado): ```json { "message": "TRANSACCION EXITOSA", "code": "00", "reference": "59707278" } ```
Códigos de Error
Códigos de Red Interbancaria
| Código | Descripción |
|---|---|
| 00 | APROBADO |
| 01 | REFERIRSE AL CLIENTE |
| 05 | TIEMPO DE RESPUESTA EXCEDIDO |
| 12 | TRANSACCION INVALIDA |
| 13 | MONTO INVALIDO |
| 14 | NUMERO TELEFONO RECEPTOR ERRADO |
| 30 | ERROR DE FORMATO |
| 41 | SERVICIO NO ACTIVO |
| 43 | SERVICIO NO ACTIVO |
| 55 | TOKEN INVALIDO |
| 56 | CELULAR NO COINCIDE |
| 57 | NEGADA POR EL RECEPTOR |
| 62 | CUENTA RESTRINGIDA |
| 68 | RESPUESTA TARDIA, PROCEDE REVERSO |
| 80 | CEDULA O PASAPORTE ERRADO |
| 87 | TIME OUT |
| 90 | CIERRE BANCARIO EN PROCESO |
| 91 | INSTITUCION NO DISPONIBLE |
| 92 | BANCO RECEPTOR NO AFILIADO |
| 99 | ERROR EN NOTIFICACION |
Códigos ISO 20022 (Débito/Crédito Inmediato)
| Código | Descripción |
|---|---|
| ACCP | Operación Aceptada |
| AC00 | Operación en Espera de Respuesta del Receptor |
| AB01 | Tiempo de espera agotado |
| AB07 | Agente fuera de línea |
| AC01 | Número de cuenta incorrecto |
| AC04 | Cuenta cancelada |
| AC06 | Cuenta bloqueada |
| AC09 | Moneda no válida |
| AG01 | Transacción Restringida |
| AG09 | Pago no recibido |
| AG10 | Agente suspendido o excluido |
| AM02 | Monto de la transacción no permitido |
| AM04 | Saldo insuficiente |
| AM05 | Operación duplicada |
| BE01 | Datos del cliente no corresponden a la cuenta |
| BE20 | Longitud del nombre invalida |
| CH20 | Número de decimales incorrecto |
| CUST | Cancelación solicitada por el deudor |
| DS02 | Operación Cancelada |
| DT03 | Fecha de procesamiento no bancaria no válida |
| DU01 | Identificación de mensaje duplicado |
| ED05 | Liquidación Fallida |
| FF05 | Código del producto incorrecto |
| FF07 | Código del sub producto incorrecto |
| MD01 | No posee afiliación |
| MD09 | Afiliación inactiva |
| MD15 | Monto incorrecto |
| MD21 | Cobro no permitido |
| MD22 | Afiliación suspendida |
| RC08 | Código del Banco no existe en el sistema |
| RJCT | Operación Rechazada |
| TKCM | Código único de operación de débito incorrecto |
| VE01 | Fuera del horario permitido |
| TM01 | Rechazo técnico |
Ejemplos con Bruno API
Colección Bruno: R4 Conecta API
Configuración de Entorno
Crear archivo environments/production.bru:
``` vars { baseUrl: https://r4conecta.mibanco.com.ve commerce: YOUR_COMMERCE_TOKEN licenseKey: YOUR_LICENSE_KEY } ```
1. Consulta BCV
Archivo: bcv/consulta-tasa.bru
``` meta { name: Consulta Tasa BCV type: http seq: 1 }
post { url: {{baseUrl}}/api/bcv body: json auth: none }
headers { Content-Type: application/json Commerce: {{commerce}} X-License-Key: {{licenseKey}} }
body:json { { "Moneda": "USD", "Fechavalor": "2024-07-23" } }
script:pre-request { const crypto = require('crypto'); const data = req.body.Fechavalor + req.body.Moneda; const token = crypto.createHmac('sha256', bru.getEnvVar('commerce')) .update(data) .digest('hex'); req.setHeader('Authorization', token); } ```
2. Vuelto (Pago Móvil)
Archivo: vuelto/pago-movil.bru
``` meta { name: Vuelto - Pago Móvil type: http seq: 2 }
post { url: {{baseUrl}}/api/vuelto body: json auth: none }
headers { Content-Type: application/json Commerce: {{commerce}} X-License-Key: {{licenseKey}} }
body:json { { "TelefonoDestino": "04145555555", "Cedula": "V12345678", "Banco": "0102", "Monto": "100.00", "Concepto": "Pago de prueba", "Ip": "192.168.1.1" } }
script:pre-request { const crypto = require('crypto'); const body = req.body; const data = body.TelefonoDestino + body.Monto + body.Banco + body.Cedula; const token = crypto.createHmac('sha256', bru.getEnvVar('commerce')) .update(data) .digest('hex'); req.setHeader('Authorization', token); } ```
3. Generar OTP
Archivo: debito/generar-otp.bru
``` meta { name: Generar OTP type: http seq: 3 }
post { url: {{baseUrl}}/api/otp/generar body: json auth: none }
headers { Content-Type: application/json Commerce: {{commerce}} X-License-Key: {{licenseKey}} }
body:json { { "Banco": "0192", "Monto": "50.00", "Telefono": "04145555555", "Cedula": "V12345678" } }
script:pre-request { const crypto = require('crypto'); const body = req.body; const data = body.Banco + body.Monto + body.Telefono + body.Cedula; const token = crypto.createHmac('sha256', bru.getEnvVar('commerce')) .update(data) .digest('hex'); req.setHeader('Authorization', token); } ```
4. Débito Inmediato
Archivo: debito/debito-inmediato.bru
``` meta { name: Débito Inmediato type: http seq: 4 }
post { url: {{baseUrl}}/api/debito/inmediato body: json auth: none }
headers { Content-Type: application/json Commerce: {{commerce}} X-License-Key: {{licenseKey}} }
body:json { { "Banco": "0191", "Monto": "50.00", "Telefono": "04145555555", "Cedula": "V12345678", "Nombre": "Maria Perez", "OTP": "19807849", "Concepto": "Pago servicio" } }
script:pre-request { const crypto = require('crypto'); const body = req.body; const data = body.Banco + body.Cedula + body.Telefono + body.Monto + body.OTP; const token = crypto.createHmac('sha256', bru.getEnvVar('commerce')) .update(data) .digest('hex'); req.setHeader('Authorization', token); } ```
5. Crédito Inmediato
Archivo: credito/credito-inmediato.bru
``` meta { name: Crédito Inmediato type: http seq: 5 }
post { url: {{baseUrl}}/api/credito/inmediato body: json auth: none }
headers { Content-Type: application/json Commerce: {{commerce}} X-License-Key: {{licenseKey}} }
body:json { { "Banco": "0163", "Cedula": "V12345678", "Telefono": "04145555555", "Monto": "100.00", "Concepto": "Pago a proveedor" } }
script:pre-request { const crypto = require('crypto'); const body = req.body; const data = body.Banco + body.Cedula + body.Telefono + body.Monto; const token = crypto.createHmac('sha256', bru.getEnvVar('commerce')) .update(data) .digest('hex'); req.setHeader('Authorization', token); } ```
6. Consultar Operaciones
Archivo: consultas/consultar-operacion.bru
``` meta { name: Consultar Operación type: http seq: 6 }
post { url: {{baseUrl}}/api/consulta-operaciones body: json auth: none }
headers { Content-Type: application/json Commerce: {{commerce}} X-License-Key: {{licenseKey}} }
body:json { { "Id": "e63a7892-f00f-46a4-b7d1-a6e8ac7ab094" } }
script:pre-request { const crypto = require('crypto'); const data = req.body.Id; const token = crypto.createHmac('sha256', bru.getEnvVar('commerce')) .update(data) .digest('hex'); req.setHeader('Authorization', token); } ```
7. Cobro C2P
Archivo: c2p/cobro.bru
``` meta { name: Cobro C2P type: http seq: 7 }
post { url: {{baseUrl}}/api/c2p/cobro body: json auth: none }
headers { Content-Type: application/json Commerce: {{commerce}} X-License-Key: {{licenseKey}} }
body:json { { "TelefonoDestino": "04145555555", "Cedula": "V12345678", "Concepto": "Cobro servicio", "Banco": "0105", "Ip": "192.168.1.20", "Monto": "50.00", "Otp": "13309525" } }
script:pre-request { const crypto = require('crypto'); const body = req.body; const data = body.TelefonoDestino + body.Monto + body.Banco + body.Cedula; const token = crypto.createHmac('sha256', bru.getEnvVar('commerce')) .update(data) .digest('hex'); req.setHeader('Authorization', token); } ```
Notas Importantes
Validación de Licencia: Todas las peticiones requieren un hash de licencia válido con fechas activas.
Rate Limiting: Máximo 100 peticiones cada 15 minutos por IP.
Timeout: Las peticiones tienen un timeout de 30 segundos.
Webhooks: Los endpoints de consulta y notificación deben ser implementados por el cliente con certificado TLS válido.
Operaciones Asíncronas: Débito y crédito inmediato pueden retornar código
AC00(en espera). Usar endpoint de consulta de operaciones para verificar el estado final.Seguridad: Nunca exponer el token
COMMERCEen el frontend. Todas las peticiones deben realizarse desde el backend.
Desarrollado por dPana Soft
Última actualización: 2025