Skip to content
Docs

This page has not been translated yet — you are reading the Portuguese version. View in Portuguese

PreviewUpdated on 2026-09-08

Endpoint: POST /api/v1/query

Referência do endpoint de SQL livre somente-leitura (SELECT) escopado ao workspace, com defesas em camadas e guarda de custo.

On this page (8)

Selo de estado: Preview (badge) — na prática, FORA DE GA: SQL livre via API está indisponível para uso externo hoje (dispara processamento cobrável no datalake; rate-limit fail-closed em endurecimento). Atualizado em 2026-09-08.

Fora de GA hoje

Contrato documentado para planejamento. Não construa integrações críticas sobre SQL livre via API enquanto não for liberado. Para leitura externa hoje, use o feed OData.

Executa SQL somente leitura (SELECT/WITH … SELECT) escopado ao workspace, sobre os marts publicados. Não há API de escrita.

Resumo#

Método · rotaPOST /api/v1/query
Basehttps://ingestia.io
AuthChave de API + escopo read/read_query
Papel (RBAC)data.query.run (admin+); chave de dados = owner
Corpo{ "sql": string, "limit"?: number }
Custobytes reais processados no datalake; cache de query idêntica = R$ 0
Estados200 · 400 · 401 · 403 · 429 · 402 · 502 · 503

Defesas aplicadas (em camadas, antes de tocar o datalake)#

  1. Só SELECT — qualquer INSERT/UPDATE/DELETE/MERGE/DDL/… → 403.
  2. Sem cruzar workspace — dataset de outro cliente ou outro projeto → 403.
  3. Sem construções perigosas — EXTERNAL_QUERY, INFORMATION_SCHEMA, JOBS_*, etc. → 403.
  4. Só marts publicados — apenas *_gold/*_silver; referência a bronze ou outro dataset → 403.
  5. Guarda de custo — teto de bytes faturados no job.

Exemplo#

curl -X POST https://ingestia.io/api/v1/query \
  -H "Authorization: Bearer ing_live_EXEMPLO" \
  -H "Content-Type: application/json" \
  -d '{"sql":"SELECT data, SUM(total) AS total FROM aurora_gold.vendas GROUP BY data","limit":500}'

Resposta 200#

json
{ "rows": [ { "data": "2026-09-01", "total": 1234.56 } ], "rowCount": 42 }

Se o resultado for cortado por segurança, a resposta inclui "truncated": true e "totalRows" — para a soma do outro lado não sair errada. Cabeçalhos: x-ingestia-cost-brl (custo projetado) e x-ingestia-cache (hit/miss).

Cache#

Consultas idênticas (mesma versão do workspace) servem do cache com custo R$ 0 (x-ingestia-cache: hit). A invalidação por pipeline/DML garante que nunca se serve dado velho.

Erros#

CódigoMensagem típica
400corpo inválido / sql ausente
401chave ausente/inválida
403Apenas consultas SELECT… · fora do workspace · só marts publicados · escopo read_query ausente
429 · 402rate limit (60/min por chave) / inadimplência
502falha ao executar no datalake
503datalake não provisionado / limitador indisponível

Segurança#

  • Somente leitura + escopo por workspace (marts publicados apenas).
  • Colunas PII não são expostas.
  • Consulta e custo ficam registrados na auditoria.

Relacionados#


Última revisão: 2026-09-08. Estado: SQL livre via API fora de GA (badge Preview). Fonte: matriz de estados do produto.

Related links