TenkaTenka
সাইন ইন

Tenka সহায়তা কেন্দ্র › ডেভেলপার এলাকা › Paginação e sincronização

এই বিষয়বস্তুর কিছু অংশ এখনও পর্তুগিজ ভাষায় — আপনার ভাষায় অনুবাদ চলছে।

Paginação e sincronização

Página a página ou só o que mudou desde a última vez.

Dois modos

Página a página

limit e offset: o modo de sempre, para telas e relatórios. A ordem de cada recurso é fixa e não muda entre versões.

Só o que mudou (incremental)

desde (data ou data e hora) liga o modo incremental: vêm só os registros criados ou alterados a partir dali, em ordem de alteração. A resposta traz proximoDesde, proximoId e temMais; devolva os dois primeiros em desde e depoisDe na chamada seguinte até temMais ser false.

Parâmetros de paginação

NomeTipoDescrição
limitintegerMáx. de itens (até 200).
offsetintegerDeslocamento para paginação.
desdestringSó o que mudou a partir deste instante (ISO-8601: 2026-08-27 ou 2026-08-27T14:30:00). Ativa o modo incremental: a resposta traz proximoDesde/proximoId/temMais, que você devolve na chamada seguinte.
depoisDeintegerUse o proximoId da resposta anterior, junto com proximoDesde em 'desde'. Desempata registros gravados no mesmo instante.

O envelope da resposta

NomeTipoDescrição
dataarrayOs registros da página.
moedastringMoeda funcional da conta (ISO 4217) em que os valores estão.
limitintegerO limit aplicado.
offsetintegerO offset aplicado.
countintegerQuantos registros vieram nesta página.
desdestringSó no modo incremental: o corte aplicado.
temMaisbooleanHá outra página.
proximoDesdestringSó no modo incremental: devolva em desde na chamada seguinte.
proximoIdintegerSó no modo incremental: devolva em depoisDe na chamada seguinte.

O laço de sincronização

Guarde proximoDesde e proximoId depois de cada página e, na próxima execução, comece deles. Registros gravados no mesmo instante não se perdem nem se repetem, porque o cursor é o par data e id.

Python
import os
import requests

BASE = "https://tenka.app.br/api/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['TENKA_API_KEY']}"}
desde, depois_de = "2026-10-01", None  # the last saved checkpoint

while True:
    params = {"desde": desde, "limit": 200}
    if depois_de:
        params["depoisDe"] = depois_de
    page = requests.get(f"{BASE}/clientes", headers=HEADERS, params=params, timeout=30).json()
    if "erro" in page:
        raise RuntimeError(page["erro"])
    for record in page["data"]:
        save(record)
    if "proximoDesde" in page:
        desde, depois_de = page["proximoDesde"], page["proximoId"]
    if not page["temMais"]:
        break
save_checkpoint(desde, depois_de)