Geocodificación, consultas de IP y de zona horaria con una sola API HTTP simple

Convierte direcciones en coordenadas y al revés, averigua dónde se ubica una dirección IPv4 o IPv6, obtén la zona horaria o la elevación de cualquier punto y resuelve códigos postales. Envía una solicitud GET y lee el JSON. No hay nada que instalar.

2.500 solicitudes gratuitas al día desde cualquier dirección, sin clave y sin cuenta. ¿Necesitas más? Regístrate con tu nombre y correo electrónico, añade crédito prepago a 0,0001 € por solicitud o elige una clave Unlimited por 50 € al mes. Se aceptan tarjetas y criptomonedas.

$ curl -H "X-API-Key: YOUR_KEY" "https://api.mygeocode.com/v1/reverse?lat=48.8584&lon=2.2945"
{
  "status": "ok",
  "result": {
    "formatted": "5 Avenue Anatole France, 75007 Paris, France",
    "lat": 48.85837,
    "lon": 2.29448,
    "distance_m": 12,
    "precision": "house",
    "components": {
      "house_number": "5",
      "road": "Avenue Anatole France",
      "city": "Paris",
      "postcode": "75007",
      "country": "France",
      "country_code": "fr"
    }
  }
}
2.500solicitudes gratuitas al día, en cada clave
0,0001 €por solicitud en crédito prepago
50 €al mes por una clave Unlimited
17hosts compatibles (drop-in) para las API de otros proveedores
Endpoints

Ocho consultas, una URL base

Todos los endpoints están bajo https://api.mygeocode.com/v1/, aceptan parámetros de consulta y devuelven JSON con la misma estructura. Aprende uno y los conocerás todos.

API de geocodificación directa

GET /v1/forward

Envía una dirección, el nombre de un lugar o una descripción aproximada y obtén las coordenadas, una dirección normalizada y cada una de sus partes.

Detalles y ejemplos

API de geocodificación inversa

GET /v1/reverse

Envía una latitud y una longitud y obtén la dirección más cercana, con la ciudad, la región, el código postal y el país desglosados.

Detalles y ejemplos

API de autocompletado de direcciones

GET /v1/autocomplete

Sugiere direcciones mientras alguien escribe. Cada sugerencia incluye coordenadas, así que rara vez necesitas una segunda llamada.

Detalles y ejemplos

API de consulta de IPv4

GET /v1/ipv4

País, región, ciudad, coordenadas, zona horaria y titular de la red para cualquier dirección IPv4, o para quien hace la llamada si la omites.

Detalles y ejemplos

API de consulta de IPv6

GET /v1/ipv6

Los mismos datos para direcciones IPv6, además del prefijo anunciado al que pertenece la dirección.

Detalles y ejemplos

API de consulta de zona horaria

GET /v1/timezone

Nombre de zona horaria IANA, desfase respecto a UTC, estado del horario de verano y hora local para cualquier coordenada, ahora o en la marca de tiempo que elijas.

Detalles y ejemplos

API de consulta de elevación

GET /v1/elevation

Altura sobre el nivel del mar en metros para un punto, o para hasta 100 puntos en una sola llamada.

Detalles y ejemplos

API de consulta de código postal

GET /v1/postcode

Convierte un código postal en un nombre de lugar, una región y unas coordenadas. Funciona con los códigos ZIP, los postcodes y sus equivalentes en la mayoría de los países.

Detalles y ejemplos
Precisión

Cada resultado indica su precisión

Un geocodificador que devuelve el centro de una ciudad cuando pediste un número de portal es peor que uno que dice que no encontró la casa. Cada resultado que devolvemos lleva un campo precision con uno de cuatro valores, para que tu código decida qué hacer con una coincidencia aproximada en lugar de adivinar.

La cobertura no es igual en todas partes, y preferimos mostrártelo antes que hacer una afirmación general. La página de cobertura indica el mejor nivel que alcanzamos en cada uno de los 249 países y territorios.

Consulta el nivel de cada país

NivelQué representa el punto
houseEl propio edificio o la parcela. El punto está sobre la propiedad.
streetUna posición a lo largo de la calle, interpolada a partir del rango de números de portal de esa manzana.
postcodeEl centro de la zona del código postal.
adminEl centro de la ciudad, el distrito, la región o el país, según cuál sea la coincidencia más específica que pudimos encontrar.
Migración

¿Ya usas la API de otro proveedor? Cambia el nombre del host.

Tenemos hosts compatibles (drop-in) que aceptan las mismas rutas y parámetros que Google Maps, Bing Maps, HERE, Mapbox, Geocode.Farm, Nominatim y otros once, y responden en su formato de respuesta con nuestros datos. Tu código de análisis no cambia. Pon tu clave de My Geocode donde estaba la clave anterior.

Antes
$ curl "https://maps.googleapis.com/maps/api/geocode/json?address=10+Downing+St+London&key=GOOGLE_KEY"
Después
$ curl "https://gapi.mygeocode.com/maps/api/geocode/json?address=10+Downing+St+London&key=MYGEOCODE_KEY"

La misma idea funciona con las bibliotecas de JavaScript. Carga la API de Google Maps JavaScript desde gapi.mygeocode.com y google.maps.Map, Geocoder y Autocomplete de Places siguen funcionando, con cargas de mapa que no cuestan nada. Hay cargadores para el control Bing Maps V8, HERE Maps for JavaScript y MapQuest.js, y configuraciones para los plugins de geocodificación de MapLibre, Mapbox GL y Leaflet.

  • Google Maps
  • Bing Maps
  • HERE
  • Mapbox
  • Geocode.Farm
  • Nominatim
  • OpenCage
  • LocationIQ
  • Geoapify
  • TomTom
  • MapQuest
  • Geocodio
  • PositionStack
  • ip-api
  • ipinfo
  • ipstack
  • Open-Elevation

Hosts compatibles REST Reemplazos compatibles de JavaScript

Cualquier lenguaje

Si puede enviar una solicitud HTTP, puede usar esto

No necesitas ningún SDK. Estos ejemplos geocodifican una dirección e imprimen sus coordenadas. Las bibliotecas oficiales para cada lenguaje están en camino y seguirán siendo capas finas sobre estas mismas llamadas.

$ curl -H "X-API-Key: YOUR_KEY" "https://api.mygeocode.com/v1/forward?q=221B+Baker+Street,+London"

$ curl -H "X-API-Key: YOUR_KEY" "https://api.mygeocode.com/v1/forward?q=221B+Baker+Street,+London"
const url = new URL("https://api.mygeocode.com/v1/forward");
url.searchParams.set("q", "221B Baker Street, London");

const res = await fetch(url, { headers: { "X-API-Key": process.env.MYGEOCODE_KEY } });
const data = await res.json();

const [first] = data.results;
console.log(first.lat, first.lon, first.precision);
import os
import requests

r = requests.get(
    "https://api.mygeocode.com/v1/forward",
    params={"q": "221B Baker Street, London"},
    headers={"X-API-Key": os.environ["MYGEOCODE_KEY"]},
    timeout=10,
)
r.raise_for_status()
first = r.json()["results"][0]
print(first["lat"], first["lon"], first["precision"])
<?php
$url = "https://api.mygeocode.com/v1/forward?" . http_build_query([
    "q" => "221B Baker Street, London",
]);

$context = stream_context_create(["http" => ["header" => "X-API-Key: " . getenv("MYGEOCODE_KEY")]]);
$data = json_decode(file_get_contents($url, false, $context), true);

$first = $data["results"][0];
echo $first["lat"], ", ", $first["lon"], " (", $first["precision"], ")\n";
package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"net/url"
	"os"
)

func main() {
	q := url.Values{"q": {"221B Baker Street, London"}}
	req, _ := http.NewRequest("GET", "https://api.mygeocode.com/v1/forward?"+q.Encode(), nil)
	req.Header.Set("X-API-Key", os.Getenv("MYGEOCODE_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	var data struct {
		Results []struct {
			Lat       float64 `json:"lat"`
			Lon       float64 `json:"lon"`
			Precision string  `json:"precision"`
		} `json:"results"`
	}
	json.NewDecoder(resp.Body).Decode(&data)
	fmt.Println(data.Results[0].Lat, data.Results[0].Lon, data.Results[0].Precision)
}
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;

public class Geocode {
    public static void main(String[] args) throws Exception {
        String q = URLEncoder.encode("221B Baker Street, London", StandardCharsets.UTF_8);
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create("https://api.mygeocode.com/v1/forward?q=" + q))
            .header("X-API-Key", System.getenv("MYGEOCODE_KEY"))
            .build();

        HttpResponse<String> response = HttpClient.newHttpClient()
            .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}
using System.Net.Http;
using System.Text.Json;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-Key", Environment.GetEnvironmentVariable("MYGEOCODE_KEY"));

var q = Uri.EscapeDataString("221B Baker Street, London");
var json = await client.GetStringAsync($"https://api.mygeocode.com/v1/forward?q={q}");

using var doc = JsonDocument.Parse(json);
var first = doc.RootElement.GetProperty("results")[0];
Console.WriteLine($"{first.GetProperty("lat")}, {first.GetProperty("lon")} ({first.GetProperty("precision")})");
require "net/http"
require "json"

uri = URI("https://api.mygeocode.com/v1/forward")
uri.query = URI.encode_www_form(q: "221B Baker Street, London")

req = Net::HTTP::Get.new(uri)
req["X-API-Key"] = ENV["MYGEOCODE_KEY"]
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |http| http.request(req) }

first = JSON.parse(res.body)["results"][0]
puts "#{first["lat"]}, #{first["lon"]} (#{first["precision"]})"

Consulta los planes de SDK y los ejemplos completos para cada lenguaje

Las claves son opcionales

Para registrarte solo necesitas un correo electrónico

Cualquier dirección recibe 2.500 solicitudes gratuitas al día sin ninguna clave, en todos los endpoints y hosts compatibles, contadas desde las 00:00 UTC. Obtener una clave lleva un minuto cuando la quieras: regístrate con tu nombre, una dirección de correo electrónico y una contraseña, y tu primera clave aparece en pantalla. Sin empresa, sin tarjeta. Cada clave tiene sus propias 2.500 solicitudes gratuitas al día, y las solicitudes hechas sin clave desde la misma red comparten esa cuota, así que una cuenta añade crédito, paquetes y un historial de uso, no otras 2.500 gratuitas.

Las claves están vinculadas a las máquinas que las usan. Una clave de pago por uso atiende a dos direcciones IP en cualquier periodo móvil de 24 horas, y una clave Unlimited, a tres. Cada dirección conserva su espacio durante 24 horas desde su primera solicitud y después lo libera. Una solicitud desde una dirección adicional se rechaza y no se cuenta, y eso es lo que impide que una clave filtrada le sirva a otra persona. ¿Necesitas más direcciones? Crea más claves o añade paquetes.

  1. Regístrate y obtén una clave

    Correo electrónico y contraseña. La clave aparece una sola vez; cópiala. 2.500 solicitudes al día, gratis, desde un máximo de dos direcciones IP.

  2. Añade crédito cuando necesites más

    Recarga desde 5 € con tarjeta o criptomonedas. Las solicitudes que superan la cuota gratuita de una clave descuentan 0,0001 € cada una del saldo. El crédito nunca caduca y no se cobra nada de forma automática.

  3. O elige una clave Unlimited

    Por 50 € al mes obtienes una clave sin cargos por solicitud, que se puede usar desde tres direcciones IP por cada periodo móvil de 24 horas. Pide tantos paquetes como aplicaciones tengas.

Precios

Gratis para empezar, fácil de pagar

Todos los endpoints cuestan lo mismo. Todos los hosts compatibles cuentan igual. Sin niveles, sin cargos por usuario, sin contrato. Precios en euros, con pago por tarjeta o criptomonedas.

Clave gratuita

2.500 solicitudes al día en cada clave. Regístrate con tu nombre y correo electrónico; sin tarjeta. Los mismos datos y los mismos endpoints que el uso de pago.

Crédito

0,0001 € por solicitud por encima de las 2.500 gratuitas de cada clave al día, descontados de un saldo que recargas cuando quieras. Sin cuota mensual, sin caducidad. 10.000 solicitudes en un día consumen 0,75 € de crédito.

Clave Unlimited

50 € al mes. Una clave sin cargos por solicitud en todos los endpoints y todos los hosts compatibles, desde un máximo de tres direcciones IP por cada periodo móvil de 24 horas.

Precios completos y ejemplos detallados

SDK

Bibliotecas oficiales, una por lenguaje, todas ligeras

Estamos escribiendo pequeñas bibliotecas cliente para JavaScript y TypeScript, Python, PHP, Go, Java, C#, Ruby y Rust. Cada una te dará respuestas tipadas, tiempos de espera razonables, reintentos ante 429 y 503, y nada más. Cuando una esté lista, se publicará en la página de SDK con su comando de instalación.

Sigue el progreso de los SDK

¿Necesito una clave para probarlo?

No. Cualquier dirección recibe 2.500 solicitudes al día sin clave y sin cuenta. La página de demo envía solicitudes directamente desde el navegador sin ella. Una clave gratuita lleva un minuto cuando quieras crédito, un paquete Unlimited o un historial de uso.

¿Qué pasa en la solicitud 2.501?

Si tu cuenta tiene crédito, la solicitud se procesa y consume 0,0001 €. Si no lo tiene, recibes HTTP 402 hasta las 00:00 UTC o hasta que recargues. Con una clave Unlimited no cambia nada.

¿Por qué una clave está limitada a dos o tres direcciones IP?

Las claves están pensadas para servidores, y el límite significa que una clave que se filtre a un repositorio público no se puede usar desde cien máquinas. Cada dirección conserva su espacio durante 24 horas desde su primera solicitud y después el espacio se libera. Una clave de pago por uso tiene dos espacios, y una clave Unlimited, tres. Para más máquinas, crea más claves o añade paquetes.

¿Puedo guardar los resultados?

Sí. Guárdalos en caché, almacénalos en tu base de datos, muéstralos en un mapa de otro proveedor. Los términos solo piden que no revendas los datos en bruto como un servicio de geocodificación propio.

Envía tu primera solicitud ahora

La demo envía solicitudes reales desde tu navegador con tu clave y abre la respuesta JSON. Una clave gratuita solo pide tu nombre, una dirección de correo electrónico y un minuto; cuando se te queden cortas las 2.500 al día, recarga crédito o añade una clave Unlimited.