Paginação e filtros
Percorra listas grandes página por página e filtre pelo que interessa.
Os endpoints que listam objetos devolvem uma página de cada vez, do mais recente para o mais antigo. Cada resposta diz se há mais itens e traz o cursor para buscar a próxima página.
A resposta de uma listagem
{
"object": "list",
"data": [
{ "id": "ltr_8Kq2wX4mN7pR", "object": "letter", "status": "posted" }
],
"has_more": true,
"next_cursor": "eyJpZCI6Imx0cl84S3Eyd1g0bU43cFIifQ"
}| Campo | O que é |
|---|---|
data | Os itens desta página, completos, do mais recente para o mais antigo. |
has_more | true quando existem mais itens depois desta página. |
next_cursor | O valor para enviar em cursor e buscar a próxima página. null na última. |
No exemplo, cada item foi encurtado. Na resposta real, cada item é o objeto inteiro.
Os parâmetros
| Parâmetro | O que faz |
|---|---|
limit | Quantos itens por página, de 1 a 100. Padrão: 20. |
cursor | O next_cursor da página anterior. Omita para buscar a primeira página. |
O cursor é um texto opaco: não tente montar nem alterar. Ao buscar a próxima página, mantenha os mesmos filtros e o mesmo limit da primeira. Itens criados depois que você começou a percorrer a lista aparecem só em uma nova listagem, a partir da primeira página.
Filtros
Todos os filtros são opcionais e podem ser combinados.
| Endpoint | Filtros |
|---|---|
GET /v1/letters | status, reference, created_after, created_before |
GET /v1/verifications | status, reference, created_after, created_before |
GET /v1/balance/transactions | type, created_after, created_before |
GET /v1/events | type, object_id, created_after, created_before |
statusetypeaceitam um dos valores listados na referência de cada endpoint.referenceencontra os itens com exatamente esse valor dereference. Veja Metadados e referência.created_afterinclui os itens criados a partir desse momento.created_beforeinclui os criados antes dele. Use data e hora ISO 8601, como2026-10-01T00:00:00Z.object_idmostra os eventos de um objeto, como todos os eventos de uma correspondência.
Por exemplo, todas as correspondências postadas em outubro de 2026:
curl "https://api.cartaflow.com.br/v1/letters?status=posted&created_after=2026-10-01T00:00:00Z&created_before=2026-11-01T00:00:00Z&limit=100" \
-H "Authorization: Bearer $CARTAFLOW_API_KEY"Lembre de codificar os valores na URL: o + de um fuso horário, por exemplo, vira %2B. Datas em UTC com Z evitam esse cuidado.
Percorrer todas as páginas
async function* listAll(path, params = {}) {
let cursor;
do {
const query = new URLSearchParams({ ...params, limit: '100', ...(cursor ? { cursor } : {}) });
const response = await fetch(`https://api.cartaflow.com.br/v1${path}?${query}`, {
headers: { Authorization: `Bearer ${process.env.CARTAFLOW_API_KEY}` },
});
const page = await response.json();
yield* page.data;
cursor = page.has_more ? page.next_cursor : undefined;
} while (cursor);
}
for await (const letter of listAll('/letters', { status: 'posted', created_after: '2026-10-01T00:00:00Z' })) {
console.log(letter.id, letter.reference);
}Para acompanhar status, prefira webhooks
Percorrer listas é bom para relatórios e conciliação. Para saber quando cada correspondência muda de status, use webhooks em vez de listar de tempos em tempos.