Introdução
A API pública do Receptia tem duas frentes:
- API v1 de leitura — relatórios agregados e leads da sua organização, autenticada por chave. Somente leitura: nenhuma mensagem ou conversa individual é exposta.
- Webhook de entrada de leads — recebimento de contatos enviados por sistemas externos (formulários, landing pages, outras plataformas) direto para o CRM do Receptia.
URL base da API v1: https://receptia-production.up.railway.app/api/public/v1
A lista completa de endpoints, com parâmetros e schemas de resposta, fica na referência interativa, gerada a partir do próprio código — é sempre a versão no ar.
Autenticação
Cada chave pertence a uma organização e é enviada como Bearer token. Os dados retornados são sempre os da organização dona da chave, independentemente de qualquer parâmetro extra.
curl "https://receptia-production.up.railway.app/api/public/v1/reports/overview?start=2026-05-01&end=2026-06-01" \
-H "Authorization: Bearer rcpt_live_a1b2c3d4.SEU_SEGREDO"Como gerar, rotacionar e revogar chaves
No aplicativo, em Configurações → Empresa → API. Apenas usuários com papel owner ou admin têm acesso à seção.
- A chave em claro é exibida uma única vez, no momento da geração — o Receptia guarda apenas um hash. Se ela for perdida, use Rotacionar para emitir uma nova.
- Rotacionar cria a chave nova antes de revogar a antiga, para a integração não ficar sem chave válida no intervalo. Atualize o sistema consumidor assim que copiar a nova.
- Revogar invalida a chave imediatamente: as chamadas seguintes recebem 401.
X-Receptia-Key continuam aceitas durante a transição, com headers de depreciação na resposta, e deixam de funcionar em 31/08/2026. Migre para Authorization: Bearer.Escopos
Cada credencial declara para que tipo de consumidor foi emitida, e o tipo define quais escopos ela pode carregar. Uma Integração de dados (BI, ERP, planilhas) autentica por Authorization: Bearer; uma Gestão com IA (Claude, ChatGPT) autentica pela URL do conector. Um escopo gravado na credencial mas proibido para o tipo dela não vale — a chamada responde 403, assim como uma chamada sem o escopo exigido pelo endpoint.
read:reportsRelatóriosIntegração de dadosAgregados da organização: visão geral, métricas de suporte, SLA, conversões com IA, leads por dia e funil do pipeline.
read:leadsLeadsIntegração de dadosLista e detalhe de leads, sem telefone e sem e-mail. Projeção enxuta: nenhum campo sensível (CPF, endereço, score) é exposto.
read:leads_contactContato dos leadsIntegração de dadosdados pessoaisAdiciona telefone e e-mail às respostas de leads. Por expor dados pessoais, só é concedido mediante aceite explícito dos termos de responsabilidade no momento da emissão da credencial.
read:flowsFluxos (leitura)Gestão com IALista e leitura dos fluxos de automação da organização.
write:flowsFluxos (criação/edição)Gestão com IACriação e edição de fluxos como RASCUNHO. Publicar é sempre ação humana no painel — um fluxo já publicado recebe uma alteração proposta, que não entra em vigor sozinha.
read:catalogCatálogo da contaGestão com IARecursos usados na montagem de fluxos: conexões, templates, tags, funis, campos personalizados e equipe. Não inclui dados de leads.
Endpoints
Todos os endpoints da v1 são GET e ficam sob https://receptia-production.up.railway.app/api/public/v1. Parâmetros, filtros, paginação e schemas completos estão na referência interativa.
Relatórios
read:reports- GET
/reports/overview - GET
/reports/support-metrics - GET
/reports/sla - GET
/reports/ai-conversions - GET
/reports/leads-per-day - GET
/reports/pipeline-funnel
Exigem a janela start e end (YYYY-MM-DD), máximo de 92 dias, em UTC.
Leads
read:leads- GET
/leads - GET
/leads/{id}
Telefone e e-mail só aparecem quando a chave também tem read:leads_contact.
Erros
401Não autenticado
Chave ausente, desconhecida ou revogada. Confira o header Authorization: Bearer.
403Escopo insuficiente
A chave é válida, mas não possui o escopo exigido pelo endpoint. Gere uma chave com o escopo necessário no painel.
422Parâmetros inválidos
Janela maior que 92 dias, end anterior a start, datas em formato inválido ou parâmetros obrigatórios ausentes.
429Limite de requisições
Aguarde o tempo indicado no header Retry-After. Tentativas repetidas com chave inválida também bloqueiam o IP temporariamente.
502Métrica temporariamente indisponível
Falha transitória ao calcular a métrica. Re-tente em alguns instantes.
503API indisponível
A API v1 (ou um dos seus módulos) está temporariamente desligada. Fale com o suporte.
Corpo de erro padrão:
{ "detail": "Chave de API inválida ou revogada" }Limites
- Janela máxima por requisição: 92 dias entre
starteend. Para períodos maiores, divida em múltiplas chamadas. - Rate limit por chave: as chamadas são limitadas por janela de tempo, com limites próprios para relatórios e para leads. Ao exceder, a API responde 429 com o header
Retry-Afterem segundos. - Volume diário de leads: a leitura de leads tem um teto diário de linhas por chave.
- Proteção anti-abuso por IP: tentativas repetidas com chaves inválidas bloqueiam temporariamente o IP de origem (429).
- Somente leitura: a API v1 não escreve nada e não expõe mensagens nem conversas.
Webhook de entrada de leads
Para enviar contatos ao Receptia, use o webhook público de leads. A autenticação é feita pela chave secreta embutida na URL — obtenha a URL completa no aplicativo (Configurações → Integrações) ou via GET /api/leads/ingest/config (JWT). A chave pode ser trocada a qualquer momento com POST /api/leads/ingest/regenerate-key.
/api/webhooks/leads/{webhook_key}Aceita três formatos de corpo JSON: um objeto com a lista contacts, um array de contatos direto, ou um único contato. O único campo obrigatório é o telefone (phone; os apelidos telefone, whatsapp e celular também são aceitos).
Exemplo de requisição
curl -X POST "https://receptia-production.up.railway.app/api/webhooks/leads/SUA_WEBHOOK_KEY" \
-H "Content-Type: application/json" \
-d '{
"contacts": [
{
"name": "Maria Silva",
"phone": "5511999990000",
"email": "maria@exemplo.com.br",
"source": "landing-page",
"tags": ["campanha-junho"],
"custom_data": { "curso_interesse": "RLM" }
}
],
"duplicate_strategy": "skip",
"source": "webhook"
}'Exemplo de resposta (200)
{
"total": 1,
"imported": 1,
"updated": 0,
"skipped": 0,
"errors": 0,
"error_details": []
}Campos aceitos por contato: name, phone (obrigatório), email, status, source, contact_type, cpf, cnpj, razao_social, nome_fantasia, cep, logradouro, bairro, cidade, estado, tags (array ou string separada por vírgula) e custom_data. Apelidos em português como nome, origem, empresa e endereco também são reconhecidos.
Campos personalizados: chaves desconhecidas na raiz do contato são tratadas como candidatas a campo personalizado e validadas contra os campos definidos na sua organização (as não definidas são descartadas).
duplicate_strategy: skip (padrão, ignora telefones já cadastrados) ou update (atualiza o cadastro existente).
Erros: 401 para chave inválida; 429 ao exceder o limite de requisições (com Retry-After); 400 para JSON inválido ou nenhum contato com telefone.