Introdução
O que você pode construir com o Zaplin e por onde começar.
O Zaplin é um CRM de WhatsApp para equipes. Tudo o que um workspace tem (contatos, conversas, mensagens, pipelines, campanhas, automações, lembretes, formulários e segmentos) também está disponível por quatro portas:
API REST
https://app.zaplin.com.br/api/v1, com chaves de API de contas de serviço: as mesmas operações que o servidor MCP dá a um assistente.
OAuth 2.1
Para apps que agem em nome de uma pessoa: PKCE, registro dinâmico de clientes e escopos por domínio.
Webhooks
Receba message.received, stage.changed e outros eventos no seu servidor, assinados com HMAC.
Servidor MCP
Conecte Claude, ChatGPT ou Cursor ao seu workspace em https://app.zaplin.com.br/api/mcp.
Por onde começar
- Integração entre sistemas (ERP, BI, seu backend): crie uma chave de API e siga o começo rápido.
- App para outros workspaces: registre um app OAuth.
- Assistente de IA: conecte o servidor MCP; a pessoa autoriza e o assistente age com o papel dela.
- Receber eventos: crie um endpoint de webhook, ou mande eventos de Stripe, Hotmart ou do seu sistema para uma automação.
Endereço base
Todas as rotas da API ficam em:
https://app.zaplin.com.br/api/v1- Corpos e respostas em JSON, com chaves em
snake_case(contact_id,next_cursor). Datas e horários em ISO 8601, em UTC. - Telefones em E.164, como
+5511987654321. - Um corpo que não é JSON recebe
400cominvalid_json. Todo erro é{ error: { code, message } }(veja Erros e limites).
A referência da API lista cada endpoint, gerada da mesma tabela de rotas que a API e o servidor MCP usam.
Paginação
As listas vêm do mais novo ao mais antigo, uma página por vez:
| Parâmetro | Valor |
|---|---|
limit | Itens por página, de 1 a 100. Padrão: 50. |
cursor | O next_cursor da página anterior. |
{
"data": [{ "id": "…" }],
"next_cursor": "eyJhdCI6IjIwMjYtMTAtMTdUMTM6MDI6MTEuMDAwWiIsImlkIjoi4oCmIn0"
}next_cursor é null na última página. Trate o cursor como opaco: um cursor que não veio da API recebe 400 com invalid_cursor.
let cursor: string | null = null
do {
const url = new URL("https://app.zaplin.com.br/api/v1/contacts")
url.searchParams.set("limit", "100")
if (cursor) url.searchParams.set("cursor", cursor)
const response = await fetch(url, {
headers: { Authorization: `Bearer ${process.env.ZAPLIN_KEY}` },
})
const page = await response.json()
for (const contact of page.data) console.log(contact.id)
cursor = page.next_cursor
} while (cursor)Dois tipos de token
| Token | Para quê | Onde nasce |
|---|---|---|
Chave de API (sk_live_…) | Integrações entre sistemas, com o alcance de uma conta de serviço | Configurações › Desenvolvedores › API Keys |
| Access token OAuth | Apps e assistentes que agem em nome de uma pessoa | O fluxo de OAuth |
Os dois vão no cabeçalho Authorization: Bearer <token>. Veja Autenticação.