Polystash

Business days, holidays and settlement dates as JSON

Public holidays and business-day arithmetic for 224 countries with regional calendars; trading sessions, settlement dates and payment value dates for 31 exchanges and 7 payment schemes. Both are sold through RapidAPI with a free tier, precomputed for 2000 to 2060 and served from memory.

Business Days and Holidays

Add business days to a date, count working days between two dates, compute an SLA deadline in business hours, or list holidays by year and region. Regional calendars for 20 countries. Every country and region is also an iCalendar feed.

Request

GET /v1/businessdays/sla?country=DE&region=DE-BY&start=2027-03-05T16:40:00+01:00&offset=3&unit=days

Response

{
  "country": "DE",
  "region": "DE-BY",
  "start": "2027-03-05T16:40:00+01:00",
  "deadline": "2027-03-10T16:40:00+01:00",
  "businessDaysUsed": 3,
  "weekendDaysSkipped": 2,
  "holidaysSkipped": 0
}
MethodPathReturns
GET /v1/holidays/{country}/{year} Holidays for a country and year. Filter by region, type and language.
GET /v1/businessdays/add Move a date forward or back by a number of business days.
GET /v1/businessdays/between Count business days, weekend days and holidays between two dates.
GET /v1/businessdays/sla Deadline after N business days or business hours from a start time.
GET /v1/holidays/{country}/{year}.ics iCalendar feed for a country, year and optional region.
GET /countries Supported countries and how many regions each one has.

Settlement Calendar and Payment Value Dates

Trading sessions, holidays and early closes for 31 exchanges; T+0 to T+3 settlement dates; payment value dates with cutoffs for SEPA, SEPA Instant, TARGET2, Fedwire, ACH, BACS and CHAPS.

Request

POST /v1/valuedate  {"initiatedAt": "2027-03-05T19:30:00-05:00", "scheme": "FEDWIRE"}

Response

{
  "valueDate": "2027-03-08",
  "cutoffHit": true,
  "nextCutoff": "2027-03-08T19:01:00-05:00",
  "closuresSkipped": 2,
  "reason": "cutoff"
}
MethodPathReturns
GET /v1/markets Exchanges covered, with MIC codes, time zones and coverage.
GET /v1/markets/{mic}/holidays Holidays for an exchange and year.
GET /v1/markets/{mic}/sessions Open and close times by date range, with early closes.
GET /v1/markets/{mic}/is-open Whether the market is open at an instant, with next open and close.
POST /v1/settlement Settlement date for a trade date, exchange and cycle.
POST /v1/valuedate Value date for a payment by scheme, with cutoff handling.
GET /v1/schemes/{scheme}/closures Closure days for a payment scheme and year.
GET /v1/markets/{mic}/calendar.ics iCalendar feed of an exchange's holidays and early closes.

Holiday data for your spreadsheet

Public holidays for 224 countries and territories, 2000 to 2060. CSV, Parquet and iCalendar files for spreadsheets, databases and calendars.

Buy the dataset — $9 one-off

Preview the free CSV sample on Kaggle

See the files, sample rows and coverage

How it works

Sixty years, precomputed

Every calendar from 2000 to 2060 is generated ahead of time and served from memory. No upstream calls at request time, so responses are fast and the same input always returns the same answer.

Business-day arithmetic, not just a holiday list

Add or subtract business days, count working days in a range, and compute deadlines in business hours with your own working-day window. Weekend definitions follow each country.

Sourced rules

Exchange rules come from the Apache-2.0 exchange_calendars project; scheme closures and cutoffs from the ECB, the Federal Reserve, UK bank holidays and the EPC rulebooks, cited in the data files. Coverage flags mark exchanges whose upstream data ends before 2060.

Questions

Where does the holiday data come from?

The base calendars are generated from the MIT-licensed source of the Nager.Date project. Countries it does not cover and Islamic holidays generally come from date-holidays (ISC and CC BY 3.0, attribution on this page). Both sources are reviewed before a country ships.

Is coverage the same for every country?

No, and the API says so. Every entry in /countries carries a coverage field: full means the national list is complete and reviewed through 2060; partial means the national list is known to be incomplete or lunar-calendar holidays are missing for some years. India, Thailand and Malaysia are partial today and are being upgraded. Check the flag before relying on a country for payroll or legal deadlines.

Are holidays listed on the observed date?

Yes. When a holiday falls on a weekend and the country observes it on a weekday, the observed date is what the API returns, because that is the day offices are closed.

How are weekends defined?

Per country. Most use Saturday and Sunday. Countries with a Friday and Saturday weekend are handled without any configuration on your side.

What happens if a government changes a holiday?

Calendars are regenerated when upstream data changes, and the change is noted in the changelog. Historical years never change.

Is there an SLA?

The API runs on Deno Deploy across multiple regions. There is no contractual uptime guarantee on these plans. Incidents are recorded in the changelog.

Sources

Holiday data derived from Nager.Date (MIT, source 2026-09-14) and date-holidays (ISC and CC BY 3.0). Business-day logic, regional coverage and the precomputed calendars are the work of Polystash.