URL base
https://api.superdb.com.br/{tabela}
Path raiz, sem /rest/v1/ e sem {projeto} na URL. O tenant é escolhido por header: Accept-Profile: proj_{slug} na leitura e Content-Profile: proj_{slug} na escrita.
Autenticação
Toda requisição precisa dos headers de auth mais o profile do tenant:
apikey: sua-anon-key
Authorization: Bearer jwt-do-usuario-logado
Accept-Profile: proj_meuapp # leitura (GET)
Content-Profile: proj_meuapp # escrita (POST/PATCH/DELETE)
Dica: RLS é respeitado automaticamente. Usuário só lê o que suas políticas permitem.
SELECT
# Todos os registros
curl https://api.superdb.com.br/tasks \
-H "apikey: $ANON_KEY" \
-H "Authorization: Bearer $JWT" \
-H "Accept-Profile: proj_meuapp"
# Filtro: tarefas não concluídas
curl "https://api.superdb.com.br/tasks?done=eq.false" \
-H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
-H "Accept-Profile: proj_meuapp"
# Selecionar colunas
curl "https://api.superdb.com.br/tasks?select=id,title" \
-H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
-H "Accept-Profile: proj_meuapp"
# Ordem + paginação
curl "https://api.superdb.com.br/tasks?order=created_at.desc&limit=10" \
-H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
-H "Accept-Profile: proj_meuapp"
Operadores de filtro
Use no formato ?coluna=op.valor. Operadores principais:
eq— igual:?done=eq.trueneq— diferente:?status=neq.deletedgt,gte,lt,lte— comparações:?age=gt.18like,ilike— pattern matching:?name=ilike.*silva*is— NULL/TRUE:?deleted_at=is.nullin— lista:?status=in.(active,pending)
INSERT
curl -X POST https://api.superdb.com.br/tasks \
-H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-H "Content-Profile: proj_meuapp" \
-H "Prefer: return=representation" \
-d '{"title": "Nova tarefa", "done": false}'
UPDATE
curl -X PATCH "https://api.superdb.com.br/tasks?id=eq.UUID" \
-H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-H "Content-Profile: proj_meuapp" \
-d '{"done": true}'
DELETE
curl -X DELETE "https://api.superdb.com.br/tasks?id=eq.UUID" \
-H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
-H "Content-Profile: proj_meuapp"
Joins automáticos
PostgREST detecta foreign keys e permite joins por sintaxe tabela(colunas):
curl "https://api.superdb.com.br/tasks?select=*,user:users(name,email)" \
-H "apikey: $ANON_KEY" -H "Authorization: Bearer $JWT" \
-H "Accept-Profile: proj_meuapp"
Preview no Studio
Toda chamada REST roda como SQL embaixo. Você pode espiar no Studio:
Limites
- Máximo de 1.000 registros por request por padrão
- Use
limiteoffsetpra paginar - Use
Rangeheader pra range requests
Dica: Para queries tipadas, use o SDK @superdb/client (drop-in do supabase-js) com createClient(url, anonKey, { project: 'meuapp' }) — o .from() monta as URLs PostgREST e manda o Accept-Profile automaticamente, sem header manual.