API v1

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.

HeaderValor
AuthorizationBearer sk_live_…
X-Papo-Secret-KeyAlternativa ao Bearer
X-Papo-Public-Keypk_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

GET/api/v1/me

Conta

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_…"
GET/api/v1/instances

Instâ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_…"
GET/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_…"
GET/api/v1/assistants

Assistentes IA

Lista o prompt principal e os sub-assistentes da conta.

curl https://app.papo.global/api/v1/assistants \
  -H "Authorization: Bearer sk_live_…"
GET/api/v1/contacts

Contatos 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_…"
POST/api/v1/messages

Enviar 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"}'
POST/api/ai/v1/complete

Completar 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}'
GET/api/v1/ai/logs

IA — 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": "…" }
}
HTTPcodeQuando
401unauthorizedChave ausente, inválida ou revogada
400invalid_requestPayload incompleto
404not_foundRecurso 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())