Ir al contenido

Códigos HTTP y errores

Todas las respuestas JSON de la API firmada viajan envueltas. No leas los campos de negocio en la raíz: están dentro de data.

Éxito:

{
"success": true,
"data": { "txId": "a1b2c3…", "status": "PENDING" },
"requestId": "abc123-def456"
}

Error:

{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "amount requerido (pesos COP enteros > 0)",
"details": { "campo": "valor" }
},
"requestId": "abc123-def456"
}

requestId es el identificador que asigna API Gateway a la petición. Guárdalo: es lo que permite correlacionar tu llamada con nuestros logs al reportar un problema.

error.code es el valor estable para ramificar tu lógica; error.message es texto para humanos y puede cambiar.

error.codeHTTPSignificadoAcción recomendada
VALIDATION_ERROR400Body o parámetros inválidosRevisar el body del request
UNAUTHORIZED401Firma, timestamp, nonce o digest del body inválidosRegenerar timestamp + nonce + firma. Verificar que el body enviado sea exactamente el que se hasheó
INSUFFICIENT_FUNDS402Saldo insuficiente para la operaciónVerificar availableBalance en la respuesta
FORBIDDEN403Servicio no habilitado / producción no habilitadaContactar a Rivopay para activar el servicio
NOT_FOUND404Recurso o ruta inexistenteVerificar el txId o externalId
CONFLICT409Estado conflictivo (duplicado, onboarding incompleto)Verificar el estado actual de la transacción
IDEMPOTENCY_KEY_REQUIRED400Falta X-Idempotency-Key en una operación que mueve dineroEnviar la cabecera. Ver Idempotencia
IDEMPOTENCY_KEY_INVALID400X-Idempotency-Key con más de 128 caracteres o fuera de [A-Za-z0-9_-:.]Corregir el formato de la clave
IDEMPOTENCY_KEY_REUSED422X-Idempotency-Key ya usada con un cuerpo distintoUsar una clave nueva o enviar el mismo cuerpo original
IDEMPOTENCY_IN_FLIGHT409Otra petición con esa clave está en cursoReintentar en unos segundos
IDEMPOTENCY_CONFLICT409X-Idempotency-Key ya usada y sin transacción que devolverVer Idempotencia
QR_REFERENCE_CONFLICT409qrCodeReference ya utilizada en otro cobroEnviar otra referencia, o dejar que el gateway la genere
NEQUI_COMMERCE_NOT_CONFIGURED409Onboarding incompletoContacta con soporte
PROVIDER_REJECTED422El proveedor rechazó la operación (motivo de negocio)Revisar los datos enviados y el code del proveedor
IDENTIFICATION_MISMATCH422El documento enviado no es el del titular de la llave Bre-BConfirmar el documento del destinatario
RATE_LIMITED429Demasiadas peticionesReintentar con backoff
INTERNAL_ERROR500Error internoReintentar con backoff. Si persiste, contactar soporte
NOT_IMPLEMENTED501Operación no implementadaNo reintentar
PROVIDER_ERROR502Proveedor caído o con fallo transitorioReintentar en ~30 segundos
SERVICE_UNAVAILABLE503Servicio suspendido para tu cuentaContactar soporte

En los rechazos de negocio de Nequi, error.code es el código propio del proveedor y error.message ya viene traducido:

codeMensaje
20-08A, 11-37LEl número de celular no tiene una cuenta Nequi.
20-05ADatos de la solicitud inválidos.
20-10AServicio no habilitado para esta cuenta.
11-9LNo se pudo procesar la operación, intenta de nuevo.
11-36LEl monto supera el límite permitido para esta cuenta.
10-454La transacción ya caducó.
2-CCSB000005Esta cuenta Nequi no puede recibir plata en este momento.
HTTPForma
422{ "error": "Bre-B rechazó la operación", "providerStatus": 400, "detail": "..." }
502{ "error": "Bre-B no disponible" }
409Onboarding incompleto — contacta con soporte

El 402 incluye el detalle para que puedas mostrarlo o decidir el reintento:

{
"availableBalance": 30000,
"requiredAmount": 52000,
"currency": "COP"
}

Al reportar un problema incluye siempre el requestId de la respuesta (o el txId / externalId): es lo que permite localizar la operación en los logs.