Timewell

API reference

A free JSON API for time and time zones. No key, CORS enabled, rate limited to 600 requests per minute per client. Time zone data is updated with every tzdata release.

https://api-eu.rooni.dev/api/v1

Current time

GET/v1/now?tz=Europe/Lisbon

tz is an IANA name or a fixed offset like +05:30. Defaults to UTC.

{
  "timezone": "Europe/Lisbon",
  "datetime": "2026-11-13T12:04:51.208+00:00",
  "utc_datetime": "2026-11-13T12:04:51.208Z",
  "unixtime": 1794657891,
  "utc_offset": "+00:00",
  "abbreviation": "WET",
  "dst": false,
  "day_of_week": 5,
  "week_number": 46,
  "next_transition": {"at": "2027-03-28T01:00:00Z", "utc_offset": "+01:00", "dst": true, "abbreviation": "WEST"}
}

Time zones

GET/v1/timezones?region=America

All IANA zones with their current UTC offset. Cacheable, with ETag.

GET/v1/timezones/Asia/Tokyo

Same as /v1/now?tz=Asia/Tokyo.

Unix timestamps

GET/v1/unix/1794657891?tz=America/Chicago

Converts a timestamp in seconds to a local date and time.

Convert

GET/v1/convert?time=2026-11-20T09:30&from=Europe/Berlin&to=America/New_York,Asia/Singapore

time is local time in the from zone or a Unix timestamp; omit it to use the current time. Up to 12 targets.

Cron schedules

GET/v1/cron?expr=*/15 9-17 * * mon-fri&tz=Europe/Paris&count=5

Next run times of a standard five-field expression. Supports lists, ranges, steps, month and day names, and @hourly, @daily, @weekly, @monthly, @yearly. When both day fields are restricted a run happens if either matches, like Vixie cron.

Errors

{"error":{"code":"unknown_timezone","message":"Unknown time zone \"Europe/Berln\". Use an IANA name such as Europe/Berlin.","request_id":"..."}}

422 for invalid input, 429 when the rate limit is exceeded.