1. Introduction
The Colombia Public Holidays API provides programmatic access to information about Colombia's official public holidays. The API enables:
- Retrieving the complete list of holidays for any year, or for a date range.
- Checking if a specific date is a holiday.
- Querying the next holiday or a list of upcoming holidays.
All responses are in JSON format and include holiday names in both Spanish and English. All dates are shown according to Colombia's official time zone (GMT-5 / UTC-5).
2. Authentication
The API supports two authentication methods:
Bearer Token (recommended)
Include the API Key in the Authorization header:
curl -X GET "https://festivos.com.co/api/v1/festivos" \
-H "Authorization: Bearer YOUR_API_KEY"
Query parameter
Alternatively, pass the API Key as an api_key parameter:
curl -X GET "https://festivos.com.co/api/v1/festivos?api_key=YOUR_API_KEY"
Bearer Token is recommended because URLs can be recorded in server logs, browser history, and other intermediate systems.
To obtain an API Key, create an account in the Developer Panel. Each account can have up to 3 active API Keys.
Important: Keep API Keys secure and never share them publicly. If a key has been compromised, delete it and create a new one from the Panel.
3. Rate limits
To ensure stable service, the API enforces the following limits:
- Requests per minute: 20 per API Key
- Requests per day: 1000 per API Key
- API Keys per account: 3
- Valid year range: 1984 - 9999
When the request limit is exceeded, the response includes status code 429 Too Many Requests.
API usage must be reasonable. Accounts or API Keys with suspicious or abusive activity will be suspended.
4. Endpoints
4.1. List holidays
/festivos
Returns all public holidays for a specific year. Optionally filter by month.
Query parameters
| Parameter | Tipo | Descripción |
|---|---|---|
| year | integer opcional | Year to query (1984-9999). Default: current year |
| month | integer opcional | Month to filter (1-12) |
Example request
curl -X GET "https://festivos.com.co/api/v1/festivos?year=2025" \
-H "Authorization: Bearer YOUR_API_KEY"
Example response
{
"data": [
{
"date": "2026-01-01",
"day_of_week_es": "Jueves",
"day_of_week_en": "Thursday",
"day_of_week_iso": 4,
"name_es": "Año Nuevo",
"name_en": "New Year's day"
},
{
"date": "2026-01-12",
"day_of_week_es": "Lunes",
"day_of_week_en": "Monday",
"day_of_week_iso": 1,
"name_es": "Epifanía",
"name_en": "Epiphany"
},
...
]
}
4.2. Check date
/festivos/check
Checks if a specific date is a public holiday in Colombia.
Query parameters
| Parameter | Tipo | Descripción |
|---|---|---|
| date | string requerido | Date in ISO 8601 format (YYYY-MM-DD) |
Example request
curl -X GET "https://festivos.com.co/api/v1/festivos/check?date=2026-01-01" \
-H "Authorization: Bearer YOUR_API_KEY"
Example response (is a holiday)
{
"festivo": true,
"data": {
"date": "2026-01-01",
"day_of_week_es": "Jueves",
"day_of_week_en": "Thursday",
"day_of_week_iso": 4,
"name_es": "Año Nuevo",
"name_en": "New Year's day"
}
}
Example response (not a holiday)
{
"festivo": false,
"data": null
}
4.3. Today
/festivos/today
Checks if today is a public holiday in Colombia.
Parameters
None.
Example request
curl -X GET "https://festivos.com.co/api/v1/festivos/today" \
-H "Authorization: Bearer YOUR_API_KEY"
Example response (today is a holiday)
{
"festivo": true,
"data": {
"date": "2026-01-01",
"day_of_week_es": "Jueves",
"day_of_week_en": "Thursday",
"day_of_week_iso": 4,
"name_es": "Año Nuevo",
"name_en": "New Year's day"
}
}
Example response (today is not a holiday)
{
"festivo": false,
"data": null
}
4.4. Next holiday
/festivos/next
Returns information about the next public holiday from the current date.
Note: If today is a public holiday, this endpoint returns the following holiday, not today.
Parameters
None.
Example request
curl -X GET "https://festivos.com.co/api/v1/festivos/next" \
-H "Authorization: Bearer YOUR_API_KEY"
Example response
{
"data": {
"date": "2026-01-12",
"day_of_week_es": "Lunes",
"day_of_week_en": "Monday",
"day_of_week_iso": 1,
"name_es": "Epifanía",
"name_en": "Epiphany"
}
}
4.5. Upcoming holidays
/festivos/upcoming
Returns a list of upcoming public holidays. By default, returns the next 3 holidays (excluding today even if today is a holiday).
Query parameters
| Parameter | Tipo | Descripción |
|---|---|---|
| limit | integer opcional | Number of holidays to return (1-10). Default: 3 |
| include_today | boolean opcional | Include today if it is a holiday. Default: false |
Example request
curl -X GET "https://festivos.com.co/api/v1/festivos/upcoming?limit=5" \
-H "Authorization: Bearer YOUR_API_KEY"
Example response
{
"data": [
{
"date": "2026-01-12",
"day_of_week_es": "Lunes",
"day_of_week_en": "Monday",
"day_of_week_iso": 1,
"name_es": "Epifanía",
"name_en": "Epiphany"
},
{
"date": "2026-03-23",
"day_of_week_es": "Lunes",
"day_of_week_en": "Monday",
"day_of_week_iso": 1,
"name_es": "Día de San José",
"name_en": "Saint Joseph's Day"
},
{
"date": "2026-04-02",
"day_of_week_es": "Jueves",
"day_of_week_en": "Thursday",
"day_of_week_iso": 4,
"name_es": "Jueves Santo",
"name_en": "Maundy Thursday"
},
...
]
}
4.6. Holidays by date range
/festivos/range
Returns all public holidays within a specified date range. The maximum range is 1 year.
Query parameters
| Parameter | Tipo | Descripción |
|---|---|---|
| from | string requerido | Start date in ISO 8601 format (YYYY-MM-DD) |
| to | string requerido | End date in ISO 8601 format (YYYY-MM-DD). Maximum range: 1 year |
Example request
curl -X GET "https://festivos.com.co/api/v1/festivos/range?from=2026-01-01&to=2026-01-31" \
-H "Authorization: Bearer YOUR_API_KEY"
Example response
{
"data": [
{
"date": "2026-01-01",
"day_of_week_es": "Jueves",
"day_of_week_en": "Thursday",
"day_of_week_iso": 4,
"name_es": "Año Nuevo",
"name_en": "New Year's day"
},
{
"date": "2026-01-12",
"day_of_week_es": "Lunes",
"day_of_week_en": "Monday",
"day_of_week_iso": 1,
"name_es": "Epifanía",
"name_en": "Epiphany"
}
]
}
5. Response format
All responses follow a consistent format.
Holiday fields
| Field | Tipo | Descripción |
|---|---|---|
| date | string | Date in ISO 8601 format (YYYY-MM-DD) |
| day_of_week_es | string | Day of the week in Spanish (Lunes, Martes, etc.) |
| day_of_week_en | string | Day of the week in English (Monday, Tuesday, etc.) |
| day_of_week_iso | integer | Day of the week per ISO 8601 (1=Monday, 7=Sunday) |
| name_es | string | Official holiday name in Spanish |
| name_en | string | Official holiday name in English |
6. Errors
The API uses standard HTTP status codes to indicate request results.
Status codes
| Code | Description |
|---|---|
| 200 OK | Request successful |
| 400 Bad Request | Invalid parameters |
| 401 Unauthorized | Missing or invalid API Key |
| 422 Unprocessable Entity | Validation error in parameters |
| 429 Too Many Requests | Request limit exceeded |
| 500 Internal Server Error | Server error |
Error format
When an error occurs, the response includes a descriptive message:
{
"message": "Unauthenticated."
}
For validation errors (422), details about the invalid fields are included:
{
"message": "The year field must be at least 1984.",
"errors": {
"year": [
"The year field must be at least 1984."
]
}
}