Endpoints

EndpointReturns
GET /api/holidays/{cc}/{year}Full calendar: every holiday with date, name, weekday
GET /api/holidays/next/{cc}The next upcoming holiday with a days-away count
GET /api/holidays/check/{cc}/{date}Whether that date is a holiday or weekend, and if banks are closed
GET /api/business-days/{cc}/{from}/{to}Business-day count between two dates (YYYY-MM-DD, inclusive), excluding weekends and holidays
AuthNone required for the free per-IP allowance. An IPNOVA API key (free account at api.ipnova.com) applies your plan allowance instead: send it as the X-Api-Key header or the ?key= query parameter. Keyed responses carry X-Credits-Remaining and X-Credits-Used.
Rate limit100 requests a day and 30 a minute, per IP (see X-RateLimit-Remaining)
CORSAccess-Control-Allow-Origin: *
Coverage150+ countries, previous year through two years ahead
Languagelang query parameter, one of en (default), es, fr, de, pt, it, nl, pl; localizes holiday names in the response

Plans

One key. Twelve APIs.

A free IPNOVA API account gives you 5,000 lookups a month across every API below, 60 a minute, no card, for evaluation and small projects. Paid plans from $19 a month for production volumes, with a commercial licence and a hard cap instead of overage billing.

Card BINVINSWIFT/BICIBANHS tariffDisposable emailIP dataPhoneHolidaysMAC vendorPostal codeAirport
Create your free key

Takes a minute. Send it as X-Api-Key or ?key=.

Without a key this API answers 100 requests a day per IP address, for evaluation and personal use. Try it: curl https://bankholidaycheck.com/api/holidays/US/2027

Examples

Calendarcurl https://bankholidaycheck.com/api/holidays/US/2027
Next holidaycurl https://bankholidaycheck.com/api/holidays/next/GB
Date checkcurl https://bankholidaycheck.com/api/holidays/check/DE/2027-10-03
Business dayscurl https://bankholidaycheck.com/api/business-days/DE/2026-01-01/2026-01-31
JavaScriptconst r = await fetch('https://bankholidaycheck.com/api/holidays/next/US').then(r => r.json());

Response Shape (date check)

FieldTypeDescription
data.is_holidaybooleanWhether the date is a nationwide holiday
data.holiday_namestring|nullThe holiday's name when it is one
data.is_weekend / data.weekdayboolean / stringWeekend detection and day name
data.banks_closedbooleanThe practical answer: holiday or weekend

Errors

Every non-200 response uses the same envelope: success: false, an error flag, a machine-readable reason, a human message, and a docs link back to this page.

StatusReasonMeaning
400invalid_inputBad country code or date
401invalid_keyThe supplied API key is unknown or revoked
404not_foundYear not in the dataset
404unknown_endpointPath under /api/ does not match a published endpoint
429rate_limitToo many requests in the last minute (Retry-After: 60)
429daily_limitKeyless per-IP daily cap reached
429credits_exhaustedKeyed monthly allowance used up

Example, a year not in the dataset:

{"success": false, "error": true, "reason": "not_found", "message": "Year not in the covered range.", "docs": "https://bankholidaycheck.com/holiday-api"}

Response Shape (business days)

FieldTypeDescription
from / tostringThe requested range, normalized to YYYY-MM-DD, inclusive
data.business_daysintDays in range that are neither a weekend nor a national holiday
data.total_daysintTotal calendar days in the range
data.weekend_daysintWeekend days in the range
data.holidays_skippedarrayNational holidays in the range, each with date and name
data.weekendstringWhich days count as the weekend for this country (e.g. "Sat-Sun weekend")

Example response for GET /api/business-days/DE/2026-01-01/2026-01-31:

{"success":true,"country":"Germany","country_code":"DE","from":"2026-01-01","to":"2026-01-31","inclusive":true,"data":{"business_days":21,"total_days":31,"weekend_days":9,"holidays_skipped":[{"date":"2026-01-01","name":"New Year's Day"}],"weekend":"Sat-Sun weekend"},"page":"https://bankholidaycheck.com/business-days-calculator","attribution":"Data by BankHolidayCheck.com - generated with the python-holidays library (MIT).","docs":"https://bankholidaycheck.com/holiday-api"}

Fair Use & Attribution

  • 100 requests per day per IP; responses cache for an hour, so cache on your side too.
  • For contractual deadlines, verify critical dates with official government sources.