openthorDocumentação

Resposta e metadados

Toda resposta de sucesso tem duas partes: data (as linhas) e meta (o contexto — de quando são os dados, quanto do seu limite sobrou, se há mais páginas).

O envelope

JSON
{
  "data": [
    { "rep_code": 12, "billed_value": 98123.45, "nfs": 71, "customers": 38 }
  ],
  "meta": {
    "operation": "aggregate",
    "resource": "api.sales_ledger",
    "group_by": ["rep_code"],
    "metrics": ["billed_value", "nfs", "customers"],
    "data_as_of": "2026-07-02T13:40:00.000Z",
    "freshness_minutes": 9,
    "row_count": 1,
    "has_more": false,
    "rate_limit": 600,
    "rate_remaining": 597,
    "plan": "starter",
    "monthly_rows_used": 1292,
    "monthly_rows_limit": 5000000
  }
}

De quando são estes dados?

data_as_of e freshness_minutes dizem quando o coletor sincronizou os dados pela última vez com o seu Winthor. “Dados de 9 minutos atrás” significa exatamente isso — a resposta não é “ao vivo”, é a última foto sincronizada. Para conferências ao centavo contra uma rotina do Winthor, rode as duas no mesmo dia.

R$ 0 honesto

Pedir “vendas de hoje” antes de o faturamento do dia processar devolve zeros — é o estado real do momento, não um erro. O OpenThor nunca inventa número.

Campos do meta

CampoO que significa
data_as_of · freshness_minutesÚltima sincronização do coletor para este dado.
row_countLinhas nesta resposta.
has_moreProvavelmente há mais páginas (vem true quando a página voltou cheia — na última página exatamente cheia também).
offsetDeslocamento usado nesta página.
rate_limit · rate_remainingSeu limite por minuto e quanto resta na janela atual. Não há cabeçalhos X-RateLimit-* — é aqui que a informação mora.
plan · monthly_rows_used · monthly_rows_limitPlano e consumo de linhas no mês (o valor já inclui as linhas desta chamada). Veja Limites e planos.
operation · resource · group_by · metricsO “recibo” da consulta: o que foi executado, sobre qual recurso.