BuildNexion

Errores

La API responde con códigos HTTP estándar. Cualquier respuesta fuera del rango 2xx contiene un objeto error con código legible por máquina, mensaje en español para humanos y detalles opcionales.

Estructura

json
{
  "error": {
    "code": "validation_failed",
    "message": "El campo 'total_amount' es obligatorio.",
    "details": {
      "field":   "total_amount",
      "reason":  "missing"
    }
  }
}

Códigos HTTP

CódigoSignificadoCuándo
200OKOperación correcta.
201CreatedRecurso creado.
204No contentDELETE correcto, sin body.
400Bad requestJSON malformado o tipo incorrecto.
401UnauthorizedAPI key ausente o revocada.
403ForbiddenTu key no tiene el scope requerido.
404Not foundEl recurso no existe o no pertenece a tu organización.
409ConflictConflicto de estado (ej. factura duplicada).
422Validation failedLos datos pasan los tipos pero no las reglas de negocio.
429Too many requestsHas superado el rate limit.
500Server errorError interno. Reintenta con backoff.
503Service unavailableMantenimiento o sobrecarga. Reintenta.

Catálogo de códigos

error.codeHTTPDescripción
missing_api_key401Falta la cabecera Authorization.
api_key_revoked401La key se ha revocado desde el panel.
insufficient_scope403Tu key no incluye el scope requerido.
resource_not_found404El ID no existe en tu organización.
validation_failed422Un campo no cumple las reglas (ver details).
duplicate_resource409Ya existe un recurso equivalente (ej. factura con mismo nº y proveedor).
rate_limit_exceeded429Has superado tu cuota.
internal_error500Algo se rompió de nuestro lado. Reintenta.

Ejemplo: validación

json
HTTP/1.1 422 Unprocessable Entity

{
  "error": {
    "code": "validation_failed",
    "message": "Hay 2 campos con errores.",
    "details": {
      "fields": [
        { "field": "invoice_number", "reason": "required" },
        { "field": "total_amount",   "reason": "must_be_positive" }
      ]
    }
  }
}

Recomendaciones

  • No filtres por message en tu código — puede cambiar. Filtra siempre por error.code.
  • Loguea el X-Request-Id de las respuestas: nos lo pides al abrir un ticket y rastreamos el log al instante.
  • Si recibes 500 o 503, reintenta con backoff exponencial (1s, 2s, 4s…) hasta 3 veces.