ConectIQ · documentação
Ver markdown

API server-to-server

Base: https://seu-dominio/api/v1 Autenticação: Authorization: Bearer {chave-secreta-do-projeto} (a chave está em Configurações → Instalação)

Todas as respostas são JSON. Valores com sufixo _cents estão em centavos.


Parâmetros de período

Aceitos por /metrics, /ranking, /comparison e /orders:

ParâmetroValores
periodtoday, yesterday, last_7, last_14, last_30, last_90, this_week, last_week, this_month, last_month, this_year, last_year
start + endYYYY-MM-DD (têm prioridade sobre period)

GET /metrics

curl -H "Authorization: Bearer $KEY" \
  "https://seu-dominio/api/v1/metrics?period=last_30&granularity=day"
{
  "period": { "label": "Últimos 30 dias", "start_date": "…", "days": 30 },
  "metrics": {
    "sessions": 16391, "visitors": 16391, "orders_approved": 731,
    "revenue_cents": 46854700, "net_cents": 39012000, "profit_cents": 30627131,
    "spend_cents": 4189200, "conversion_rate": 4.46, "approval_rate": 80.4,
    "avg_ticket_cents": 64097, "roas": 11.18, "roi": 631.2,
    "cac_cents": 5731, "ltv_cents": 64097, "ltv_cac_ratio": 11.18
  },
  "series": [{ "bucket": "2026-07-03", "revenue_cents": 1250000, "…": 0 }]
}

granularity: hour, day, week, month (padrão: automático).

GET /ranking

ParâmetroValores
dimensionsource, medium, campaign, adset, ad, content, term, product, checkout, payment, country, device
order_byrevenue_cents, profit_cents, orders_approved, roas, roi, conversion_rate, sessions, avg_ticket_cents, spend_cents
limit1–200 (padrão 50)

GET /comparison

Compara o período com o anterior equivalente. against=last_year compara com o mesmo intervalo do ano passado.

GET /orders

status (opcional): approved, refused, pending, refunded, chargeback. limit: 1–500.

POST /orders

Cria ou atualiza um pedido sem passar por webhook. Mesmo formato do webhook genérico (veja o README). Idempotente por order_id.

{ "order_id": "abc123", "status": "approved", "total": 497.00,
  "tracking": { "vid": "…", "sid": "…" } }

Resposta 201 se criou, 200 se atualizou.

POST /ad-spend

Importa investimento em mídia. Aceita lote de até 5.000 linhas — use isto para sincronizar Meta Ads / Google Ads diariamente.

{
  "rows": [
    { "date": "2026-08-01", "source": "facebook",
      "campaign_id": "120210000000001", "campaign_name": "Black Friday",
      "ad_id": "120210000000001-ad1", "ad_name": "Criativo A",
      "spend": 450.00, "impressions": 38000, "clicks": 620, "status": "ACTIVE" }
  ]
}

Idempotente por (data, source, campaign_id, adset_id, ad_id) — reenviar o mesmo dia atualiza em vez de duplicar. As métricas do dia são recalculadas automaticamente.

POST /ask

Pergunta ao assistente de IA.

{ "question": "Qual campanha teve o melhor ROI nos últimos 7 dias?",
  "conversation_id": null }
{ "answer": "…", "conversation_id": 12,
  "tools_used": ["get_ranking", "compare_periods"] }

Responde 503 se a IA não estiver configurada.

GET /health

Sem autenticação — para o load balancer. 200 saudável, 503 degradado.


Endpoints públicos

POST /collect

Coleta de eventos. Normalmente usado pelo track.js, mas pode ser chamado do servidor para eventos que não passam pelo navegador.

{ "k": "CHAVE_PUBLICA", "vid": "uuid", "sid": "uuid",
  "event": "pageview", "url": "https://…", "props": {}, "value": 0 }

POST /webhook/{gateway}/{chave-secreta}

Recebe vendas. Responde 200 imediatamente e processa na fila.


Erros

CódigoSignificado
401Chave ausente ou inválida
403Sem permissão
404Recurso inexistente
419Token CSRF inválido (rotas do painel)
422Parâmetro inválido — o corpo traz error
429Limite de requisições
503Recurso indisponível (ex.: IA não configurada)