Paginación, filtros y ordenamiento
Los endpoints de listado en la API de
watsi usan paginación basada en cursor para entregar grandes conjuntos de resultados de forma eficiente. Esta guía explica cómo paginar, filtrar y ordenar las respuestas de la API.
Paginación basada en cursor
Cada endpoint de listado devuelve un objeto JSON con el arreglo del recurso y un booleano hasMore. Cuando hasMore es true, hay páginas adicionales disponibles.
GET /api/v1/conversations?limit=20
{
"chats": [ ... ],
"hasMore": true
}Para obtener la siguiente página, pase el parámetro before con la marca de tiempo ISO 8601 del campo created_at o last_message_at del último elemento:
GET /api/v1/conversations?limit=20&before=2025-03-15T10:30:00.000Z
Parámetros de paginación
| Parámetro | Tipo | Descripción |
|---|---|---|
limit | integer | Número de elementos por página. Predeterminado: 20. Máximo: 100. |
before | string | Cursor de fecha y hora ISO 8601. Devuelve los elementos creados antes de esta marca de tiempo. |
Paginar por todos los resultados
Ejemplo: obtener todas las conversaciones página por página.
async function fetchAllConversations(apiKey) {
let before = undefined
const all = []
while (true) {
const url = new URL('https://api.watsi.ai/api/v1/conversations')
url.searchParams.set('limit', '100')
if (before) url.searchParams.set('before', before)
const res = await fetch(url, {
headers: { Authorization: `Bearer ${apiKey}` },
})
const data = await res.json()
all.push(...data.chats)
if (!data.hasMore) break
before = data.chats.at(-1).last_message_at
}
return all
}Filtros
Algunos endpoints de listado aceptan parámetros de consulta para acotar los resultados. Los filtros disponibles dependen del tipo de recurso.
| Endpoint | Parámetros de filtro |
|---|---|
GET /api/v1/conversations | status, assigned_user_id |
GET /api/v1/customers | search (nombre o teléfono), tag_id |
GET /api/v1/templates | status (approved, pending, rejected) |
Ejemplo: obtener solo las conversaciones abiertas:
GET /api/v1/conversations?status=open&limit=20
Ordenamiento
Los endpoints de listado devuelven los resultados ordenados por más reciente primero (descendente por marca de tiempo). Este orden predeterminado es consistente en todos los recursos y no puede cambiarse mediante parámetros de consulta.
El modelo de paginación basada en cursor depende de este orden — el parámetro before siempre retrocede en el tiempo.
Sobre de respuesta
Cada tipo de recurso usa una clave predecible en el objeto de respuesta:
| Endpoint | Clave de respuesta |
|---|---|
/api/v1/conversations | chats |
/api/v1/customers | customers |
/api/v1/templates | templates |
/api/v1/tags | tags |
/api/v1/users | users |
Todas las respuestas de listado también incluyen hasMore: boolean en el nivel superior.