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étodo | Rota | Descrição |
|---|---|---|
| GET | /v1/contatos | Lista contatos com filtros e cursor. |
| POST | /v1/contatos | Cria contato (escopo escrita). |
| GET | /v1/contatos/{id} | Detalhe de um contato. |
| PATCH | /v1/contatos/{id} | Atualiza contato (escopo escrita). |
| GET | /v1/negocios | Lista negócios (filtro por etapa/data). |
| POST | /v1/negocios | Cria negócio (escopo escrita). |
| GET | /v1/negocios/{id} | Detalhe do negócio. |
| PATCH | /v1/negocios/{id} | Atualiza negócio (escopo escrita). |
| GET | /v1/conversas | Lista conversas (filtro por status). |
| GET | /v1/conversas/{id}/mensagens | Histórico de mensagens da conversa. |
| PATCH | /v1/conversas/{id} | Atualiza status/atribuição. |
| POST | /v1/mensagens | Envia mensagem WhatsApp (escopo mensagens). |
| GET | /v1/etiquetas | Lista etiquetas da empresa. |
| GET | /v1/campos-customizados | Lista definições de campos customizados. |
| GET | /v1/sequencias | Lista as sequências ativas. |
| POST | /v1/sequencias/{id}/inscricoes | Inscreve 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.
| Evento | Descrição |
|---|---|
lead.criado | Novo contato criado a partir de uma conversa de entrada. |
contato.criado | Qualquer contato criado (via CRM, importação, API ou webhook). |
negocio.ganho | Negócio movido para a etapa Ganho. |
negocio.perdido | Negócio movido para a etapa Perdido. |
negocio.etapa | Negócio mudou de etapa no funil (payload traz etapa, etapa anterior, funil, responsável e fechado_em). |
conversa.aberta | Nova conversa iniciada pelo contato. |
conversa.resolvida | Conversa marcada como resolvida. |
csat.respondido | Contato respondeu a pesquisa de satisfação. |
mensagem.recebidaalto volume | Mensagem recebida do contato (WhatsApp). |
mensagem.enviadaalto 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_CHAVETools disponíveis:
buscar_contatoscriar_contatolistar_negociosresumo_funillistar_conversasler_mensagensenviar_mensagemlistar_etiquetas
Conectar no Claude:
- Configurações → Conectores → Adicionar conector personalizado.
- 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