Paginación y sincronización
Páginas con cursor
Las listas responden una página a la vez:
{ "data": [ { "id": "…", "updated_at": "2026-09-30T14:05:00Z", "…": "…" } ], "next_cursor": "WyIyMDI2LTA5…" }
Envía limit (hasta 200) y, para la página siguiente, el next_cursor que recibiste como cursor. next_cursor es null en la última página. Un cursor es opaco: no lo construyas ni lo modifiques.
curl "https://api.letsrealty.io/v1/leads?limit=200&cursor=WyIyMDI2LTA5…" \
-H "Authorization: Bearer $LETSREALTY_API_KEY"
Las listas vienen en orden de cambio: primero lo actualizado hace más tiempo, por (updated_at, id). Un registro que cambia mientras paginas pasa al final, así que una pasada completa nunca se salta nada.
Listas paginadas: GET /v1/leads, GET /v1/inquiries, GET /v1/activities, GET /v1/leads/{lead_id}/activities y GET /v1/events.
Mantener una copia sincronizada
Usa updated_since para traer solo lo que cambió:
- Haz una pasada completa una vez y guarda el
updated_atmás reciente que viste. - Cada pocos minutos, lista con
updated_sinceen un minuto antes de esa hora, pagina hasta el final y haz upsert porid.
El minuto de solapamiento cubre las escrituras que se confirman un instante después de su timestamp; el upsert hace que las repeticiones no causen problemas.
curl "https://api.letsrealty.io/v1/leads?updated_since=2026-09-30T14:04:00Z" \
-H "Authorization: Bearer $LETSREALTY_API_KEY"
updated_since necesita un offset UTC (Z o +00:00).
Leads archivados
DELETE /v1/leads/{lead_id} archiva un Lead (is_active: false) y envía lead.archived; nada se elimina definitivamente a través de la API. Las listas omiten los Leads archivados a menos que envíes include_archived=true; hazlo al sincronizar, para que los archivados lleguen a tu copia.
Filtros
GET /v1/leads también acepta status, tier, owner y q (búsqueda de texto). GET /v1/inquiries acepta lead_id y property_id. Consulta la referencia de la API.
¿Webhooks o polling?
Los webhooks te avisan de los cambios en menos de un minuto. El polling con updated_since es la red de seguridad: si tu endpoint estuvo caído más tiempo que los reintentos, una pasada de sincronización te pone al día. GET /v1/events guarda los eventos de los últimos 30 días con el mismo fin.