Ir al contenido

Desarrolladores

Errores

Un código HTTP y un JSON con el motivo.

Formato

Los errores de autenticación, permisos y límites siguen el estándar RFC 9457 (Content-Type: application/problem+json):

{
  "type": "https://bm.consulting/en/developers/errors#forbidden_permission",
  "title": "Forbidden",
  "status": 403,
  "detail": "This token does not grant sales:invoices.read.",
  "code": "forbidden_permission",
  "required_permission": "sales:invoices.read",
  "error": "Forbidden"
}
CampoQué contiene
typeEnlace a la explicación del error en esta página.
title · statusNombre y código HTTP.
detailExplicación para personas, en inglés. Puede cambiar.
codeCódigo estable para programar contra él (tabla de abajo).
required_permissionEn forbidden_permission: el permiso que exige la ruta.
scope · windowEn rate_limited: el nivel que alcanzó el límite (token, acct o user) y la ventana (minute o month).
errorSiempre. Se mantiene por compatibilidad: el título, o el mensaje en los errores de validación.

Los errores de validación de cada operación (400, 404, 409, 422) llevan siempre error con el motivo; los que devuelve el núcleo de la API usan además el formato de arriba, con code igual a http_ más el código HTTP.

Códigos de la autenticación

codeHTTPCuándo
unauthorized401Falta el token, no existe, está desactivado o revocado, o ha caducado.
account_bound_not_allowed403La ruta no admite tokens ligados a la cuenta de un cliente.
forbidden_permission403El token no tiene el permiso de la ruta; va en required_permission.
ip_not_allowed403La petición no viene de una IP de la lista del token.
rate_limited429Se alcanzó un límite por minuto o la cuota mensual; ver window, scope y Retry-After.

Programa tu integración contra el código HTTP y el campo code. Los textos de detail y error están pensados para personas y pueden cambiar.

Códigos HTTP

CódigoSignificadoCuándo ocurre
400Petición mal formadaUn parámetro o el cuerpo no son válidos: JSON inválido, fecha que no es ISO, campo obligatorio ausente, importe con formato incorrecto.
401No autenticadoFalta el token, no existe, está desactivado o revocado, o ha caducado.
403ProhibidoEl token no tiene el permiso de la ruta (incluye required_permission), la ruta no admite tokens ligados a una cuenta, la IP no está permitida o el recurso pertenece a otra cuenta.
404No encontradoEl recurso no existe o pertenece a otra cuenta. La API no distingue ambos casos.
409ConflictoLa operación choca con un dato existente; por ejemplo, un identificador de liquidación ya registrado.
422No procesableEl JSON es válido pero un valor no cumple las reglas de negocio: campo obligatorio vacío, referencia desconocida.
429Demasiadas peticionesSe alcanzó un límite por minuto o la cuota mensual del token, de la cuenta o del usuario. Incluye Retry-After y las cabeceras X-RateLimit-*.
500Error internoFallo inesperado de BMC. Reintenta con espera; si persiste, escríbenos.
502 / 503Servicio no disponibleUn servicio del que depende la operación (por ejemplo, el almacenamiento de documentos) no responde. Reintenta con espera.

Cómo tratarlos

  • 400, 404, 409 y 422: corrige la petición. Reintentar igual no cambia el resultado.
  • 401: comprueba que el token siga activo y vigente; si no, crea o rota otro (Autenticación).
  • 403: añade el permiso que indica required_permission al token (Permisos) o comprueba la lista de IPs.
  • 429: espera los segundos de Retry-After (Límites de uso).
  • 5xx: reintenta con espera creciente y un número máximo de intentos.
Email
Contacto