Perú · 16 public holidays · observed on their actual dates

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.

DL 713 · Ley 26331
No Monday transfers

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.

New by law
The list keeps growing

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.

Edge case
December cluster

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.

GET /v1/PE/holidays/2026 (excerpt — December)
{
  "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 }
}
GET /v1/PE/is-business-day?date=2026-10-08
{
  "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.

GET /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"
GET /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)
GET /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"
GET /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
GET /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"
GET /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.

Node.js · Free plan
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.

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.