Peru Holiday API
Peru has 16 public holidays and — unlike Colombia or Chile — none of them shift to Monday: DL 713 (art. 7, as amended by Ley 26331) observes every national holiday on its calendar date. What does change is the list itself — Congress added four new holidays between 2022 and 2023. The API stays current.
Free plan includes commercial use · no credit card required
Why Peru's calendar can't be hardcoded
Peru's holidays don't move — DL 713 (art. 7, amended by Ley 26331 in 1994) observes every national holiday on its calendar date. The catch is the list itself: Congress keeps adding holidays by law, so a list copied from a 2020 blog post is missing four non-working days.
Every national holiday is observed on its actual date, even on weekends. In 2026, Santa Rosa de Lima (Aug 30) and Todos los Santos (Nov 1) fall on Sunday — no replacement Monday.
Batalla de Arica (Jun 7), Día de la Fuerza Aérea (Jul 23), Batalla de Junín (Aug 6, Ley 31530) and Batalla de Ayacucho (Dec 9) were all declared between 2022 and 2023 — from 12 holidays to 16 in two years.
Inmaculada Concepción (Dec 8) and Batalla de Ayacucho (Dec 9) fall back-to-back — a 3-business-day week in peak season, plus Navidad two weeks later.
API response for Peru
The API returns each holiday on its official date. October 8th, a Thursday, is Combate de Angamos — not a business day, and no Monday is affected.
{
"success": true,
"data": [
{
"date": "2026-12-08",
"name": "Inmaculada Concepción",
"type": "national",
"irrenunciable": false
},
{
"date": "2026-12-09",
"name": "Batalla de Ayacucho",
"type": "national",
"irrenunciable": false
},
{
"date": "2026-12-25",
"name": "Navidad",
"type": "national",
"irrenunciable": true
}
],
"meta": { "country": "PE", "year": 2026, "total": 16 }
} {
"success": true,
"data": {
"date": "2026-10-08",
"is_business_day": false,
"day_of_week": "Thursday"
},
"meta": { "country": "PE" }
}
// Oct 8 is Combate de Angamos — observed on its date, Thursday included Endpoints for Peru
Replace :country with PE.
Free plan includes holidays, is-business-day, and next-holiday.
/v1/PE/holidays/:year Free All public holidays for Peru on their official dates, including the ones recently added by law (Jun 7, Jul 23, Aug 6, Dec 9).
"date": "2026-08-06", "name": "Batalla de Junín" /v1/PE/is-business-day?date=YYYY-MM-DD Free Check if a date is a business day in Peru. Holidays count on their actual date — even the ones your hardcoded list doesn't know about yet.
"is_business_day": false (Oct 8) / true (Oct 12) /v1/PE/business-days/add?date=YYYY-MM-DD&days=N Developer Add N business days, skipping weekends and Peruvian holidays. December 2026 has 20 business days, with Dec 8–9 back-to-back.
"result_date": "2026-12-18" /v1/PE/business-days/between?from=YYYY-MM-DD&to=YYYY-MM-DD Developer Count business days between two dates in Peru. April 2026 has 20 (Jueves + Viernes Santo). December has 20 — three holidays, two of them consecutive.
"business_days": 20 /v1/PE/first-business-day?date=YYYY-MM-DD Developer First business day of the month. Useful for monthly kickoffs and reporting cycles.
"first_business_day": "2026-12-01" /v1/PE/last-business-day?date=YYYY-MM-DD Developer Last business day of the month. December 2026 has holidays on Dec 8, 9, and 25 — but Dec 31 falls on a working Thursday.
"last_business_day": "2026-12-31" The stale-list trap
Peru added four national holidays between 2022 and 2023. Any holiday list copied before that — a gist, an npm package, an old blog post — silently treats Jun 7, Jul 23, Aug 6 and Dec 9 as business days.
const API = "https://api.feriados.io/v1";
const KEY = process.env.FERIADOS_API_KEY;
// ❌ Wrong: a holiday list copied in 2020 — missing four holidays
const staleHolidays = [
// "2026-06-07" — Batalla de Arica: declared in 2023
// "2026-07-23" — Día de la Fuerza Aérea: declared in 2023
// "2026-08-06" — Batalla de Junín: declared in 2022 (Ley 31530)
// "2026-12-09" — Batalla de Ayacucho: declared in 2022
];
// ✅ Correct: the API tracks new holidays as they become law
async function addBusinessDays(date, days) {
const res = await fetch(
`${API}/PE/business-days/add?date=${date}&days=${days}`,
{ headers: { Authorization: `Bearer ${KEY}` } }
);
const { data } = await res.json();
return data.result_date;
}
// Add 5 business days from Oct 7 — correctly skips Thursday Oct 8
const result = await addBusinessDays("2026-10-07", 5);
// → "2026-10-15" (Combate de Angamos, observed on its actual date) Common use cases for Peru
December is the highest-risk month — three holidays, two of them back-to-back (Dec 8–9) in peak season.
Payments scheduled for Thursday October 8th will fail — it's Combate de Angamos. A stale holiday list won't warn you. The API gives you the right answer.
is-business-day Free December delivery estimates in Peru need to account for three holidays, including two consecutive days (Dec 8–9) right in peak season.
business-days/add Developer Payroll in Peru needs actual worked days. April 2026 has 20 business days, December has 20 — not 23. And the holiday list itself changes by law.
business-days/between Developer Legal deadlines in Peru run in business days. New holidays declared mid-year by Congress can silently break your SLA counter — the API keeps it current.
business-days/between Developer Also available for 10 more LATAM countries
Same API, same endpoints — just swap the country code.
Ready for production
Free API key in 30 seconds. Free plan includes is-business-day for Peru with commercial use.
Developer plan from $5/mo for full operational logic.