Todos los error codes
Referencia completa de cada error code de la API pública, agrupado por bounded context, con su estado HTTP y type.
Esta es la referencia canónica de todos los code de error que puede devolver la API pública, agrupados por el bounded context que los emite. Cada code es estable entre versiones; el message es solo para mostrar. El total y la agrupación se generan del catálogo en vivo.
Cuenta
| Code | Type | HTTP | Descripción |
|---|---|---|---|
account_not_found | not_found_error | 404 | No se pudo resolver la cuenta asociada a la clave, lo que suele significar que la clave ya no apunta a una empresa viva. |
api_key_already_revoked | invalid_request_error | 422 | La clave ya estaba revocada, y una clave revocada no admite más operaciones: la revocación es terminal. |
api_key_not_found | not_found_error | 404 | El identificador no corresponde a ninguna API key de la empresa autenticada. |
Autenticación
| Code | Type | HTTP | Descripción |
|---|---|---|---|
api_key_expired | authentication_error | 401 | La clave pasó su fecha de caducidad. |
api_key_revoked | authentication_error | 401 | La clave fue revocada, y una clave revocada no vuelve a autenticar nunca: revocar es justamente la forma de cortar una credencial filtrada. |
invalid_api_key | authentication_error | 401 | La clave no corresponde a ninguna clave activa. Puede estar mal copiada, truncada, o pertenecer a otro entorno: las claves de prueba y las de producción no son intercambiables. |
ip_not_allowed | authentication_error | 401 | La clave restringe las direcciones que acepta, y la petición llegó desde una que no está en esa lista. |
missing_api_key | authentication_error | 401 | La petición no lleva credenciales: ni cabecera Authorization ni X-API-Key. |
origin_not_allowed | authentication_error | 401 | La petición viene de un origen de navegador que la clave no acepta. |
too_many_auth_failures | authentication_error | 429 | Llegaron demasiados intentos fallidos de autenticación desde la misma dirección, así que queda bloqueada temporalmente para frenar los intentos de adivinar credenciales. |
Autorización
| Code | Type | HTTP | Descripción |
|---|---|---|---|
addon_not_active | authorization_error | 403 | La funcionalidad pertenece a un add-on que ahora mismo no está activo para la empresa. |
feature_not_available_in_plan | authorization_error | 403 | La funcionalidad no está incluida en el plan de la empresa. |
forbidden_action | authorization_error | 403 | La acción está bloqueada para este recurso aunque el scope sea el correcto: el recurso pertenece a un catálogo compartido, o el cambio va por otro endpoint. |
insufficient_scope | authorization_error | 403 | La clave autentica correctamente pero no lleva el scope que exige esta operación. Los scopes se conceden al emitir la clave y no se amplían en tiempo de llamada. |
max_api_keys_exceeded | authorization_error | 422 | La empresa alcanzó el número de API keys que permite su plan. |
max_webhook_endpoints_exceeded | authorization_error | 422 | La empresa alcanzó el número de endpoints de webhook que permite su nivel de add-on. |
module_not_available_in_sandbox | authorization_error | 403 | El recurso pertenece a un módulo vetado en modo test. La sandbox nunca toca AEAT, bancos ni cobros reales, así que esos módulos quedan fuera a propósito. |
scope_not_allowed_by_plan | authorization_error | 422 | Uno de los scopes pedidos pertenece a un módulo que el plan no incluye, así que la clave nacería con un permiso que nunca podría ejercer. |
scope_not_allowed_in_sandbox | authorization_error | 422 | Una clave de prueba no puede nacer con scopes de módulos vetados en sandbox. |
Clientes
| Code | Type | HTTP | Descripción |
|---|---|---|---|
alternative_id_type_invalid | invalid_request_error | 422 | El tipo de identificador alternativo queda fuera del catálogo nif_iva, passport, country_id, residence_certificate, other_document, not_registered. |
cannot_have_both_tax_id_and_alternative_id | invalid_request_error | 422 | El cliente envía tax_id y un identificador alternativo a la vez. La identidad fiscal es una: el identificador alternativo existe precisamente para partes sin NIF español. |
census_requires_tax_id | invalid_request_error | 422 | La verificación censal contrasta el par nombre + NIF contra la AEAT, y falta uno de los dos. |
client_has_documents | invalid_request_error | 422 | El cliente está referenciado por documentos emitidos. Borrarlo dejaría facturas, presupuestos o albaranes sin la parte a la que se emitieron, y los registros fiscales tienen que seguir siendo trazables. |
client_import_too_large | invalid_request_error | 422 | El CSV supera el límite de filas que admite la importación síncrona, ya que el fichero entero se procesa dentro de la propia petición. |
client_not_found | not_found_error | 404 | El identificador no resuelve a ningún cliente de la empresa autenticada. |
client_requires_tax_identity | invalid_request_error | 422 | El cliente no tiene identidad fiscal: ni tax_id ni identificador alternativo, y no se puede emitir una factura a una parte sin identificar. |
direct_debit_requires_default_bank_account | invalid_request_error | 422 | Se eligió domiciliación bancaria como método de pago, pero el cliente no tiene cuenta bancaria por defecto a la que cargar. |
tax_id_already_exists | conflict_error | 409 | Otro cliente de la empresa ya tiene ese NIF, y el NIF identifica a la parte sin ambigüedad dentro de una empresa. |
Empresas
| Code | Type | HTTP | Descripción |
|---|---|---|---|
company_inactive | authorization_error | 403 | El perfil que indica X-Active-Profile es una de tus empresas gestionadas, pero está desactivada y no se puede operar hasta que vuelva a estar activa. |
gestoria_module_required | authorization_error | 403 | La gestoría tiene un plan vigente, pero sin el módulo de gestoría, así que no puede crear ni operar empresas gestionadas. |
gestoria_plan_required | payment_required_error | 402 | La gestoría no tiene una suscripción de pago activa, así que no hay suscripción sobre la que cobrar el asiento. |
payment_method_required | payment_required_error | 402 | Dar de alta una empresa gestionada cobra un asiento de inmediato, y la gestoría opera en modo real sin método de pago configurado. |
seat_charge_failed | payment_required_error | 402 | El cobro inmediato del prorrateo del asiento fue rechazado: la tarjeta se denegó, necesita autenticación, o el proveedor de pago estaba inaccesible. La empresa no se crea si el asiento no se cobra. |
Albaranes
| Code | Type | HTTP | Descripción |
|---|---|---|---|
delivery_note_not_found | not_found_error | 404 | El identificador no resuelve a ningún albarán de la empresa autenticada. |
delivery_note_section_not_editable_in_status | invalid_request_error | 422 | La sección logística —transportista, vehículo, conductor— está congelada porque el albarán ya está entregado, facturado o cancelado. |
driver_tax_id_requires_name | invalid_request_error | 422 | Se envió el NIF del conductor sin su nombre, y un identificador sin nombre no identifica a nadie en el documento de entrega. |
signature_payload_too_large | invalid_request_error | 422 | La imagen de la firma supera el tamaño admitido para el campo. |
Empleados
| Code | Type | HTTP | Descripción |
|---|---|---|---|
employee_seat_charge_failed | payment_required_error | 402 | El cobro inmediato del prorrateo del asiento de empleado fue rechazado: la tarjeta se denegó, necesita autenticación, o el proveedor de pago estaba inaccesible. El empleado no se activa si el asiento no se cobra. |
employee_seat_payment_method_required | payment_required_error | 402 | Dar de alta o reactivar un empleado cobra un asiento de inmediato, y la empresa opera en modo real sin método de pago configurado. |
Events
| Code | Type | HTTP | Descripción |
|---|---|---|---|
event_not_found | not_found_error | 404 | El identificador no corresponde a ningún evento de la empresa autenticada, o el evento fue purgado por la política de retención de 30 días. |
Idempotency
| Code | Type | HTTP | Descripción |
|---|---|---|---|
idempotency_key_in_use | idempotency_error | 409 | Hay otra petición con la misma Idempotency-Key todavía en curso, y aún no se conoce su resultado. |
idempotency_key_invalid | invalid_request_error | 400 | La Idempotency-Key no encaja con el formato admitido: entre 1 y 255 caracteres ASCII imprimibles. |
idempotency_key_reused | idempotency_error | 409 | Esa Idempotency-Key ya se usó con un payload distinto. La clave identifica una operación concreta, así que reutilizarla para otra vaciaría de sentido el replay. |
Facturas
| Code | Type | HTTP | Descripción |
|---|---|---|---|
corrective_invoice_inanulable | invalid_request_error | 422 | La factura es a su vez una rectificativa, y las rectificativas nunca se anulan: la cadena de corrección tiene que seguir siendo auditable de punta a punta. |
export_limit_exceeded | invalid_request_error | 422 | La selección filtrada supera el tope de 5.000 facturas de la exportación, así que el fichero se rechaza de entrada en lugar de truncarse en silencio. |
invalid_correction_nature | invalid_request_error | 422 | correction_nature solo acepta S (sustitución: la rectificativa lleva los importes corregidos completos) o I (por diferencias: lleva solo el delta). |
invalid_correction_reason | invalid_request_error | 422 | El motivo de rectificación queda fuera de la lista fiscal cerrada (error_fundado, concurso, incobrable, error_importe, error_cliente, devolucion, descuento, otras), que mapea a los códigos AEAT R1 a R4. |
invalid_invoice_id | invalid_request_error | 400 | La referencia de factura recibida no es un identificador válido; suele significar que se coló un valor interno donde la API espera el id público. |
invalid_invoice_number | invalid_request_error | 422 | El número de factura no sigue el formato canónico SERIE-AAAA-NNN, más el sufijo -RECn en las rectificativas. |
invalid_invoice_status | invalid_request_error | 422 | El valor enviado como estado de factura queda fuera del catálogo del ciclo de vida (draft, scheduled, sent, paid, overdue, cancelled, annulled). |
invalid_invoice_uuid | invalid_request_error | 400 | El identificador de factura de la ruta o del payload no es un UUID válido. |
invalid_payment_method | invalid_request_error | 422 | El método de pago queda fuera de la allowlist cerrada: bank_transfer, cash, credit_card, sepa_direct_debit, paypal, bizum, other. |
invoice_already_annulled | invalid_request_error | 422 | La factura ya estaba anulada. La anulación es terminal y, con VeriFactu activo, su registro de anulación ya llegó a la AEAT. |
invoice_already_paid | invalid_request_error | 422 | La factura ya está cobrada. paid es un estado terminal y contablemente cerrado: el IVA repercutido ya se ha declarado, o se declarará en el período. |
invoice_already_sent | invalid_request_error | 422 | La factura ya fue emitida: tiene número definitivo de serie y, con VeriFactu activo, su alta en la AEAT. La emisión no ocurre dos veces. |
invoice_cannot_assign_number | invalid_request_error | 422 | Se pidió número definitivo para una factura que no es borrador, o que ya lo tiene. La numeración de serie es monótona y los números no se reasignan. |
invoice_invalid_status_transition | invalid_request_error | 422 | El estado destino no es alcanzable desde el actual. El ciclo de vida es dirigido: draft pasa a scheduled o sent, sent a paid, overdue o annulled, y paid, cancelled y annulled son terminales. |
invoice_not_cancellable_in_current_state | invalid_request_error | 422 | Cancelar retira un borrador que todavía no es fiscalmente vinculante, así que solo aplica mientras la factura está en draft. |
invoice_not_correctable_in_current_state | invalid_request_error | 422 | Una rectificativa solo se emite contra una factura ya emitida (sent o paid). Un borrador, una factura cancelada o una anulada no tienen nada que rectificar. |
invoice_not_deletable_in_current_state | invalid_request_error | 422 | Solo se borran las facturas en draft y cancelled. Una factura numerada nunca desaparece: la serie correlativa debe seguir siendo auditable. |
invoice_not_editable_in_current_state | invalid_request_error | 422 | Solo un borrador admite edición. Una vez emitida, la factura es inmutable y su contenido queda congelado junto con su registro fiscal. |
invoice_not_eligible_for_action | invalid_request_error | 422 | La acción solicitada no aplica a esta factura: su tipo o su estado actual la dejan fuera del alcance de la operación. |
invoice_not_found | not_found_error | 404 | El identificador no resuelve a ninguna factura de la empresa autenticada. Las facturas de otra empresa responden exactamente igual. |
invoice_not_modifiable_in_current_state | invalid_request_error | 422 | El campo que intentas cambiar está congelado para el estado actual — por ejemplo el régimen fiscal de una factura anulada. |
invoice_not_paid | invalid_request_error | 422 | Se pidió un justificante de pago de una factura sin cobro registrado, así que no hay nada que certificar. |
invoice_not_reschedulable_in_current_state | invalid_request_error | 422 | Reprogramar mueve la fecha de emisión de una factura que está esperando en scheduled, y esta factura no está esperando. |
invoice_not_schedulable_in_current_state | invalid_request_error | 422 | Solo un borrador se puede programar: la programación reserva un momento futuro de emisión sin consumir todavía número de serie. |
invoice_not_unschedulable_in_current_state | invalid_request_error | 422 | Desprogramar devuelve la factura de scheduled a draft, así que solo aplica mientras sigue esperando a emitirse. |
invoice_not_unsendable_in_current_state | invalid_request_error | 422 | Deshacer la marca de entrega solo aplica a una factura sent: limpia sent_at y mantiene la factura emitida. |
invoice_requires_at_least_one_line | invalid_request_error | 422 | La factura no lleva ninguna línea de operación, así que no tiene base imponible y no se puede emitir. Ocurre cuando no envías líneas y cuando todas las que envías son de suplido: un suplido es una cantidad pagada por cuenta del cliente (art. 78.Tres.3 LIVA), no una operación tuya. |
invoice_year_required_for_ambiguous_number | invalid_request_error | 422 | Ese número de factura existe en más de un ejercicio, así que por sí solo no identifica una única factura. |
line_total_checksum_mismatch | invalid_request_error | 422 | El line_total declarado no coincide con el que calcula Factuarea para esa línea (cantidad × precio − descuento + IVA − retención + recargo) y la desviación supera el céntimo de tolerancia. El importe que se factura y se declara a la AEAT es siempre el calculado aquí, así que la discrepancia significa que tu sistema y la factura emitida no cuadrarían. |
line_type_invalid | invalid_request_error | 422 | El tipo de línea queda fuera del catálogo cerrado NORMAL / SUPLIDO. Una factura emitida sólo distingue dos naturalezas: lo que vendes tú, que forma base imponible y lleva IVA, y el suplido, que es dinero adelantado en nombre y por cuenta del cliente y por eso queda fuera de la base (art. 78.Tres.3 LIVA). |
no_invoices_in_period | invalid_request_error | 422 | La operación trimestral no encontró facturas en el período pedido, así que no hay nada que empaquetar ni enviar. |
payment_method_invalid | invalid_request_error | 422 | La misma allowlist cerrada que invalid_payment_method, reportada cuando el valor se rechaza al leer el campo de método de pago del payload. |
reminder_not_applicable | invalid_request_error | 422 | El recordatorio de pago no procede: la factura no está en sent ni overdue, no hay email de destinatario, falta el enlace público o está desactivado, o ya salió otro recordatorio en las últimas 24 horas. |
scheduled_for_in_past | invalid_request_error | 422 | scheduled_for no es estrictamente futuro, así que no hay ninguna espera que reservar. |
simplified_invoice_cannot_be_substituted | invalid_request_error | 422 | Una de las facturas de la lista de sustitución no se puede sustituir: no es simplificada, está cancelada o anulada, pertenece a otra empresa, o ya tiene sustitutiva. |
simplified_invoice_not_allowed | invalid_request_error | 422 | La operación no es elegible para factura simplificada: supera los 3.000 €, o es una entrega intracomunitaria, una exportación, una operación con inversión del sujeto pasivo, o el cliente necesita factura completa para deducir el IVA. |
simplified_limit_exceeded | invalid_request_error | 422 | Las líneas llevarían la factura simplificada (F2) por encima del tope legal absoluto de 3.000 € IVA incluido. |
suplido_line_cannot_carry_taxes | invalid_request_error | 422 | La línea de suplido lleva carga propia: tipo de IVA, retención, recargo de equivalencia, descuento, clave de régimen, causa de exención o producto/pack. Un suplido no es una operación del emisor, así que repercutir un impuesto sobre él sería tributar por una entrega que no has hecho, y ligarlo a un producto movería un stock que nunca has vendido. |
suplido_not_allowed_in_simplified_invoice | invalid_request_error | 422 | La factura es simplificada (F2) y una simplificada no identifica al destinatario. Sin destinatario identificado no hay a quién acreditar el pago por cuenta ajena, así que el importe no admite el tratamiento de suplido en este tipo de factura. |
suplido_requires_source_invoice_reference | invalid_request_error | 422 | La línea de suplido no informa source_invoice_reference, el número del justificante que el tercero expidió a nombre del cliente. Sin ese justificante el pago no se acredita como hecho por cuenta ajena y Hacienda lo trataría como base imponible propia del emisor, con su IVA repercutido. |
Notificaciones
| Code | Type | HTTP | Descripción |
|---|---|---|---|
notification_not_found | not_found_error | 404 | El identificador no corresponde a ninguna notificación de la empresa autenticada, o la notificación quedó fuera de la ventana de retención. |
Pagos
| Code | Type | HTTP | Descripción |
|---|---|---|---|
invalid_payment_date | invalid_request_error | 422 | La fecha de pago queda fuera de la ventana admitida: no puede ser anterior a la fecha de emisión de la factura ni situarse en el futuro. |
payout_reconciliation_amount_mismatch | invalid_request_error | 422 | El importe confirmado no coincide con el neto de la liquidación, así que la conciliación cerraría con una diferencia que nadie justifica. |
receipt_not_available | invalid_request_error | 422 | No hay justificante que emitir porque el documento no tiene ningún cobro registrado detrás. |
stripe_payout_already_reconciled | invalid_request_error | 422 | La liquidación ya estaba conciliada, y la conciliación es terminal: repetirla contabilizaría dos veces el apunte bancario. |
stripe_payout_not_found | not_found_error | 404 | El identificador no resuelve a ninguna liquidación de la empresa autenticada. |
Productos
| Code | Type | HTTP | Descripción |
|---|---|---|---|
pack_in_use | invalid_request_error | 422 | El pack está referenciado por documentos emitidos, así que borrarlo rompería su composición. |
pack_not_found | not_found_error | 404 | El identificador no resuelve a ningún pack de la empresa autenticada. |
pack_share_link_failed | api_error | 500 | No se pudo generar el enlace para compartir el pack. El pack en sí no queda afectado. |
product_in_use | invalid_request_error | 422 | El producto está referenciado por documentos emitidos o por otras entradas del catálogo, y eliminarlo dejaría esas referencias colgando. |
product_not_found | not_found_error | 404 | El identificador no resuelve a ningún producto de la empresa autenticada. |
sku_already_exists | conflict_error | 409 | Otro producto de la empresa ya usa ese SKU, y el SKU identifica al artículo sin ambigüedad dentro del catálogo. |
Facturas proforma
| Code | Type | HTTP | Descripción |
|---|---|---|---|
invalid_expiry_date | invalid_request_error | 422 | La fecha de vencimiento es anterior a la de emisión, o la supera en más de 365 días. |
invalid_proforma_id | invalid_request_error | 400 | La referencia de proforma recibida no es un identificador válido, normalmente porque un valor interno sustituyó al id público. |
invalid_proforma_number | invalid_request_error | 422 | El número de proforma no sigue el formato canónico de numeración de su serie. |
invalid_proforma_status | invalid_request_error | 422 | El valor enviado como estado queda fuera del catálogo draft, accepted, rejected, expired, invoiced, cancelled. |
invalid_proforma_uuid | invalid_request_error | 400 | El identificador de proforma de la ruta o del payload no es un UUID válido. |
proforma_already_accepted | invalid_request_error | 422 | El cliente ya aceptó la proforma, y la aceptación se registra una sola vez. |
proforma_already_rejected | invalid_request_error | 422 | La proforma ya está marcada como rechazada. |
proforma_cannot_be_accepted | invalid_request_error | 422 | La aceptación no procede desde el estado actual: una proforma facturada, cancelada o expirada ya no la admite. |
proforma_cannot_be_rejected | invalid_request_error | 422 | El rechazo no procede desde el estado actual: una vez facturada, cancelada o expirada, la proforma está cerrada. |
proforma_cannot_be_sent | invalid_request_error | 422 | El envío por email no aplica a una proforma en estado terminal: no hay oferta viva que entregar. |
proforma_invalid_status_transition | invalid_request_error | 422 | El estado destino no es alcanzable desde el actual: un borrador se acepta, se cancela o expira; una proforma aceptada se factura, se rechaza o expira; facturada, cancelada y expirada son terminales. |
proforma_not_convertible_in_current_state | invalid_request_error | 422 | Convertir en factura exige que el cliente haya aceptado la proforma; desde cualquier otro estado no hay acuerdo que facturar. |
proforma_not_deletable_in_current_state | invalid_request_error | 422 | Solo se borra una proforma en borrador. Una vez aceptada, rechazada o facturada forma parte del rastro comercial. |
proforma_not_draft | invalid_request_error | 422 | La operación solo tiene sentido mientras la proforma es un borrador, y esta ya ha avanzado. |
proforma_not_editable_in_current_state | invalid_request_error | 422 | Solo una proforma en borrador admite edición. Una vez aceptada, rechazada, expirada, facturada o cancelada, su contenido queda fijado. |
proforma_not_found | not_found_error | 404 | El identificador no resuelve a ninguna proforma de la empresa autenticada. |
proforma_requires_at_least_one_line | invalid_request_error | 422 | La proforma no lleva líneas, así que no hay importe que poner delante del cliente. |
public_link_expires_at_exceeds_max_days | invalid_request_error | 422 | La caducidad pedida para el enlace público supera la ventana máxima que permite tu plan para documentos compartidos. |
Facturas de compra
| Code | Type | HTTP | Descripción |
|---|---|---|---|
attachment_invalid_filename | invalid_request_error | 422 | El nombre del fichero no es utilizable: está vacío, lleva componentes de ruta, o supera los 200 caracteres. |
attachment_mime_not_allowed | invalid_request_error | 422 | El tipo de fichero queda fuera del conjunto admitido: PDF, PNG, JPEG, XML y HTML. |
attachment_missing | not_found_error | 404 | La factura de compra existe pero no tiene fichero adjunto, así que no hay nada que descargar. |
attachment_too_large | invalid_request_error | 422 | El fichero supera el tamaño máximo permitido para un adjunto de documento. |
cannot_attach_to_cancelled_purchase_invoice | invalid_request_error | 422 | La factura está cancelada, y adjuntar documentos a un registro cancelado alteraría documentación ya cerrada. |
invalid_purchase_invoice_id | invalid_request_error | 400 | La referencia de factura de compra recibida no es un identificador válido, normalmente porque un valor interno sustituyó al id público. |
invalid_purchase_invoice_number | invalid_request_error | 422 | El número de factura está vacío o no encaja con el formato admitido. En una factura de compra el número es el que imprimió el proveedor, no uno que genere Factuarea. |
invalid_purchase_invoice_uuid | invalid_request_error | 400 | El identificador de factura de compra de la ruta o del payload no es un UUID válido. |
operation_regime_invalid | invalid_request_error | 422 | El régimen de operación queda fuera del catálogo general, intracomunitaria, importacion_exportacion, isp. |
purchase_invoice_already_exists | conflict_error | 409 | Ese proveedor ya tiene registrada una factura de compra con el mismo número. El par proveedor + número identifica el documento sin ambigüedad y evita contabilizar dos veces el mismo gasto. |
purchase_invoice_not_deletable_in_current_state | invalid_request_error | 422 | Solo se borran las facturas de compra en borrador o canceladas. Una pendiente o pagada forma parte del libro de gastos. |
purchase_invoice_not_draft | invalid_request_error | 422 | La operación solo aplica mientras la factura de compra es un borrador, y esta ya está registrada. |
purchase_invoice_not_editable_in_current_state | invalid_request_error | 422 | Solo se edita una factura de compra en borrador. Una vez registrada como pendiente, pagada o cancelada, su contenido respalda un apunte contable. |
purchase_invoice_not_found | not_found_error | 404 | El identificador no resuelve a ninguna factura de compra de la empresa autenticada. |
purchase_invoice_requires_at_least_one_line | invalid_request_error | 422 | La factura de compra no lleva líneas, así que no hay gasto ni IVA soportado que registrar. |
Presupuestos
| Code | Type | HTTP | Descripción |
|---|---|---|---|
quote_already_accepted | invalid_request_error | 422 | El presupuesto ya estaba aprobado, y la aprobación se registra una sola vez. |
quote_already_rejected | invalid_request_error | 422 | El presupuesto ya está marcado como rechazado. |
quote_expired | invalid_request_error | 422 | El presupuesto pasó su fecha de validez, así que las condiciones ofrecidas ya no vinculan y no se puede aprobar ni convertir tal cual. |
quote_not_found | not_found_error | 404 | El identificador no resuelve a ningún presupuesto de la empresa autenticada. |
Límite de tasa
| Code | Type | HTTP | Descripción |
|---|---|---|---|
monthly_quota_exceeded | rate_limit_error | 429 | La empresa agotó la cuota mensual de llamadas que incluye su plan. |
rate_limit_exceeded | rate_limit_error | 429 | La clave envió más peticiones de las que permite su ritmo en la ventana actual. |
Facturas recurrentes
| Code | Type | HTTP | Descripción |
|---|---|---|---|
invalid_frequency_interval | invalid_request_error | 422 | El intervalo es menor que 1, así que la recurrencia nunca avanzaría a una siguiente ejecución. |
invalid_frequency_type | invalid_request_error | 422 | La frecuencia queda fuera del catálogo daily, weekly, biweekly, monthly, bimonthly, quarterly, semiannual, annual, custom. |
invalid_holiday_handling | invalid_request_error | 422 | La política de festivos queda fuera del catálogo skip, before, after, same. |
invalid_recurring_invoice_id | invalid_request_error | 400 | La referencia de recurrencia recibida no es un identificador válido, normalmente porque un valor interno sustituyó al id público. |
invalid_recurring_invoice_uuid | invalid_request_error | 400 | El identificador de recurrencia de la ruta o del payload no es un UUID válido. |
recurring_already_active | invalid_request_error | 422 | La recurrencia ya está en marcha, así que no hay nada que activar. Código legacy conservado por compatibilidad: los endpoints actuales reportan esto como recurring_invoice_already_active. |
recurring_invoice_already_active | invalid_request_error | 422 | La recurrencia ya está en marcha. |
recurring_invoice_already_cancelled | invalid_request_error | 422 | La recurrencia ya estaba cancelada, y la cancelación es terminal. |
recurring_invoice_already_paused | invalid_request_error | 422 | La recurrencia ya está pausada, así que pausarla otra vez no cambia nada. |
recurring_invoice_cancelled_cannot_resume | invalid_request_error | 422 | Una recurrencia cancelada no se reanuda: la cancelación la cierra definitivamente, a diferencia de la pausa. |
recurring_invoice_cannot_run | invalid_request_error | 422 | La recurrencia no puede generar una factura ahora mismo: no está en marcha, su ciclo terminó, o le faltan datos que la factura necesita. error.message indica el motivo concreto. |
recurring_invoice_has_generated_invoices | invalid_request_error | 422 | La recurrencia ya generó facturas, y esas facturas dependen de ella para su trazabilidad. |
recurring_invoice_not_found | not_found_error | 404 | El identificador no resuelve a ninguna recurrencia de la empresa autenticada. |
recurring_invoice_requires_at_least_one_line | invalid_request_error | 422 | La recurrencia no lleva líneas, así que cada factura generada saldría vacía. |
recurring_not_active | invalid_request_error | 422 | La operación necesita una recurrencia en marcha y esta está pausada, completada o cancelada. Código legacy conservado por compatibilidad con integraciones antiguas. |
Request
| Code | Type | HTTP | Descripción |
|---|---|---|---|
business_rule_violation | invalid_request_error | 422 | Una invariante del dominio rechazó la operación. Este código indica la familia; error.subcode nombra la regla concreta y error.message la explica. |
conflicting_pagination_params | invalid_request_error | 422 | starting_after y ending_before viajaron en la misma petición. Recorren la colección en sentidos opuestos, así que solo puede aplicarse uno. |
external_id_already_exists | conflict_error | 409 | El external_id con el que concilias contra tu sistema ya está asignado a otro objeto del mismo tipo en esta empresa. |
invalid_param_format | invalid_request_error | 422 | Un form request legacy rechazó la forma de un valor. Los endpoints migrados reportan lo mismo como parameter_invalid_format o parameter_invalid_integer. |
invalid_param_value | invalid_request_error | 422 | Un form request legacy rechazó el valor de un campo. Los endpoints migrados reportan lo mismo como parameter_invalid_enum o parameter_invalid_range. |
invalid_status_transition | invalid_request_error | 422 | El estado solicitado no es alcanzable desde el estado en el que está ahora mismo el documento. |
length_required | invalid_request_error | 411 | Llegó una petición con body en codificación chunked, sin declarar su tamaño. La API necesita conocer la longitud por adelantado para rechazar payloads excesivos antes de cargarlos en memoria. |
metadata_too_many_keys | invalid_request_error | 422 | El objeto metadata supera el límite de 50 claves por recurso. |
metadata_value_too_long | invalid_request_error | 422 | Un valor de metadata supera los 500 caracteres una vez serializado a texto. |
method_not_allowed | invalid_request_error | 405 | La ruta existe pero no acepta el verbo HTTP utilizado. |
missing_required_param | invalid_request_error | 422 | Un form request legacy detectó que faltaba un campo obligatorio. Los endpoints ya migrados a los parsers canónicos reportan lo mismo como parameter_missing. |
parameter_invalid | invalid_request_error | 422 | Un value object construido a partir del payload rechazó el valor recibido. error.subcode dice cuál: código de impuesto, código de país, tipo impositivo, etc. |
parameter_invalid_boolean | invalid_request_error | 400 | Un parámetro que debe ser booleano recibió un valor fuera de las representaciones aceptadas (true/false, 1/0). |
parameter_invalid_cursor | invalid_request_error | 400 | El cursor starting_after o ending_before no es un UUID válido, así que no puede apuntar a ninguna fila de la colección. |
parameter_invalid_empty | invalid_request_error | 400 | Un parámetro llegó con el valor vacío: un filtro in sin elementos, una comparación sin nada tras el operador, o un filtro de igualdad con la cadena vacía. |
parameter_invalid_enum | invalid_request_error | 400 | El valor queda fuera del conjunto cerrado que acepta el parámetro. En los listados cubre además un operador de filtro distinto de eq, gte, lte, gt, lt, in o contains. |
parameter_invalid_format | invalid_request_error | 400 | El valor tiene el tipo correcto pero no la forma que exige el parámetro: una fecha, un patrón de identificador o una cabecera como Factuarea-Version. |
parameter_invalid_integer | invalid_request_error | 400 | Un parámetro que debe ser un número entero recibió algo que no se puede interpretar como tal, por ejemplo limit=abc. |
parameter_invalid_iso8601 | invalid_request_error | 400 | Un filtro de rango (gte, lte, gt, lt) recibió un valor que no es numérico ni una fecha ISO 8601. |
parameter_invalid_range | invalid_request_error | 400 | Un parámetro numérico quedó fuera de sus límites. El caso habitual es limit, que debe estar entre 1 y 100. |
parameter_invalid_string | invalid_request_error | 400 | Un parámetro que debe ser texto recibió un array, un objeto o un valor que no se puede leer como cadena. |
parameter_invalid_url | invalid_request_error | 400 | Un campo que debe contener una URL absoluta recibió un valor que no lo es, normalmente por faltarle el esquema o el host. |
parameter_invalid_uuid | invalid_request_error | 400 | Un campo de identificador recibió un valor que no es un UUID válido. Todo id de recurso en v1 es un UUID. |
parameter_invalid_value | invalid_request_error | 422 | El valor es sintácticamente correcto pero no admisible para este recurso: fuera del catálogo canónico del campo, o incoherente con el resto del payload. |
parameter_missing | invalid_request_error | 400 | El endpoint exige un parámetro que la petición no llevaba. error.param dice cuál. |
parameter_unknown | invalid_request_error | 400 | La petición lleva un parámetro que el endpoint no acepta: un filtro fuera de su allowlist, un campo de sort no ordenable, o el page de paginación por offset — v1 pagina por cursor. |
payload_too_large | invalid_request_error | 413 | El body de la petición supera el tamaño admitido: 1 MB con carácter general, 6 MB en los endpoints que aceptan ficheros. |
profile_not_found | not_found_error | 404 | La cabecera X-Active-Profile nombra una empresa que no existe o que no pertenece al árbol de gestoría de la clave autenticada. Ambos casos responden igual para que la API nunca revele empresas de otros tenants. |
resource_already_exists | conflict_error | 409 | Crear el objeto duplicaría uno que ya existe bajo una clave única — NIF, SKU, external id. error.details.existing_resource_id apunta al objeto que ya ocupa ese valor. |
resource_conflict | conflict_error | 409 | La operación chocó con el estado actual del recurso y no aplica ningún código de conflicto más específico. |
resource_immutable | invalid_request_error | 422 | El objeto está cerrado a cambios para esta operación: su estado o su registro contable impiden modificarlo. |
resource_locked | conflict_error | 409 | Otra operación retiene el recurso hasta terminar: las escrituras concurrentes sobre el mismo objeto se serializan en lugar de entrelazarse. |
resource_not_deletable | invalid_request_error | 422 | El objeto existe, pero su estado o sus dependientes bloquean el borrado. En los borrados masivos este es el código por fila de cada entrada que no se pudo eliminar. |
resource_not_found | not_found_error | 404 | El identificador no resuelve a nada visible para la empresa autenticada. Los objetos de otra empresa responden exactamente igual, a propósito. |
route_not_found | not_found_error | 404 | La ruta no corresponde a ningún endpoint de v1. Suele ser una errata, un prefijo /v1 ausente o una ruta de otra área de la API. |
unknown_filter | invalid_request_error | 422 | Un listado recibió un filtro que no conoce. Los parsers canónicos de v1 reportan esto como parameter_unknown; este código sobrevive para los endpoints aún sin migrar. |
unsupported_api_version | invalid_request_error | 400 | La cabecera Factuarea-Version está bien formada pero nombra una versión fuera del conjunto soportado. |
unsupported_media_type | invalid_request_error | 415 | Una petición con body declaró un Content-Type distinto de application/json. |
Series
| Code | Type | HTTP | Descripción |
|---|---|---|---|
cannot_archive_last_default_series | invalid_request_error | 422 | La serie es la única activa de su tipo de documento. Archivarla dejaría a la empresa sin numeración disponible y congelaría ese tipo de documento. |
document_type_required_for_ambiguous_code | invalid_request_error | 422 | Ese código de serie existe para más de un tipo de documento, así que por sí solo no identifica una única serie. |
invalid_series_code | invalid_request_error | 422 | El código de la serie está vacío, es demasiado largo, o lleva caracteres que no corresponden a un prefijo fiscal. |
invalid_series_name | invalid_request_error | 422 | El nombre de la serie está vacío o supera la longitud permitida. |
invalid_series_number | invalid_request_error | 422 | El número inicial no es válido: no es un entero positivo, o queda en el último número ya emitido o por debajo, lo que reemitiría números ya consumidos. |
invalid_series_uuid | invalid_request_error | 400 | El identificador de serie de la ruta o del payload no es un UUID válido. |
invalid_series_year | invalid_request_error | 422 | El ejercicio no es un año de cuatro cifras válido para una serie de numeración. |
monthly_requires_month_segmented_format | invalid_request_error | 422 | El contador se reinicia cada mes pero la máscara de numeración no segrega por mes, así que dos meses arrancarían en el mismo correlativo y producirían números duplicados dentro del año. |
series_already_archived | invalid_request_error | 422 | La serie ya estaba archivada, y el archivado no se repite: una segunda llamada indica que el cliente ha perdido el estado real. |
series_code_immutable_with_documents | invalid_request_error | 422 | Cambiar el prefijo de una serie que ya emitió documentos reescribiría retroactivamente su identificador fiscal, mientras los clientes y la AEAT tienen el número original. |
series_has_documents | invalid_request_error | 422 | La serie ya numeró documentos, así que no se puede eliminar: la secuencia correlativa tiene que seguir siendo auditable. |
series_immutable | invalid_request_error | 405 | Las series no son editables ni eliminables vía API: la continuidad legal de la numeración exige que su prefijo, su año y su contador se queden como están. |
series_initial_number_creates_gap | invalid_request_error | 422 | El número inicial salta más allá del siguiente correlativo natural habiendo documentos del año en curso, y ese hueco en la secuencia no es admisible para la AEAT. |
series_locked_by_verifactu | invalid_request_error | 422 | Al menos una factura de la serie tiene un registro de facturación aceptado por la AEAT, lo que congela el prefijo, el año y la base de numeración de la serie. |
series_not_found | not_found_error | 404 | El identificador no resuelve a ninguna serie de numeración de la empresa autenticada. |
series_type_invalid | invalid_request_error | 422 | El tipo de documento de la serie queda fuera del catálogo invoice, quote, delivery_note, proforma, purchase_invoice, recurring_invoice. |
series_year_locked | invalid_request_error | 422 | La serie ya emitió documentos en su año vigente. Mover el año dejaría esos documentos apuntando a un ejercicio vacío mientras su base imponible está en otro. |
Servidor
| Code | Type | HTTP | Descripción |
|---|---|---|---|
dependency_unavailable | service_unavailable_error | 503 | Un servicio externo del que depende la operación no respondió a tiempo. |
face_transmission_failed | api_error | 502 | La plataforma FACe —el punto de entrada de las administraciones públicas— estaba inaccesible o respondió con un fallo. El problema está aguas arriba, no en tu petición. |
facturae_signing_failed | api_error | 500 | No se pudo producir la firma XAdES del fichero Facturae, normalmente porque el certificado de firma no es utilizable en ese momento. |
internal_error | api_error | 500 | Algo se rompió en nuestro lado al procesar la petición. La condición no la provoca tu payload. |
maintenance | service_unavailable_error | 503 | La plataforma está en ventana de mantenimiento y las escrituras se retienen a propósito. |
pdf_generation_failed | service_unavailable_error | 503 | El servicio de renderizado no pudo producir el PDF. El documento y sus datos están intactos: lo que falló es el fichero. |
register_sealing_failed | api_error | 500 | El sellado criptográfico del registro no se completó, así que el cierre quedó sin firmar en lugar de sellado con una firma rota. |
send_failed | api_error | 500 | El documento no se entregó por email: el proveedor de correo rechazó el mensaje o estaba inaccesible. |
service_unavailable | service_unavailable_error | 503 | El servicio, o una dependencia que necesita, no puede responder temporalmente. |
Proveedores
| Code | Type | HTTP | Descripción |
|---|---|---|---|
supplier_has_documents | invalid_request_error | 422 | El proveedor está referenciado por facturas de compra registradas, y borrarlo dejaría esos gastos sin la parte que los emitió. |
supplier_not_found | not_found_error | 404 | El identificador no resuelve a ningún proveedor de la empresa autenticada. |
Informes fiscales
| Code | Type | HTTP | Descripción |
|---|---|---|---|
insufficient_data_for_report | invalid_request_error | 422 | El período no tiene datos que declarar, o a una factura del período le falta un campo obligatorio para este modelo, típicamente el NIF del cliente. |
invalid_period | invalid_request_error | 422 | El período no identifica una declaración: el año queda fuera del rango admitido, o falta el trimestre o está fuera del rango 1 a 4 en un modelo trimestral. |
report_format_invalid | invalid_request_error | 422 | El formato queda fuera del catálogo txt_aeat, pdf, excel. |
tax_report_not_found | not_found_error | 404 | El identificador no resuelve a ninguna declaración de la empresa autenticada. |
tax_report_type_invalid | invalid_request_error | 422 | El tipo de declaración queda fuera del catálogo modelo_303, modelo_347, modelo_130. |
unsupported_format | invalid_request_error | 422 | El formato pedido no está disponible para este modelo: no toda declaración produce todas las salidas. |
Impuestos
| Code | Type | HTTP | Descripción |
|---|---|---|---|
custom_tax_creation_disabled | authorization_error | 403 | La creación de impuestos personalizados está deshabilitada para esta empresa. |
duplicate_tax_default_for_document_type | invalid_request_error | 422 | Ya hay otro impuesto del mismo tipo marcado como default para ese tipo de documento, y el par (tipo de impuesto, tipo de documento) admite un único default. |
indirect_tax_regime_invalid | invalid_request_error | 422 | El régimen indirecto queda fuera del catálogo iva, igic, ipsi. |
invalid_aeat_code | invalid_request_error | 422 | El código de operación AEAT queda fuera del catálogo cerrado S1, S2, S3, E1-E6, N1, N2 que usan VeriFactu y el SII. |
invalid_country_aeat_zone | invalid_request_error | 422 | La zona territorial AEAT queda fuera del catálogo peninsula, canarias, ceuta, melilla. |
invalid_country_code | invalid_request_error | 422 | El código de país no tiene exactamente dos caracteres, así que no es un código ISO 3166-1 alfa-2 válido. |
invalid_customer_visible_label | invalid_request_error | 422 | La etiqueta que se muestra al cliente en el documento supera la longitud permitida. |
invalid_description | invalid_request_error | 422 | La descripción supera la longitud máxima permitida para el campo. |
invalid_document_type | invalid_request_error | 422 | El tipo de documento queda fuera del catálogo: invoice, quote, delivery_note, proforma, purchase_invoice, recurring_invoice. |
invalid_rate_for_tax_regime | invalid_request_error | 422 | El tipo no pertenece a la rejilla legal de su régimen: el IGIC admite 0, 3, 5, 7, 9,5, 15 y 20 %; el IPSI admite 0, 0,5, 1, 2, 4, 8 y 10 %. |
invalid_tax_code | invalid_request_error | 422 | El código del impuesto está vacío o supera los 50 caracteres. |
invalid_tax_name | invalid_request_error | 422 | El nombre del impuesto está vacío o supera los 255 caracteres. |
invalid_tax_rate | invalid_request_error | 422 | El tipo impositivo queda fuera del rango permitido para su clase: IVA 0-27 %, retención 0-47 %, recargo de equivalencia 0-10 %, otros 0-100 %. |
invalid_tax_type_filter | invalid_request_error | 422 | El filtro type del listado por tipo lleva un valor fuera del enum vat, retention, surcharge, other. |
invalid_validity_window | invalid_request_error | 422 | La ventana de vigencia está invertida: valid_until es anterior a valid_from. |
system_tax_default_modification_forbidden | authorization_error | 403 | Los defaults de los impuestos del catálogo compartido no se fijan sobre el impuesto: el catálogo es global y la preferencia es de tu empresa. |
system_tax_immutable | invalid_request_error | 422 | El impuesto pertenece al catálogo canónico AEAT que trae el producto. Su tipo, su código y su nombre son fijos para que todas las empresas compartan la misma referencia fiscal. |
system_tax_immutable_field | invalid_request_error | 422 | La actualización toca un campo congelado en un impuesto del sistema; error.param dice cuál. |
system_tax_undeletable | invalid_request_error | 422 | Los impuestos del sistema forman parte del catálogo fiscal compartido y no se eliminan: borrarlos rompería los documentos que los referencian. |
tax_applies_to_invalid | invalid_request_error | 422 | El ámbito del impuesto queda fuera del catálogo sale, purchase, both. |
tax_code_already_exists | conflict_error | 409 | Otro impuesto del catálogo ya usa ese código, y el código identifica al impuesto sin ambigüedad. |
tax_id_required | invalid_request_error | 422 | La operación necesita el número de identificación fiscal (NIF, CIF o NIE) de la parte implicada y el registro no lo tiene. |
tax_in_use | invalid_request_error | 422 | El impuesto está referenciado por documentos, productos o proveedores. Eliminarlo dejaría documentos históricos sin su referencia fiscal. |
tax_inactive_cannot_be_default | invalid_request_error | 422 | Un impuesto desactivado no puede quedar como default, ni global ni por tipo de documento: sería un default oculto que ningún formulario puede elegir. |
tax_not_found | not_found_error | 404 | El identificador no corresponde a ningún impuesto del catálogo accesible para esta empresa. |
tax_type_invalid | invalid_request_error | 422 | El tipo de impuesto queda fuera del catálogo vat, retention, surcharge, other. |
VeriFactu
| Code | Type | HTTP | Descripción |
|---|---|---|---|
alta_record_not_found | not_found_error | 404 | La factura no tiene registro de alta, así que la operación que depende de él no tiene sobre qué trabajar. |
anulacion_record_already_exists | conflict_error | 409 | La factura ya tiene un registro de anulación en la cadena, y la anulación se declara una sola vez. |
certificate_expired | invalid_request_error | 422 | El certificado está fuera de su ventana de validez: ha caducado, o todavía no es válido. |
certificate_nif_mismatch | invalid_request_error | 422 | El NIF del titular del certificado no coincide con el de la empresa. Los registros AEAT se firman en nombre de la empresa, así que ambos deben ser el mismo. |
certificate_not_found | not_found_error | 404 | La empresa no tiene ningún certificado FNMT que corresponda al identificador, o no tiene ninguno subido. |
certificate_too_large | invalid_request_error | 422 | El fichero supera el límite de 100 KB, cuando un certificado FNMT real pesa unos pocos kilobytes. |
clock_drift_exceeded | invalid_request_error | 422 | El reloj del servidor se desvió del NTP por encima del margen permitido. La marca de tiempo de generación entra en la huella AEAT, así que un reloj desincronizado produciría registros que la AEAT rechaza. |
declaracion_already_exists | conflict_error | 409 | La empresa ya tiene presentada la declaración responsable del SIF de ese período. |
declaracion_not_found | not_found_error | 404 | La empresa no tiene presentada la declaración responsable del SIF del período solicitado. |
event_already_processed | invalid_request_error | 422 | Ese evento del SIF ya está registrado en la cadena de eventos, y cada evento se procesa exactamente una vez. |
invalid_certificate_format | invalid_request_error | 422 | El fichero no es un contenedor PKCS#12: sus primeros bytes no corresponden a la estructura ASN.1 que exige el formato, diga lo que diga la extensión. |
invalid_certificate_password | invalid_request_error | 422 | La contraseña no abre el fichero del certificado. |
max_retries_exceeded | invalid_request_error | 422 | El registro agotó el presupuesto de reintentos técnicos de reenvío del XML almacenado. Reintentar el mismo contenido volvería a fallar igual. |
mode_switch_blocked_until_year_end | invalid_request_error | 422 | El modo VeriFactu se activó en este ejercicio y ya se emitió al menos un registro de facturación. Dar marcha atrás degradaría la integridad de una cadena ya declarada a la AEAT. |
record_already_accepted | invalid_request_error | 422 | La AEAT ya aceptó el registro. La aceptación es terminal y su contenido queda congelado como parte de la cadena de huellas. |
record_immutable | invalid_request_error | 422 | El registro pertenece a un ledger de solo-adición: una vez escrito, su contenido fiscal queda cerrado a modificaciones y a borrado. |
record_not_rejected | invalid_request_error | 422 | La subsanación solo aplica a registros que la AEAT rechazó por datos. Este registro está en otro estado — un fallo técnico, por ejemplo, lo cubre el reintento automático. |
record_not_subsanable | invalid_request_error | 422 | El registro no se puede subsanar: no es un registro de alta, o no tiene factura de origen desde la que regenerar su contenido. |
requires_annulment | invalid_request_error | 422 | El contenido regenerado cambia un campo que entra en la huella —NIF del emisor, serie y número, fecha de expedición, tipo de factura, cuota o importe total— y la cadena no se puede reescribir. |
sii_excluded | invalid_request_error | 422 | La empresa está registrada en el SII, y los obligados al SII quedan excluidos del reglamento VeriFactu. |
verifactu_already_submitted | invalid_request_error | 422 | La factura ya tiene su registro de alta. Existe exactamente un alta por factura, así que una segunda rompería la idempotencia de la cadena. |
verifactu_mode_invalid | invalid_request_error | 422 | El modo queda fuera del catálogo verifactu / no_verifactu. |
verifactu_not_eligible | invalid_request_error | 422 | La factura no se puede registrar ahora mismo en la AEAT: la empresa no está en modo VeriFactu, no tiene certificado activo, o el certificado está revocado o emitido para otro NIF. |
verifactu_record_not_found | not_found_error | 404 | El identificador no corresponde a ningún registro de facturación de la empresa autenticada. |
verifactu_transmission_failed | invalid_request_error | 422 | El envío del registro a la AEAT no llegó a completarse: el endpoint estaba inaccesible o respondió con una incidencia. |
Webhooks
| Code | Type | HTTP | Descripción |
|---|---|---|---|
addon_required | payment_required_error | 402 | Crear endpoints de webhook pertenece al add-on Developer API, y la empresa no lo tiene activo: el nivel gratuito permite cero endpoints. |
api_version_invalid_format | invalid_request_error | 422 | La versión de payload del endpoint no es una fecha YYYY-MM-DD. |
api_version_unsupported | invalid_request_error | 422 | La versión de payload está bien formada pero no está entre las que sirve la plataforma. |
custom_header_blocklisted | invalid_request_error | 422 | Una de las cabeceras personalizadas está reservada: la gestiona la capa HTTP (host, content-type, content-length, user-agent), la envía Factuarea como parte del contrato firmado (factuarea-*), o pertenece al proxy (x-forwarded-*). |
custom_header_value_too_long | invalid_request_error | 422 | El valor de una cabecera personalizada supera los 1024 caracteres. |
replay_delivery_not_retryable | invalid_request_error | 422 | Solo se reenvían las entregas fallidas. Una entrega que llegó bien, o una todavía en curso, no tiene nada que reenviar. |
replay_event_expired | invalid_request_error | 422 | El evento que respalda la entrega fue purgado por la política de retención de 30 días, así que ya no queda payload que reenviar. |
timeout_seconds_out_of_range | invalid_request_error | 422 | timeout_seconds queda fuera del rango de 1 a 30 segundos. |
too_many_custom_headers | invalid_request_error | 422 | El endpoint declara más de 20 cabeceras personalizadas. |
webhook_delivery_not_found | not_found_error | 404 | El identificador no corresponde a ningún intento de entrega, o la entrega queda fuera de la ventana de retención del histórico. |
webhook_endpoint_degraded | invalid_request_error | 422 | El endpoint está degradado tras fallos repetidos de entrega, así que los pings de prueba se rechazan mientras siga en ese estado. |
webhook_endpoint_not_found | not_found_error | 404 | El identificador no resuelve a ningún endpoint de webhook de la empresa autenticada. |
webhook_secret_recently_rotated | rate_limit_error | 429 | El secreto de firma se rotó hace menos de cinco minutos. La ventana de gracia permite que tu receptor acepte ambos secretos durante el cambio; rotar otra vez dentro de ella invalidaría firmas todavía en vuelo. |