🇨🇴 Colombia · 18 public holidays · Ley Emiliani included

Colombia Holiday API

Colombia has 18 public holidays — but 18 of them can shift to the following Monday under Ley Emiliani. The API returns the actual celebration date for each year, so you never have to implement that logic yourself.

Free plan includes commercial use · no credit card required

Why Colombia's calendar can't be hardcoded

Colombia's Ley 51 de 1983 — known as Ley Emiliani — establishes that most public holidays move to the following Monday when they don't fall on a Sunday. This makes Colombia the hardest LATAM country to handle with a static list.

Ley Emiliani
Dates shift every year

Epifanía is always January 6th, but it's celebrated between January 7th and 13th depending on the year. You can't reuse a holiday list from one year to the next.

Variable by definition
3 Easter-dependent holidays

Ascensión del Señor, Corpus Christi, and Sagrado Corazón are calculated from the date of Easter — which changes every year. They can't be hardcoded even in principle.

Abstracted away
API returns the real date

The API returns the actual celebration date (the Monday it was shifted to), not the original calendar date. Your code just needs to check the date — no Ley Emiliani logic required.

API response for Colombia

The API returns the shifted date directly. Epifanía is January 6th by origin, but the response shows January 12th — the Monday it's actually observed in 2026.

GET /v1/CO/holidays/2026 (excerpt)
{
  "success": true,
  "data": [
    {
      "date": "2026-01-12",
      "name": "Reyes Magos",
      "original_date": "2026-01-06",
      "shifted": true,
      "type": "national"
    },
    {
      "date": "2026-03-23",
      "name": "San José",
      "original_date": "2026-03-19",
      "shifted": true,
      "type": "national"
    },
    {
      "date": "2026-08-10",
      "name": "Batalla de Boyacá",
      "original_date": "2026-08-07",
      "shifted": true,
      "type": "national"
    }
  ],
  "meta": { "country": "CO", "year": 2026, "total": 18 }
}
GET /v1/CO/is-business-day?date=2026-01-06
{
  "success": true,
  "data": {
    "date": "2026-01-06",
    "is_business_day": true,
    "day_of_week": "Tuesday"
  },
  "meta": { "country": "CO" }
}
// Jan 6 is a regular business day — the holiday was shifted to Jan 12

Endpoints for Colombia

Replace :country with CO. Free plan includes holidays, is-business-day, and next-holiday.

GET /v1/CO/holidays/:year Free

All holidays for Colombia, with actual celebration dates. Shifted holidays include the original_date and a shifted: true flag.

"shifted": true, "original_date": "2026-01-06"
GET /v1/CO/is-business-day?date=YYYY-MM-DD Free

Check if a date is a business day in Colombia. Accounts for Ley Emiliani — the shifted Monday, not the original date.

"is_business_day": false, "holiday_name": "Reyes Magos"
GET /v1/CO/business-days/add?date=YYYY-MM-DD&days=N Starter

Add N business days to a date, skipping weekends and Colombian holidays (including Emiliani-shifted dates).

"result_date": "2026-01-16"
GET /v1/CO/business-days/between?from=YYYY-MM-DD&to=YYYY-MM-DD Starter

Count business days between two dates in Colombia. November is particularly tricky — Todos los Santos and Independencia de Cartagena both shift.

"business_days": 18
GET /v1/CO/last-business-day?date=YYYY-MM-DD Starter

Last business day of the month for the given date. Useful for billing and payroll cutoffs.

"last_business_day": "2026-11-28"

Checking a date without implementing Ley Emiliani

The classic Colombia bug: checking January 6th when the actual holiday is January 12th.

Node.js · Free plan
const API = "https://api.feriados.io/v1";
const KEY = process.env.FERIADOS_API_KEY;

// ❌ Wrong: hardcoding original holiday dates
const wrongHolidays = ["2026-01-06"]; // Epifanía
// Jan 6 is a regular business day in 2026 — the holiday is on Jan 12

// ✅ Correct: ask the API
async function isBusinessDay(date) {
  const res = await fetch(
    `${API}/CO/is-business-day?date=${date}`,
    { headers: { Authorization: `Bearer ${KEY}` } }
  );
  const { data } = await res.json();
  return data.is_business_day;
}

await isBusinessDay("2026-01-06"); // → true  (regular business day)
await isBusinessDay("2026-01-12"); // → false (Reyes Magos, shifted from Jan 6)

Common use cases for Colombia

November is the highest-risk month — two holidays shift in the same month, reducing it to 18 business days.

Also available for 10 more LATAM countries

Same API, same endpoints — just swap the country code.

🇨🇱 CL Chile 🇲🇽 MX México 🇦🇷 AR Argentina 🇵🇪 PE Perú
🇺🇾 UY Uruguay
🇧🇴 BO Bolivia
🇪🇨 EC Ecuador
🇵🇾 PY Paraguay
🇨🇷 CR Costa Rica
🇵🇦 PA Panamá

Ready for production

Free API key in 30 seconds. Free plan includes is-business-day for Colombia with commercial use. Starter plan from $9/mo for full operational logic.