API Paperclip Gateway
Gateway unificado para orquestração de geração de leads, outreach via WhatsApp e gerenciamento de CRM. Integra Serper API (Google Places), EspoCRM e Evolution API (WhatsApp) em uma interface única com proteção anti-ban.
https://api-paperclip.olivercode.com.br
Autenticação
Todas as requisições (exceto /health e /outreach/webhook) exigem Bearer Token.
Authorization: Bearer {GATEWAY_API_KEY}
Content-Type: application/json
/outreach/webhook é público — recebe eventos da Evolution API (WhatsApp).curl -s -H "Authorization: Bearer $GW_KEY" \ -H "Content-Type: application/json" \ https://api-paperclip.olivercode.com.br/health
Pipeline de Vendas
Fluxo completo de lead generation até conversão.
Lead Generation — Serper
Busca de negócios via Google Places com rotação automática de API keys.
Busca empresas/negócios via Serper Google Places API. Rotaciona chaves automaticamente se 403/429.
| Campo | Tipo | Descrição | |
|---|---|---|---|
q | string | obrigatório | Query de busca (ex: "dentista São Paulo") |
location | string | opcional | Localização para refinar busca |
num | number | opcional | Nº de resultados (default: 10) |
curl -X POST -H "Authorization: Bearer $GW_KEY" \
-H "Content-Type: application/json" \
https://api-paperclip.olivercode.com.br/serper/places \
-d '{"q": "dentista Curitiba PR", "num": 5}'
{
"places": [
{
"title": "Clínica Odonto Plus",
"address": "R. XV de Novembro, 1234",
"phone": "+55 41 3333-4444",
"rating": 4.8,
"ratingCount": 127,
"website": "https://odontoplus.com.br"
}
]
}
Busca genérica no Google via Serper. Mesmos params de body que /serper/places.
curl -X POST -H "Authorization: Bearer $GW_KEY" \
-H "Content-Type: application/json" \
https://api-paperclip.olivercode.com.br/serper/search \
-d '{"q": "melhor pet shop em Salvador BA"}'
Retorna nichos configurados, localizações, quantidade de API keys ativas.
{
"niches": ["dentista", "advogado", "restaurante", ...],
"locations": ["São Paulo, SP", "Rio de Janeiro, RJ", ...],
"leadsPerSearch": 2,
"serperKeysCount": 3,
"totalKeysConfigured": 3
}
| Campo | Tipo | Descrição |
|---|---|---|
niches | string[] | Substitui array de nichos |
locations | string[] | Substitui array de localizações |
leadsPerSearch | number | Nº de leads por busca |
addSerperKey | string | Adiciona nova API key ao pool |
curl -X PUT -H "Authorization: Bearer $GW_KEY" \
-H "Content-Type: application/json" \
https://api-paperclip.olivercode.com.br/serper/config \
-d '{"addSerperKey": "nova-chave-aqui"}'
Leads — Geração e Pipeline
Retorna uma combinação aleatória de nicho e localização do config para uso em buscas diversificadas.
{ "niche": "pet shop", "location": "Goiânia, GO", "leadsPerSearch": 2 }
Pipeline automatizado: escolhe nicho/local aleatório (ou recebe forçado), busca no Serper, filtra resultados com telefone, verifica duplicatas no CRM e insere novos leads.
{} para modo totalmente automático.| Campo | Tipo | Descrição |
|---|---|---|
niche | string | Nicho específico (senão, aleatório) |
location | string | Local específico (senão, aleatório) |
limit | number | Máx. leads a inserir (default: 2) |
curl -X POST -H "Authorization: Bearer $GW_KEY" \
-H "Content-Type: application/json" \
https://api-paperclip.olivercode.com.br/leads/generate \
-d '{}'
{
"niche": "dentista",
"location": "Curitiba, PR",
"found": 10,
"withPhone": 6,
"inserted": 2,
"skipped": 0,
"leads": [
{ "id": "abc123", "name": "Dr. Silva Odontologia", "phone": "5541999887766" }
],
"skippedDetails": []
}
Retorna leads com status New do CRM, ordenados por data de criação.
| Param | Default | Descrição |
|---|---|---|
limit | 10 | Máximo de resultados |
Leads com status Contacted ou In Negotiation.
| Param | Default | Descrição |
|---|---|---|
limit | 20 | Máximo de resultados |
| Campo | Tipo | Descrição | |
|---|---|---|---|
status | string | obrigatório | New Contacted In Negotiation Converted Dead |
Cria uma Opportunity no CRM vinculada ao lead. Atualiza lead para "In Negotiation" automaticamente.
| Campo | Tipo | Descrição |
|---|---|---|
name | string | Nome da oportunidade |
stage | string | Prospecting, Qualification, Proposal, Negotiation, Closed Won, Closed Lost |
amount | number | Valor (R$) |
description | string | Descrição |
curl -X POST -H "Authorization: Bearer $GW_KEY" \
-H "Content-Type: application/json" \
https://api-paperclip.olivercode.com.br/leads/LEAD_ID/opportunity \
-d '{"name": "Plano Premium - Dr Silva", "stage": "Prospecting", "amount": 2500}'
Outreach — WhatsApp
Envio de mensagens e gerenciamento de conversas com proteção anti-ban integrada.
isBusinessHours for true e os limites não estiverem esgotados.{
"isBusinessHours": true,
"dailyConversations": { "used": 5, "limit": 18 },
"dailyMessages": { "used": 23, "limit": 80 },
"activeConversations": 12,
"antiBanConfig": {
"minDelayBetweenMessagesMs": 45000,
"maxDelayBetweenMessagesMs": 180000,
"maxNewConversationsPerDay": 18,
"maxMessagesPerDay": 80,
"businessHoursStart": 8,
"businessHoursEnd": 18,
"businessDays": [1, 2, 3, 4, 5],
"typingSimulationMs": 3000
}
}
Envia primeira mensagem WhatsApp para um lead. Busca telefone no CRM, formata para Brasil, valida limites anti-ban. Atualiza status para "Contacted".
429 se fora do horário comercial ou limites esgotados. Respeite o campo recommendedNextDelayMs da resposta.| Campo | Tipo | Descrição | |
|---|---|---|---|
leadId | string | obrigatório | ID do lead no CRM |
message | string | obrigatório | Texto da mensagem |
curl -X POST -H "Authorization: Bearer $GW_KEY" \
-H "Content-Type: application/json" \
https://api-paperclip.olivercode.com.br/outreach/send \
-d '{
"leadId": "abc123",
"message": "Olá! Tudo bem? Notei que sua empresa está em Curitiba e tenho uma proposta..."
}'
{
"ok": true,
"leadId": "abc123",
"phone": "5541999887766",
"messageSent": true,
"recommendedNextDelayMs": 95000,
"dailyConversationsUsed": 6,
"dailyConversationsLimit": 18
}
Envia resposta para uma conversa já existente. Usa o número de telefone diretamente.
| Campo | Tipo | Descrição | |
|---|---|---|---|
phone | string | obrigatório | Número WhatsApp (ex: 5541999887766) |
message | string | obrigatório | Texto da resposta |
Retorna mensagens recebidas pelo webhook que ainda não foram processadas.
{
"messages": [
{
"phone": "5541999887766",
"text": "Oi, tenho interesse sim!",
"timestamp": "2026-04-13T14:30:00.000Z",
"processed": false,
"leadId": "abc123"
}
],
"count": 1
}
Marca a mensagem no índice informado (dentre as não-processadas) como processada.
| Param | Tipo | Descrição |
|---|---|---|
:index | number | Índice (0-based) na lista de não-processadas |
messages.upsert.WhatsApp — Acesso Direto
Proxy direto para a Evolution API. Use /outreach/* para outreach com anti-ban.
Lista todas as instâncias WhatsApp conectadas na Evolution API.
| Campo | Tipo | Descrição |
|---|---|---|
number | string | Número WhatsApp (ex: 5511999998888) |
text | string | Texto da mensagem |
Proxy para /message/sendMedia/{instance} da Evolution API.
Busca mensagens de uma instância. Query params passados direto à Evolution.
Retorna estado de conexão (open, close, connecting) da instância WhatsApp.
CRM — Acesso Direto (EspoCRM)
Proxy genérico para qualquer entidade do EspoCRM: Lead, Contact, Account, Opportunity, etc.
| Param | Default | Descrição |
|---|---|---|
limit | 20 | Máximo de registros (alias para maxSize) |
where | - | Filtro JSON (formato EspoCRM) |
orderBy | - | Campo para ordenação |
order | - | asc ou desc |
curl -H "Authorization: Bearer $GW_KEY" \ "https://api-paperclip.olivercode.com.br/crm/Lead?limit=5&orderBy=createdAt&order=desc"
curl -H "Authorization: Bearer $GW_KEY" \ https://api-paperclip.olivercode.com.br/crm/Lead/abc123
Body JSON é passado diretamente ao EspoCRM.
curl -X POST -H "Authorization: Bearer $GW_KEY" \
-H "Content-Type: application/json" \
https://api-paperclip.olivercode.com.br/crm/Lead \
-d '{"lastName": "Empresa XYZ", "phoneNumber": "5511999998888", "status": "New"}'
curl -X PUT -H "Authorization: Bearer $GW_KEY" \
-H "Content-Type: application/json" \
https://api-paperclip.olivercode.com.br/crm/Opportunity/opp123 \
-d '{"stage": "Closed Won"}'
curl -X DELETE -H "Authorization: Bearer $GW_KEY" \ https://api-paperclip.olivercode.com.br/crm/Lead/abc123