Hourora

Atajos de teclado

/
Buscar una ciudad
H
Cambiar entre 12 y 24 horas
S
Mostrar u ocultar los segundos
T
Tema: día, noche, automático
P
Pausar o reanudar el globo
?
Esta lista
ES

Para desarrolladores

Una API de zonas horarias gratuita

El mismo motor que hace funcionar Hourora, en JSON sencillo: la hora en cualquier lugar, conversiones que tienen en cuenta el horario de verano, todas las zonas IANA y sus cambios de hora. Sin clave y sin registro.

De un vistazo

URL base
https://hourora.app/api/v1
Formato
JSON (UTF-8), solo peticiones GET
Autenticación
Ninguna: sin clave, sin registro, sin cookies
CORS
Abierta a cualquier origen, así que puedes llamarla desde un navegador
Límite de peticiones
120 peticiones por minuto por cliente
Datos horarios
IANA tzdata 2026e, compilados por Hourora
Descripción legible por máquina
Documento OpenAPI 3.1

Pruébala en directo

Elige un ejemplo o edita la ruta y envíala. La petición va directamente de tu navegador a la API.

Respuesta

La respuesta aparecerá aquí.

Los endpoints

Todos los endpoints responden a GET con JSON. Las horas están en ISO 8601; los desfases se expresan en minutos al este de UTC (Nueva York en invierno es −300) y también como texto (−05:00).

Hora actual

GET/api/v1/time

La hora actual en una zona horaria o ciudad: hora local, desfase respecto a UTC, abreviatura, horario de verano y el próximo cambio de hora. Sin parámetros: UTC.

Parámetros

NombreSignificado
tzopcionalNombre de zona horaria IANA, p. ej. Europe/London. Se aceptan alias como Asia/Calcutta, y la respuesta usa el nombre actual.
cityopcionalSlug de ciudad en lugar de tz, p. ej. london (busca slugs con /cities).

Petición de ejemplo

curl "https://hourora.app/api/v1/time?tz=Europe/London"

Respuesta de ejemplo

{
  "zone": "Europe/London",
  "local": "2026-10-14T02:01:24",
  "iso": "2026-10-14T02:01:24+01:00",
  "offsetMinutes": 60,
  "offset": "+01:00",
  "utcOffset": "UTC+1",
  "abbreviation": "BST",
  "dst": true,
  "city": null,
  "utc": "2026-10-14T01:01:24.584Z",
  "unixMs": 1791939684584,
  "date": "2026-10-14",
  "time": "02:01:24",
  "weekday": "Wednesday",
  "dayOfYear": 287,
  "isoWeek": 42,
  "dstObserved": true,
  "nextTransition": {
    "at": "2026-10-25T01:00:00.000Z",
    "unixMs": 1792890000000,
    "type": "dst-end",
    "fromOffsetMinutes": 60,
    "toOffsetMinutes": 0,
    "shiftMinutes": -60,
    "fromAbbreviation": "BST",
    "toAbbreviation": "GMT",
    "localBefore": "2026-10-25T02:00:00",
    "localAfter": "2026-10-25T01:00:00"
  },
  "tzdata": "2026e"
}

Respuesta real de este servidor.

Convertir una hora

GET/api/v1/convert

Una hora de reloj de una zona mostrada en otra. Indica cuándo la hora cae en un salto del horario de verano (no existe) o en un solapamiento (ocurre dos veces).

Parámetros

NombreSignificado
fromobligatorioZona (o slug de ciudad) en la que se lee la hora.
toobligatorioZona (o slug de ciudad) en la que se muestra.
timeopcionalHora de reloj en la zona from, AAAA-MM-DDTHH:mm (segundos opcionales, sin desfase), 1970–2060. Por defecto: ahora.

Petición de ejemplo

curl "https://hourora.app/api/v1/convert?from=America/New_York&to=Asia/Kolkata&time=2026-10-16T15:00"

Respuesta de ejemplo

{
  "status": "ok",
  "requested": "2026-10-16T15:00:00",
  "utc": "2026-10-16T19:00:00.000Z",
  "unixMs": 1792177200000,
  "from": {
    "zone": "America/New_York",
    "local": "2026-10-16T15:00:00",
    "iso": "2026-10-16T15:00:00-04:00",
    "offsetMinutes": -240,
    "offset": "-04:00",
    "utcOffset": "UTC-4",
    "abbreviation": "EDT",
    "dst": true
  },
  "to": {
    "zone": "Asia/Kolkata",
    "local": "2026-10-17T00:30:00",
    "iso": "2026-10-17T00:30:00+05:30",
    "offsetMinutes": 330,
    "offset": "+05:30",
    "utcOffset": "UTC+5:30",
    "abbreviation": "IST",
    "dst": false,
    "dayOffset": 1
  },
  "differenceMinutes": 570,
  "tzdata": "2026e"
}

Respuesta real de este servidor.

Lista de zonas horarias

GET/api/v1/zones

Todas las zonas horarias IANA con su desfase actual respecto a UTC, abreviatura, estado del horario de verano, países y ciudad principal.

Parámetros

NombreSignificado
countryopcionalCódigo de país ISO 3166, p. ej. GB, para quedarse solo con ese país.

Petición de ejemplo

curl "https://hourora.app/api/v1/zones?country=GB"

Respuesta de ejemplo

{
  "asOf": "2026-10-14T01:01:24.584Z",
  "count": 1,
  "tzdata": "2026e",
  "zones": [
    {
      "id": "Europe/London",
      "offsetMinutes": 60,
      "offset": "+01:00",
      "utcOffset": "UTC+1",
      "abbreviation": "BST",
      "dst": true,
      "countries": [
        "GB",
        "GG",
        "IM"
      ],
      "mainCity": "London"
    }
  ]
}

Respuesta real de este servidor; listas recortadas a los primeros 3 elementos.

Una zona horaria

GET/api/v1/zones/{id}

Una zona IANA: sus alias, países y ciudades, su desfase actual, el próximo cambio de hora y todos los cambios de un año determinado.

Parámetros

NombreSignificado
iden la rutaNombre de zona IANA; mantén la barra o codifícala como %2F.
yearopcionalAño cuyos cambios de hora se listan, 1970–2060. Por defecto: este año.

Petición de ejemplo

curl "https://hourora.app/api/v1/zones/America%2FNew_York?year=2027"

Respuesta de ejemplo

{
  "id": "America/New_York",
  "aliases": [
    "US/Eastern"
  ],
  "countries": [
    {
      "code": "US",
      "name": "United States"
    }
  ],
  "cities": [
    {
      "slug": "new-york",
      "name": "New York"
    },
    {
      "slug": "philadelphia",
      "name": "Philadelphia"
    },
    {
      "slug": "miami",
      "name": "Miami"
    }
  ],
  "now": {
    "zone": "America/New_York",
    "local": "2026-10-13T21:01:24",
    "iso": "2026-10-13T21:01:24-04:00",
    "offsetMinutes": -240,
    "offset": "-04:00",
    "utcOffset": "UTC-4",
    "abbreviation": "EDT",
    "dst": true,
    "utc": "2026-10-14T01:01:24.584Z",
    "standardOffsetMinutes": -300,
    "dstObserved": true
  },
  "nextTransition": {
    "at": "2026-11-01T06:00:00.000Z",
    "unixMs": 1793512800000,
    "type": "dst-end",
    "fromOffsetMinutes": -240,
    "toOffsetMinutes": -300,
    "shiftMinutes": -60,
    "fromAbbreviation": "EDT",
    "toAbbreviation": "EST",
    "localBefore": "2026-11-01T02:00:00",
    "localAfter": "2026-11-01T01:00:00"
  },
  "year": 2027,
  "dstObservedInYear": true,
  "transitions": [
    {
      "at": "2027-03-14T07:00:00.000Z",
      "unixMs": 1805007600000,
      "type": "dst-start",
      "fromOffsetMinutes": -300,
      "toOffsetMinutes": -240,
      "shiftMinutes": 60,
      "fromAbbreviation": "EST",
      "toAbbreviation": "EDT",
      "localBefore": "2027-03-14T02:00:00",
      "localAfter": "2027-03-14T03:00:00"
    },
    {
      "at": "2027-11-07T06:00:00.000Z",
      "unixMs": 1825567200000,
      "type": "dst-end",
      "fromOffsetMinutes": -240,
      "toOffsetMinutes": -300,
      "shiftMinutes": -60,
      "fromAbbreviation": "EDT",
      "toAbbreviation": "EST",
      "localBefore": "2027-11-07T02:00:00",
      "localAfter": "2027-11-07T01:00:00"
    }
  ],
  "tzdata": "2026e"
}

Respuesta real de este servidor; listas recortadas a los primeros 3 elementos.

Buscar ciudades

GET/api/v1/cities

Ciudades cuyo nombre coincide, primero las mejores coincidencias y las ciudades más grandes, cada una con su país, coordenadas y zona horaria.

Parámetros

NombreSignificado
qobligatorioParte del nombre de una ciudad, tildes opcionales (80 caracteres como máximo).
limitopcionalNúmero de resultados, 1–50. Por defecto: 10.
countryopcionalCódigo de país ISO 3166, p. ej. GB, para quedarse solo con ese país.

Petición de ejemplo

curl "https://hourora.app/api/v1/cities?q=lond&limit=3"

Respuesta de ejemplo

{
  "query": "lond",
  "count": 3,
  "total": 7,
  "cities": [
    {
      "slug": "london",
      "name": "London",
      "asciiName": "London",
      "country": {
        "code": "GB",
        "name": "United Kingdom"
      },
      "region": "Westminster",
      "zone": "Europe/London",
      "lat": 51.5,
      "lng": -0.1167,
      "population": 7994105,
      "capital": true,
      "url": "https://hourora.app/en/london"
    },
    {
      "slug": "londrina",
      "name": "Londrina",
      "asciiName": "Londrina",
      "country": {
        "code": "BR",
        "name": "Brazil"
      },
      "region": "Paraná",
      "zone": "America/Sao_Paulo",
      "lat": -23.3,
      "lng": -51.18,
      "population": 496035,
      "capital": false,
      "url": "https://hourora.app/en/londrina"
    },
    {
      "slug": "london-ontario",
      "name": "London",
      "asciiName": "London",
      "country": {
        "code": "CA",
        "name": "Canada"
      },
      "region": "Ontario",
      "zone": "America/Toronto",
      "lat": 42.97,
      "lng": -81.25,
      "population": 340900,
      "capital": false,
      "url": "https://hourora.app/en/london-ontario"
    }
  ]
}

Respuesta real de este servidor.

Una ciudad

GET/api/v1/cities/{slug}

Una ciudad por su slug, con el desfase actual de su zona horaria y el próximo cambio de hora.

Parámetros

NombreSignificado
slugen la rutaSlug de ciudad, p. ej. tokyo.

Petición de ejemplo

curl "https://hourora.app/api/v1/cities/tokyo"

Respuesta de ejemplo

{
  "slug": "tokyo",
  "name": "Tokyo",
  "asciiName": "Tokyo",
  "country": {
    "code": "JP",
    "name": "Japan"
  },
  "region": "Tokyo",
  "zone": "Asia/Tokyo",
  "lat": 35.685,
  "lng": 139.7514,
  "population": 22006300,
  "capital": true,
  "url": "https://hourora.app/en/tokyo",
  "now": {
    "zone": "Asia/Tokyo",
    "local": "2026-10-14T10:01:24",
    "iso": "2026-10-14T10:01:24+09:00",
    "offsetMinutes": 540,
    "offset": "+09:00",
    "utcOffset": "UTC+9",
    "abbreviation": "JST",
    "dst": false,
    "utc": "2026-10-14T01:01:24.584Z"
  },
  "nextTransition": null,
  "tzdata": "2026e"
}

Respuesta real de este servidor.

De coordenadas a zona horaria

GET/api/v1/lookup

La ciudad de la lista más cercana a una latitud y longitud, y su zona horaria. Es una aproximación: no se modelan las fronteras entre zonas.

Parámetros

NombreSignificado
latobligatorioLatitud en grados decimales, de −90 a 90.
lngobligatorioLongitud en grados decimales, de −180 a 180.

Petición de ejemplo

curl "https://hourora.app/api/v1/lookup?lat=48.85&lng=2.35"

Respuesta de ejemplo

{
  "query": {
    "lat": 48.85,
    "lng": 2.35
  },
  "approximate": true,
  "method": "nearest listed city (great-circle distance); time-zone borders are not modelled",
  "distanceKm": 2.2,
  "city": {
    "slug": "paris",
    "name": "Paris",
    "asciiName": "Paris",
    "country": {
      "code": "FR",
      "name": "France"
    },
    "region": "Île-de-France",
    "zone": "Europe/Paris",
    "lat": 48.8667,
    "lng": 2.3333,
    "population": 4957589,
    "capital": true,
    "url": "https://hourora.app/en/paris"
  },
  "zone": "Europe/Paris",
  "now": {
    "zone": "Europe/Paris",
    "local": "2026-10-14T03:01:24",
    "iso": "2026-10-14T03:01:24+02:00",
    "offsetMinutes": 120,
    "offset": "+02:00",
    "utcOffset": "UTC+2",
    "abbreviation": "CEST",
    "dst": true,
    "utc": "2026-10-14T01:01:24.584Z"
  },
  "tzdata": "2026e"
}

Respuesta real de este servidor.

Versión de los datos

GET/api/v1/tzdata

De qué versión de la base de datos de zonas horarias IANA proceden las respuestas y cuándo actualizó Hourora sus datos por última vez.

Parámetros

Sin parámetros.

Petición de ejemplo

curl "https://hourora.app/api/v1/tzdata"

Respuesta de ejemplo

{
  "version": "2026e",
  "source": "IANA Time Zone Database",
  "sourceUrl": "https://www.iana.org/time-zones",
  "dataDate": "2026-10-13",
  "range": {
    "from": "1970-01-01",
    "to": "2060-12-31"
  },
  "zones": 344,
  "links": 253,
  "cities": 7269,
  "note": "Outside the compiled range, offsets fall back to the server runtime's own tzdata."
}

Respuesta real de este servidor.

Errores

Los errores también son JSON: el estado HTTP, un código estable para tu programa y un mensaje para las personas.

{
  "error": {
    "code": "unknown_zone",
    "message": "\"Mars/Base\" is not an IANA time zone name. List them with /api/v1/zones."
  }
}
EstadoCódigosCuándo
400missing_parameter, invalid_parameterFalta un parámetro o no tiene el formato esperado.
404unknown_zone, unknown_city, unknown_country, not_foundNo existe esa zona horaria, ciudad, país o endpoint.
429rate_limitedDemasiadas peticiones desde tu cliente; espera los segundos indicados en Retry-After.
500internal_errorAlgo ha fallado por nuestra parte. Vuelve a intentarlo más tarde.

Cómo funciona

Límites y caché

Cada cliente puede enviar hasta 120 peticiones por minuto, con breves ráfagas permitidas. Por encima de eso, la API responde 429 con una cabecera Retry-After. El límite protege un servicio gratuito; si necesitas más, usa la caché.

Cada respuesta indica cuánto tiempo puede almacenarse en caché (Cache-Control). La hora actual nunca se almacena en caché; las listas de zonas, los detalles de ciudades y las consultas por coordenadas, cinco minutos; las búsquedas de ciudades y las conversiones de una hora concreta, un día.

¿Estás creando un reloj? Obtén el desfase una vez, haz avanzar el reloj localmente y vuelve a consultar después del próximo cambio de hora que te indica la respuesta. No hace falta consultar cada segundo.

De dónde salen las respuestas

Los desfases, las abreviaturas y los cambios de hora proceden de la copia compilada por Hourora de la base de datos de zonas horarias IANA, versión 2026e, para 1970–2060. Fuera de ese intervalo se usan los datos integrados del servidor, que pueden ser más antiguos.

Las conversiones resuelven explícitamente los límites del horario de verano: una hora que se salta cuando se adelantan los relojes se indica como salto, y una hora que ocurre dos veces cuando se atrasan se indica como solapamiento, con ambos instantes.

La consulta por coordenadas devuelve la más cercana de unas 7200 ciudades de la lista y la zona de esa ciudad. Cerca de una frontera, en el mar o en una zona poco poblada, puede diferir de la zona que realmente se aplica en ese punto.

Condiciones de uso

Preguntas

Conviene saber

¿La API de Hourora es realmente gratuita?

Sí. No hay clave, ni cuenta, ni plan de pago. Un límite de peticiones por cliente mantiene el servicio justo para todos.

¿Puedo llamarla desde JavaScript en el navegador?

Sí. Todos los endpoints permiten peticiones de origen cruzado desde cualquier sitio web (CORS) y no se necesitan credenciales.

¿Cómo gestiona el horario de verano?

Cada respuesta se calcula para el instante exacto a partir de las reglas de IANA. El endpoint convert también te indica cuándo una hora de reloj solicitada no existe (adelanto de primavera) u ocurre dos veces (retraso de otoño).

¿Qué precisión tiene la consulta por coordenadas?

Devuelve la zona horaria de la ciudad de la lista más cercana, que es correcta en casi todos los lugares habitados. No modela las fronteras entre zonas, así que puede equivocarse cerca de una frontera o en el mar.