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 →