ZavyCRM API

ZavyCRM API Gateway

API para automação completa do seu CRM

v1.0.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

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
conta_id UUID Filtrar por conta
estagio string Filtrar por estágio
status string Filtrar por status
search string Buscar por nome/email/empresa
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
{
  "conta_id": "uuid-conta",
  "nome": "João Silva",
  "email": "joao@empresa.com",
  "telefone": "+5511999999999",
  "estagio": "novo",
  "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

Contas

Listar Contas

GET /api/v1/contas

Criar Conta

POST /api/v1/contas

Atualizar Conta

PUT /api/v1/contas/:id

Deletar Conta

DELETE /api/v1/contas/:id

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

Agentes IA

Listar Agentes

GET /api/v1/agentes

Criar Agente

POST /api/v1/agentes

Ativar/Desativar

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

Deletar Agente

DELETE /api/v1/agentes/:id

Webhooks

Receba notificações quando eventos acontecerem no CRM:

Evento Endpoint
Lead criado POST /webhook/lead-criado
Lead movido POST /webhook/lead-movido
Conversa atribuída POST /webhook/conversa-atribuida
Atendimento finalizado POST /webhook/atendimento-finalizado

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 '{
    "conta_id": "uuid-conta",
    "nome": "Maria Santos",
    "telefone": "+5511888888888"
  }'

# Listar leads
curl https://api.zavycrm.com/api/v1/leads?estagio=novo \
  -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": {
    "conta_id": "={{$json.conta_id}}",
    "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);

// ✅ Melhor: usar webhooks
// Receba notificações quando algo mudar