openthorDocumentação

Sintaxe de consulta

Todos os endpoints são GET e entendem a mesma linguagem de parâmetros. Aprenda uma vez, use em todos.

Filtros: campo=op:valor

Qualquer parâmetro que não seja reservado é um filtro. Sem operador, vale a igualdade; com operador, use campo=op:valor:

OperadorLeia comoExemplo
eqigual arep_code=eq:12 (ou só rep_code=12)
inum destes (lista com vírgula)rep_code=in:5,7,9
gtemaior ou igual adays_overdue=gte:30
ltemenor ou igual amargin_amount=lte:0
gtmaior questock_value=gt:10000
ltmenor queqty_available=lt:1

Os valores são numéricos, exceto nos poucos campos de texto (ex.: goal_level, uf), que aceitam somente eq e in. Cada página de endpoint lista o que é filtrável.

Período: from e to

from e to (formato YYYY-MM-DD) definem a janela sobre a coluna de data do endpoint. As duas pontas são inclusivas — junho inteiro é from=2026-06-01&to=2026-06-30.

Atenção

A janela pedida é cruzada com a janela da credencial: se a sua chave só enxerga a partir de uma data, pedir um from anterior estreita silenciosamente para o que a chave permite.

Escolher o que volta

Endpoints de leitura aceitam fields=a,b,c para devolver só as colunas pedidas. Endpoints agregados aceitam metrics=m1,m2 para escolher as métricas — e os de série temporal aceitam bucket=month|week|day.

Ordenação

sort=coluna ordena crescente; sort=-coluna, decrescente. Só as colunas listadas como ordenáveis em cada endpoint são aceitas.

Paginação

Use limit (respeitando o máximo do endpoint) e offset. Enquanto meta.has_more vier true, há mais páginas.

Total certo vem do agregado

Para totais, use um endpoint /agg/… em vez de somar páginas de leitura — é uma chamada só, sem risco de contar linha duplicada entre páginas.

Exemplo completo

cURL
# títulos vencidos há 30+ dias, maiores primeiro, só 3 colunas
curl -H "Authorization: Bearer ot_live_SEU_TOKEN_AQUI" \
  "https://api.openthor.dev/v1/receivables?days_overdue=gte:30&sort=-amount&limit=10&fields=customer_code,amount,days_overdue"
O que NÃO existe (para não procurar)

Não há cursor de paginação (só limit/offset), não há métodos de escrita (POST/PUT/DELETE) e não há cabeçalhos X-RateLimit-* — o limite vem dentro de meta (veja Resposta e metadados).