{"openapi":"3.1.0","info":{"title":"Tempo API","version":"0.1.0","description":"Time zones, world clock, meeting planner, DST, public holidays for 200+ countries, business days, date maths, Unix time — keyless, nothing stored.\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://tempo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"hr@unifydynamics.com","url":"https://connectorbay.com/tempo/docs"},"termsOfService":"https://connectorbay.com/tempo/terms"},"servers":[{"url":"https://tempo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/tempo/docs"},"security":[{},{"bearer":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/time_now":{"post":{"operationId":"time_now","summary":"The current time in one or more cities or zones: local date and time, weekday, zone name and abbreviation, UTC offset,","description":"The current time in one or more cities or zones: local date and time, weekday, zone name and abbreviation, UTC offset,\n    whether daylight saving is in effect, and the differences between them. Use for \"what time is it in Tokyo\", \"world\n    clock for my team's cities\", \"is London on BST right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"places":{"description":"One or more cities/zones.","examples":[["Tokyo","New York","UTC"]],"items":{"type":"string"},"title":"Places","type":"array"}},"required":["places"],"title":"time_nowArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/convert_time":{"post":{"operationId":"convert_time","summary":"Convert a time from one city or zone to others, with the date on each side (flagging day changes), offsets and DST","description":"Convert a time from one city or zone to others, with the date on each side (flagging day changes), offsets and DST\n    state. Use for \"3 pm Denver in Mumbai\", \"what is 09:00 UTC in Sydney and São Paulo\", \"when is 8pm ET for me in Berlin\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"time":{"description":"The time to convert: 'now', '14:30', '2026-09-23 14:30', '9am' (today).","examples":["2026-09-23 15:00","9am"],"title":"Time","type":"string"},"from_place":{"description":"A city ('Tokyo', 'Leeds, UK'), an IANA zone ('Asia/Tokyo'), an abbreviation ('PST', 'IST') or an offset ('UTC+5:30').","examples":["Tokyo","America/New_York","PST"],"title":"From Place","type":"string"},"to_places":{"description":"Target cities/zones.","examples":[["Mumbai","London"]],"items":{"type":"string"},"title":"To Places","type":"array"}},"required":["time","from_place","to_places"],"title":"convert_timeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/meeting_planner":{"post":{"operationId":"meeting_planner","summary":"Find times when everyone is within working hours: for a date and 2–8 places, every hour-long slot (or your duration)","description":"Find times when everyone is within working hours: for a date and 2–8 places, every hour-long slot (or your duration)\n    where each place's local time is between `earliest` and `latest`, shown in every zone — and if none exists, the least-bad\n    slots with who is outside hours. Use for \"find a time for Denver, London and Bengaluru\", \"when can SF and Sydney talk\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"places":{"description":"2–8 cities/zones to bring together.","examples":[["Denver","London","Bengaluru"]],"items":{"type":"string"},"title":"Places","type":"array"},"day":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Date YYYY-MM-DD (default: today).","title":"Day"},"earliest":{"default":8,"description":"Earliest acceptable local hour (0–23).","maximum":23,"minimum":0,"title":"Earliest","type":"integer"},"latest":{"default":18,"description":"Latest acceptable local hour, exclusive (1–24).","maximum":24,"minimum":1,"title":"Latest","type":"integer"},"duration_minutes":{"default":60,"description":"Meeting length (15–480).","maximum":480,"minimum":15,"title":"Duration Minutes","type":"integer"}},"required":["places"],"title":"meeting_plannerArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/dst_changes":{"post":{"operationId":"dst_changes","summary":"When the clocks change in a place or zone in a given year — the exact local and UTC moments, direction and offsets","description":"When the clocks change in a place or zone in a given year — the exact local and UTC moments, direction and offsets\n    before/after — or that the zone has no DST. Use for \"when do the clocks go back in the UK\", \"does Arizona change\n    clocks\", \"next DST change in Sydney\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"place":{"description":"A city ('Tokyo', 'Leeds, UK'), an IANA zone ('Asia/Tokyo'), an abbreviation ('PST', 'IST') or an offset ('UTC+5:30').","examples":["Tokyo","America/New_York","PST"],"title":"Place","type":"string"},"year":{"anyOf":[{"maximum":2100,"minimum":1970,"type":"integer"},{"type":"null"}],"default":null,"description":"Year (default current).","title":"Year"}},"required":["place"],"title":"dst_changesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/holidays":{"post":{"operationId":"holidays","summary":"Public holidays for a country and year: date, weekday, name (English and local), whether nationwide or regional (with","description":"Public holidays for a country and year: date, weekday, name (English and local), whether nationwide or regional (with\n    the regions), and type. 200+ countries. Use for \"holidays in Germany 2027\", \"bank holidays in the UK this month\",\n    \"is there a holiday in Japan next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"country":{"description":"Country name or ISO code: 'Germany', 'DE', 'US'.","examples":["Germany","US"],"title":"Country","type":"string"},"year":{"anyOf":[{"maximum":2075,"minimum":1975,"type":"integer"},{"type":"null"}],"default":null,"description":"Year (default current).","title":"Year"},"month":{"anyOf":[{"maximum":12,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Month 1–12 to filter.","title":"Month"},"nationwide_only":{"default":false,"description":"Drop regional/state-only holidays.","title":"Nationwide Only","type":"boolean"}},"required":["country"],"title":"holidaysArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/next_holidays":{"post":{"operationId":"next_holidays","summary":"The next public holidays coming up in a country, with how many days away each is. Use for \"when is the next holiday","description":"The next public holidays coming up in a country, with how many days away each is. Use for \"when is the next holiday\n    in France\", \"what's the next long weekend opportunity\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"country":{"description":"Country name or ISO code: 'Germany', 'DE', 'US'.","examples":["Germany","US"],"title":"Country","type":"string"},"limit":{"default":5,"description":"How many (1–20).","maximum":20,"minimum":1,"title":"Limit","type":"integer"}},"required":["country"],"title":"next_holidaysArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/is_holiday":{"post":{"operationId":"is_holiday","summary":"Whether a date is a public holiday (or a weekend) in a country, and what the holiday is. Use for \"is Monday a holiday","description":"Whether a date is a public holiday (or a weekend) in a country, and what the holiday is. Use for \"is Monday a holiday\n    in Germany\", \"are banks open in the US on 11 November\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"country":{"description":"Country name or ISO code: 'Germany', 'DE', 'US'.","examples":["Germany","US"],"title":"Country","type":"string"},"day":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Date YYYY-MM-DD (default today).","title":"Day"}},"required":["country"],"title":"is_holidayArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/long_weekends":{"post":{"operationId":"long_weekends","summary":"Long weekends in a country for a year — start and end dates, length, and whether a bridge day (a day off) is needed to","description":"Long weekends in a country for a year — start and end dates, length, and whether a bridge day (a day off) is needed to\n    make it. Use for \"long weekends in Germany next year\", \"when can I take one day off for four days away\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"country":{"description":"Country name or ISO code: 'Germany', 'DE', 'US'.","examples":["Germany","US"],"title":"Country","type":"string"},"year":{"anyOf":[{"maximum":2075,"minimum":1975,"type":"integer"},{"type":"null"}],"default":null,"description":"Year (default current).","title":"Year"}},"required":["country"],"title":"long_weekendsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/business_days":{"post":{"operationId":"business_days","summary":"Business-day arithmetic: how many working days between two dates, or the date N working days from a start — skipping","description":"Business-day arithmetic: how many working days between two dates, or the date N working days from a start — skipping\n    weekends (Sat–Sun, or the country's, e.g. Fri–Sat in Saudi Arabia) and, with a country, its national public holidays.\n    Use for \"working days until 15 December\", \"what date is 10 business days from today in the UK\", \"SLA deadline\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Date YYYY-MM-DD.","examples":["2026-12-25"],"title":"Start","type":"string"},"end":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"End date YYYY-MM-DD (exclusive). Give this OR add_days.","title":"End"},"add_days":{"anyOf":[{"maximum":2000,"minimum":-2000,"type":"integer"},{"type":"null"}],"default":null,"description":"Instead of an end date: add this many business days to start (negative to go back).","title":"Add Days"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Country whose weekends and public holidays to skip; omit for Mon–Fri only.","title":"Country"}},"required":["start"],"title":"business_daysArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/date_math":{"post":{"operationId":"date_math","summary":"Date facts and arithmetic: a date's weekday, ISO week, day of year, quarter, days in month, leap year; add or subtract","description":"Date facts and arithmetic: a date's weekday, ISO week, day of year, quarter, days in month, leap year; add or subtract\n    days/weeks/months/years; and the exact gap to another date (a countdown or an age) in days, weeks, months and years. Use\n    for \"what day is 90 days from now\", \"how many days until Christmas\", \"what week number is today\", \"how old is someone\n    born 1990-05-14\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"day":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Base date YYYY-MM-DD (default today).","title":"Day"},"add_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Days to add (negative to subtract).","title":"Add Days"},"add_weeks":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Weeks to add.","title":"Add Weeks"},"add_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Months to add (clamps to month end).","title":"Add Months"},"add_years":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Years to add.","title":"Add Years"},"until":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Another date YYYY-MM-DD to measure the gap to (days, weeks, months, years).","title":"Until"}},"title":"date_mathArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/unix_time":{"post":{"operationId":"unix_time","summary":"Convert between Unix timestamps and readable dates: a timestamp (seconds or ms) → UTC and a chosen zone; an ISO","description":"Convert between Unix timestamps and readable dates: a timestamp (seconds or ms) → UTC and a chosen zone; an ISO\n    datetime → timestamp; or the current epoch. Use for \"what date is 1790000000\", \"epoch for 2026-12-25 midnight UTC\",\n    \"current unix time\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"value":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"A Unix timestamp (seconds or milliseconds) or an ISO datetime ('2026-09-23T14:30:00Z', '2026-09-23 14:30 +05:30'). Omit for now.","title":"Value"},"display_in":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Show the moment in this city/zone as well.","title":"Display In"}},"title":"unix_timeArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}