ZynzapAPI

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": ""
  }
}'
Resposta
{
  "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
    }
  }
}'