Errores

Cada error dice qué pasó y, cuando es un dato, en qué campo. El formato es el estándar RFC 9457.

Los errores responden con Content-Type: application/problem+json (RFC 9457):

{
  "type": "invalid_request",
  "title": "La solicitud no es válida",
  "status": 422,
  "errors": [
    {
      "path": "lines.0.quantity",
      "message": "Un decimal no negativo con hasta 6 decimales"
    }
  ]
}
  • type es estable: úsalo en tu código. Es un identificador en inglés que no cambia; title, detail y los message de errors están en español, son para personas y pueden cambiar.
  • En los errores de validación, errors lista cada problema con la ruta del campo tal como la enviaste: lines.0.quantity es la cantidad de la primera línea.

Un campo desconocido nunca se ignora

Si envías un campo que no existe, no lo pasamos por alto: respondemos 422 con un error por cada campo desconocido, en su ruta.

{
  "type": "invalid_request",
  "title": "La solicitud no es válida",
  "status": 422,
  "errors": [
    { "path": "metdata", "message": "Campo desconocido" },
    { "path": "lines.0.auxiliary_cod", "message": "Campo desconocido" }
  ]
}

Ignorarlo sería peor: creerías que aceptamos un dato que nunca llegó al comprobante. Lo mismo con un campo que no te corresponde decidir, como environment (lo decide tu clave) o establishment al corregir (el número ya está tomado).

Tipos

typeEstadoQué significaQué hacer
invalid_request422Un dato no es válido o rompe una regla del SRICorrige el campo de errors y reintenta
unauthorized401Falta la clave API, no es válida o fue revocadaRevisa el encabezado Authorization
key_not_permitted403El permiso de tu clave no alcanza para esta operación: el detalle dice cuál hace faltaUsa una clave con ese permiso
forbidden403Solo una persona con rol owner o admin puede hacerlo desde la plataforma, como crear clavesHazlo desde la plataforma
not_found404No existe en tu organización y ambienteRevisa el id y la clave que usas
conflict409El Idempotency-Key ya se usó con otra venta, o el estado no permite la acciónUsa otra clave o revisa el estado
not_ready409Aún no puedes hacerlo: falta entidad, numeración o certificado, o el comprobante no está autorizadoCompleta lo que dice detail
plan_limit402Un negocio en vivo no puede emitir: su plan con cuota no permite otro comprobante de Producción este mes porque no tiene precio de adicionales o el adicional superaría el tope que pusiste (Scale nunca lo rechaza por cuota), no tiene plan (o lo canceló), no ha completado su primer pago o un cobro está vencido. También rechaza corregir o renumerar un comprobante de Pruebas o Producción. No se numeró nadaSube de plan, elige uno y paga, o paga el cobro vencido, y reintenta con la misma Idempotency-Key
authority_unavailable503El SRI no responde y no tenemos una respuesta guardadaReintenta en unos minutos
internal500Un error nuestro; queda registradoReintenta con la misma Idempotency-Key

El portal del receptor tiene tres más, para su código de acceso: invalid_code (401, con attempts_left), code_expired (401) y too_many_attempts (429).

Las reglas del SRI son errores de validación

Muchas reglas no son de formato sino del SRI, y las revisamos antes de numerar, para que el SRI no te devuelva el comprobante después:

  • Una factura de más de USD 50 no puede ir a consumidor final: el comprador debe identificarse.
  • Cada línea lleva exactamente un IVA.
  • La información adicional cabe en los 15 campos que permite el comprobante.
  • En una guía de remisión, el traslado no puede empezar antes de emitirla.

Un comprobante rechazado por estas reglas no consume número.

En esta página