openapi: 3.0.1 info: title: World Time Geo API version: '2025-10-01' description: API to get the current local time details for a given timezone or IP address servers: - url: https://public.timeapi.world/api/ tags: - name: Geo paths: /geo: get: summary: 'request geolocation data based on the ip of the request. note: this is a "best guess" obtained from open-source data.' responses: '200': description: geolocation data for the client IP in JSON format content: application/json: schema: $ref: '#/components/schemas/GeoJsonResponse' example: ip: 1.1.1.1 latitude: -33.8591 longitude: 151.2002 accuracy_radius: 1000 timezone: Australia/Sydney city: Sydney postal_code: '2000' metro_code: null subdivisions: - code: NSW name: New South Wales country: code: AU name: Australia continent: code: OC name: Oceania is_in_european_union: false is_anonymous_proxy: false is_satellite_provider: false is_anycast: false default: $ref: '#/components/responses/ErrorJsonResponse' tags: - Geo /geo/{ip}: get: summary: 'request geolocation data for a specific IPv4 or IPv6 address. note: this is a "best guess" obtained from open-source data.' parameters: - name: ip in: path required: true description: IPv4 or IPv6 address schema: type: string examples: ipv4: value: 1.1.1.1 summary: IPv4 address ipv6: value: 2606:4700:4700::1111 summary: IPv6 address (Cloudflare DNS) responses: '200': description: geolocation data for the specified IP in JSON format content: application/json: schema: $ref: '#/components/schemas/GeoJsonResponse' example: ip: 1.1.1.1 latitude: -33.8591 longitude: 151.2002 accuracy_radius: 1000 timezone: Australia/Sydney city: Sydney postal_code: '2000' metro_code: null subdivisions: - code: NSW name: New South Wales country: code: AU name: Australia continent: code: OC name: Oceania is_in_european_union: false is_anonymous_proxy: false is_satellite_provider: false is_anycast: false default: $ref: '#/components/responses/ErrorJsonResponse' tags: - Geo /geo/{ip}.txt: get: summary: 'request geolocation data for a specific IPv4 or IPv6 address. note: this is a "best guess" obtained from open-source data.' parameters: - name: ip in: path required: true description: IPv4 or IPv6 address schema: type: string examples: ipv4: value: 1.1.1.1 summary: IPv4 address ipv6: value: 2606:4700:4700::1111 summary: IPv6 address (Cloudflare DNS) responses: '200': description: geolocation data for the specified IP in plain text content: text/plain: schema: $ref: '#/components/schemas/GeoTextResponse' example: 'ip: 1.1.1.1 latitude: -33.8591 longitude: 151.2002 accuracy_radius: 1000 timezone: Australia/Sydney city: Sydney postal_code: 2000 subdivisions: NSW (New South Wales) country_code: AU country_name: Australia continent_code: OC continent_name: Oceania is_in_european_union: false is_anonymous_proxy: false is_satellite_provider: false is_anycast: false ' default: $ref: '#/components/responses/ErrorTextResponse' tags: - Geo components: schemas: GeoSubdivision: type: object required: - code - name properties: code: type: string description: ISO 3166-2 subdivision code name: type: string description: subdivision name ErrorTextResponse: type: string description: details about the error encountered in plain text GeoJsonResponse: type: object required: - ip - latitude - longitude - accuracy_radius - timezone - city - postal_code - metro_code - subdivisions - country - continent - is_in_european_union - is_anonymous_proxy - is_satellite_provider - is_anycast properties: ip: type: string description: the IP address that was looked up latitude: type: number nullable: true description: latitude coordinate longitude: type: number nullable: true description: longitude coordinate accuracy_radius: type: integer nullable: true description: accuracy radius in kilometers timezone: type: string nullable: true description: timezone in `Area/Location` or `Area/Location/Region` format city: type: string nullable: true description: city name postal_code: type: string nullable: true description: postal code metro_code: type: integer nullable: true description: metro code (US only) subdivisions: type: array description: list of subdivisions (e.g., states, provinces) items: $ref: '#/components/schemas/GeoSubdivision' country: type: object required: - code - name properties: code: type: string nullable: true description: ISO 3166-1 alpha-2 country code name: type: string nullable: true description: country name continent: type: object required: - code - name properties: code: type: string nullable: true description: two-letter continent code name: type: string nullable: true description: continent name is_in_european_union: type: boolean description: whether the location is in the European Union is_anonymous_proxy: type: boolean description: whether the IP belongs to an anonymous proxy (VPN, Tor, etc.) is_satellite_provider: type: boolean description: whether the IP belongs to a satellite internet provider is_anycast: type: boolean description: whether the IP is an anycast address GeoTextResponse: type: string description: 'geolocation details, as per the GeoJsonResponse response, in the format `key: value`, one item per line' ErrorJsonResponse: required: - error properties: error: type: string description: details about the error encountered responses: ErrorTextResponse: description: an error response in plain text content: text/plain: schema: $ref: '#/components/schemas/ErrorTextResponse' ErrorJsonResponse: description: an error response in JSON format content: application/json: schema: $ref: '#/components/schemas/ErrorJsonResponse'