Calendario de feriados
Los plazos de la propiedad industrial chilena se cuentan en días hábiles, así que el corpus mantiene el calendario de feriados legales para sus propios cálculos (ventanas de oposición, plazos de apelación). Esta guía cubre el endpoint que lo expone, para que puedas calcular esos mismos plazos por tu cuenta — y auditar los nuestros.
El esquema completo y siempre actualizado por campo vive en la referencia OpenAPI interactiva en
/docs(Scalar). Esta guía explica el contrato y enlaza a esa referencia — no reformula el esquema. Cuando un campo no está documentado aquí,/docses autoritativo.
A lo largo de la guía la URL base se escribe como $TARNO_BASE_URL y la clave como $TARNO_API_KEY,
y cada llamada lleva el encabezado X-API-Key.
GET /v1/feriados · scope insights:read · equivalente MCP: get_feriados
curl -sS "$TARNO_BASE_URL/v1/feriados?anio=2026" -H "X-API-Key: $TARNO_API_KEY"
[
{ "fecha": "2026-01-01", "nombre": "Año Nuevo", "tipo": "regular", "origen": "seed:reglas-permanentes" },
{ "fecha": "2026-04-03", "nombre": "Viernes Santo", "tipo": "regular", "origen": "seed:reglas-permanentes" }
]
| Parámetro | Qué hace |
|---|---|
anio |
Atajo para un año completo. |
desde / hasta |
Rango explícito (ISO YYYY-MM-DD), inclusive. Si los indicas, mandan sobre anio. |
tipo |
regular o excepcional (ver abajo). |
envelope |
true añade { data, coverage, dataAsOf }. |
Regulares frente a excepcionales
Cada fila declara si un algoritmo puede reproducirla:
regular— se deriva de las reglas permanentes: fechas fijas, computus de Pascua, los corrimientos a lunes/viernes de las leyes 19.668 y 20.299, y los feriados adicionales de Fiestas Patrias y Año Nuevo de las leyes 20.215 y 20.983 (si el 18 y 19 caen martes-miércoles hay feriado el lunes 17; miércoles-jueves, el viernes 20; sábado-domingo, el viernes 17; y si el 1 de enero cae domingo, el lunes 2).excepcional— creado por una ley ad-hoc para un solo día de un solo año, o por un decreto de elección. Ninguna regla lo produce: sólo se puede leer de una lista.
origen completa el cuadro diciendo de dónde salió esa fila concreta (Ley 20.215,
Ley 21.462, decreto:dia-de-eleccion, seed:reglas-permanentes). Un origen que empieza por
loader: señala una fila que puso el refresco automático, no una migración revisada.
Esta distinción no es teórica. El feriado del viernes 2024-09-20 faltaba en el calendario, y su ausencia rompía el techo legal de 15 días hábiles del plazo de apelación en 65 casos medidos. Un feriado ausente no se nota hasta que desplaza un plazo.
# ¿qué feriados no puede reproducir ningún cálculo automático?
curl -sS "$TARNO_BASE_URL/v1/feriados?tipo=excepcional" -H "X-API-Key: $TARNO_API_KEY"
La cobertura es finita — y es un dato, no una deducción
El calendario cubre un rango de años declarado explícitamente. Fuera de él no hay dato, y eso no significa que no haya feriados: significa que no lo sabemos. La diferencia no es académica — son cosas opuestas:
- no hay feriados en ese tramo → tu cuenta de días hábiles es correcta;
- ese tramo no está cargado → tu cuenta degrada a sólo-fines-de-semana y te da un plazo más largo del real, sin que nada falle. Ése es el error peligroso: le dirías a un abogado que tiene más tiempo del que tiene.
curl -sS "$TARNO_BASE_URL/v1/feriados/cobertura" -H "X-API-Key: $TARNO_API_KEY"
{ "from": "2013-01-01", "through": "2030-12-31" }
GET /v1/feriados/cobertura · scope insights:read · equivalente MCP: get_feriados_cobertura
Es barato y cacheable (Cache-Control: public, max-age=3600), así que si congelas el calendario en
tu repo puedes escribir este rango junto a los datos y que tu artefacto diga de qué años
responde.
No es el min/max de las filas, y esa es toda la gracia. El min/max describe lo que hay, no
lo que el calendario afirma: si un año entrara a medias —sólo Navidad, por ejemplo— el min/max diría
«cubro hasta ese 25 de diciembre» y congelarías un año al 5 % creyéndolo completo. El rango sólo
avanza cuando un año está entero, y por eso termina el 31 de diciembre del último año
declarado y no el día del último feriado.
Pedir fuera del rango es un error, nunca una lista vacía
curl -sS "$TARNO_BASE_URL/v1/feriados?desde=2031-01-01&hasta=2031-12-31" -H "X-API-Key: $TARNO_API_KEY"
{
"error": {
"code": "fuera_de_cobertura",
"message": "El calendario cubre 2013-01-01 → 2030-12-31; el rango pedido lo excede.",
"requestId": "…",
"coverage": { "from": "2013-01-01", "through": "2030-12-31" }
}
}
HTTP 422. Nunca un 200 con lista vacía o parcial. El rango viaja dentro del error, así que
no necesitas una segunda llamada para saber contra qué chocaste. En MCP el mismo caso devuelve un
resultado de error con el mismo code y el mismo coverage.
Dos detalles del contorno:
- Un extremo abierto no es un error.
?desde=2030-12-01acota con lo que haya; sólo se comprueban los límites que indicas explícitamente. - Dentro del rango, vacío significa vacío.
?desde=2026-02-01&hasta=2026-02-28devuelve[]con un 200 porque febrero de 2026 no tiene feriados, y eso es un dato fiable.
Si prefieres una sola llamada, ?envelope=true trae la misma cobertura declarada junto a los datos:
{ "data": [ … ], "coverage": { "desde": "2013-01-01", "hasta": "2030-12-31" }, "dataAsOf": "…" }
Cada cuánto se actualiza
Un trabajo semanal refresca la ventana de hoy a dos años vista: da de alta los feriados
nuevos (una ley ad-hoc suele publicarse con pocas semanas de aviso) y retira los que dejan de
serlo — el caso típico es una elección que se mueve de la fecha planificada a la celebrada. Fuera de
esa ventana el calendario sólo cambia por una migración revisada. dataAsOf en el sobre te dice
cuándo se tocó el corpus por última vez.
Un matiz que conviene conocer si calculas plazos a mucha distancia: los feriados regulares se derivan de las reglas permanentes y por eso cubren la ventana entera, pero los excepcionales sólo se detectan hasta donde llegan las fuentes públicas que los publican — hoy algo más de un año. Para cualquier plazo en curso sobra: el más largo del sistema son 30 días hábiles.