Documentação

Integre o Publi CRM ao seu sistema

API REST, webhooks, automações internas e servidor MCP para conectar assistentes de IA. Tudo em português, direto da sua conta.

1. Autenticação

Todas as chamadas usam uma chave de API criada em Configurações → API & Webhooks. A chave começa com pk_live_ e é exibida uma única vez — guarde em local seguro.

Envie a chave no header Authorization: Bearer:

curl https://kycmlziozsdplfrqthpx.supabase.co/functions/v1/api-publica/v1/contatos \
  -H "Authorization: Bearer pk_live_SUA_CHAVE"

Escopos: ao criar a chave você define quais permissões ela recebe:

  • leitura — todos os GET (padrão).
  • escrita — POST/PATCH em contatos, negócios, conversas.
  • mensagens — envio de WhatsApp via /v1/mensagens.

Rate limit: configurável por chave (padrão 60 requisições por minuto). Ao exceder, a API responde 429 com header Retry-After: 60.

2. Endpoints REST

Base: https://kycmlziozsdplfrqthpx.supabase.co/functions/v1/api-publica

MétodoRotaDescrição
GET/v1/contatosLista contatos com filtros e cursor.
POST/v1/contatosCria contato (escopo escrita).
GET/v1/contatos/{id}Detalhe de um contato.
PATCH/v1/contatos/{id}Atualiza contato (escopo escrita).
GET/v1/negociosLista negócios (filtro por etapa/data).
POST/v1/negociosCria negócio (escopo escrita).
GET/v1/negocios/{id}Detalhe do negócio.
PATCH/v1/negocios/{id}Atualiza negócio (escopo escrita).
GET/v1/conversasLista conversas (filtro por status).
GET/v1/conversas/{id}/mensagensHistórico de mensagens da conversa.
PATCH/v1/conversas/{id}Atualiza status/atribuição.
POST/v1/mensagensEnvia mensagem WhatsApp (escopo mensagens).
GET/v1/etiquetasLista etiquetas da empresa.
GET/v1/campos-customizadosLista definições de campos customizados.
GET/v1/sequenciasLista as sequências ativas.
POST/v1/sequencias/{id}/inscricoesInscreve um contato (contato_id ou telefone) na sequência (escopo escrita).
DELETE/v1/sequencias/{id}/inscricoes/{contato_id}Remove o contato da sequência (escopo escrita).

Exemplo — enviar mensagem:

curl -X POST https://kycmlziozsdplfrqthpx.supabase.co/functions/v1/api-publica/v1/mensagens \
  -H "Authorization: Bearer pk_live_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{
    "telefone": "5511999998888",
    "texto": "Olá! Aqui é a Publi."
  }'

3. Paginação e filtros

Listas usam paginação por cursor. Parâmetros: limit (padrão 50, máx 200), cursor (retornado como next_cursor na resposta anterior). A ordenação é sempre pelo mais recente primeiro (criado_em desc + id).

curl "https://kycmlziozsdplfrqthpx.supabase.co/functions/v1/api-publica/v1/contatos?limit=100&etiqueta=vip" \
  -H "Authorization: Bearer pk_live_SUA_CHAVE"

# Resposta:
# {
#   "data": [ ...100 contatos... ],
#   "next_cursor": "2026-07-25T13:00:00.000Z_uuid"
# }

Filtros disponíveis nas rotas variam por recurso (ex.: telefone, etiqueta, origem em contatos; etapa_id, criado_apos em negócios; status em conversas; apos — timestamp ISO — em mensagens para sync incremental).

Campos personalizados: em /v1/contatos filtre por campo.<chave>=valor (sem diferenciar maiúsculas). Use * para "preenchido", valor vazio para "sem valor" e sim/nao em campos Sim/Não. As chaves vêm de /v1/campos-customizados.

curl "https://kycmlziozsdplfrqthpx.supabase.co/functions/v1/api-publica/v1/contatos?campo.segmento=clinica&campo.cnpj=*" \
  -H "Authorization: Bearer pk_live_SUA_CHAVE"

4. Webhook de entrada

Endpoint dedicado para o seu sistema enviar dados ao Publi CRM (upsert de contato + criação opcional de negócio). O token é gerado em Configurações → API & Webhooks → Receber dados e pode ser regenerado a qualquer momento.

curl -X POST https://kycmlziozsdplfrqthpx.supabase.co/functions/v1/webhook-entrada/SEU_TOKEN \
  -H "Content-Type: application/json" \
  -d '{
    "nome": "Maria Silva",
    "telefone": "5511999998888",
    "email": "maria@exemplo.com",
    "origem": "Formulário do site",
    "etiquetas": ["landing", "lead-quente"],
    "campos": { "empresa": "Acme", "cargo": "Gerente" },
    "criar_negocio": true,
    "valor_centavos": 250000,
    "observacao": "Interessada em plano Profissional"
  }'

O campo campos aceita a chave ou o nome de um campo personalizado da ficha; o valor é convertido para o tipo do campo e fica no histórico do contato com a origem "integração".

Requer o módulo api_webhooks (plano Avançado e contratos personalizados).

5. Webhooks de saída

Configure URLs em Configurações → API & Webhooks → Webhooks. O CRM envia POST com JSON assinado (HMAC-SHA256). Máximo 5 endpoints por empresa.

EventoDescrição
lead.criadoNovo contato criado a partir de uma conversa de entrada.
contato.criadoQualquer contato criado (via CRM, importação, API ou webhook).
negocio.ganhoNegócio movido para a etapa Ganho.
negocio.perdidoNegócio movido para a etapa Perdido.
negocio.etapaNegócio mudou de etapa no funil (payload traz etapa, etapa anterior, funil, responsável e fechado_em).
conversa.abertaNova conversa iniciada pelo contato.
conversa.resolvidaConversa marcada como resolvida.
csat.respondidoContato respondeu a pesquisa de satisfação.
mensagem.recebida
alto volume
Mensagem recebida do contato (WhatsApp).
mensagem.enviada
alto volume
Mensagem enviada pelo atendente/bot.

Payload de exemplo (negocio.ganho):

{
  "evento": "negocio.ganho",
  "empresa_id": "uuid...",
  "negocio": {
    "id": "uuid...",
    "titulo": "Plano Anual — Acme",
    "valor": 12000,
    "etapa": "ganho",
    "contato_id": "uuid...",
    "fechado_em": "2026-07-27T18:22:10.123Z"
  }
}

Validação da assinatura (header X-PubliCRM-Signature):

// Formato: t=TIMESTAMP,v1=ASSINATURA_HEX
// assinatura = HMAC_SHA256(segredo, t + "." + rawBody)
import { createHmac, timingSafeEqual } from "node:crypto";

function verificar(rawBody, headerAssinatura, segredo) {
  const partes = Object.fromEntries(
    headerAssinatura.split(",").map((p) => p.split("="))
  );
  const esperado = createHmac("sha256", segredo)
    .update(`${partes.t}.${rawBody}`)
    .digest("hex");
  return timingSafeEqual(
    Buffer.from(esperado, "hex"),
    Buffer.from(partes.v1, "hex")
  );
}

Retries: em caso de resposta não-2xx, o CRM tenta novamente em 1min, 5min, 30min, 2h e 24h. Após 20 falhas consecutivas o endpoint é automaticamente desativado.

6. Servidor MCP (para IA)

O Publi CRM expõe um servidor MCP (Model Context Protocol) que permite conectar o CRM diretamente a assistentes como Claude, ChatGPT ou agentes internos. O acesso usa a mesma chave pk_live_ — os escopos definidos valem também para a IA.

URL do servidor (substitua SUA_CHAVE pela chave real):

https://kycmlziozsdplfrqthpx.supabase.co/functions/v1/mcp-servidor/SUA_CHAVE

Tools disponíveis:

  • buscar_contatos
  • criar_contato
  • listar_negocios
  • resumo_funil
  • listar_conversas
  • ler_mensagens
  • enviar_mensagem
  • listar_etiquetas

Conectar no Claude:

  1. Configurações → Conectores → Adicionar conector personalizado.
  2. Cole a URL do servidor (com sua chave) e salve.

7. Automações e no-code

O módulo Automações (Configurações → Automações) permite criar regras quando X → faça Y dentro do próprio Publi CRM: chamar URLs, enviar mensagens, aplicar etiquetas, mover etapa do funil e atribuir filas — sem dependência externa.

Para fluxos mais complexos, ferramentas como Make, n8n e Zapier funcionam perfeitamente com a API e os webhooks descritos aqui. Precisa de uma receita pronta? Fale com o suporte.

Dúvidas sobre integração? contato@publicrm.com.br