{"openapi":"3.1.0","info":{"title":"TradeTi.me API","version":"1.0.0","summary":"Global stock-exchange trading hours, sessions, holidays and early closes.","description":"Free public API for the trading hours of global stock exchanges — sessions, public holidays, and early-close days. Factual data, compiled by hand from official exchange sources. Read-only, no account or key required. Use is subject to the API Terms of Use at https://tradeti.me/developers. The data is a convenience, not an authoritative or real-time source — always verify with the official exchange before any time-sensitive or financial decision.","contact":{"name":"TradeTi.me","url":"https://tradeti.me/developers","email":"feedback@tradeti.me"},"license":{"name":"API Terms of Use + Data License","url":"https://tradeti.me/developers"}},"servers":[{"url":"https://api.tradeti.me","description":"Production"}],"paths":{"/v1/health":{"get":{"summary":"Service health and exchange count","operationId":"getHealth","responses":{"200":{"description":"Service is up; includes the exchange count"}}}},"/v1/exchanges":{"get":{"summary":"List exchanges (summaries)","operationId":"listExchanges","parameters":[{"name":"region","in":"query","required":false,"schema":{"type":"string"},"description":"Filter by region, case-insensitive (e.g. Asia, Americas, Europe, Oceania)."}],"responses":{"200":{"description":"A list of exchange summaries with a count"}}}},"/v1/exchanges/{id}":{"get":{"summary":"Full record for one exchange","operationId":"getExchange","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Exchange id, case-insensitive (e.g. \"nyse\", \"nikkei\")."}],"responses":{"200":{"description":"The full exchange record"},"404":{"description":"Unknown exchange id"}}}},"/v1/exchanges/{id}/holidays":{"get":{"summary":"Holidays and early closes for one exchange","operationId":"getExchangeHolidays","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Exchange id, case-insensitive (e.g. \"nyse\", \"nikkei\")."}],"responses":{"200":{"description":"The closure calendar (holidays + early closes)"},"404":{"description":"Unknown exchange id"}}}},"/v1/exchanges/{id}/sessions":{"get":{"summary":"Trading-session structure for one exchange","operationId":"getExchangeSessions","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Exchange id, case-insensitive (e.g. \"nyse\", \"nikkei\")."}],"responses":{"200":{"description":"The session structure (pre / main / post, exchange-local hours)"},"404":{"description":"Unknown exchange id"}}}},"/v1/exchanges/{id}/status":{"get":{"summary":"Live open/closed status for one exchange","operationId":"getExchangeStatus","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"},"description":"Exchange id, case-insensitive (e.g. \"nyse\", \"nikkei\")."},{"name":"at","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"ISO 8601 instant to evaluate status at (defaults to now), e.g. 2026-07-06T14:30:00Z."}],"responses":{"200":{"description":"The exchange status (open flag, session type, time to next open)"},"400":{"description":"Malformed ?at parameter"},"404":{"description":"Unknown exchange id"}}}},"/v1/status":{"get":{"summary":"Live open/closed status for every exchange","operationId":"getAllStatus","parameters":[{"name":"at","in":"query","required":false,"schema":{"type":"string","format":"date-time"},"description":"ISO 8601 instant to evaluate status at (defaults to now), e.g. 2026-07-06T14:30:00Z."}],"responses":{"200":{"description":"Status for all exchanges as of a moment"},"400":{"description":"Malformed ?at parameter"}}}}}}