{"openapi":"3.1.0","info":{"title":"DateMint by Harlo","version":"0.1.0","description":"DateMint turns natural-language dates and times (\"next Friday at 3pm\", \"in 2 weeks\", \"Dec 25 to Jan 2\") into exact ISO 8601 timestamps in any IANA time zone, DST-aware, relative to a reference time you choose. It also extracts every date mention from a block of text with character offsets, normalizes mixed timestamps (ISO 8601, RFC 2822, Unix s/ms/us/ns, slash dates) to UTC, and returns the current time in a zone. Use it before acting on any date a user typed. Free use needs no key: about 10 calls per minute per IP (REST calls and MCP tools/call), no monthly cap. Rule-based parsing (chrono-node), not an AI model: it reads common date and time phrases and can miss or misread unusual wording, so check results before booking anything that matters. English (en, en-GB) is the most complete; other locales cover common phrases only. Numeric dates like 03/04/2026 are flagged ambiguous (en reads month/day, en-GB day/month). A date with no stated time gets an implied time (time_stated false). Time-zone abbreviations such as CST or IST are ambiguous; pass an IANA timezone instead. resolve reads its text whole; extract scans long text in overlapping pieces (240 characters plus 64 before and 96 after), so a date that crosses a piece boundary is read like any other, except one longer than about 96 characters, which may be split. Runs of more than 64 characters without spaces (URLs, hashes, tokens; Chinese and Japanese characters do not count), runs of more than 16 Chinese numerals, and the middle of a run of 7 or more standalone 1-2 digit numbers (\"1 2 3 4 5 6 7\"; the first and last 3 are still read) are skipped without changing the dates next to them, and a run of more than 8 spaces or line breaks ends a phrase. Extract returns at most max_results dates (default 20, maximum 25; larger values are rejected with HTTP 400) and stops once that many are found (truncated true, truncated_reason \"max_results\"). In number-dense text (tables, long lists of figures) it also stops scanning once roughly 600 numbers have been read (truncated true, truncated_reason \"number_budget\"): the dates it returns are correct, but dates later in the text are not returned, and raising max_results does not change that; send the rest of the text in a separate request. truncated_reason is null when truncated is false. Years 1900-2200. No holiday or business-day calendars. Stateless: text is not stored or logged; no URL fetching. Plans: Free $0 · no key, about 10 requests/min per IP, no monthly cap; Basic $5/mo · 25,000 calls/mo; Pro $15/mo · 250,000 calls/mo.","contact":{"name":"Harlo","email":"digitalpromohub.support@gmail.com"}},"servers":[{"url":"https://datemint.mike-tusa.workers.dev"}],"components":{"securitySchemes":{"apiKey":{"type":"apiKey","in":"header","name":"x-api-key"},"bearer":{"type":"http","scheme":"bearer"}}},"security":[{},{"apiKey":[]},{"bearer":[]}],"paths":{"/v1/resolve":{"post":{"operationId":"resolve","summary":"Turn one date/time phrase (\"next Friday at 3pm\", \"in 2 weeks\", \"tomorrow 9am EST\", \"Dec 25 to Jan 2\") into exact ISO 860","description":"Turn one date/time phrase (\"next Friday at 3pm\", \"in 2 weeks\", \"tomorrow 9am EST\", \"Dec 25 to Jan 2\") into exact ISO 8601 UTC and local timestamps in an IANA zone, with precision, which parts were stated, DST gap/fold flags and ambiguity flags. found:false when no date is recognized. Use before acting on any date a user typed.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string","description":"The phrase (max 512 bytes)."},"timezone":{"type":"string","description":"IANA time zone for reading and reporting local times, e.g. \"America/Denver\". Default UTC."},"reference":{"type":"string","description":"ISO 8601 date or date-time that relative phrases are resolved against (e.g. \"2026-11-11T09:00:00-07:00\"). Default: current server time."},"locale":{"type":"string","enum":["en","en-GB","de","fr","es","pt","nl","it","sv","fi","ru","uk","ja","zh"],"description":"Language of the text. en reads 03/04 as March 4; en-GB as 3 April. Default en."},"forward_date":{"type":"boolean","description":"Always pick the future reading of phrases like \"Friday\" or \"October 5\". Default false (closest reading)."}},"required":["text"]}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Invalid API key"},"413":{"description":"Body too large"},"429":{"description":"Rate limited"}}}},"/v1/extract":{"post":{"operationId":"extract","summary":"Find every date/time mention in a text (max 4 KB) and return each with its character index, matched text and resolved IS","description":"Find every date/time mention in a text (max 4 KB) and return each with its character index, matched text and resolved ISO timestamps (start and optional end of ranges).","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"text":{"type":"string"},"timezone":{"type":"string","description":"IANA time zone for reading and reporting local times, e.g. \"America/Denver\". Default UTC."},"reference":{"type":"string","description":"ISO 8601 date or date-time that relative phrases are resolved against (e.g. \"2026-11-11T09:00:00-07:00\"). Default: current server time."},"locale":{"type":"string","enum":["en","en-GB","de","fr","es","pt","nl","it","sv","fi","ru","uk","ja","zh"],"description":"Language of the text. en reads 03/04 as March 4; en-GB as 3 April. Default en."},"forward_date":{"type":"boolean","description":"Always pick the future reading of phrases like \"Friday\" or \"October 5\". Default false (closest reading)."},"max_results":{"type":"integer","minimum":1,"maximum":25,"default":20,"description":"Stop after this many dates (default 20, max 25); truncated is true when more were found (truncated_reason \"max_results\"), or when the scan stopped early in number-dense text after roughly 600 numbers (truncated_reason \"number_budget\": later dates were not read; send the rest separately)."}},"required":["text"]}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Invalid API key"},"413":{"description":"Body too large"},"429":{"description":"Rate limited"}}}},"/v1/normalize":{"post":{"operationId":"normalize","summary":"Convert up to 100 mixed timestamps (ISO 8601, RFC 2822, Unix seconds/ms/us/ns, slash dates, short date phrases) to UTC a","description":"Convert up to 100 mixed timestamps (ISO 8601, RFC 2822, Unix seconds/ms/us/ns, slash dates, short date phrases) to UTC and local ISO 8601, flagging ambiguous day/month order.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"values":{"type":"array","minItems":1,"maxItems":100,"items":{"type":["string","number"]}},"timezone":{"type":"string","description":"IANA time zone for reading and reporting local times, e.g. \"America/Denver\". Default UTC."},"reference":{"type":"string","description":"ISO 8601 date or date-time that relative phrases are resolved against (e.g. \"2026-11-11T09:00:00-07:00\"). Default: current server time."},"locale":{"type":"string","enum":["en","en-GB","de","fr","es","pt","nl","it","sv","fi","ru","uk","ja","zh"],"description":"Language of the text. en reads 03/04 as March 4; en-GB as 3 April. Default en."}},"required":["values"]}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Invalid API key"},"413":{"description":"Body too large"},"429":{"description":"Rate limited"}}}},"/v1/now":{"get":{"operationId":"now_get","summary":"Current date, time, weekday, UTC offset, ISO week and day of year in an IANA time zone","description":"Current date, time, weekday, UTC offset, ISO week and day of year in an IANA time zone. Useful because models do not know today's date.","parameters":[{"name":"timezone","in":"query","required":false,"schema":{"type":"string"},"description":"IANA time zone; default UTC."}],"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Invalid API key"},"413":{"description":"Body too large"},"429":{"description":"Rate limited"}}},"post":{"operationId":"now_post","summary":"Current date, time, weekday, UTC offset, ISO week and day of year in an IANA time zone","description":"Current date, time, weekday, UTC offset, ISO week and day of year in an IANA time zone. Useful because models do not know today's date.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"timezone":{"type":"string","description":"IANA time zone for reading and reporting local times, e.g. \"America/Denver\". Default UTC."}}}}}},"responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Invalid API key"},"413":{"description":"Body too large"},"429":{"description":"Rate limited"}}}},"/v1/info":{"get":{"operationId":"info","summary":"Supported locales, size caps and limits.","description":"Supported locales, size caps and limits.","responses":{"200":{"description":"OK"},"400":{"description":"Invalid input"},"401":{"description":"Invalid API key"},"413":{"description":"Body too large"},"429":{"description":"Rate limited"}}}}}}