feriados.io es el motor de calendario operativo para Latinoamérica — días hábiles, plazos y feriados para 11 países en un solo endpoint. Todos los endpoints retornan JSON y soportan CORS.
https://api.feriados.io
Todos los planes requieren una API key, incluyendo el plan Free. Obtén la tuya gratis en feriados.io/register — sin tarjeta. Inclúyela en cada request:
Authorization: Bearer frd_tu_api_key
| Plan | Requests / mes | Identificación | Endpoints |
|---|---|---|---|
| Free | 1.000 | Por API key | holidays, is-business-day, next-holiday, batch, 1 calendario |
| Starter | 25.000 | Por API key | Free + business-days/add|subtract|between, last-business-day, 3 calendarios |
| Team | 100.000 | Por API key | Starter + iCal live (/calendar), 10 calendarios |
| Business | Fair use | Por API key | Team + alertas legislativas, calendarios ilimitados, SLA 99.9% |
Los headers X-RateLimit-Limit,
X-RateLimit-Remaining y
X-RateLimit-Reset
se incluyen en todas las respuestas.
Desde cero hasta un response exitoso en menos de dos minutos.
Obtén tu API key
Registrate en feriados.io/register — sin tarjeta. Tu key tiene el prefijo frd_ y aparece en el dashboard.
Haz el request
curl -H "Authorization: Bearer frd_tu_api_key" \
"https://api.feriados.io/v1/CL/is-business-day?date=2026-04-06" Interpreta la respuesta
{
"success": true,
"data": {
"date": "2026-04-06",
"is_business_day": true,
"day_of_week": "Monday",
"is_holiday": false,
"holiday": null
},
"meta": { "country": "CL" }
} Si is_business_day es false, el campo holiday describe el feriado.
Todos los endpoints retornan la misma estructura base:
{
"success": true,
"data": [ ... ],
"meta": {
"country": "CL",
"total": 18
}
} {
"success": false,
"error": {
"code": "INVALID_YEAR",
"message": "Year must be a number between 1900 and 2100.",
"status": 400
}
} Los errores más frecuentes durante la integración, con su causa y solución.
| HTTP | Código | Causa | Solución |
|---|---|---|---|
| 401 | UNAUTHORIZED | API key ausente o con formato incorrecto | Verificar que el header sea Authorization: Bearer frd_... |
| 403 | PLAN_UPGRADE_REQUIRED | El endpoint requiere un plan superior al actual | Ver la columna "Plan" en ¿Qué endpoint uso? o ver planes |
| 429 | RATE_LIMIT_EXCEEDED | Cuota mensual agotada | Esperar reset el 1ro del mes (00:00 UTC) o hacer upgrade. El header X-RateLimit-Reset indica la fecha exacta. |
| 400 | INVALID_COUNTRY | Código de país no soportado | Usar código ISO 3166-1 alpha-2 en mayúsculas (ej: CL, AR, CO). Ver lista completa. |
| 400 | INVALID_YEAR | Año fuera del rango soportado | El año debe estar entre 1900 y 2100. |
| 422 | BATCH_LIMIT_EXCEEDED | El array dates supera el límite del plan | Free permite hasta 31 fechas por batch. Starter, Team y Business hasta 366. |
{"success": false, "error": {"code": "...", "message": "...", "status": 4xx}} Guía rápida para identificar el endpoint correcto según tu caso de uso.
| Si necesitas… | Endpoint | Plan mínimo |
|---|---|---|
| Saber si hoy (o cualquier fecha) es día hábil | /is-business-day | Free |
| Verificar varias fechas a la vez (batch) | /is-business-day/batch | Free |
| Obtener el próximo feriado desde hoy | /next-holiday | Free |
| Listar todos los feriados del año | /holidays/:year | Free |
| Calcular fecha de vencimiento sumando N días hábiles | /business-days/add | Starter |
| Contar días hábiles entre dos fechas (SLA, contratos) | /business-days/between | Starter |
| Encontrar el último día hábil del mes | /last-business-day | Starter |
| Restar N días hábiles a una fecha | /business-days/subtract | Starter |
| Agregar días no laborables propios de tu empresa | POST /calendars | Starter |
| Aplicar tu calendario de empresa a cualquier cálculo de días hábiles | ?calendar=slug | Starter |
| Suscribir Google Calendar / Outlook a feriados en vivo | /calendar (iCal live) | Team |
| Encontrar el primer día hábil del mes | /first-business-day | Starter |
| Ver cuántas requests llevo consumidas este período | /usage | Free |
| Rotar o crear una nueva API key programáticamente | POST /keys | Free |
/v1/countries Retorna la lista de países soportados, su estado de disponibilidad y los endpoints disponibles para cada uno.
{
"success": true,
"data": [
{
"code": "CL",
"name": "Chile",
"status": "available",
"years_covered": { "from": 2020, "to": 2030 },
"endpoints": [
"/v1/CL/holidays/{year}",
"/v1/CL/holidays/{year}/{month}",
"/v1/CL/is-business-day",
"/v1/CL/next-holiday"
]
}
],
"meta": { "total": 11, "available": 11 }
} /v1/{country}/holidays/{year} Retorna todos los feriados del país indicado para el año indicado.
Cuándo usar este endpoint: mostrar un calendario, exportar a PDF, sincronizar con sistemas externos, auditorías.
Cuándo no usarlo: si necesitas calcular plazos, contar días hábiles entre fechas o determinar vencimientos, usa directamente /business-days/between o /business-days/add — manejan automáticamente puentes, feriados regionales y traslados de fecha, sin que tengas que descargar ni cachear el año completo.
| Parámetro | Tipo | Descripción |
|---|---|---|
| country | string | Código ISO 3166-1 alpha-2 (ej: CL, CO, PE) |
| year | número | Año entre 1900 y 2100. Rango confiable: desde 2000 en general, desde 2006 para MX. |
meta.warning indicando que la legislación pudo haber diferido.
GET /v1/UY/holidays/2026
{
"success": true,
"data": [
{ "date": "2026-01-01", "name": "Año Nuevo", "type": "national", "irrenunciable": true },
{ "date": "2026-01-06", "name": "Día de los Niños", "type": "national", "irrenunciable": false },
...
],
"meta": { "country": "UY", "year": 2026, "total": 15 }
}
GET /v1/MX/holidays/2004
{
"success": true,
"data": [ ... ],
"meta": {
"country": "MX", "year": 2004, "total": 8,
"warning": {
"code": "HISTORICAL_ACCURACY",
"message": "Holiday data for MX before 2006 may not reflect historical legislation. Results are calculated using current rules.",
"reliable_from": 2006
}
}
} Ver tabla completa: Chile 2026, Colombia, Perú, Uruguay y más países →
/v1/{country}/holidays/{year}/{month} Retorna los feriados del país indicado para un mes específico.
| Parámetro | Tipo | Descripción |
|---|---|---|
| country | string | Código ISO 3166-1 alpha-2 |
| year | número | Año entre 1900 y 2100. Rango confiable: desde 2000 (2006 para MX). |
| month | número | Mes entre 1 y 12 |
GET /v1/PY/holidays/2026/5
{
"success": true,
"data": [
{ "date": "2026-05-01", "name": "Día de los Trabajadores", "type": "national" },
{ "date": "2026-05-14", "name": "Víspera de la Independencia Nacional", "type": "national" },
{ "date": "2026-05-15", "name": "Independencia Nacional", "type": "national" }
],
"meta": { "country": "PY", "year": 2026, "month": 5, "total": 3 }
} /v1/{country}/is-business-day
Indica si una fecha es día hábil, considerando fines de semana y feriados del país indicado.
El parámetro region activa feriados subnacionales para CL y MX.
| Parámetro | Requerido | Descripción |
|---|---|---|
| date | Sí | Fecha en formato YYYY-MM-DD |
| region | No | Código ISO 3166-2 (ej: CL-AP, MX-JAL). Sin este parámetro solo aplican feriados nacionales. |
| Código | Región | Feriado | Fecha |
|---|---|---|---|
| CL-AP | Arica y Parinacota | Asalto y Toma del Morro de Arica | 7 jun |
| CL-NB | Ñuble | Día de la Región de Ñuble | 20 ago |
| CL-MA | Magallanes y Antártica | Día de la Región de Magallanes | 21 sep |
| Código | Estado | Feriados adicionales | Aplica a |
|---|---|---|---|
| MX-JAL | Jalisco | 5 may · 2do lun jun · 28 sep · 12 oct · 2 nov | Sector público estatal |
| MX-MEX | Estado de México | 2 mar · 5 may · 2 nov | Sector público estatal |
| MX-VER | Veracruz | 5 may · 21 oct | Sector público estatal |
GET /v1/CL/is-business-day?date=2026-09-18
{
"success": true,
"data": { "date": "2026-09-18", "is_business_day": false, "day_of_week": "Friday", "region": null },
"meta": { "country": "CL", "total": 1 }
}
GET /v1/CL/is-business-day?date=2026-06-07®ion=CL-AP
{
"success": true,
"data": { "date": "2026-06-07", "is_business_day": false, "day_of_week": "Sunday", "region": "CL-AP" },
"meta": { "country": "CL", "total": 1 }
}
GET /v1/MX/is-business-day?date=2026-05-05®ion=MX-JAL
{
"success": true,
"data": { "date": "2026-05-05", "is_business_day": false, "day_of_week": "Tuesday", "region": "MX-JAL" },
"meta": { "country": "MX", "total": 1 }
}
GET /v1/UY/is-business-day?date=2026-01-06
{
"success": true,
"data": { "date": "2026-01-06", "is_business_day": false, "day_of_week": "Tuesday", "region": null },
"meta": { "country": "UY", "total": 1 }
} Ver días hábiles por mes: Chile 2026, Colombia, Uruguay y más países →
/v1/{country}/is-business-day/batch Verifica si múltiples fechas son días hábiles en una sola llamada. Ideal para validar rangos de fechas, generar calendarios internos o procesar lotes de vencimientos sin acumular N requests HTTP.
| Campo | Requerido | Descripción |
|---|---|---|
| dates | Sí | Array de fechas en formato YYYY-MM-DD |
| calendar | No | Slug de un calendario personalizado para aplicar como overlay |
POST /v1/CL/is-business-day/batch
Content-Type: application/json
{
"dates": ["2026-09-18", "2026-09-19", "2026-09-21"]
}
{
"success": true,
"data": [
{ "date": "2026-09-18", "is_business_day": false, "day_of_week": "Friday" },
{ "date": "2026-09-19", "is_business_day": false, "day_of_week": "Saturday" },
{ "date": "2026-09-21", "is_business_day": true, "day_of_week": "Monday" }
],
"meta": {
"country": "CL",
"total": 3,
"business_days": 1,
"non_business_days": 2,
"requests_consumed": 3
}
} /v1/{country}/next-holiday Retorna el próximo feriado a partir de una fecha. Si no se indica fecha, usa el día de hoy.
| Parámetro | Requerido | Descripción |
|---|---|---|
| from | No | Fecha de inicio en formato YYYY-MM-DD. Default: hoy. |
GET /v1/PY/next-holiday?from=2026-03-14
{
"success": true,
"data": { "date": "2026-04-02", "name": "Jueves Santo", "type": "national", "days_until": 19 },
"meta": { "country": "PY", "from": "2026-03-14", "total": 1 }
} Ver próximos feriados: Chile, Colombia, Paraguay y más países →
/v1/{country}/calendar/{year} iCal
Retorna un archivo iCalendar (.ics) con todos los feriados del año.
Compatible con Google Calendar, Apple Calendar, Outlook, Notion Calendar y cualquier app que soporte RFC 5545.
BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Feriados API//feriados.io//ES CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-CALNAME:Feriados Chile 2026 BEGIN:VEVENT UID:20260101-cl-año-nuevo@feriados.io DTSTART;VALUE=DATE:20260101 SUMMARY:Año Nuevo END:VEVENT ... END:VCALENDAR
/v1/{country}/calendar iCal Team / Business URL de suscripción permanente. Siempre devuelve los feriados del año en curso. Requiere plan Team o Business.
403 PLAN_UPGRADE_REQUIRED.
Usa /calendar/{year} para descarga manual sin costo.
Endpoints que resuelven cálculos de calendario operativo directamente en la API — sin que tengas que implementarlos en tu código.
/v1/:country/business-days/add Suma N días hábiles a una fecha. Útil para calcular fechas de entrega, vencimientos o deadlines reales.
| Parámetro | Tipo | Descripción |
|---|---|---|
| date | string | Fecha de inicio en formato YYYY-MM-DD |
| days | número | Cantidad de días hábiles a sumar (1–365) |
GET /v1/CL/business-days/add?date=2026-09-18&days=5
{
"success": true,
"data": { "result_date": "2026-09-25" },
"meta": { "country": "CL", "start_date": "2026-09-18", "business_days_added": 5 }
} /v1/:country/business-days/subtract Resta N días hábiles a una fecha. Útil para calcular fechas límite hacia atrás desde un vencimiento.
| Parámetro | Tipo | Descripción |
|---|---|---|
| date | string | Fecha de referencia en formato YYYY-MM-DD |
| days | número | Cantidad de días hábiles a restar (1–365) |
GET /v1/CO/business-days/subtract?date=2026-12-31&days=3
{
"success": true,
"data": { "result_date": "2026-12-28" },
"meta": { "country": "CO", "start_date": "2026-12-31", "business_days_subtracted": 3 }
} /v1/:country/business-days/between Cuenta los días hábiles entre dos fechas, ambas inclusive. Útil para SLAs, cálculo de plazos contractuales o reportes de productividad. La respuesta incluye el desglose completo de días para que no necesites calcularlo tú.
| Parámetro | Tipo | Descripción |
|---|---|---|
| from | string | Fecha de inicio en formato YYYY-MM-DD |
| to | string | Fecha de término en formato YYYY-MM-DD (máx. 365 días desde from) |
| calendar | string | Slug de calendario personalizado — descuenta además tus días no laborables de empresa |
GET /v1/CL/business-days/between?from=2026-01-01&to=2026-01-31&calendar=mi-empresa
{
"success": true,
"data": {
"business_days": 17,
"total_calendar_days": 31,
"holidays": 2,
"custom_non_working": 2,
"weekends": 10
},
"meta": {
"country": "CL",
"from": "2026-01-01",
"to": "2026-01-31",
"calendar": "mi-empresa",
"quota_units_consumed": 31
}
} /v1/:country/last-business-day Retorna el último día hábil del mes de la fecha indicada. Útil para cierres contables, cortes de facturación y liquidaciones.
| Parámetro | Tipo | Descripción |
|---|---|---|
| date | string | Cualquier fecha del mes a consultar (YYYY-MM-DD) |
GET /v1/UY/last-business-day?date=2026-01-15
{
"success": true,
"data": { "last_business_day": "2026-01-30" },
"meta": { "country": "UY", "month": "2026-01" }
} /v1/:country/first-business-day Starter Retorna el primer día hábil del mes de la fecha indicada. Complemento de /last-business-day. Útil para nóminas, apertura de períodos contables y programación de pagos de inicio de mes.
| Parámetro | Tipo | Descripción |
|---|---|---|
| date | string | Cualquier fecha del mes a consultar (YYYY-MM-DD) |
GET /v1/CO/first-business-day?date=2026-03-15
{
"success": true,
"data": { "first_business_day": "2026-03-02" },
"meta": { "country": "CO", "month": "2026-03" }
}
Crea calendarios propios para agregar días no laborables específicos de tu empresa o sector — cierres de planta, ferias, vacaciones colectivas — y aplícalos sobre cualquier endpoint de días hábiles mediante el parámetro ?calendar=slug.
| Plan | Calendarios | Fechas futuras por calendario |
|---|---|---|
| Free | 1 | 10 |
| Starter | 3 | Ilimitadas |
| Team | 10 | Ilimitadas |
| Business | Ilimitados | Ilimitadas |
/v1/calendars Crea un nuevo calendario personalizado. El slug debe ser único para tu cuenta y solo puede contener letras, números y guiones.
| Campo (body JSON) | Requerido | Descripción |
|---|---|---|
| name | Sí | Nombre descriptivo del calendario |
| slug | Sí | Identificador único (ej: planta-norte) |
curl -X POST https://api.feriados.io/v1/calendars \
-H "Authorization: Bearer frd_tu_key" \
-H "Content-Type: application/json" \
-d '{"name":"Planta Norte","slug":"planta-norte"}'
{
"success": true,
"data": {
"id": "01HZ...",
"name": "Planta Norte",
"slug": "planta-norte",
"created_at": "2026-04-04T12:00:00.000Z"
}
} /v1/calendars Lista todos los calendarios asociados a tu API key.
curl https://api.feriados.io/v1/calendars \
-H "Authorization: Bearer frd_tu_key"
{
"success": true,
"data": [
{ "id": "01HZ...", "name": "Planta Norte", "slug": "planta-norte", "date_count": 3 }
],
"meta": { "total": 1 }
} /v1/calendars/:slug Retorna los metadatos de un calendario específico junto con el conteo de fechas registradas.
curl https://api.feriados.io/v1/calendars/planta-norte \
-H "Authorization: Bearer frd_tu_key"
{
"success": true,
"data": { "id": "01HZ...", "name": "Planta Norte", "slug": "planta-norte", "date_count": 3 }
} /v1/calendars/:slug Elimina el calendario y todas sus fechas. Acción irreversible.
curl -X DELETE https://api.feriados.io/v1/calendars/planta-norte \
-H "Authorization: Bearer frd_tu_key"
{ "success": true } /v1/calendars/:slug/dates Agrega una o más fechas no laborables al calendario. Se pueden enviar hasta 100 fechas por request. El plan Free solo permite registrar fechas presentes o futuras, con un máximo de 10 fechas futuras activas.
| Campo (body JSON) | Requerido | Descripción |
|---|---|---|
| dates | Sí | Array de objetos con date (YYYY-MM-DD) y name opcional |
curl -X POST https://api.feriados.io/v1/calendars/planta-norte/dates \
-H "Authorization: Bearer frd_tu_key" \
-H "Content-Type: application/json" \
-d '{
"dates": [
{ "date": "2026-07-15", "name": "Mantención anual" },
{ "date": "2026-12-26", "name": "Cierre de año" }
]
}'
{
"success": true,
"data": { "added": 2, "skipped": 0 }
} /v1/calendars/:slug/dates Lista todas las fechas registradas en el calendario.
curl https://api.feriados.io/v1/calendars/planta-norte/dates \
-H "Authorization: Bearer frd_tu_key"
{
"success": true,
"data": [
{ "date": "2026-07-15", "name": "Mantención anual" },
{ "date": "2026-12-26", "name": "Cierre de año" }
],
"meta": { "total": 2 }
} /v1/calendars/:slug/dates/:date Elimina una fecha específica del calendario.
curl -X DELETE https://api.feriados.io/v1/calendars/planta-norte/dates/2026-07-15 \
-H "Authorization: Bearer frd_tu_key"
{ "success": true } /v1/calendars/:slug/dates/:date Actualiza el nombre de una fecha existente en el calendario sin necesidad de borrarla y recrearla.
| Campo | Tipo | Descripción |
|---|---|---|
| name | string | Nuevo nombre para la fecha (requerido) |
curl -X PUT https://api.feriados.io/v1/calendars/planta-norte/dates/2026-07-15 \
-H "Authorization: Bearer frd_tu_key" \
-H "Content-Type: application/json" \
-d '{ "name": "Mantención anual — turno A" }'
{
"success": true,
"data": { "date": "2026-07-15", "name": "Mantención anual — turno A" }
} ?calendar=slug
Agrega el parámetro calendar a cualquier endpoint de días hábiles para que las fechas de tu calendario sean tratadas como no laborables, además de los feriados oficiales del país.
Funciona en: /is-business-day, /business-days/add, /business-days/subtract, /business-days/between, /last-business-day.
# Verificar si una fecha es hábil considerando también la mantención
GET /v1/CL/is-business-day?date=2026-07-15&calendar=planta-norte
{
"success": true,
"data": { "date": "2026-07-15", "is_business_day": false, "day_of_week": "Wednesday", "region": null },
"meta": { "country": "CL", "calendar": "planta-norte", "total": 1 }
}
# Calcular 5 días hábiles a partir del cierre de planta
GET /v1/CL/business-days/add?date=2026-07-15&days=5&calendar=planta-norte
{
"success": true,
"data": { "result_date": "2026-07-23" },
"meta": { "country": "CL", "calendar": "planta-norte", "start_date": "2026-07-15", "business_days_added": 5 }
} /v1/usage Retorna el consumo de requests del período de facturación actual: total usado, límite del plan y fecha de reset. Útil para monitorear cuota sin depender de los headers de respuesta.
curl https://api.feriados.io/v1/usage \
-H "Authorization: Bearer frd_tu_key"
{
"success": true,
"data": {
"plan": "starter",
"requests_used": 1240,
"requests_limit": 50000,
"reset_at": "2026-05-01T00:00:00.000Z"
}
} /v1/keys Crea una nueva API key para la cuenta autenticada. Permite rotar keys programáticamente sin acceder al dashboard. La key anterior sigue válida hasta que la revoques con POST /v1/keys/revoke.
curl -X POST https://api.feriados.io/v1/keys \
-H "Authorization: Bearer frd_tu_key_actual"
{
"success": true,
"data": {
"key": "frd_nueva_key_xxxxxxxxxxxxxxxxxx",
"created_at": "2026-04-18T10:00:00.000Z"
}
} Ejecuta cualquier endpoint directamente desde aquí y mira la respuesta real.
Listos para copiar. Todos los ejemplos usan el endpoint más común: verificar si una fecha es día hábil.
# ¿Es día hábil?
curl -H "Authorization: Bearer frd_tu_key" \
"https://api.feriados.io/v1/CL/is-business-day?date=2026-04-03"
# Próximo feriado en Uruguay
curl -H "Authorization: Bearer frd_tu_key" \
"https://api.feriados.io/v1/UY/next-holiday"
# Todos los feriados de Paraguay 2026
curl -H "Authorization: Bearer frd_tu_key" \
"https://api.feriados.io/v1/PY/holidays/2026" Patrones comunes listos para adaptar.
Útil para crons de cobro, liquidaciones, notificaciones o cualquier proceso que no deba correr en feriados.
// Node.js
async function runIfBusinessDay(country, job) {
const today = new Date().toISOString().slice(0, 10);
const res = await fetch(
`https://api.feriados.io/v1/${country}/is-business-day?date=${today}`,
{ headers: { Authorization: `Bearer ${process.env.FERIADOS_API_KEY}` } }
);
const { data } = await res.json();
if (data.is_business_day) {
await job();
} else {
console.log(`Skipping — ${data.day_of_week} no hábil en ${country}`);
}
}
await runIfBusinessDay("CL", procesarPagos);
await runIfBusinessDay("UY", enviarLiquidaciones); Encontrar el próximo día hábil a partir de una fecha dada.
// Node.js — próximo día hábil a partir de una fecha
async function nextBusinessDay(fromDate, country = "CL") {
let date = new Date(fromDate + "T00:00:00");
for (let i = 0; i < 10; i++) {
const dateStr = date.toISOString().slice(0, 10);
const res = await fetch(
`https://api.feriados.io/v1/${country}/is-business-day?date=${dateStr}`,
{ headers: { Authorization: `Bearer ${process.env.FERIADOS_API_KEY}` } }
);
const { data } = await res.json();
if (data.is_business_day) return dateStr;
date.setDate(date.getDate() + 1);
}
}
const vencimiento = await nextBusinessDay("2026-09-18", "CL");
// → "2026-09-21" (Monday, because Sept 18 is Fiestas Patrias) Calcular cuándo llegará un pedido considerando feriados y fines de semana.
# Python — N días hábiles a partir de hoy
import requests
from datetime import date, timedelta
def add_business_days(start: date, days: int, country: str = "CL") -> date:
current = start
added = 0
while added < days:
current += timedelta(days=1)
r = requests.get(
f"https://api.feriados.io/v1/{country}/is-business-day",
params={"date": current.isoformat()},
headers={"Authorization": f"Bearer {API_KEY}"},
)
if r.json()["data"]["is_business_day"]:
added += 1
return current
# Entrega en 3 días hábiles desde hoy
entrega = add_business_days(date.today(), 3, "CL")
print(f"Fecha estimada de entrega: {entrega}") Los endpoints de calendario retornan un archivo iCalendar estándar compatible con cualquier aplicación.
¿Necesitas integrar feriados en tu app?
Empezar gratis →