Geoapify Timezone API

The Timezone API returns the time zone, exact UTC offset, and local time at coordinates, and lists daylight saving time changes.

Operations 2

GET /timezone Get the timezone and UTC offset at an instant #
GET /timezone/transitions List timezone transitions within an interval #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/geoapify:geoapify-timezone-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

geoapify-timezone-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Geoapify Timezone API
  version: 1.0.2
  description: Look up the timezone and exact UTC offset at coordinates, or list offset transitions.
  contact:
    name: Geoapify
    url: https://geoapify.com
    email: info@geoapify.com
servers:
- url: https://api.geoapify.com/v1
  description: Default API endpoint.
- url: https://api-eu.geoapify.com/v1
  description: Requests to this server are processed exclusively within the European Union.
security:
- ApiKeyInQuery: []
- ApiKeyInHeader: []
tags:
- name: Timezone
  description: Timezones by coordinates.
paths:
  /timezone:
    get:
      tags:
      - Timezone
      operationId: getTimezone
      summary: Get the timezone and UTC offset at an instant
      description: The optional at parameter defaults to the current time. Each timezone includes local time and its next known transition; null means none is known within the bundled range. Supported instants are from 2025-01-01 through 2031-12-31 (UTC). More than one timezone can be returned at a disputed boundary.
      parameters:
      - name: lat
        in: query
        required: true
        description: Latitude.
        schema:
          type: number
          minimum: -90
          maximum: 90
      - name: lon
        in: query
        required: true
        description: Longitude.
        schema:
          type: number
          minimum: -180
          maximum: 180
      - name: at
        in: query
        required: false
        description: RFC 3339 instant with an offset. Defaults to now.
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: Timezone information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimezoneResult'
              example:
                lat: 40.758
                lon: -73.9855
                at: '2027-01-15T14:00:00.000Z'
                tzdb_version: 2026e
                timezones:
                - name: America/New_York
                  type: standard
                  utc_offset: -05:00
                  offset_seconds: -18000
                  abbreviation: EST
                  local_time: '2027-01-15T09:00:00.000-05:00'
                  next_transition:
                    at: '2027-03-14T07:00:00.000Z'
                    before:
                      type: standard
                      utc_offset: -05:00
                      offset_seconds: -18000
                      abbreviation: EST
                    after:
                      type: daylightSaving
                      utc_offset: -04:00
                      offset_seconds: -14400
                      abbreviation: EDT
                    offset_change_seconds: 3600
                    kind: daylight-start
        '400':
          description: Invalid coordinate, date, or range.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              examples:
                invalidCoordinate:
                  summary: Latitude outside the allowed range
                  value:
                    statusCode: 400
                    error: Bad Request
                    message: '"lat" must be less than or equal to 90'
                unsupportedInstant:
                  summary: Instant outside the bundled transition range
                  value:
                    statusCode: 400
                    error: Bad Request
                    message: at is outside the supported transition range
        '401':
          description: Missing or invalid Geoapify API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              example:
                statusCode: 401
                error: Unauthorized
                message: Invalid apiKey
        '429':
          description: Rate limit or quota exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              example:
                statusCode: 429
                error: Too Many Requests
                message: Quota exceeded
        '500':
          description: Internal gateway error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              example:
                statusCode: 500
                error: Internal Server Error
                message: Request failed, please try again later
  /timezone/transitions:
    get:
      tags:
      - Timezone
      operationId: getTimezoneTransitions
      summary: List timezone transitions within an interval
      description: The interval is [from, to), with a maximum span of 366 days, within 2025-01-01 through 2032-01-01 (UTC).
      parameters:
      - name: lat
        in: query
        required: true
        description: Latitude.
        schema:
          type: number
          minimum: -90
          maximum: 90
      - name: lon
        in: query
        required: true
        description: Longitude.
        schema:
          type: number
          minimum: -180
          maximum: 180
      - name: from
        in: query
        required: true
        description: Inclusive RFC 3339 start instant.
        schema:
          type: string
          format: date-time
      - name: to
        in: query
        required: true
        description: Exclusive RFC 3339 end instant.
        schema:
          type: string
          format: date-time
      responses:
        '200':
          description: Timezone information.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimezoneTransitionsResult'
              example:
                lat: 40.758
                lon: -73.9855
                from: '2027-01-01T00:00:00.000Z'
                to: '2028-01-01T00:00:00.000Z'
                tzdb_version: 2026e
                timezones:
                - name: America/New_York
                  transitions:
                  - at: '2027-03-14T07:00:00.000Z'
                    before:
                      type: standard
                      utc_offset: -05:00
                      offset_seconds: -18000
                      abbreviation: EST
                    after:
                      type: daylightSaving
                      utc_offset: -04:00
                      offset_seconds: -14400
                      abbreviation: EDT
                    offset_change_seconds: 3600
                    kind: daylight-start
                  - at: '2027-11-07T06:00:00.000Z'
                    before:
                      type: daylightSaving
                      utc_offset: -04:00
                      offset_seconds: -14400
                      abbreviation: EDT
                    after:
                      type: standard
                      utc_offset: -05:00
                      offset_seconds: -18000
                      abbreviation: EST
                    offset_change_seconds: -3600
                    kind: daylight-end
        '400':
          description: Invalid coordinate, date, or range.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              examples:
                invalidCoordinate:
                  summary: Latitude outside the allowed range
                  value:
                    statusCode: 400
                    error: Bad Request
                    message: '"lat" must be less than or equal to 90'
                invalidInterval:
                  summary: Reversed or overly long interval
                  value:
                    statusCode: 400
                    error: Bad Request
                    message: from must precede to, with an interval of at most 366 days
        '401':
          description: Missing or invalid Geoapify API key.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              example:
                statusCode: 401
                error: Unauthorized
                message: Invalid apiKey
        '429':
          description: Rate limit or quota exceeded.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              example:
                statusCode: 429
                error: Too Many Requests
                message: Quota exceeded
        '500':
          description: Internal gateway error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayError'
              example:
                statusCode: 500
                error: Internal Server Error
                message: Request failed, please try again later
components:
  schemas:
    Timezone:
      allOf:
      - $ref: '#/components/schemas/TimezoneState'
      - type: object
        required:
        - name
        - local_time
        - next_transition
        properties:
          name:
            type: string
          local_time:
            type: string
            format: date-time
          next_transition:
            description: Next known transition after at, or null if none is known within the bundled range.
            anyOf:
            - $ref: '#/components/schemas/Transition'
            - type: 'null'
    GatewayError:
      type: object
      required:
      - statusCode
      - error
      - message
      properties:
        statusCode:
          type: integer
          description: HTTP status code returned by the gateway.
        error:
          type: string
          description: Standard HTTP error name.
        message:
          type: string
          description: Human-readable explanation of the error.
    TimezoneTransitionsResult:
      type: object
      required:
      - lat
      - lon
      - from
      - to
      - tzdb_version
      - timezones
      properties:
        lat:
          type: number
        lon:
          type: number
        from:
          type: string
          format: date-time
        to:
          type: string
          format: date-time
        tzdb_version:
          type: string
        timezones:
          type: array
          items:
            type: object
            required:
            - name
            - transitions
            properties:
              name:
                type: string
              transitions:
                type: array
                items:
                  $ref: '#/components/schemas/Transition'
    TimezoneState:
      type: object
      required:
      - type
      - utc_offset
      - offset_seconds
      - abbreviation
      properties:
        type:
          type: string
          enum:
          - standard
          - daylightSaving
          - other
        utc_offset:
          type: string
        offset_seconds:
          type: integer
        abbreviation:
          type: string
    TimezoneResult:
      type: object
      required:
      - lat
      - lon
      - at
      - tzdb_version
      - timezones
      properties:
        lat:
          type: number
        lon:
          type: number
        at:
          type: string
          format: date-time
        tzdb_version:
          type: string
        timezones:
          type: array
          items:
            $ref: '#/components/schemas/Timezone'
    Transition:
      type: object
      required:
      - at
      - before
      - after
      - offset_change_seconds
      - kind
      properties:
        at:
          type: string
          format: date-time
        before:
          $ref: '#/components/schemas/TimezoneState'
        after:
          $ref: '#/components/schemas/TimezoneState'
        offset_change_seconds:
          type: integer
        kind:
          type: string
          enum:
          - daylight-start
          - daylight-end
          - offset-change
          - designation-change
  securitySchemes:
    ApiKeyInQuery:
      type: apiKey
      in: query
      name: apiKey
      description: Geoapify API key query parameter. Recommended authentication method for public APIs. API keys in URLs can be logged; use x-api-key for server-to-server clients.
    ApiKeyInHeader:
      type: apiKey
      in: header
      name: x-api-key
      description: Geoapify API key header. Supported as an alternative authentication method for public APIs.
x-provenance:
  method: harvested
  publisher: Geoapify
  source: https://apidocs.geoapify.com/assets/openapi/specs/timezone/timezone-api-openapi-specs.json
  note: split by refine-openapis from the provider's own published document, verified by fetch (openapi/_original/*.fetch.json);
    stamped by stamp-openapi-provenance.py (roadmap#793)