Pular para o conteúdo

Paginação

As listagens são paginadas com cursores keyset assinados, ordenados por id crescente. A página padrão é 50 e o máximo é 100.

{
"data": [ /* … */ ],
"pagination": { "limit": 50, "has_more": true, "next_cursor": "cur_..." }
}

Este é o erro de integração mais comum contra esta API.

Uma página pode voltar curta, ou até vazia, com has_more em true. O serviço limita quanto varre por requisição, então numa janela esparsa as linhas restantes vêm na chamada seguinte, em vez de numa resposta única e lenta.

// Certo
let cursor = null;
do {
const page = await fetchPage(cursor);
await handle(page.data);
cursor = page.pagination.next_cursor;
} while (cursor);
// Errado — para cedo numa janela esparsa
let page = await fetchPage();
while (page.data.length > 0) { /* … */ }

O next_cursor é assinado e cobre todos os filtros da requisição que o gerou. Devolva-o sem alterar, com os mesmos filtros. Mudar um filtro no meio da travessia, ou editar o cursor, devolve 400 INVALID_CURSOR em vez de retornar silenciosamente uma fatia diferente.

Para trocar de filtro, comece uma travessia nova, sem cursor.

Ordenar por id crescente torna a travessia estável sem snapshot: registros criados enquanto você pagina recebem ids maiores, então caem depois da sua posição atual e nunca deslocam uma página que você já leu.

O trade-off é o espelho disso: um registro que fica concluído depois de você já ter passado pelo id dele não entra na travessia em andamento. Ele aparece na sua próxima passada por aquela janela.

É por isso que a v1 não tem sync incremental — não existe carimbo dedicado de “ficou visível” que tornasse um delta honesto. O updated_at é informativo; não use como marca d’água de sincronização. Reconsulte por período:

Terminal window
curl ".../v1/meetings?meeting_after=2026-01-01T00:00:00Z&meeting_before=2026-02-01T00:00:00Z"
ParâmetroFiltra por
meeting_after / meeting_beforeQuando a reunião ou ligação aconteceu. É o filtro que a maioria das integrações quer.
created_after / created_beforeQuando o registro foi criado na Salesbud.
owner_emailDono exato, sem diferenciar maiúsculas.
typevideo ou audio — a mídia, não o tipo de recurso.
audienceinternal ou external.
has_transcriptSe existe recurso de transcrição.

Todos os carimbos de tempo são RFC 3339 com offset explícito. 2026-01-01T00:00:00Z é válido; 2026-01-01 não é, e devolve 400 INVALID_DATETIME.