Skip to content

Referencia de Endpoints de la API

Base URL: http://localhost:8080


GET /colonias

Busca colonias con múltiples combinaciones de filtros.

Query Parameters

ParámetroTipoRequeridoDescripción
cpstringcondicional*Código postal, entre 3 y 5 dígitos (ej. 067, 0671, 06700)
nombrestringcondicional*Nombre de colonia exacto o parcial (mínimo 3 chars, case-insensitive)
municipio_idstringnoFiltra por ID de municipio
incluir_geoboolno (default: false)Si es true, incluye el polígono GeoJSON y el centroide
solo_geoboolno (default: false)Si es true, devuelve solo colonias que tienen geometría registrada
limitintnoMáximo de resultados a devolver (default: 100, máx: 500; con incluir_geo=true default: 50, máx: 100)
paginaintno (default: 1)Número de página (empieza en 1). Usa junto con limit para navegar resultados.

* Al menos cp o nombre es obligatorio.

Combinaciones soportadas

#ParámetrosDescripción
1?cp=06700CP exacto
2?cp=067CP por prefijo parcial
3?nombre=RomaNombre parcial (case-insensitive)
4?cp=067&nombre=RomaCP + nombre combinados
5?nombre=Centro&municipio_id=014Nombre + municipio (resuelve duplicados)
6?cp=067&municipio_id=015CP + municipio
7?solo_geo=true&cp=067Solo colonias con polígono GeoJSON
8?cp=067&incluir_geo=trueIncluye geometría en la respuesta

Respuesta exitosa (200 OK)

json
{
  "resultados": [
    {
      "codigo": "06700",
      "nombre": "Roma Norte",
      "tipo": "Colonia",
      "ciudad": "Ciudad de México",
      "zona": "Urbano",
      "estado_id": "09",
      "municipio_id": "015"
    }
  ],
  "total": 42,
  "limit": 10,
  "pagina": 1,
  "total_paginas": 5,
  "pagina_anterior": null,
  "pagina_siguiente": "/colonias?cp=067&limit=10&pagina=2"
}

Con incluir_geo=true:

json
{
  "resultados": [
    {
      "codigo": "06700",
      "nombre": "Roma Norte",
      "tipo": "Colonia",
      "ciudad": "Ciudad de México",
      "zona": "Urbano",
      "estado_id": "09",
      "municipio_id": "015",
      "geometria": "{\"type\":\"Polygon\",\"coordinates\":[...]}",
      "centro_lon": -99.1634,
      "centro_lat": 19.4181
    }
  ]
}

Respuestas de error

CódigoCausaEjemplo
400 Bad RequestFalta cp y nombre{"error": "parametros invalidos", "detalle": "debes proporcionar cp o nombre"}
400 Bad Requestcp con menos de 3 o más de 5 caracteres{"error": "parametros invalidos", "detalle": "cp invalido: usa entre 3 y 5 digitos (ej. 067 o 06700)"}
400 Bad Requestcp contiene caracteres no numéricos{"error": "parametros invalidos", "detalle": "cp invalido: solo se permiten digitos"}
400 Bad RequestValor inválido en incluir_geo o solo_geo{"error": "incluir_geo debe ser true o false"}
400 Bad RequestValor inválido en limit{"error": "limit debe ser un número entero positivo"}
400 Bad Requestpagina con valor menor a 1 o no numérico{"error": "parametros invalidos", "detalle": "pagina debe ser un número entero mayor a 0"}
404 Not FoundNinguna colonia coincide con los filtros{"error": "no se encontraron resultados", "detalle": "ajusta tus filtros e intenta de nuevo"}
500 Internal Server ErrorError inesperado de base de datos{"error": "error interno", "detalle": "ocurrio un error procesando la solicitud"}

GET /municipios

Busca municipios por nombre y/o estado.

Query Parameters

ParámetroTipoRequeridoDescripción
nombrestringcondicional*Nombre de municipio exacto o parcial (mínimo 3 chars, case-insensitive)
estado_idstringcondicional*ID del estado al que pertenece el municipio

* Al menos nombre o estado_id es obligatorio.

Combinaciones soportadas

#ParámetrosDescripción
1?nombre=ZapopanMunicipio por nombre parcial
2?nombre=Centro&estado_id=09Nombre filtrado por estado
3?estado_id=14Todos los municipios de un estado

Respuesta exitosa (200 OK)

json
{
  "resultados": [
    {
      "id": "120",
      "nombre": "Zapopan",
      "estado_id": "14"
    }
  ]
}

Respuestas de error

CódigoCausa
400 Bad RequestFalta nombre y estado_id
404 Not FoundNingún municipio coincide

GET /coordenadas

Geocodificación inversa: dado un punto geográfico, devuelve la colonia a la que pertenece.

Query Parameters

ParámetroTipoRequeridoDescripción
latfloat64Latitud del punto (rango: -90 a 90)
lonfloat64Longitud del punto (rango: -180 a 180)
estado_idstringnoAcota la búsqueda a un estado específico (recomendado para mayor rendimiento)
incluir_geoboolno (default: false)Si es true, incluye el polígono GeoJSON y el centroide en la respuesta

Ejemplo de uso

GET /coordenadas?lat=19.4181&lon=-99.1634
GET /coordenadas?lat=19.4181&lon=-99.1634&estado_id=09
GET /coordenadas?lat=19.4181&lon=-99.1634&incluir_geo=true

Respuesta exitosa (200 OK)

json
{
  "resultado": {
    "codigo": "06700",
    "nombre": "Roma Norte",
    "tipo": "Colonia",
    "ciudad": "Ciudad de México",
    "zona": "Urbano",
    "estado_id": "09",
    "municipio_id": "015"
  }
}

Con incluir_geo=true:

json
{
  "resultado": {
    "codigo": "06700",
    "nombre": "Roma Norte",
    "tipo": "Colonia",
    "ciudad": "Ciudad de México",
    "zona": "Urbano",
    "estado_id": "09",
    "municipio_id": "015",
    "geometria": "{\"type\":\"Polygon\",\"coordinates\":[...]}",
    "centro_lon": -99.1634,
    "centro_lat": 19.4181
  }
}

Nota: La respuesta de /coordenadas es un objeto único ("resultado"), no un array, ya que un punto geográfico pertenece exactamente a una colonia.

Respuestas de error

CódigoCausa
400 Bad RequestFalta lat o lon
400 Bad Requestlat o lon no son números válidos
400 Bad Requestlat fuera de rango [-90, 90] o lon fuera de [-180, 180]
404 Not FoundEl punto no cae dentro de ninguna colonia registrada

Notas generales

Lógica de búsqueda parcial vs. exacta

Para búsquedas de texto (cp, nombre), la lógica es:

  • Si el valor tiene 3 o más caracteres: se usa LIKE '%valor%' (búsqueda parcial, case-insensitive).
  • Si el valor tiene menos de 3 caracteres: se usa = valor (coincidencia exacta).

El campo geometria

El campo geometria contiene un GeoJSON válido en texto. Se omite del JSON de respuesta por defecto para reducir el tamaño de las respuestas. Solo se incluye cuando el cliente envía incluir_geo=true.

Los campos centro_lon / centro_lat

Representan el centroide geográfico de la colonia, útil para centrar un mapa. Igual que geometria, solo se incluyen cuando incluir_geo=true.