Contents
AuthenticationThe coverage fieldGET /countriesGET /v1/holidays/{country}/{year}GET /v1/holidays/{country}/{year}.icsGET /v1/holidays/{country}.icsGET /v1/businessdays/slaGET /v1/businessdays/addGET /v1/businessdays/between
API reference
Public holidays and business-day arithmetic for 200+ countries and territories, with regional coverage: state, province and canton level holidays for 20 countries via ISO 3166-2 subdivision codes. Calendars are precomputed for 2000 through 2060 from curated open data. Every country in GET /countries carries a coverage flag (full or partial) so you can tell where the national list is known to be incomplete. Settlement Calendar adds exchange sessions, T+0 through T+3 arithmetic, and payment scheme value dates under /v1/markets, /v1/settlement, /v1/valuedate and /v1/schemes.
Base URL: https://api.polystash.com. Machine-readable spec: /openapi.json.
Authentication
Requests go through RapidAPI. Send your RapidAPI key on every request as the
X-RapidAPI-Key header, together with the X-RapidAPI-Host
header for this API. RapidAPI forwards the call and counts it against your plan.
X-RapidAPI-Key: YOUR_RAPIDAPI_KEY
X-RapidAPI-Host: api.polystash.com
Keys are issued and rotated on RapidAPI: Subscribe on RapidAPI.
The coverage field
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.
Business Days and Holidays
GET /countries
List supported countries
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/countries'
Example response
[
{
"code": "DE",
"name": "DE",
"regionCount": 16,
"coverage": "full"
},
{
"code": "IN",
"name": "IN",
"regionCount": 35,
"coverage": "partial"
},
{
"code": "US",
"name": "US",
"regionCount": 37,
"coverage": "full"
}
]
GET /v1/holidays/{country}/{year}
Holidays for a country and year
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
country |
path | yes | US |
|
year |
path | yes | 2026 |
|
region |
query | no | ISO 3166-2 subdivision code, e.g. US-TX | US-TX |
type |
query | no | Comma-separated holiday types: public,bank,school,authorities,optional,observance. Matches any requested type (OR); whitespace is trimmed. Takes precedence over types when both are supplied. | public,optional |
types |
query | no | Alias for type: comma-separated holiday types with OR semantics. Used only when type is absent. | |
lang |
query | no | Preferred name language (falls back to English) | local |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/holidays/US/2026?region=US-TX&type=public%2Coptional&lang=local'
GET /v1/holidays/{country}/{year}.ics
iCalendar holidays for a country and year
RFC 5545 VCALENDAR with one all-day VEVENT per holiday on its observed date. English SUMMARY, local name and types in DESCRIPTION, exclusive next-day DTEND, and UID <id>@polystash.com. Uses CRLF and UTF-8 lines folded at 75 octets.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
country |
path | yes | DE |
|
year |
path | yes | 2027 |
|
region |
query | no | ISO 3166-2 subdivision code; includes nationwide holidays | DE-BY |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/holidays/DE/2027.ics?region=DE-BY'
GET /v1/holidays/{country}.ics
iCalendar holidays over a range of years
Same all-day VEVENT format as the year feed. Defaults to the current UTC year through current year + 2. The range is inclusive and may contain at most five years. Years absent from the country data contribute no events.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
country |
path | yes | US |
|
from |
query | no | First year, inclusive; defaults to the current UTC year | 2027 |
to |
query | no | Last year, inclusive; defaults to current UTC year + 2 | 2029 |
region |
query | no | ISO 3166-2 subdivision code; includes nationwide holidays | US-TX |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/holidays/US.ics?from=2027&to=2029®ion=US-TX'
GET /v1/businessdays/sla
Calculate an SLA deadline in business days or working hours
All arithmetic uses local wall-clock dates in start's fixed offset; no DST adjustment. Uses the country's weekend and country/region holidays. For days, first roll a non-business start to the next business day at dayStart, then advance offset business days, preserving time. For hours, snap to a working period and count only within [dayStart, dayEnd), carrying remainder forward; a deadline may equal dayEnd. Missing calendar years have no known holidays.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
country |
query | yes | DE |
|
region |
query | no | DE-BY |
|
start |
query | yes | ISO 8601 YYYY-MM-DDTHH:MM[:SS[.sss]] followed by Z or +/-HH:MM. Seconds are optional; up to three fractional digits. Encode a positive offset's + as %2B. | 2027-03-05T16:40:00+01:00 |
offset |
query | yes | Positive safe integer in decimal digits. Deadlines beyond ISO year 9999 return INVALID_OFFSET. | 2 |
unit |
query | yes | hours |
|
dayStart |
query | no | Opening time; must precede dayEnd | |
dayEnd |
query | no | Exclusive closing time; overnight windows are not supported |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/businessdays/sla?country=DE®ion=DE-BY&start=2027-03-05T16%3A40%3A00%2B01%3A00&offset=2&unit=hours'
GET /v1/businessdays/add
Add N business days to a date
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
country |
query | yes | US |
|
date |
query | yes | 2026-07-02 |
|
days |
query | yes | Positive or negative, non-zero | 10 |
region |
query | no | US-TX |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/businessdays/add?country=US&date=2026-07-02&days=10®ion=US-TX'
GET /v1/businessdays/between
Count business days between two dates
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
country |
query | yes | DE |
|
start |
query | yes | 2026-12-20 |
|
end |
query | yes | 2027-01-10 |
|
region |
query | no |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/businessdays/between?country=DE&start=2026-12-20&end=2027-01-10'
Settlement Calendar and Payment Value Dates
GET /v1/markets
List exchange calendars
31 MICs: 26 generated for 2000–2060; XHKG through 2049, XKRX through 2050, and XSES/XBOM/XSHG through 2026. XCBO is absent upstream and omitted. Exchange coverage full means the upstream rules generate the entire range; future ad hoc closures and rule changes require regeneration. The timezone is the upstream trading clock (XBOG uses America/New_York).
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/markets'
Example response
[
{
"mic": "BVMF",
"name": "B3 Brasil Bolsa Balcao",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "America/Sao_Paulo"
},
{
"mic": "XAMS",
"name": "Euronext Amsterdam",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Amsterdam"
},
{
"mic": "XASX",
"name": "Australian Securities Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Australia/Sydney"
},
{
"mic": "XBOG",
"name": "Colombia Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "America/New_York"
},
{
"mic": "XBOM",
"name": "BSE India",
"coverage": "partial",
"from": "2000-01-01",
"to": "2026-12-31",
"timezone": "Asia/Kolkata"
},
{
"mic": "XBRU",
"name": "Euronext Brussels",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Brussels"
},
{
"mic": "XCSE",
"name": "Nasdaq Copenhagen",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Copenhagen"
},
{
"mic": "XDUB",
"name": "Euronext Dublin",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Dublin"
},
{
"mic": "XETR",
"name": "Xetra",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Berlin"
},
{
"mic": "XHEL",
"name": "Nasdaq Helsinki",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Helsinki"
},
{
"mic": "XHKG",
"name": "Hong Kong Stock Exchange",
"coverage": "partial",
"from": "2000-01-01",
"to": "2049-12-31",
"timezone": "Asia/Hong_Kong"
},
{
"mic": "XJSE",
"name": "Johannesburg Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Africa/Johannesburg"
},
{
"mic": "XKRX",
"name": "Korea Exchange",
"coverage": "partial",
"from": "2000-01-01",
"to": "2050-12-31",
"timezone": "Asia/Seoul"
},
{
"mic": "XLIS",
"name": "Euronext Lisbon",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Lisbon"
},
{
"mic": "XLON",
"name": "London Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/London"
},
{
"mic": "XMAD",
"name": "Bolsa de Madrid",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Madrid"
},
{
"mic": "XMEX",
"name": "Mexican Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "America/Mexico_City"
},
{
"mic": "XMIL",
"name": "Borsa Italiana",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Rome"
},
{
"mic": "XNAS",
"name": "Nasdaq Stock Market",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "America/New_York"
},
{
"mic": "XNYS",
"name": "New York Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "America/New_York"
},
{
"mic": "XNZE",
"name": "New Zealand Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Pacific/Auckland"
},
{
"mic": "XOSL",
"name": "Oslo Bors",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Oslo"
},
{
"mic": "XPAR",
"name": "Euronext Paris",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Paris"
},
{
"mic": "XSES",
"name": "Singapore Exchange",
"coverage": "partial",
"from": "2000-01-01",
"to": "2026-12-31",
"timezone": "Asia/Singapore"
},
{
"mic": "XSHG",
"name": "Shanghai Stock Exchange",
"coverage": "partial",
"from": "2000-01-01",
"to": "2026-12-31",
"timezone": "Asia/Shanghai"
},
{
"mic": "XSTO",
"name": "Nasdaq Stockholm",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Stockholm"
},
{
"mic": "XSWX",
"name": "SIX Swiss Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Zurich"
},
{
"mic": "XTAE",
"name": "Tel Aviv Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Asia/Tel_Aviv"
},
{
"mic": "XTKS",
"name": "Tokyo Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Asia/Tokyo"
},
{
"mic": "XTSE",
"name": "Toronto Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "America/Toronto"
},
{
"mic": "XWBO",
"name": "Vienna Stock Exchange",
"coverage": "full",
"from": "2000-01-01",
"to": "2060-12-31",
"timezone": "Europe/Vienna"
}
]
GET /v1/markets/{mic}/holidays
Exchange holidays and early closes
Precomputed actual exchange closures, with a name only where upstream exposes one. Includes named weekend holidays; ordinary weekends are implicit. Early closes include local close times. Unavailable years return OUT_OF_COVERAGE.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
mic |
path | yes | MIC, case-insensitive. XNAS uses the upstream XNYS alias. XCBO is unavailable. | XNYS |
year |
query | yes | Required year within the calendar’s coverage. | 2027 |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/markets/XNYS/holidays?year=2027'
Example response
{
"mic": "XNYS",
"timezone": "America/New_York",
"year": 2027,
"count": 10,
"holidays": [
{
"date": "2027-01-01",
"name": "New Year's Day"
},
{
"date": "2027-01-18",
"name": "Dr. Martin Luther King Jr. Day"
},
{
"date": "2027-02-15",
"name": "President's Day"
},
{
"date": "2027-03-26",
"name": "Good Friday"
},
{
"date": "2027-05-31",
"name": "Memorial Day"
},
{
"date": "2027-06-18",
"name": "Juneteenth National Independence Day"
},
{
"date": "2027-07-05",
"name": "July 4th"
},
{
"date": "2027-09-06",
"name": "Labor Day"
},
{
"date": "2027-11-25",
"name": "Thanksgiving"
},
{
"date": "2027-12-24",
"name": "Christmas"
}
],
"earlyCloses": [
{
"date": "2027-11-26",
"close": "13:00"
}
]
}
GET /v1/markets/{mic}/sessions
Exchange trading sessions
Inclusive date range shorter than from + one calendar year (a complete leap year is allowed). Returns only trading days. Local clock times accompany ISO datetimes with the IANA timezone’s actual offset, including DST. Breaks, early closes, late opens and historical changes follow the upstream regular trading segment; extended sessions and product-specific auctions are outside this calendar.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
mic |
path | yes | MIC, case-insensitive. XNAS uses the upstream XNYS alias. XCBO is unavailable. | XNYS |
from |
query | yes | 2027-11-25 |
|
to |
query | yes | 2027-11-28 |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/markets/XNYS/sessions?from=2027-11-25&to=2027-11-28'
Example response
{
"mic": "XNYS",
"timezone": "America/New_York",
"from": "2027-11-25",
"to": "2027-11-28",
"count": 1,
"sessions": [
{
"date": "2027-11-26",
"openLocal": "09:30",
"closeLocal": "13:00",
"open": "2027-11-26T09:30:00-05:00",
"close": "2027-11-26T13:00:00-05:00",
"breakStart": null,
"breakEnd": null,
"earlyClose": true
}
]
}
GET /v1/markets/{mic}/is-open
Exchange status at an instant
datetime must include Z or +/-HH:MM; positive offsets must be URL-encoded. Converted to the exchange timezone before choosing the calendar date. Trading intervals include opening and exclude closing; lunch breaks are closed. nextOpen/nextClose are strictly future interval boundaries, including lunch resumption/start, or null when no boundary is known within coverage. When already open, nextOpen is the next interval’s opening.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
mic |
path | yes | MIC, case-insensitive. XNAS uses the upstream XNYS alias. XCBO is unavailable. | XNYS |
datetime |
query | yes | 2027-03-26T15:00:00Z |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/markets/XNYS/is-open?datetime=2027-03-26T15%3A00%3A00Z'
Example response
{
"open": false,
"reason": "holiday",
"nextOpen": "2027-03-29T09:30:00-04:00",
"nextClose": "2027-03-29T16:00:00-04:00"
}
GET /v1/markets/{mic}/calendar.ics
Exchange holiday and early-close iCalendar
Reuses the holiday API’s RFC 5545 all-day events, CRLF, TEXT escaping and UTF-8 folding at 75 octets. Early-close events include local closing time and timezone in SUMMARY. Use year, or inclusive from/to years (at most five); defaults to current UTC year through current year + 2. The complete requested range must be covered; partial calendars are not silently truncated. UIDs contain MIC, date and event kind.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
mic |
path | yes | MIC, case-insensitive. XNAS uses the upstream XNYS alias. XCBO is unavailable. | XNYS |
year |
query | no | Single year; mutually exclusive with from/to. | 2027 |
from |
query | no | First year, inclusive; default current UTC year. | |
to |
query | no | Last year, inclusive; default current UTC year + 2. |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/markets/XNYS/calendar.ics?year=2027'
POST /v1/settlement
Calculate an exchange settlement date
tradeDate must itself be a trading day (otherwise NON_TRADING_DAY, including T+0). Count cycle subsequent exchange trading days; early closes count as business days. T+0 returns tradeDate. Holidays on weekends count only as weekends. This is explicitly exchange-calendar arithmetic; separate securities depository, clearinghouse, currency and instrument settlement rules are not applied. Any result beyond coverage returns OUT_OF_COVERAGE.
JSON request body
| Name | In | Required | Description | Example |
|---|---|---|---|---|
tradeDate |
body | yes | Exchange-local trading date. | 2027-05-28 |
mic |
body | yes | MIC, case-insensitive. | XNYS |
cycle |
body | yes | Number of subsequent exchange trading days. | T+1 |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
-X POST \
-H 'Content-Type: application/json' \
--data-raw '{"tradeDate":"2027-05-28","mic":"XNYS","cycle":"T+1"}' \
'https://api.polystash.com/v1/settlement'
Example response
{
"settlementDate": "2027-06-01",
"businessDaysCounted": 1,
"holidaysSkipped": 1,
"weekendDaysSkipped": 2
}
POST /v1/valuedate
Calculate a payment value date
Convert initiatedAt to the scheme’s IANA timezone. Calendar estimate using the published operating profile, applied consistently across 2000–2060, not a historical reconstruction of service availability or operating hours. TARGET/FEDWIRE/CHAPS use same eligible day; ACH models eligible same-day ACH with three submission windows; BACS uses input, processing, entry (two further business days); standard SEPA uses D+1 TARGET day after acceptance. SEPA default cutoff is 16:00 Europe/Brussels (CET/CEST), a configurable bank assumption. SEPA_INST is 24/7/365 and returns the same Europe/Brussels calendar date with nextCutoff null. Deadlines are exclusive. Fedwire’s published 19:00 cutoff includes the whole minute (operating-hours footnote 2); its effective boundary and nextCutoff are 19:01. Earlier bank overrides are exclusive. The 19:00 Fedwire and 18:00 CHAPS deadlines are system closing times; customer/bank deadlines can be earlier. Scheme directory includes source URLs and profile limitations.
JSON request body
| Name | In | Required | Description | Example |
|---|---|---|---|---|
initiatedAt |
body | yes | Valid ISO datetime with Z or +/-HH:MM; converted to the scheme timezone. | 2027-03-05T19:30:00-05:00 |
scheme |
body | yes | Scheme identifier; request matching is case-insensitive. | FEDWIRE |
cutoff |
body | no | Optional local HH:MM bank cutoff. SEPA default 16:00 Europe/Brussels (CET/CEST). Other defaults are in GET /v1/schemes. Overrides cannot extend a system deadline and are rejected for SEPA_INST. |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
-X POST \
-H 'Content-Type: application/json' \
--data-raw '{"initiatedAt":"2027-03-05T19:30:00-05:00","scheme":"FEDWIRE"}' \
'https://api.polystash.com/v1/valuedate'
Example response
{
"valueDate": "2027-03-08",
"cutoffHit": true,
"nextCutoff": "2027-03-08T19:01:00-05:00",
"closuresSkipped": 2,
"reason": "cutoff"
}
GET /v1/schemes
List payment scheme profiles
Seven scheme profiles, including timezones, cycle length, default/system cutoffs, same-day ACH windows, source citations and limitations. Dates represent generated calendar rules; modern service profiles are projected onto the full range, including years before service launch.
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/schemes'
Example response
[
{
"from": "2000-01-01",
"to": "2060-12-31",
"weekend": [
6,
7
],
"settlementDays": 0,
"cutoffKind": "scheme",
"scheme": "TARGET",
"name": "TARGET T2 RTGS",
"timezone": "Europe/Brussels",
"cutoff": "18:00",
"sources": [
{
"url": "https://www.ecb.europa.eu/paym/target/t2/html/index.en.html",
"accessed": "2026-09-13",
"rules": "TARGET closing days: Saturdays, Sundays, 1 January, Good Friday, Easter Monday, 1 May, 25 December and 26 December."
},
{
"url": "https://www.ecb.europa.eu/paym/target/shared/pdf/TARGET_System_operating_schedule.en.pdf",
"accessed": "2026-09-13",
"rules": "Page 1, Figure 1: RTGS interbank payments end at 18:00 Central European time; customer payments end at 17:00."
}
],
"notes": [
"Current operating profile applied consistently to all generated years; not a historical reconstruction of service availability or bank acceptance times.",
"18:00 is the interbank payment close; customer payments close at 17:00. This profile uses the requested six TARGET closing days throughout 2000–2060."
]
},
{
"from": "2000-01-01",
"to": "2060-12-31",
"weekend": [
6,
7
],
"settlementDays": 0,
"cutoffKind": "scheme",
"scheme": "FEDWIRE",
"name": "Fedwire Funds Service",
"timezone": "America/New_York",
"cutoff": "19:00",
"cutoffInclusiveMinute": true,
"sources": [
{
"url": "https://www.frbservices.org/about/holiday-schedules",
"accessed": "2026-09-13",
"rules": "Federal Reserve holiday schedule: Saturday holidays do not close the preceding Friday; Sunday holidays close the following Monday."
},
{
"url": "https://www.govinfo.gov/content/pkg/PLAW-117publ17/pdf/PLAW-117publ17.pdf",
"accessed": "2026-09-13",
"rules": "Public Law 117-17, approved 17 June 2021, adds Juneteenth National Independence Day, June 19, to 5 USC 6103(a). Applied from 2021 using Reserve Bank weekend observance."
},
{
"url": "https://www.frbservices.org/resources/financial-services/wires/operating-hours.html",
"accessed": "2026-09-13",
"rules": "Processing Times: bank transfers close at 19:00 Eastern; customer transfers at 18:45. Footnote 2 includes the entire listed cutoff minute, so the 19:00 window ends immediately before 19:01."
}
],
"notes": [
"Current operating profile applied consistently to all generated years; not a historical reconstruction of service availability or bank acceptance times.",
"19:00 is the published bank-transfer close and includes that entire minute. The effective exclusive boundary returned as nextCutoff is 19:01. A cutoff override earlier than the published close is treated as an exclusive bank deadline.",
"Customer transfers close at 18:45; pass the applicable bank cutoff. Uses the local civil date for the requested cutoff model; overnight next-business-day opening and message-type-specific deadlines are not automatically selected."
]
},
{
"from": "2000-01-01",
"to": "2060-12-31",
"weekend": [
6,
7
],
"settlementDays": 0,
"cutoffKind": "scheme",
"scheme": "ACH",
"name": "FedACH Same Day ACH",
"timezone": "America/New_York",
"cutoff": "16:45",
"sources": [
{
"url": "https://www.frbservices.org/about/holiday-schedules",
"accessed": "2026-09-13",
"rules": "Federal Reserve holiday schedule: Saturday holidays do not close the preceding Friday; Sunday holidays close the following Monday."
},
{
"url": "https://www.govinfo.gov/content/pkg/PLAW-117publ17/pdf/PLAW-117publ17.pdf",
"accessed": "2026-09-13",
"rules": "Public Law 117-17, approved 17 June 2021, adds Juneteenth National Independence Day, June 19, to 5 USC 6103(a). Applied from 2021 using Reserve Bank weekend observance."
},
{
"url": "https://www.frbservices.org/resources/resource-centers/same-day-ach/fedach-processing-schedule.html",
"accessed": "2026-09-13",
"rules": "Same Day Eligible Forward Items, schedule effective 12 September 2022: input deadlines 10:30, 14:45 and 16:45 Eastern; settlement at 13:00, 17:00 and 18:00 respectively. Files must be completely received by the transmission deadline."
}
],
"windows": [
{
"cutoff": "10:30",
"settlement": "13:00"
},
{
"cutoff": "14:45",
"settlement": "17:00"
},
{
"cutoff": "16:45",
"settlement": "18:00"
}
],
"notes": [
"Current operating profile applied consistently to all generated years; not a historical reconstruction of service availability or bank acceptance times.",
"Models eligible same-day ACH transactions. Amount/type eligibility, bank-specific deadlines, returns and standard next-day ACH are not inferred from this request body."
]
},
{
"from": "2000-01-01",
"to": "2060-12-31",
"weekend": [
6,
7
],
"settlementDays": 2,
"cutoffKind": "scheme",
"scheme": "BACS",
"name": "Bacs Direct Credit",
"timezone": "Europe/London",
"cutoff": "22:30",
"sources": [
{
"url": "https://www.gov.uk/bank-holidays",
"accessed": "2026-09-13",
"rules": "England and Wales bank holidays, including substitute weekdays and announced one-off holidays; excludes Scotland/Northern Ireland-only holidays."
},
{
"url": "https://www.bacs.co.uk/media/cmuccdew/bdc-introduction.pdf",
"accessed": "2026-09-13",
"rules": "Bacs Direct Credit: An introduction to the service, page 6, section 3.2: input day 1 (transmission 07:00 to 22:30 UK time), processing day 2, entry/value day 3."
},
{
"url": "https://www.bacs.co.uk/media/fzwnbjt4/bacs-processing-calendar-2026-landscape.pdf",
"accessed": "2026-09-13",
"rules": "Bacs 2026 processing calendar: weekends and England/Wales bank holidays are non-processing days. Submit ahead of the required input day; future unannounced one-off holidays require regeneration."
}
],
"notes": [
"Current operating profile applied consistently to all generated years; not a historical reconstruction of service availability or bank acceptance times.",
"Input day is day one, processing day day two, and entry/value day day three. 22:30 is the scheme input deadline; banks may require earlier submission.",
"England/Wales holidays reuse data/countries/GB.json with the existing attribution and known one-off dates."
]
},
{
"from": "2000-01-01",
"to": "2060-12-31",
"weekend": [
6,
7
],
"settlementDays": 0,
"cutoffKind": "scheme",
"scheme": "CHAPS",
"name": "CHAPS",
"timezone": "Europe/London",
"cutoff": "18:00",
"sources": [
{
"url": "https://www.gov.uk/bank-holidays",
"accessed": "2026-09-13",
"rules": "England and Wales bank holidays, including substitute weekdays and announced one-off holidays; excludes Scotland/Northern Ireland-only holidays."
},
{
"url": "https://www.bankofengland.co.uk/-/media/boe/files/payments/chaps/chaps-reference-manual.pdf",
"accessed": "2026-09-13",
"rules": "CHAPS Reference Manual, page 54, sections 36.1-36.5: London time; financial institution transfers by 18:00, customer transfers by 17:40. Page 74: Business Day excludes Saturday/Sunday and requires banks open in London. Emergency extensions are outside this fixed profile."
}
],
"notes": [
"Current operating profile applied consistently to all generated years; not a historical reconstruction of service availability or bank acceptance times.",
"18:00 is the financial-institution-transfer deadline; the customer-transfer deadline is 17:40 and banks may set earlier cutoffs.",
"England/Wales holidays reuse data/countries/GB.json with the existing attribution and known one-off dates."
]
},
{
"from": "2000-01-01",
"to": "2060-12-31",
"weekend": [
6,
7
],
"settlementDays": 1,
"cutoffKind": "default",
"scheme": "SEPA",
"name": "SEPA Credit Transfer",
"timezone": "Europe/Brussels",
"cutoff": "16:00",
"sources": [
{
"url": "https://www.ecb.europa.eu/paym/target/t2/html/index.en.html",
"accessed": "2026-09-13",
"rules": "TARGET closing days: Saturdays, Sundays, 1 January, Good Friday, Easter Monday, 1 May, 25 December and 26 December."
},
{
"url": "https://www.europeanpaymentscouncil.eu/sites/default/files/kb/file/2025-09/EPC125-05%202025%20SCT%20Rulebook%20version%201.1.pdf",
"accessed": "2026-09-13",
"rules": "2025 SCT Rulebook v1.1: sections 4.2.1-4.2.3 (pages 26-27) define acceptance, PSP-advised cutoffs outside the rulebook, and maximum D+1 execution. Defined terms (page 82): Banking Business Day equals a T2 day for inter-PSP execution."
}
],
"notes": [
"Current operating profile applied consistently to all generated years; not a historical reconstruction of service availability or bank acceptance times.",
"16:00 Europe/Brussels (CET/CEST) is an API default for an unspecified bank, not a scheme-mandated cutoff; pass cutoff to override it.",
"Standard electronic SCT modeled as D+1 TARGET day after acceptance; bank holidays, early execution and channel-specific terms are not inferred."
]
},
{
"from": "2000-01-01",
"to": "2060-12-31",
"weekend": [],
"settlementDays": 0,
"cutoffKind": "none",
"scheme": "SEPA_INST",
"name": "SEPA Instant Credit Transfer",
"timezone": "Europe/Brussels",
"cutoff": null,
"sources": [
{
"url": "https://www.europeanpaymentscouncil.eu/what-we-do/sepa-instant-credit-transfer",
"accessed": "2026-09-13",
"rules": "SEPA Instant Credit Transfer operates 24 hours a day, every day of the year."
}
],
"notes": [
"Current operating profile applied consistently to all generated years; not a historical reconstruction of service availability or bank acceptance times.",
"24/7/365; valueDate is the initiation date after conversion to Europe/Brussels. No cutoff. Availability of an individual bank is outside the calendar model."
]
}
]
GET /v1/schemes/{scheme}/closures
Payment scheme closing dates
Named non-settlement dates for one year, plus the recurring ISO weekend definition (Monday 1 … Sunday 7). Ordinary weekends are implicit; named weekend holidays are retained. Federal Reserve Saturday holidays do not close Friday; Sunday holidays close Monday. BACS/CHAPS use England and Wales, including observed substitutes and known one-off bank holidays. SEPA_INST returns empty closures and weekend arrays.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
scheme |
path | yes | TARGET |
|
year |
query | yes | Required year within the calendar’s coverage. | 2027 |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/schemes/TARGET/closures?year=2027'
Example response
{
"scheme": "TARGET",
"timezone": "Europe/Brussels",
"year": 2027,
"weekend": [
6,
7
],
"count": 6,
"closures": [
{
"date": "2027-01-01",
"name": "New Year's Day"
},
{
"date": "2027-03-26",
"name": "Good Friday"
},
{
"date": "2027-03-29",
"name": "Easter Monday"
},
{
"date": "2027-05-01",
"name": "Labour Day"
},
{
"date": "2027-12-25",
"name": "Christmas Day"
},
{
"date": "2027-12-26",
"name": "26 December"
}
]
}
Sales Tax Due Dates
US state sales-tax filing due dates by state and filing frequency, rolled past weekends and state holidays.
GET /v1/salestax/states
Sales tax filing rules for every state
The 45 states with a state sales tax plus the District of Columbia, each with the filing frequencies it offers and the due-day rule for each, and the five states with no state sales tax carrying no frequencies at all. Every record names the state revenue department page it was taken from and the date it was checked.
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/salestax/states'
Example response
{
"checked": "2026-09-14",
"count": 51,
"states": [
{
"state": "NY",
"name": "New York",
"salesTax": true,
"holidayRegion": "US-NY",
"rollRule": "next_business_day",
"source": "https://www.tax.ny.gov/pubs_and_bulls/tg_bulletins/st/filing_requirements_for_sales_and_use_tax_returns.htm",
"checked": "2026-09-14",
"verified": true,
"frequencies": [
{
"frequency": "monthly",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "Part-quarterly (monthly) returns are due no later than 20 days after the end of the period to which they relate.",
"periodEndMonths": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
],
"periodFormat": "YYYY-MM"
},
{
"frequency": "quarterly",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "Quarterly returns are due no later than 20 days after the end of the quarter to which they relate; the sales tax quarters end February 28/29, May 31, August 31 and November 30.",
"periodEndMonths": [
2,
5,
8,
11
],
"periodFormat": "YYYY-Qn"
},
{
"frequency": "annual",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "The annual return covers March 1 through February 28/29 and is due by March 20 each year.",
"periodEndMonths": [
2
],
"periodFormat": "YYYY"
}
]
},
{
"state": "OH",
"name": "Ohio",
"salesTax": true,
"holidayRegion": "US-OH",
"rollRule": "next_business_day",
"source": "https://dam.assets.ohio.gov/image/upload/tax.ohio.gov/business/Ohio%20Small%20Business%20Tax%20Guide_Rev2.24.pdf",
"checked": "2026-09-14",
"verified": true,
"frequencies": [
{
"frequency": "monthly",
"rule": "day_of_month_after_period_end",
"dueDay": 23,
"description": "The UST-1 must be filed and paid by the 23rd day of the month following the reporting period.",
"periodEndMonths": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
],
"periodFormat": "YYYY-MM"
},
{
"frequency": "semiannual",
"rule": "day_of_month_after_period_end",
"dueDay": 23,
"description": "Due by the 23rd day of the month following the close of each semiannual period: July 23 for January 1 through June 30, and January 23 for July 1 through December 31.",
"periodEndMonths": [
6,
12
],
"periodFormat": "YYYY-Hn"
}
]
},
{
"state": "TX",
"name": "Texas",
"salesTax": true,
"holidayRegion": "US-TX",
"rollRule": "next_business_day",
"source": "https://comptroller.texas.gov/taxes/file-pay/due-dates.php",
"checked": "2026-09-14",
"verified": true,
"frequencies": [
{
"frequency": "monthly",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "Reports are due on the 20th of the month following the reporting month.",
"periodEndMonths": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
],
"periodFormat": "YYYY-MM"
},
{
"frequency": "quarterly",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "Reports are due April 20, July 20, October 20 and January 20 for the preceding quarter.",
"periodEndMonths": [
3,
6,
9,
12
],
"periodFormat": "YYYY-Qn"
},
{
"frequency": "annual",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "For yearly filers, reports of sales for the previous year are due on January 20.",
"periodEndMonths": [
12
],
"periodFormat": "YYYY"
}
]
}
]
}
GET /v1/salestax/states/{state}
One state's filing rules and source
The same record as the list, with the state's roll note and any caveat about the source.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
state |
path | yes | Two-letter USPS code, case-insensitive. | TX |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/salestax/states/TX'
Example response
{
"state": "TX",
"name": "Texas",
"salesTax": true,
"holidayRegion": "US-TX",
"rollRule": "next_business_day",
"source": "https://comptroller.texas.gov/taxes/file-pay/due-dates.php",
"checked": "2026-09-14",
"verified": true,
"frequencies": [
{
"frequency": "monthly",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "Reports are due on the 20th of the month following the reporting month.",
"periodEndMonths": [
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12
],
"periodFormat": "YYYY-MM"
},
{
"frequency": "quarterly",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "Reports are due April 20, July 20, October 20 and January 20 for the preceding quarter.",
"periodEndMonths": [
3,
6,
9,
12
],
"periodFormat": "YYYY-Qn"
},
{
"frequency": "annual",
"rule": "day_of_month_after_period_end",
"dueDay": 20,
"description": "For yearly filers, reports of sales for the previous year are due on January 20.",
"periodEndMonths": [
12
],
"periodFormat": "YYYY"
}
],
"rollNote": "The Comptroller's due-dates page: \"When a reporting due date happens to fall on Saturday, Sunday, or a federal legal holiday, the reporting due date becomes the next business day.\"",
"note": "Monthly and quarterly prepayment filers have a separate 15th-of-the-month schedule, which is out of scope here."
}
GET /v1/salestax/due
The due date for one filing period
Returns the statutory date the state's rule produces, the date the return is actually due once weekends and holidays are applied, and every day passed over on the way. State holidays are taken from the holiday dataset's US regions, so a state that closes for Good Friday rolls and one that does not stays put. Periods are named by the month they close in: a state whose quarters end in February, May, August and November has 2026-Q1 ending 2026-02-28.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
state |
query | yes | Two-letter USPS code, case-insensitive. | TX |
frequency |
query | yes | A frequency the state offers. Asking for one it does not offer returns UNSUPPORTED_FREQUENCY with the list it does. | monthly |
period |
query | yes | YYYY-MM for monthly, YYYY-Qn for quarterly, YYYY-Hn for semiannual, YYYY for annual. 2000 through 2060. | 2026-08 |
from |
query | no | The date businessDaysAway counts from. Defaults to today. |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/salestax/due?state=TX&frequency=monthly&period=2026-08'
Example response
{
"state": "TX",
"name": "Texas",
"frequency": "monthly",
"rule": "day_of_month_after_period_end",
"ruleDescription": "Reports are due on the 20th of the month following the reporting month.",
"period": "2026-08",
"periodStart": "2026-08-01",
"periodEnd": "2026-08-31",
"ruleDate": "2026-09-20",
"dueDate": "2026-09-21",
"rolled": true,
"rollReason": "weekend",
"skipped": [
{
"date": "2026-09-20",
"reason": "weekend",
"holiday": null
}
],
"businessDaysAway": 5,
"from": "2026-09-14",
"rollRule": "next_business_day",
"holidayRegion": "US-TX",
"source": "https://comptroller.texas.gov/taxes/file-pay/due-dates.php",
"checked": "2026-09-14",
"verified": true
}
GET /v1/salestax/next
The next due dates for a state and frequency
The next periods whose due date falls on or after from, each with the same fields the single-period lookup returns.
Parameters
| Name | In | Required | Description | Example |
|---|---|---|---|---|
state |
query | yes | Two-letter USPS code, case-insensitive. | TX |
frequency |
query | yes | A frequency the state offers. Asking for one it does not offer returns UNSUPPORTED_FREQUENCY with the list it does. | monthly |
from |
query | no | The first date a due date may fall on. Defaults to today. | 2026-09-14 |
count |
query | no | How many due dates to return, 1 through 24. | 6 |
Example request
curl -H 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
-H 'X-RapidAPI-Host: api.polystash.com' \
'https://api.polystash.com/v1/salestax/next?state=TX&frequency=monthly&from=2026-09-14&count=6'
Example response
{
"state": "TX",
"name": "Texas",
"frequency": "monthly",
"rule": "day_of_month_after_period_end",
"ruleDescription": "Reports are due on the 20th of the month following the reporting month.",
"from": "2026-09-14",
"count": 6,
"rollRule": "next_business_day",
"holidayRegion": "US-TX",
"source": "https://comptroller.texas.gov/taxes/file-pay/due-dates.php",
"checked": "2026-09-14",
"verified": true,
"dueDates": [
{
"period": "2026-08",
"periodStart": "2026-08-01",
"periodEnd": "2026-08-31",
"ruleDate": "2026-09-20",
"dueDate": "2026-09-21",
"rolled": true,
"rollReason": "weekend",
"skipped": [
{
"date": "2026-09-20",
"reason": "weekend",
"holiday": null
}
],
"businessDaysAway": 5
},
{
"period": "2026-09",
"periodStart": "2026-09-01",
"periodEnd": "2026-09-30",
"ruleDate": "2026-10-20",
"dueDate": "2026-10-20",
"rolled": false,
"rollReason": null,
"skipped": [],
"businessDaysAway": 26
},
{
"period": "2026-10",
"periodStart": "2026-10-01",
"periodEnd": "2026-10-31",
"ruleDate": "2026-11-20",
"dueDate": "2026-11-20",
"rolled": false,
"rollReason": null,
"skipped": [],
"businessDaysAway": 48
},
{
"period": "2026-11",
"periodStart": "2026-11-01",
"periodEnd": "2026-11-30",
"ruleDate": "2026-12-20",
"dueDate": "2026-12-21",
"rolled": true,
"rollReason": "weekend",
"skipped": [
{
"date": "2026-12-20",
"reason": "weekend",
"holiday": null
}
],
"businessDaysAway": 68
},
{
"period": "2026-12",
"periodStart": "2026-12-01",
"periodEnd": "2026-12-31",
"ruleDate": "2027-01-20",
"dueDate": "2027-01-20",
"rolled": false,
"rollReason": null,
"skipped": [],
"businessDaysAway": 87
},
{
"period": "2027-01",
"periodStart": "2027-01-01",
"periodEnd": "2027-01-31",
"ruleDate": "2027-02-20",
"dueDate": "2027-02-22",
"rolled": true,
"rollReason": "weekend",
"skipped": [
{
"date": "2027-02-20",
"reason": "weekend",
"holiday": null
},
{
"date": "2027-02-21",
"reason": "weekend",
"holiday": null
}
],
"businessDaysAway": 109
}
]
}
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.