Comparison · Holiday APIs for LATAM

feriados.io vs Nager.Date

Nager.Date is a free, open-source holiday data API — great for prototyping. feriados.io is a business calendar engine: it calculates deadlines, counts working days, and handles LATAM-specific rules that Nager.Date doesn't model.

The core difference

Nager.Date tells you which days are holidays. feriados.io tells you which days are holidays and what to do with that information — add business days to a date, count working days between two dates, find the last business day of the month.

If your product just needs to display a holiday calendar, Nager.Date works fine and costs nothing. If your product processes payroll, calculates delivery dates, enforces SLAs, or validates payment dates — you need date arithmetic, and Nager.Date has none of that.

The IsTodayPublicHoliday gotcha

Nager.Date's closest equivalent to an is-business-day endpoint is IsTodayPublicHoliday. It has two significant limitations: it only works for today, and it returns an HTTP status code instead of a JSON response.

Nager.Date — checking if a date is a holiday
// Only works for TODAY — not arbitrary dates
const res = await fetch(
  "https://date.nager.at/api/v3/IsTodayPublicHoliday/CL"
);

// Returns HTTP 200 if today is a holiday
// Returns HTTP 204 (no body) if it's not
// No JSON. No date field. No holiday name.
// Can't check 2026-09-18 — only "today"

// Also: doesn't check weekends.
// Saturday returns 204 → "not a holiday" ✓
// But Saturday is still not a business day.
feriados.io — any date, full JSON
// Works for any date — past or future
const res = await fetch(
  "https://api.feriados.io/v1/CL/is-business-day" +
  "?date=2026-09-18",
  { headers: { Authorization: `Bearer ${KEY}` } }
);
const { data } = await res.json();

// data.is_business_day → false
// data.is_holiday       → true
// data.holiday.name     → "Fiestas Patrias"
// data.holiday.irrenunciable → true
// Checks both holidays AND weekends.

Feature comparison

Feature feriados.io Nager.Date
Holiday data by country
Next public holiday Both support this
Check if today is a holiday Nager returns a status code, not JSON ✓ (HTTP 200/204)
Check if any date is a business day Nager only checks today, not arbitrary dates
Checks weekends + holidays together Nager's check is holidays only
Add N business days to a date Not available in Nager.Date
Subtract N business days Not available in Nager.Date
Count business days between dates Not available in Nager.Date
Last business day of the month Not available in Nager.Date
Batch date validation Not available in Nager.Date
Chile irrenunciable flag feriados.io-specific field
Colombia Ley Emiliani (verified shifted dates) Nager has CO data but LATAM-specific rules not documented Partial
Argentina decree puentes (near real-time) Open-source update cadence varies Unclear
Live iCal subscription ✓ Team+
Custom business calendars ✓ Starter+
Webhook alerts for legislative changes ✓ Business
Authentication required Nager is open — no API key, no SLA
Uptime SLA Community-hosted, best effort ✓ 99.9% Business
Price Free → $9/mo Free
LATAM countries Coverage overlaps, accuracy differs 11 11+

When to choose each

Choose feriados.io if:
  • You need to calculate deadlines, delivery dates, or SLAs in business days
  • You process payments or run scheduled jobs that must skip holidays
  • You need to validate arbitrary dates — not just today
  • You need the Chile irrenunciable flag for HR or payroll
  • You need verified Ley Emiliani dates for Colombia
  • You need real-time Argentina decree monitoring
  • Your product needs an uptime SLA
  • You're scaling and need predictable rate limits and support
Choose Nager.Date if:
  • You only need to display a list of holidays — no date arithmetic
  • You're prototyping and want zero setup (no API key required)
  • Your use case doesn't require checking arbitrary past or future dates
  • You need holiday data for countries outside Latin America
  • Budget is zero and basic accuracy is acceptable

Migrating from Nager.Date

The main changes are: add an Authorization header, swap the parameter order in the URL, and update the response field names. All endpoints you already use have a direct equivalent.

In Nager.Date In feriados.io What changes
GET /api/v3/AvailableCountries GET /v1/countries Add Authorization header.
GET /api/v3/PublicHolidays
/{year}/{countryCode}
GET /v1/{country}/holidays/{year} Country moves before year in path. Response: data[].name (was localName). Adds irrenunciable field.
GET /api/v3/NextPublicHolidays
/{countryCode}
GET /v1/{country}/next-holiday Returns one holiday (the next one) instead of the full upcoming list. Adds days_until field.
GET /api/v3/IsTodayPublicHoliday
/{countryCode}
(HTTP 200 / 204, no JSON)
GET /v1/{country}/is-business-day
?date=YYYY-MM-DD
Works for any date. Returns JSON. Checks weekends + holidays. Adds is_business_day, day_of_week, holiday.
Not available POST /v1/{country}/business-days/add
?fromDate=...&days=N
New. Add N business days to a date.
Not available POST /v1/{country}/business-days/between
?fromDate=...&toDate=...
New. Count business days between two dates.
Not available GET /v1/{country}/last-business-day
?date=YYYY-MM-DD
New. Last business day of the month.
Minimal diff — updating a holidays fetch
// Before (Nager.Date) — no auth needed
const res = await fetch(
  "https://date.nager.at/api/v3/PublicHolidays/2026/CL"
);
const holidays = await res.json();
// holidays[0].date, holidays[0].localName, holidays[0].name

// After (feriados.io)
const res = await fetch(
  "https://api.feriados.io/v1/CL/holidays/2026",
  { headers: { Authorization: `Bearer ${process.env.FERIADOS_API_KEY}` } }
);
const { data: holidays } = await res.json();
// holidays[0].date, holidays[0].name, holidays[0].irrenunciable

Try feriados.io free

Free API key in 30 seconds. 1,000 requests/month with commercial use. Business day endpoints from $9/mo.

Also comparing: vs Calendarific · vs Holiday API →