Paginação
Paginação por cursor (recomendada) e por página nas operações de listagem.
As listas aceitam dois modos. Prefira o cursor: ele não pula nem repete itens quando a lista muda enquanto você percorre.
Por cursor (recomendado)
Envie limit (padrão 50, máximo 200) e, a partir da segunda página, o cursor com o next_cursor da resposta anterior. next_cursor vazio significa que acabou.
curl -X POST "https://api.zynzap.com.br/v1/rpc/ListContacts" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"limit": 100,
"cursor": ""
}
}'{
"contacts": [{ "id": "9a8b7c6d-5e4f-4321-8765-1a2b3c4d5e6f", "name": "Ana Souza", "phone": "+5511987654321" }],
"page": { "page": 0, "page_size": 0, "total_items": "0", "total_pages": 0, "has_next_page": false },
"next_cursor": "eyJpZCI6IjlhOGI3YzZkIn0"
}Aceitam cursor: ListCalls, ListCampaignAudience, ListCampaignDeliveries, ListCampaignHistory, ListCampaigns, ListContacts, ListConversations, ListCrmContacts, ListCrmListMembers, ListCrmOpportunities, ListCrmTasks, ListDialogTrees, ListFlowRuns, ListMedia, ListMessages, ListMessageTemplates, ListRecoveryRuns e ListViewOnceMedia.
Percorrer tudo
const base = process.env.ZYNZAP_API_BASE_URL ?? "https://api.zynzap.com.br/v1";
async function* allContacts() {
let cursor = "";
do {
const response = await fetch(`${base}/rpc/ListContacts`, {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.ZYNZAP_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ request: { limit: 200, cursor } }),
});
const data = await response.json();
if (!response.ok) throw new Error(`${data.error.code}: ${data.error.message}`);
yield* data.contacts;
cursor = data.next_cursor;
} while (cursor);
}
for await (const contact of allContacts()) console.log(contact.name, contact.phone);Por página (legado)
As listas mais antigas usam pagination: { page, page_size } (page começa em 1; page_size padrão 50, máximo 200) e devolvem page (PageMeta) com total_items, total_pages e has_next_page. Quando a lista também aceita cursor, cursor tem prioridade e pagination.page é ignorado.
Usam só página: ListConnectedDevices, ListQuickReplies, ListSessions e ListWarmupDevices.
curl -X POST "https://api.zynzap.com.br/v1/rpc/ListSessions" \
-H "Authorization: Bearer $ZYNZAP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"request": {
"pagination": {
"page": 2,
"page_size": 50
}
}
}'