Ir al contenido
CDTEC IF · API para clientes

Paginación

Las lecturas, el clima y los riegos vienen por páginas con un cursor opaco. Repite la misma consulta agregando el cursor hasta que venga null.

Cómo funciona

Las rutas paginadas (/lecturas, /estaciones/{estacionId}/clima y /campos/{campoId}/riegos) responden:

{
  "data": [ … hasta `limite` filas … ],
  "paginacion": { "siguienteCursor": "eyJwIjo1MDAs…" }
}

Para la página siguiente, repite exactamente la misma consulta (mismos parámetros) agregando cursor=<siguienteCursor>. Cuando siguienteCursor es null, no hay más filas.

GET /lecturas?sectorId=…&tipoSensor=Soil%20Moisture&desde=…&hasta=…&limite=1000
GET /lecturas?sectorId=…&tipoSensor=Soil%20Moisture&desde=…&hasta=…&limite=1000&cursor=eyJwIjo1MDAs…

Parámetros

ParámetroValoresNotas
limite1 a 1000 (500 por defecto)Filas por página. Usa 1000 para gastar menos peticiones.
cursorel siguienteCursor de la página anteriorOpaco: no lo construyas ni lo modifiques.

Reglas del cursor

Ejemplo completo (Python)

import requests

BASE = "https://api.cdtecif.cl/v1"
H = {"X-Api-Key": LLAVE}
params = {
    "sectorId": sector_id, "tipoSensor": "Soil Moisture", "granularidad": "hora",
    "desde": "2026-10-01T00:00:00-03:00", "hasta": "2026-10-08T00:00:00-03:00", "limite": 1000,
}
filas = []
while True:
    r = requests.get(f"{BASE}/lecturas", headers=H, params=params, timeout=30)
    r.raise_for_status()
    cuerpo = r.json()
    filas.extend(cuerpo["data"])
    cursor = cuerpo.get("paginacion", {}).get("siguienteCursor")
    if not cursor:
        break
    params["cursor"] = cursor
print(len(filas), "filas")