caf_expired
The folio range’s vigencia ended; the SII rejects documents drawn from an expired CAF.
The folio range’s vigencia ended; the SII rejects documents drawn from an expired CAF.
| Code | caf_expired |
| Type | unprocessable_error — Well formed, but breaks a domain rule |
| HTTP | 422 |
| Retriable? | No |
What to do
A CAF is valid for six calendar months from its <FA> (Resolución Exenta SII N° 58 de 2017). Nothing was emitted and no folio was spent. Request folios for this tipo, then annul the unused ones of the expired range at the SII: Servicios online → Factura electrónica → Sistema de facturación de mercado → Timbraje electrónico → Anular folios. Five unused CAFs block further timbraje, so the annulment is not optional.
Retrying the same request will fail the same way. Change the request, not the frequency.
The envelope
{
"error": {
"type": "unprocessable_error",
"code": "caf_expired",
"message": "…",
"hint": "A CAF is valid for six calendar months from its `<FA>` (Resolución Exenta SII N° 58 de 2017). Nothing was emitted and no folio was spent. Request folios for this tipo, then annul the unused ones of the expired range at the SII: Servicios online → Factura electrónica → Sistema de facturación de mercado → Timbraje electrónico → Anular folios. Five unused CAFs block further timbraje, so the annulment is not optional.",
"retriable": false,
"doc_url": "https://docs.facturia.cl/errors/caf_expired",
"request_id": "req_01K2R7Q9M4T2VB"
}
}Program against code, never against message — the prose can be rewritten, the code cannot (§5.8).
hint and retriable arrive in the response with these exact values: they are a function of code and come from the same dictionary GET /v1/error_codes serves, so the envelope and the dictionary cannot disagree. Both are English on the wire by design — one registry, one language. More in The error envelope.
See also
Every code
The error envelope
The machine-readable copy of this page lives at GET /v1/error_codes, unauthenticated.