Códigos de error y la envoltura de error

Una sola forma en todas las rutas: type, code, message, param, doc_url, request_id y errors.

Una sola forma en todas las rutas: type, code, message, param, doc_url, request_id y errors.

← Volver a la documentación de la API

Tu primera factura en 6 pasos

  1. Todos los 4xx y 5xx devuelven { "error": { type, code, message, param?, doc_url, request_id, errors? } }.
  2. Ramifica sobre type para decidir si tiene sentido reintentar, y mapea code en tu propio sistema.
  3. param señala el campo erróneo, p. ej. lines.0.vat_rate; errors[] aparece cuando hay varios.
  4. Registra request_id en cada error: nos permite encontrar la petición exacta en nuestros logs.

Qué es la API de 4invoices

json
{
  "error": {
    "type": "invalid_request_error",
    "code": "validation_failed",
    "message": "Datele trimise nu sunt valide.",
    "param": "lines.0.vat_rate",
    "doc_url": "https://4invoices.net/ro/api-dezvoltatori#errors",
    "request_id": "req_8a893f2f33d4472da8d6e144",
    "errors": [
      { "param": "lines.0.vat_rate", "message": "VAT rate must be a percent (21), not a fraction", "type": "value_error" }
    ]
  }
}

https://api.4invoices.net/v1 · https://api.4invoices.net/v1/openapi.json

Errores

EstadoTipoCódigo
401authentication_errormissing_bearer_token
401authentication_errorunauthorized
403permission_errorforbidden
404not_found_errornot_found
409conflict_erroridempotency_key_reuse
409conflict_erroridempotency_in_progress
422invalid_request_errorvalidation_failed
422invalid_request_errorinvalid_json_number
502upstream_errorupstream_error
503service_unavailable_errorservice_unavailable

Errores frecuentes

  • rate_limit_error y los dos tipos upstream se pueden reintentar. authentication_error, permission_error e invalid_request_error no se resuelven reintentando.
  • También se devuelve un 404 para un id que pertenece a otro tenant: nunca confirmamos que existan datos de otra persona.
  • 409 idempotency_key_reuse significa que has reutilizado una clave con un cuerpo distinto. No lo fuerces: comprueba qué se emitió ya.
  • El doc_url de cada error apunta directamente a la sección de errores de esta documentación.
  • Los mensajes están en rumano porque la API atiende un flujo fiscal rumano; no analices message, ramifica sobre code.

Preguntas y respuestas para desarrolladores

¿Puedo confiar en los valores de code entre versiones?

Sí, code es estable y existe precisamente para eso. message es texto para personas y puede reformularse.

¿Qué debo hacer ante un 502 o un 503?

Reintenta con backoff exponencial. Son errores upstream o de disponibilidad temporal, no problemas de tu petición.

¿Por qué 422 y no 400 para datos no válidos?

422 indica un JSON bien formado pero semánticamente no válido, por ejemplo vat_rate como fracción. 400 se reserva para una petición mal formada.