Errores
Cada respuesta de error M2M usa RFC 7807 problem+json. El campo error_code es el identificador estable legible por máquina — haga switch sobre él en su código, nunca sobre el detail legible por humanos.
Esta página lista cada código que los socios pueden recibir, agrupado por dominio.
Forma de la respuesta
HTTP/1.1 422 Unprocessable Entity
Content-Type: application/problem+json
{
"type": "about:blank",
"title": "Unprocessable Entity",
"status": 422,
"error_code": "DB-FX-410",
"detail": "FX quote invalid, expired, or not owned",
"trace_id": "0HN5K8M3F2X4P:00000007",
"instance": "/api/v1/fxorder/createOrder",
"errors": {
"parameters.quote_id": ["Quote expired at 2026-04-28T10:35:00.000Z"]
}
}| Campo | Requerido | Significado |
|---|---|---|
type |
Sí | URI que identifica la clase de error. Actualmente siempre about:blank. Versiones futuras pueden introducir URIs tipados. |
title |
Sí | Frase de motivo HTTP (p. ej. Bad Request, Unprocessable Entity). |
status |
Sí | Código de estado HTTP (entero). |
error_code |
Sí | Código estable legible por máquina del catálogo abajo. Haga switch sobre este campo, no sobre detail. |
detail |
Sí | Explicación legible específica de esta ocurrencia. Puede localizarse vía Accept-Language. |
trace_id |
Sí | ID de correlación para búsqueda en bitácora. Inclúyalo en solicitudes de soporte. |
instance |
A veces | Ruta de la solicitud. |
errors |
A veces | Errores de validación a nivel de campo (objeto con clave por ruta de campo punteada). Presente en 400/422. |
Convención de nombres de código
{NAMESPACE}-{DOMINIO}-{NÚMERO}. Tres namespaces:
| Namespace | Origen | Ejemplos |
|---|---|---|
DB-* |
Originado en los procedimientos almacenados de SQL Server + lógica de negocio | DB-FX-410, DB-TRF-048 |
GW-* |
Originado en una pasarela / integración externa | GW-STC-001 (pasarela stablecoin) |
CLIENT-* |
Originado en la capa cliente / SDK / red | CLIENT-NET-001 |
El segmento DOMINIO agrupa por área de negocio: FX, TRF (transferencias), WAL (billeteras), CUS (clientes), CMP (cumplimiento), TRD (trading), PAD (Padrón Electoral), MNX (Monex broker externo), AML (anti-lavado de dinero), BRG (pasarela fiat stablecoin), BRI (capa de pasarela stablecoin).
Los rangos de número dentro de un dominio siguen convenciones flexibles:
| Rango | Significado típico |
|---|---|
0xx–1xx |
Conflictos de persistencia / concurrencia |
2xx–3xx |
Búsqueda / no-encontrado / transición de estado |
4xx |
Validación / campo-requerido / formato |
5xx |
Configuración / setup |
6xx–9xx |
Reglas de negocio específicas del dominio |
Guía de reintentos
Bandera retryable |
Comportamiento del cliente |
|---|---|
✓ (sí) |
Seguro reintentar con la misma Idempotency-Key. Use backoff exponencial (1s → 2s → 4s → 8s, tope 30s) + jitter. Limite reintentos a 5 intentos. |
— (no) |
No reintente — la misma llamada producirá el mismo error. Resuelva la causa raíz (corrija la solicitud, contacte soporte, etc.) antes de cualquier nuevo intento. |
La bandera retryable abajo refleja la categoría del error mismo. Los problemas de capa de red (5xx, 429) son siempre reintentables sin importar el error_code subyacente. Vea Idempotencia para la matriz completa de decisión de reintentos.
Catálogo por dominio
El catálogo abajo se genera desde <azure-iac>/registry/errors/namespaces/*.yaml y se mantiene en sincronía vía la pipeline de codegen del registro. Si encuentra un código en producción que falta aquí, abra un ticket de soporte — códigos no documentados son un bug de deriva de documentación.
CLIENT-NET — Cliente / red
| Código | HTTP | Categoría | Reintentable | Título |
|---|---|---|---|---|
CLIENT-NET-001 |
503 | infra | ✓ | Network unavailable |
DB-AML — AML / cumplimiento
| Código | HTTP | Categoría | Reintentable | Título |
|---|---|---|---|---|
DB-AML-701 |
422 | business | — | Falla en verificación AML (paso directo de error crudo de SQL Server; detail lleva los detalles) |
DB-STC — stablecoin / pasarela fiat
DB-CMP — Cumplimiento / KYC
DB-CUS — Clientes
DB-FX — Órdenes FX + cotizaciones
DB-MNX — Monex / broker externo
| Código | HTTP | Categoría | Reintentable | Título |
|---|---|---|---|---|
DB-MNX-201 |
404 | business | — | Operation not found |
DB-MNX-202 |
422 | business | — | Operation not pending reversal |
DB-PAD — Padrón Electoral
| Código | HTTP | Categoría | Reintentable | Título |
|---|---|---|---|---|
DB-PAD-000 |
409 | conflict | — | Duplicate national ID |
DB-PAD-001 |
422 | business | — | Invalid district code combination |
DB-TRD — Trading / valores
DB-TRF — Transferencias
DB-WAL — Billeteras + saldos
GW-STC — Pasarela stablecoin
Nota sobre títulos en inglés. Los títulos arriba se mantienen en inglés porque el
detailytitleretornados en el response también están en inglés actualmente; localizar este catálogo por separado introduciría deriva. Cuando ARi habilite localización del response víaAccept-Language, este catálogo se traducirá automáticamente.
Resumen de códigos de estado HTTP
| Estado | Significado | Ejemplos de códigos |
|---|---|---|
400 |
Falla a nivel de esquema (la solicitud está mal formada) | DB-FX-411, DB-FX-417 |
401 |
Autenticación falló (clave de suscripción inválida o auth upstream rechazada) | GW-STC-001, GW-STC-009 |
403 |
Prohibido (alcance ausente, violación de separación de funciones) | DB-CMP-502, DB-CUS-004, GW-STC-003 |
404 |
Recurso no encontrado | DB-CUS-001, DB-TRD-102, DB-TRF-021 |
409 |
Conflicto de concurrencia O Idempotency-Key reutilizada con cuerpo distinto |
DB-TRD-109, DB-TRF-050, DB-FX-111 |
422 |
Bien formado pero semánticamente inválido (la mayoría de errores de dominio) | DB-FX-410, DB-TRF-048, GW-STC-004 |
428 |
Precondición requerida (KYC con documentos pendientes) | GW-STC-005 |
429 |
Limitado por tasa | GW-STC-002 (upstream); límites de nivel APIM en el borde |
502 |
Falla de pasarela upstream | GW-STC-006 |
503 |
Servicio / red no disponible | CLIENT-NET-001 |
La distinción 400 vs 422 importa para codegen de SDK de socio: violaciones de esquema oneOf son 400 (el cuerpo de la solicitud no encaja con el contrato); violaciones de regla de negocio en una solicitud bien formada son 422 (el cuerpo es válido pero la operación no puede proceder).
Errores a nivel de campo
Cuando un 400 o 422 incluye fallas de validación por campo, aparecen en el objeto errors con clave por ruta de campo punteada:
{
"status": 400,
"error_code": "DB-FX-417",
"detail": "FX order missing required fields",
"errors": {
"parameters.origin_currency": ["origin_currency is required"],
"parameters.destination_currency": ["destination_currency must be 3 characters"]
}
}Itere Object.keys(response.errors) para obtener una lista plana de nombres de campo; cada valor es un arreglo de strings con mensajes de validación para ese campo.
Qué registrar en errores
Cada respuesta de error incluye trace_id. Siempre regístrelo del lado cliente. Cuando contacte soporte, incluya el trace_id en su mensaje — es la ruta más rápida a una resolución porque ARi puede consultar inmediatamente las trazas distribuidas desde ese ID.
Forma de línea de log recomendada:
[ERROR] api={endpoint} status={status} error_code={error_code} trace_id={trace_id} attempt={n}/{max}Vea también
- Autenticación — esquema RFC 7807, mecánica de
trace_id - Idempotencia — matriz de decisión de reintentos por código de estado
- Sandbox — IBANs de prueba determinísticos que ejercitan códigos de error específicos
- Órdenes FX, Transferencias, Broker — ejemplos específicos de uso de errores por dominio