API Papo para integrações
Conecte CRM, n8n, ERPs ou o seu backend. Cada conta tem uma chave pública estável e chaves secretas que você gera no painel.
Chave pública
Identifica a conta. Pode ir no frontend.
Chave secreta
Autentica as chamadas. Só no servidor.
REST JSON
HTTPS, Bearer token, CORS liberado.
Autenticação
Todas as rotas (exceto GET /api/v1) exigem a chave secreta. A pública é opcional, mas se enviada precisa combinar com a secreta.
| Header | Valor |
|---|---|
| Authorization | Bearer sk_live_… |
| X-Papo-Secret-Key | Alternativa ao Bearer |
| X-Papo-Public-Key | pk_live_… (opcional) |
Base URL: https://app.papo.global/api/v1
Chave pública e secreta
- pk_live_… — fixa por conta, visível no painel, copiável a qualquer momento.
- sk_live_… — mostrada uma única vez na criação. Hash SHA-256 no banco. Revogue se vazar.
- Crie chaves nomeadas por ambiente (n8n, CRM, staging).
Endpoints
/api/v1/meConta
Retorna a conta autenticada, a chave pública e o e-mail.
curl https://app.papo.global/api/v1/me \ -H "Authorization: Bearer sk_live_…" \ -H "X-Papo-Public-Key: pk_live_…"
/api/v1/instancesInstâncias WhatsApp
Lista as conexões WhatsApp da conta (status, número, perfil).
curl https://app.papo.global/api/v1/instances \ -H "Authorization: Bearer sk_live_…"
/api/v1/instances/{id}Instância
Detalha uma instância pelo ID interno ou pelo nome.
curl https://app.papo.global/api/v1/instances/user_100001_principal \ -H "Authorization: Bearer sk_live_…"
/api/v1/assistantsAssistentes IA
Lista o prompt principal e os sub-assistentes da conta.
curl https://app.papo.global/api/v1/assistants \ -H "Authorization: Bearer sk_live_…"
/api/v1/contactsContatos do Extrator
Lista leads extraídos, com paginação.
page— Página (padrão 1)per_page— Itens por página (1–100, padrão 20)q— Busca por empresa, telefone ou e-mail
curl "https://app.papo.global/api/v1/contacts?page=1&per_page=20" \ -H "Authorization: Bearer sk_live_…"
/api/v1/messagesEnviar mensagem
Envia uma mensagem de texto pelo WhatsApp da conta.
{
"to": "5511999999999",
"text": "Olá! Mensagem via API Papo.",
"instance_id": "opcional — ID ou nome da instância"
}curl -X POST https://app.papo.global/api/v1/messages \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"to":"5511999999999","text":"Olá pela API Papo"}'/api/ai/v1/completeCompletar com IA
Gera uma resposta de IA com o prompt da conta (OpenRouter). Mesmas chaves.
{
"text": "Quanto custa o plano Gold?",
"use_client_prompt": true
}curl -X POST https://app.papo.global/api/ai/v1/complete \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"text":"Quanto custa o plano Gold?","use_client_prompt":true}'/api/v1/ai/logsIA — logs
Lista as chamadas de IA desta conta (tokens, modelo, mídia, status).
limit— Máximo de itens (1–100)contact_key— Filtrar por contato
curl "https://app.papo.global/api/v1/ai/logs?limit=20" \ -H "Authorization: Bearer sk_live_…"
Erros
Respostas de erro seguem o formato abaixo. Sucesso sempre inclui success: true e data.
{
"success": false,
"error": { "code": "unauthorized", "message": "…" }
}| HTTP | code | Quando |
|---|---|---|
| 401 | unauthorized | Chave ausente, inválida ou revogada |
| 400 | invalid_request | Payload incompleto |
| 404 | not_found | Recurso inexistente |
Exemplos
JavaScript
const res = await fetch("https://app.papo.global/api/v1/me", {
headers: {
Authorization: "Bearer " + process.env.PAPO_SECRET_KEY,
"X-Papo-Public-Key": process.env.PAPO_PUBLIC_KEY,
},
});
const json = await res.json();
console.log(json.data);Python
import os, requests
r = requests.get(
"https://app.papo.global/api/v1/me",
headers={
"Authorization": f"Bearer {os.environ['PAPO_SECRET_KEY']}",
"X-Papo-Public-Key": os.environ["PAPO_PUBLIC_KEY"],
},
)
print(r.json())