Automações

Supabase REST e RPC — tabelas, linhas e stored procedures.

Nó Supabase

O nó de workflow Supabase (supabase_request) chama as APIs públicas do seu projeto Supabase: PostgREST (CRUD de tabelas), RPC (funções SQL), Auth, Storage e GraphQL. É um nó HTTP pré-configurado com templates de operação para padrões comuns do Supabase.

ID do nó no editor: supabase_request
Variável de URL base: {{supabase_url}} (ex.: https://xxxx.supabase.co)
Variável de API key: {{supabase_key}} (anon ou service role)

O que faz

A cada execução, o engine:

  1. Resolve {{supabase_url}}, {{supabase_key}} e outras variáveis
  2. Envia a requisição HTTP ao endpoint REST, Auth, Storage ou GraphQL do Supabase
  3. Retorna status, data e headers
PropriedadeValor
Rótulo na paletaSupabase
Executorhttp_request
Headers de authapikey + Authorization: Bearer {{supabase_key}}
Timeout da requisição30 segundos

Pré-requisitos

  1. Um projeto Supabase
  2. URL do projeto e API key em Project Settings → API
  3. Variáveis de workflow ou integração:
    • supabase_url — URL do projeto (https://<ref>.supabase.co)
    • supabase_key — chave anon para acesso com RLS no client, ou service_role para bypass admin (somente server-side)

Adicione variáveis em Configurações → Chaves de API ou no painel Variáveis do workflow.

Row Level Security (RLS): com a chave anon, o PostgREST respeita políticas RLS. Com service_role, o RLS é ignorado — use apenas em workflows server-side confiáveis.

Como configurar

Passo 1 — Adicionar o nó

  1. Abra Automações
  2. Paleta → Dados → arraste Supabase
  3. Conecte após gatilho ou nós de preparação de dados

Passo 2 — Escolher um template de operação

TemplateMethodPadrão de endpoint
Tabela — listar (SELECT)GET/rest/v1/table?select=*&limit=50
Tabela — listar ordenadoGET...&order=created_at.desc
Tabela — filtrar (eq)GET...&id=eq.<uuid>
Tabela — inserir linhaPOST/rest/v1/table + body JSON
Tabela — inserir várias linhasPOSTBody em array
Tabela — upsert (on conflict)POSTPrefer: resolution=merge-duplicates
Tabela — atualizar (PATCH)PATCH/rest/v1/table?id=eq.<uuid>
Tabela — excluirDELETE/rest/v1/table?id=eq.<uuid>
RPC — chamar função SQLPOST/rest/v1/rpc/function_name
GraphQL — queryPOST/graphql/v1
Auth — usuário do JWTGET/auth/v1/user (precisa JWT do usuário)
Auth — admin: listar usuáriosGET/auth/v1/admin/users (service role)
Storage — listar objetosPOST/storage/v1/object/list/bucket
Storage — GET objeto públicoGET/storage/v1/object/public/bucket/path
Storage — URL assinadaPOST/storage/v1/object/sign/bucket/path

Substitua nome_tabela, nome_do_bucket e placeholders de UUID pelos nomes reais.

Passo 3 — Configurar URL e headers

Headers padrão (templates injetam automaticamente):

{
  "apikey": "{{supabase_key}}",
  "Authorization": "Bearer {{supabase_key}}",
  "Content-Type": "application/json"
}

Para INSERT/UPDATE quando precisar da linha criada de volta, adicione:

{
  "Prefer": "return=representation"
}

Para upsert:

{
  "Prefer": "resolution=merge-duplicates,return=representation"
}

Passo 4 — Exemplos de filtros PostgREST

Filtros vão na query string (URL-encoded):

FiltroExemplo
Equal?status=eq.active
Not equal?status=neq.archived
Greater than?amount=gt.100
In list?id=in.(uuid1,uuid2)
Like?name=like.*silva*
Select columns?select=id,name,created_at
Order?order=created_at.desc
Limit?limit=20

Exemplo de URL com variáveis:

{{supabase_url}}/rest/v1/orders?select=*&phone=eq.{{trigger.body.phone}}&order=created_at.desc&limit=1

Passo 5 — Usar a saída

{{supabase_1.data}}
{{supabase_1.status}}

O PostgREST retorna um array de linhas no SELECT. Um INSERT com return=representation também retorna array (geralmente um elemento).

Saídas do nó

Campo de saídaDescrição
statusHTTP status (200, 201, 204, 4xx, 5xx)
dataBody JSON — array de linhas, resultado RPC ou objeto de erro
headersHeaders de resposta

Dicas e boas práticas

  • Prefira chave anon + RLS para fluxos voltados ao cliente; reserve service_role para automações admin internas
  • Nunca exponha service_role em código client-side — variáveis de workflow são server-side, o que é correto
  • Use RPC para joins ou agregações complexas em vez de encadear vários nós GET
  • Upsert com constraint unique nas colunas de conflito definidas no Postgres
  • Para lookup de usuário Auth, passe Authorization: Bearer {{supabase_user_jwt}} com o JWT do usuário, não a chave anon
  • URLs assinadas do Storage expiram — regenere ao enviar links a clientes
  • Combine com Loop para processar cada linha de um SELECT

Exemplos de casos de uso

Sincronizar lead de webhook no Supabase

  1. Gatilho Webhook — formulário de landing page
  2. Supabase — POST em /rest/v1/leads com name, phone, utm_source
  3. Enviar mensagem — confirmação

Consultar status de pedido para bot de suporte

  1. Gatilho Agente ou mensagem recebida
  2. Supabase — GET /rest/v1/orders?order_number=eq.{{variables.order_number}}&select=status,total
  3. Nó Texto — formatar resposta a partir de {{supabase_1.data}}
  1. Webhook — usuário solicita PDF da fatura
  2. Supabase Storage — POST sign URL com expiresIn: 3600
  3. Enviar mensagem — link de {{supabase_1.data.signedURL}}

FAQ

401 ou 403 do PostgREST?
Chave errada, política RLS ausente ou chave anon usada onde service role é necessário. Verifique logs e políticas no Supabase.

Array vazio [] no SELECT?
Nenhuma linha correspondente — não é erro. Use Condição para ramificar entre vazio e não vazio.

PGRST116 — JSON object requested, multiple (or no) rows returned?
Expectativa estilo .single(); adicione limit=1 ou trate o tamanho do array em um nó de Lógica.

Por que usar este nó em vez de HTTP?
Templates incluem headers Supabase corretos, valores Prefer e padrões de URL comuns — setup mais rápido e menos erros.

Posso usar Supabase realtime?
Este nó é somente request/response. Use webhooks ou integração separada para subscriptions realtime.

Referência da API

ItemValor
ID do tipo de nósupabase_request
Base REST{{supabase_url}}/rest/v1/
GraphQL{{supabase_url}}/graphql/v1
Auth{{supabase_key}} em apikey e Authorization
Docs oficiaisSupabase REST, PostgREST filters

Relacionados

Este artigo foi útil?

Precisa de mais ajuda? Falar com suporte

Central de Ajuda