Pular para o conteúdo principal

Consultar um dia ou período

Além de buscar só o que mudou (sincronização incremental), o seu sistema pode pedir todas as vendas ou todos os recebimentos de um dia ou de um período, novos ou antigos. É útil para conferir um fechamento, reprocessar um dia ou fazer a primeira carga de um cliente aos poucos.

Como chamar​

Não envie updated_since. Filtre o período com date_from e date_to:

# todas as vendas do dia 20/10
curl "$BASE_URL/v1/sales?date_from=2026-10-20&date_to=2026-10-20&page=1&page_size=1000" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "X-Company-Token: $COMPANY_TOKEN"

# todos os recebimentos creditados entre 01/10 e 15/10
curl "$BASE_URL/v1/payments?date_from=2026-10-01&date_to=2026-10-15&page=1&page_size=1000" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "X-Company-Token: $COMPANY_TOKEN"
Feeddate_from e date_to filtram por
GET /v1/salessale_date, a data da venda
GET /v1/paymentspayment_date, a data do crédito
  • As datas vão no formato YYYY-MM-DD e os dois dias entram na consulta.
  • Só os últimos 90 dias: date_from e date_to não podem ser anteriores a 90 dias atrás (no horário de Brasília), senão a API responde 400. Recebimentos futuros podem ser consultados normalmente.
  • Pagine como sempre: page=1, 2, 3... com os mesmos parâmetros, até has_more: false.
  • O next_updated_since da página 1 pode ser ignorado nesse uso.
  • Dá para combinar com acquirer e merchant_code, por exemplo para ver só um estabelecimento.

Exemplo em JavaScript​

/** Todas as vendas (ou recebimentos) de um período, em memória */
async function fetchPeriod(client, feed, dateFrom, dateTo) {
const items = []
let page = 1

while (true) {
const url = new URL(`/v1/${feed}`, BASE_URL)
url.search = new URLSearchParams({
date_from: dateFrom,
date_to: dateTo,
page: String(page),
page_size: '1000',
})

const response = await fetch(url, {
headers: {
Authorization: `Bearer ${await getAccessToken()}`,
'X-Company-Token': client.companyToken,
},
})

if (response.status === 429) {
const seconds = Number(response.headers.get('Retry-After') ?? 1)
await sleep(seconds * 1000)
continue // repete a mesma página
}
if (!response.ok) {
throw new Error(`${feed} página ${page}: HTTP ${response.status}`)
}

const { data } = await response.json()
items.push(...data.items)

if (!data.has_more) return items
page += 1
}
}

const sales = await fetchPeriod(client, 'sales', '2026-10-20', '2026-10-20')

BASE_URL, sleep e getAccessToken são os mesmos do exemplo da sincronização incremental.

O retrato é do momento da consulta​

A consulta devolve cada registro como ele está agora. Uma venda do dia 20 cancelada no dia 25 aparece:

Consulta feita emstatus da venda do dia 20
21/10APPROVED
26/10CANCELED

Se o seu sistema guarda o resultado, faça upsert pelo id, como na sincronização incremental. Uma consulta mais recente atualiza o que já estava gravado.

:::tip Dados ainda chegando As adquirentes enviam vendas e recebimentos com algum atraso, e cancelamentos podem chegar dias depois. Um dia consultado logo depois de terminar pode ainda não estar completo. Para fechamentos, consulte o dia de novo depois de alguns dias ou mantenha a sincronização incremental rodando, que traz as mudanças automaticamente. :::

Qual usar​

Seu sistema querUse
Manter os dados sempre em dia, recebendo só o que mudouSincronização incremental, com updated_since
Todos os registros de um dia ou períododate_from e date_to, sem updated_since
Primeira carga de um clienteOs últimos 90 dias, um período por vez se o volume for grande (por exemplo, um mês), com date_from e date_to. Depois, sincronização incremental

Os dois jeitos podem conviver: a sincronização incremental no dia a dia e a consulta por período quando o seu sistema precisar conferir ou refazer um dia.