findtime.io
Time Intelligence for Apps and Agents
findtime.io now has a production time intelligence surface for apps and agents. The goal is not thin parity with legacy time APIs. The goal is better ambiguity handling, better DST truth, and better cross-timezone workflow intelligence.
You can use this surface from your app backend, internal tools, or MCP clients. Start with /time/answer for raw user prompts, or /time/snapshot when you already know the locations and want packaged time data.
Built on a global location dataset with 62,179 cities, plus country and timezone coverage tuned for accurate resolution, DST handling, and cross-timezone workflows.
Ambiguity-safe
CST, IST, Victoria, San Jose, and other messy inputs return candidates instead of false confidence.
DST truth
Current state, last transition, next transition, and current abbreviation are packaged directly.
Workflow layer
Overlap and meeting-finding move beyond commodity “what time is it?” answers.
Agent-ready
The same production API powers MCP so agents and apps stay on one truth surface.
API Quickstart
If you are building an agent or accepting raw user text, start with /time/answer. If your app already knows the intent, use the narrower deterministic endpoint directly, such as /time/snapshot for one-call packaged time data.
- Every API request uses
Authorization: Bearer YOUR_SECRET_KEY. - All current endpoints are GET requests.
- Use
/time/answerwhen you wantfindtime.ioto classify a natural-language prompt and choose the right deterministic behavior. Use narrower endpoints directly when your app already knows the intent. - Use pipe-delimited values for multi-location inputs such as London|Tokyo|New York.
- If a query is ambiguous, the API returns candidates instead of guessing.
- Batch time snapshots can return partial success with per-location status, so one ambiguous place does not fail the whole request.
curl --request GET \ --url "https://time-api.findtime.io/time/snapshot?query=Tokyo&countryCode=JP&includeTransitions=true" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "time_snapshot.v2",
"resolved": false,
"ambiguous": true,
"partial": true,
"resolvedCount": 1,
"ambiguousCount": 1,
"notFoundCount": 0,
"locations": [
{
"side": 0,
"status": "resolved",
"query": "Iceland",
"resolutionReason": "country=IS",
"location": {
"name": "Reykjavík",
"countryCode": "IS",
"countryName": "Iceland",
"timezoneIana": "Atlantic/Reykjavik"
},
"timezone": {
"iana": "Atlantic/Reykjavik",
"abbreviation": "GMT",
"utcOffset": "UTC+0"
}
},
{
"side": 1,
"status": "ambiguous",
"query": "Paris",
"primaryCandidate": {
"countryCode": "FR",
"countryName": "France",
"timezoneIana": "Europe/Paris",
"suggestedQuery": "Paris, France"
}
}
]
}Why findtime.io API is different
We designed the API around the jobs developers and agents actually need, not around a giant list of thin wrappers. Start with /time/answer for natural-language prompts, or use narrower deterministic endpoints when your integration already knows the intent.
The same production truth surface powers the API, the MCP server, and findtime.io itself. That keeps timezone handling, DST transitions, location resolution, overlap windows, and meeting suggestions aligned across the website, integrations, and agents.
Response contract and disambiguation
The API is designed to surface ambiguity instead of hiding it. When a query is underspecified, the contract is to return enough structure for the caller to retry deterministically rather than silently guessing.
resolved: truemeans the request mapped to a canonical location or timezone and the payload can be used directly.ambiguous: truemeans the input matched multiple valid places or abbreviations. Inspect the candidates and retry with a city, country hint, or IANA timezone./time/answeris the natural-language agent endpoint. It returnsintent,toolUsed,answer, and the underlying deterministic result so callers can audit how the answer was produced. Structured callers can skip classification and call the narrower endpoint directly./time/snapshotcan return partial batch success. Inspect each location row’sstatusinstead of assuming the entire batch resolved or failed together.notFoundor HTTP404means the API could not resolve the input with enough confidence. Start with/locations/searchif you need a deterministic retry path.countryCodeon/locations/searchis a ranking and disambiguation hint. It can move a country to the top of the results, but it does not guarantee that every returned row belongs to that country.- Ambiguous candidates now include both
suggestedQueryandsuggestedIdso apps and agents can retry with either a human-readable city-country form likeParis, Franceor a stablefindtime:id. - Abbreviations such as
IST,CST, andBSTare often ambiguous. Pair them with a country or region, or use/time/answeror/locations/searchto get structured clarification. - Country-name queries for
/time/currentand/time/snapshotare supported directly. Single-zone countries resolve to a canonical city, while multi-zone countries return explicit ambiguity with candidate timezones.
API Keys
Create and manage developer keys from a Google-authenticated findtime.io account. This keeps API access tied to a real developer identity and gives you one place to issue, revoke, and rotate credentials.
- Sign in with Google from the docs top bar.
- Create a key from the docs-styled API Keys console.
- Send it using
Authorization: Bearer YOUR_SECRET_KEYon every API request.
curl --request GET \ --url "https://time-api.findtime.io/time/current?query=Tokyo" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
answer_time_question
/time/answerNatural-language time intelligence for apps and agents. Send the raw user prompt and findtime.io classifies the intent, dispatches to deterministic time behavior, and returns either an answer or structured clarification.
Parameters
querystringRaw natural-language time, timezone, conversion, DST, overlap, scheduling, abbreviation, or IANA question.
userTimezonestringOptionalIANA timezone for the user, used for relative questions like “my time” or “tomorrow”.
localestringOptionalLocale hint such as en-US.
nowstringOptionalISO timestamp for deterministic relative-date handling.
datestringOptionalYYYY-MM-DD date context.
curl --request GET \ --url "https://time-api.findtime.io/time/answer?query=what%20is%20the%20IANA%20timezone%20for%20San%20Francisco%3F" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "answer_time_question.v1",
"resolved": true,
"status": "ok",
"intent": "iana_timezone_lookup",
"query": "what is the IANA timezone for San Francisco?",
"answer": "The IANA timezone for San Francisco, United States is America/Los_Angeles.",
"toolUsed": "get_current_time",
"confidence": "high",
"needsClarification": false,
"result": {
"shape": "current_time.v2",
"resolved": true,
"location": {
"name": "San Francisco",
"countryName": "United States",
"timezoneIana": "America/Los_Angeles"
},
"timezone": {
"iana": "America/Los_Angeles",
"abbreviation": "PDT",
"utcOffset": "UTC-7"
}
}
}time_snapshot
/time/snapshotStart here when you want one-call time intelligence. It resolves the place, packages timezone and DST truth, includes geo, and can optionally include transition detail so callers make fewer follow-up requests.
Parameters
query or locationsstringSingle location query or pipe-delimited list of locations to resolve.
countryCode or countryCodesstringOptionalISO country hint to improve deterministic resolution. Hints improve ranking and disambiguation but do not turn search-like inputs into strict country filters.
includeTransitionsbooleanOptionalAdds last and next timezone transition detail when you need full DST context.
curl --request GET \ --url "https://time-api.findtime.io/time/snapshot?locations=Tokyo|New%20York&countryCodes=JP|US&includeTransitions=true" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "time_snapshot.v2",
"resolved": false,
"ambiguous": true,
"partial": true,
"resolvedCount": 1,
"ambiguousCount": 1,
"notFoundCount": 0,
"locations": [
{
"side": 0,
"status": "resolved",
"query": "Iceland",
"resolutionReason": "country=IS",
"location": {
"name": "Reykjavík",
"countryCode": "IS",
"countryName": "Iceland",
"timezoneIana": "Atlantic/Reykjavik"
},
"timezone": {
"iana": "Atlantic/Reykjavik",
"abbreviation": "GMT",
"utcOffset": "UTC+0"
}
},
{
"side": 1,
"status": "ambiguous",
"query": "Paris",
"primaryCandidate": {
"countryCode": "FR",
"countryName": "France",
"timezoneIana": "Europe/Paris",
"suggestedQuery": "Paris, France"
}
}
]
}get_current_time
/time/currentCurrent local time for a single city or timezone with the same packaged location, timezone, currentTime, dst, and geo model used across the API.
Parameters
city or querystringA city name, timezone abbreviation, IANA zone, or other free-form location query. Exact country-name queries resolve directly when there is one canonical zone, and return explicit ambiguity when a country spans multiple zones.
countryCodestringOptionalISO country hint for duplicate city names like Victoria or San Jose.
curl --request GET \ --url "https://time-api.findtime.io/time/current?city=Tokyo&countryCode=JP" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "current_time.v2",
"resolved": true,
"location": {
"name": "Tokyo",
"countryName": "Japan",
"timezoneIana": "Asia/Tokyo"
},
"timezone": {
"abbreviation": "JST",
"longName": "Japan Standard Time",
"utcOffset": "UTC+9"
},
"currentTime": {
"time24h": "22:31",
"time12h": "10:31 PM",
"weekday": "Tuesday"
},
"dst": {
"observesDST": false,
"isDSTActiveNow": false
}
}get_dst_schedule
/timezone/dstDST truth surface: current state, current abbreviation, last transition, next transition, and yearly DST context without guessing.
Parameters
city, query, or timezonestringLocation input or direct IANA timezone.
countryCodestringOptionalISO hint to break city-name ties.
atstringOptionalISO timestamp, for example `2026-01-15T12:00:00Z`, that anchors lastTransition and nextTransition to a specific reference instant.
yearintegerOptionalCalendar year that adds a year-specific transition view with transitions, springTransition, and fallTransition.
curl --request GET \ --url "https://time-api.findtime.io/timezone/dst?timezone=Europe/London&at=2026-01-15T12:00:00Z&year=2026" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "dst_schedule.v2",
"resolved": true,
"referenceAt": "2026-01-15T12:00:00.000Z",
"location": {
"name": "London",
"countryName": "United Kingdom",
"timezoneIana": "Europe/London"
},
"timezone": {
"abbreviation": "GMT",
"longName": "Greenwich Mean Time",
"utcOffset": "UTC+0"
},
"dst": {
"observesDST": true,
"isDSTActiveNow": false,
"currentAbbreviation": "GMT",
"lastTransition": {
"type": "ends",
"date": "October 26, 2025"
},
"nextTransition": {
"type": "begins",
"date": "March 29, 2026"
},
"year": 2026,
"transitions": [
{
"type": "begins",
"date": "March 29, 2026"
},
{
"type": "ends",
"date": "October 25, 2026"
}
],
"springTransition": {
"type": "begins",
"date": "March 29, 2026"
},
"fallTransition": {
"type": "ends",
"date": "October 25, 2026"
}
}
}convert_time
/time/convertOne-to-one or one-to-many conversion with explicit ambiguity handling. No silent guessing when inputs like CST or Victoria are underspecified.
Parameters
fromstringSource location or timezone.
tostringOne target or pipe-delimited targets.
timestringSource local time to convert.
datestringISO date for the conversion context.
curl --request GET \ --url "https://time-api.findtime.io/time/convert?from=New%20York&to=London|Tokyo&toCountryCodes=GB|JP&time=9:00%20AM&date=2026-03-10" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "convert_time.v2",
"source": {
"location": {
"name": "New York",
"countryName": "United States"
},
"timezone": {
"abbreviation": "EDT"
},
"currentTime": {
"time12h": "9:00 AM"
}
},
"targets": [
{
"location": { "name": "London", "countryName": "United Kingdom" },
"timezone": { "abbreviation": "GMT" },
"currentTime": { "time12h": "1:00 PM" }
},
{
"location": { "name": "Tokyo", "countryName": "Japan" },
"timezone": { "abbreviation": "JST" },
"currentTime": { "time12h": "10:00 PM" }
}
]
}get_overlap_hours
/time/overlapShared business-hours overlap across locations. This is where findtime.io moves from utility to workflow intelligence.
Parameters
locationsstringPipe-delimited list of cities or timezones.
countryCodesstringOptionalPipe-delimited ISO hints aligned with the locations list.
datestringISO date used to compute the overlap window.
curl --request GET \ --url "https://time-api.findtime.io/time/overlap?locations=New%20York|London&countryCodes=US|GB&date=2026-03-10" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "overlap_hours.v2",
"resolved": true,
"overlap": {
"hasOverlap": true,
"minutes": 300,
"window": {
"start": "2026-03-10T13:00:00.000Z",
"end": "2026-03-10T18:00:00.000Z"
}
}
}find_meeting_time
/meeting/findRanked meeting suggestions across multiple cities with a deep link back into findtime.io. This is one of the strongest parity++ surfaces in the platform.
Parameters
locationsstringPipe-delimited list of locations to include in the meeting search.
countryCodesstringOptionalPipe-delimited ISO hints aligned with the locations list.
datestringOptionalISO date to anchor the meeting search.
curl --request GET \ --url "https://time-api.findtime.io/meeting/find?locations=Tokyo|Cairo|New%20York&countryCodes=JP|EG|US" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "find_meeting_time.v2",
"resolved": true,
"options": [
{
"rank": 1,
"score": 0.94,
"deepLink": "https://findtime.io/..."
},
{
"rank": 2,
"score": 0.88,
"deepLink": "https://findtime.io/..."
}
]
}locations/search + locations/:id
/locations/search and /locations/:idSearch locations first, then hydrate exact locations by stable findtime: id. This keeps external callers on a clean, deterministic location model for findtime.io.
Parameters
querystringSearch term such as Victoria, Sao Paulo, or Tokyo.
countryCodestringOptionalISO country hint for ranking and disambiguation. This is a hint, not an exclusive country filter.
limitnumberOptionalMaximum number of search results to return.
curl --request GET \ --url "https://time-api.findtime.io/locations/search?query=Victoria&countryCode=CA&limit=3" \ --header "Authorization: Bearer YOUR_SECRET_KEY"
{
"shape": "locations_search.v2",
"results": [
{
"id": "findtime:victoria|CA|America/Vancouver",
"name": "Victoria",
"countryName": "Canada",
"timezoneIana": "America/Vancouver",
"population": 85792
}
]
}API Quick Reference
- Production base URL:
https://time-api.findtime.io - Natural-language agent call:
/time/answer - Flagship call:
/time/snapshot - Use
/locations/searchfirst when you want deterministic location resolution, then store the returnedfindtime:id. - Every endpoint expects
Authorization: Bearer YOUR_SECRET_KEY. /time/overlapreturns the shared overlap window across locations./meeting/findreturns ranked meeting suggestions built from that overlap.
| Surface | Best for | Why it matters |
|---|---|---|
| answer_time_question | Raw user prompts | Classifies time questions, answers them through deterministic handlers, and returns structured clarification for ambiguity. |
| time_snapshot | Default integration | One-call packaged time intelligence with fewer follow-up requests. |
| get_overlap_hours | Scheduling workflows | Turns time data into useful workflow intelligence. |
| find_meeting_time | Agents and teams | Returns ranked meeting options across cities with a deep link back into findtime.io. |