ZavyCRM API

ZavyCRM API Gateway

API para automação completa do seu CRM

v1.2.0

Como Começar

1

Gerar sua API Key

Use seu email e senha do ZavyCRM para autenticar:

POST /api/v1/auth/token
{
  "email": "seu@email.com",
  "password": "sua_senha"
}
2

Use a API Key

Adicione o header X-API-Key em todas as requisições:

curl -H "X-API-Key: sk_abc123..." \
     https://api.zavycrm.com/api/v1/leads
3

Acesse seus dados

Liste leads, contatos, conversas e muito mais!

Autenticação

Dois modos de credencial: API Key (X-API-Key) para integrações servidor-a-servidor, e JWT do Supabase (Authorization: Bearer) para clientes de navegador (PWA). Cada chave tem permissions (read/write) e a conta vem sempre da credencial.

⏱️ A chave gerada vale 60 minutos. Depois disso a API responde 401 API_KEY_EXPIRED — gere outra com o mesmo login. Automações devem renovar sozinhas quando a chave vencer.

Como renovar a chave

Não existe refresh token: a automação guarda login e senha e gera uma chave nova quando precisar.

  • Quando renovar: a resposta do login traz expires_in (3600 segundos) e expires_at. Renove ~1 min antes de vencer — ou reaja ao erro 401 API_KEY_EXPIRED.
  • Onde guardar: na memória do próprio workflow (no n8n, static data), nunca em texto fixo no nó.

Exemplo (n8n, Code node) — garante a chave antes de usar:

const dados = $getWorkflowStaticData('global');
const agora = Date.now();

if (!dados.zavyKey || agora > dados.zavyExp - 60000) {
  const r = await this.helpers.httpRequest({
    method: 'POST',
    url: 'https://api.zavycrm.com/api/v1/auth/token',
    body: { email: 'SEU_EMAIL', password: 'SUA_SENHA', name: 'n8n' },
    json: true,
  });
  dados.zavyKey = r.data.api_key;
  dados.zavyExp = agora + r.data.expires_in * 1000;
}

return [{ json: { apiKey: dados.zavyKey } }];

💡 Chaves criadas antes de 25/09/2026 não têm prazo (continuam válidas). O prazo de 60 minutos vale para as chaves geradas a partir dessa data.

Gerar API Key

POST /api/v1/auth/token
Campo Tipo Obrigatório Descrição
email string Sim Email do login ZavyCRM
password string Sim Senha do ZavyCRM
name string Não Nome amigável da chave
Importante: A API Key só será exibida uma vez. Guarde em local seguro!

Listar Chaves

GET /api/v1/auth/keys

Listar todas as suas API Keys ativas

Revogar Chave

POST /api/v1/auth/revoke

Revogar uma API Key

Leads

Listar Leads

GET /api/v1/leads
Parâmetro Tipo Descrição
estagio string Filtrar por nome da etapa
status string aberto | ganho | perdido | agendado
search string Buscar por nome
page number Página (padrão: 1)
limit number Itens por página (padrão: 20, máx: 100)

Criar Lead

POST /api/v1/leads
{
  "nome": "João Silva",
  "email": "joao@empresa.com",
  "telefone": "+5511999999999",
  "estagio": "Contato inicial",
  "valor": 5000,
  "origem": "website"
}

Atualizar Lead

PATCH /api/v1/leads/:id

Mover Lead

PATCH /api/v1/leads/:id/mover
{
  "estagio": "qualificado"
}

Estatísticas

GET /api/v1/leads/estatisticas/:contaId

Retorna total de leads, por estágio e valor total

Deletar Lead

DELETE /api/v1/leads/:id

Contatos

Listar Contatos

GET /api/v1/contatos

Criar Contato

POST /api/v1/contatos

Upsert Contato

POST /api/v1/contatos/upsert

Criar ou atualizar - útil quando o contato pode já existir

Atualizar Contato

PUT /api/v1/contatos/:id

Deletar Contato

DELETE /api/v1/contatos/:id

Campos Personalizados do Contato

Valores de campos personalizados do contato (as definições vêm de GET /api/v1/campos). O valor é validado pelo tipo do campo: texto · numero · boolean (true/false) · data (normalizada para AAAA-MM-DD).

GET /api/v1/contatos/:id/campos
PUT /api/v1/contatos/:id/campos/:campoId
DELETE /api/v1/contatos/:id/campos/:campoId

Contas

Retorna somente a sua conta (a vinculada à API Key). Não há listagem de outras contas nem criação/exclusão de conta pela API.

Minha Conta

GET /api/v1/contas

Atualizar Minha Conta

PUT /api/v1/contas/:id

:id deve ser o conta_id da sua API Key. Só o campo email é editável.

Conversas (WhatsApp)

Listar Conversas

GET /api/v1/conversas

Mensagens

GET /api/v1/conversas/:id/mensagens

Atualizar Status

PATCH /api/v1/conversas/:id/status

Atribuir

PATCH /api/v1/conversas/:id/atribuir

Enviar Mensagem (WhatsApp)

Envie mensagens de texto via WhatsApp informando o nome da instância (visível no painel). A API Key da instância é resolvida internamente e nunca é exposta.

POST /api/v1/mensagens
{
  "instanceName": "MinhaConexao-ABCDEF",
  "telefone": "+5511999999999",
  "texto": "Olá! Como posso ajudar?"
}
Campo Tipo Obrigatório Descrição
instanceName string Sim Nome da instância WhatsApp (visível no painel)
telefone string Sim Telefone de destino com DDI
texto string Sim Texto da mensagem (máx 4096)
Segurança: A API valida que a instância pertence à conta autenticada. Usuários só enviam mensagens pelas suas próprias conexões.

MCP Server (Model Context Protocol)

Servidor MCP read-only que expõe a API REST como ferramentas para agentes de IA. Exige o header X-API-Key e retorna somente os dados da conta da chave.

URL: https://mcp.zavycrm.com/mcp  ·  requer header X-API-Key

Ferramentas Disponíveis

Ferramenta Descrição
listar_leadsLista leads com filtros/paginação
buscar_leadBusca lead por ID
listar_contatosLista contatos com filtros/paginação
buscar_contatoBusca contato por ID
listar_conversasLista conversas
buscar_conversaBusca conversa por ID
buscar_mensagensBusca mensagens de uma conversa
listar_camposLista as definições de campos personalizados da conta
campos_do_contatoLista os valores de campos personalizados de um contato

Configuração no Claude Code

{
  "mcpServers": {
    "zavycrm": {
      "url": "https://mcp.zavycrm.com/mcp",
      "headers": { "X-API-Key": "sk_sua_chave_aqui" }
    }
  }
}
Atenção: o MCP é somente leitura e exige o header X-API-Key. Para criar/atualizar dados, use a API REST (https://api.zavycrm.com).

Agentes IA

Listar Agentes

GET /api/v1/agentes

Buscar Agente

GET /api/v1/agentes/:id

Ativar/Desativar

PATCH /api/v1/agentes/:id/toggle

Catálogos

Listas auxiliares da conta (a conta vem sempre da credencial).

Usuários (atendentes)

GET/api/v1/usuarios

Setores

GET/api/v1/setores

Etiquetas

GET/api/v1/etiquetas
GET/api/v1/etiquetas/vinculos

Etiquetas do contato

GET/api/v1/contatos/:id/etiquetas
POST/api/v1/contatos/:id/etiquetas
DELETE/api/v1/contatos/:id/etiquetas/:etiquetaId

Conexões WhatsApp

GET/api/v1/conexoes

Campos personalizados

GET/api/v1/campos

Definições (nome, tipo) dos campos personalizados da conta. Os valores ficam no contato: /api/v1/contatos/:id/campos.

Kanban (quadros, etapas e cards)

Um card é o mesmo registro que a API expõe como lead. Os IDs são numéricos (string).

Quadros e etapas

GET/api/v1/quadros
GET/api/v1/etapas
GET/api/v1/etapas?quadroId=25

Cards

GET/api/v1/cards
POST/api/v1/cards
PATCH/api/v1/cards/:id

Criar card — nome, etapa_id e contato_id são obrigatórios (quadro_id é opcional; o quadro é deduzido da etapa):

{ "nome": "João Silva", "etapa_id": "312", "contato_id": "1466" }

Mover card — apenas a etapa de destino:

{ "etapa_id": "313" }

⚠️ Os campos são snake_case (etapa_id, contato_id, quadro_id). Em camelCase a API devolve 400 VALIDATION_ERROR. Não existe DELETE /cards — para remover, use DELETE /api/v1/leads/:id.

Exemplos de Uso

cURL

# Gerar API Key
curl -X POST https://api.zavycrm.com/api/v1/auth/token \
  -H "Content-Type: application/json" \
  -d '{"email": "admin@empresa.com", "password": "123456"}'

# Criar lead
curl -X POST https://api.zavycrm.com/api/v1/leads \
  -H "X-API-Key: sk_abc123..." \
  -H "Content-Type: application/json" \
  -d '{
    "nome": "Maria Santos",
    "telefone": "+5511888888888"
  }'

# Listar leads
curl https://api.zavycrm.com/api/v1/leads?estagio=Contato%20inicial \
  -H "X-API-Key: sk_abc123..."

Python

import requests

# Gerar API Key
response = requests.post(
    "https://api.zavycrm.com/api/v1/auth/token",
    json={"email": "admin@empresa.com", "password": "123456"}
)
api_key = response.json()["data"]["api_key"]

# Usar a API
headers = {"X-API-Key": api_key}
leads = requests.get("https://api.zavycrm.com/api/v1/leads", headers=headers)
print(leads.json()["data"])

JavaScript

// Gerar API Key
const loginRes = await fetch("https://api.zavycrm.com/api/v1/auth/token", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ email: "admin@empresa.com", password: "123456" })
});
const { api_key } = (await loginRes.json()).data;

// Usar a API
const leadsRes = await fetch("https://api.zavycrm.com/api/v1/leads", {
  headers: { "X-API-Key": api_key }
});
const leads = (await leadsRes.json()).data;

n8n

// Nó HTTP Request
{
  "method": "POST",
  "url": "https://api.zavycrm.com/api/v1/leads",
  "headers": {
    "X-API-Key": "sua_api_key",
    "Content-Type": "application/json"
  },
  "body": {
    "nome": "={{$json.nome}}",
    "telefone": "={{$json.telefone}}"
  }
}

Códigos de Erro

Código HTTP Significado
MISSING_API_KEY 401 Header X-API-Key não enviado
INVALID_API_KEY 403 API Key inválida ou revogada
API_KEY_EXPIRED 403 API Key expirada
VALIDATION_ERROR 400 Dados de entrada inválidos
NOT_FOUND 404 Recurso não encontrado
RATE_LIMIT_EXCEEDED 429 Limite de requisições atingido (7 req/s)

Limites

Rate Limit: 7 requisições por segundo (420/min) por API Key.

Headers de Resposta

Toda requisição retorna headers informativos:

x-ratelimit-limit: 7
x-ratelimit-remaining: 5
x-ratelimit-reset: 1

Quando Exceder

Se você fizer mais de 7 req/s, receberá:

{
  "success": false,
  "error": {
    "code": "RATE_LIMIT_EXCEEDED",
    "message": "Limite de requisições excedido. Máximo: 7 req/s.",
    "details": {
      "retry_after": 1
    }
  }
}

Boas Práticas

// ❌ Ruim: polling a cada 100ms
setInterval(() => fetch('/api/v1/leads'), 100);

// ✅ Bom: polling a cada 5 segundos
setInterval(() => fetch('/api/v1/leads'), 5000);

🤖 Para Agentes de IA

Se você é um agente de IA lendo esta documentação, acomplete está disponível em formato otimizado:

GET /llms.txt

URL completa: https://docs.zavycrm.com/llms.txt

Este arquivo contém todos os endpoints, exemplos e schema em texto puro, otimizado para processamento por LLMs.

✅ Status do Serviço

Componente Status URL
Documentação ATIVO https://docs.zavycrm.com
API Gateway ATIVO https://api.zavycrm.com/api/v1/*
Base URL da API: https://api.zavycrm.com/api/v1