API REST v1 da Encantra
Integre seus sistemas (ERP, CRM, produto, BI, automações) à Encantra. Especificação OpenAPI: openapi.yaml.
Base: https://suporte.inspire4u.com.br/api/v1 · Formato: JSON UTF-8 · Disponível nos planos: Jornada, Apologia e Enterprise.
Autenticação
Crie uma chave em Integrações › API & Webhooks › Chaves de API, escolhendo os escopos mínimos. A chave aparece uma única vez.
curl https://suporte.inspire4u.com.br/api/v1/me -H "Authorization: Bearer enc_live_xxxxxxxx_yyyyyyyy"
| Escopo | Permite |
|---|---|
* |
Tudo |
tickets |
Ler, abrir e responder tickets |
accounts |
Ler e criar/atualizar contas |
contacts |
Ler e criar/atualizar contatos |
events |
Registrar eventos de uso |
knowledge |
Publicar/remover documentos de conhecimento |
Convenções
- Sucesso:
{"data": ..., "meta": {...}}. Listas paginadas porpageeper_page(máx. 100) commeta.total. - Erro:
{"error": {"status": 422, "message": "...", "fields": {...}}}. 401chave ausente/inválida ·403escopo insuficiente ·402plano/limite ·404·422validação ·429limite de taxa.- Limite de taxa: 600 requisições/minuto por chave.
- Datas ISO 8601; dinheiro em centavos (
mrr_cents). POST /accountsePOST /contactssão upserts (idempotentes porexternal_id/email).
Endpoints
| Método | Caminho | Escopo | Descrição |
|---|---|---|---|
| GET | /me |
— | Workspace e chave em uso |
| GET | /accounts |
accounts | Lista contas (external_id, domain, lifecycle_stage, updated_since, page, per_page) |
| POST | /accounts |
accounts | Cria/atualiza por external_id (aceita contacts[]) |
| GET | /accounts/{id} |
accounts | Detalhe |
| PATCH | /accounts/{id} |
accounts | Atualização parcial |
| GET | /contacts |
contacts | Lista contatos (email, external_id, account_id) |
| POST | /contacts |
contacts | Cria/atualiza por external_id ou email (vincule com account_id ou account_external_id) |
| POST | /events |
events | Lote de até 1000 eventos de uso (alimenta o health score) |
| POST | /knowledge |
knowledge | Publica/atualiza documento no conhecimento da Lumi |
| DELETE | /knowledge/{source_id} |
knowledge | Remove documento |
| GET | /tickets |
tickets | Lista tickets |
| POST | /tickets |
tickets | Abre ticket |
| GET | /tickets/{id} |
tickets | Detalhe com mensagens públicas |
| PATCH | /tickets/{id} |
tickets | Atualiza status, prioridade, tags, responsável |
| POST | /tickets/{id}/messages |
tickets | Responde (cliente ou agente) |
Exemplos
Sincronizar uma conta com seus contatos
curl -X POST https://suporte.inspire4u.com.br/api/v1/accounts \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{
"external_id": "cust_1042",
"name": "Padaria Pão Quente",
"domain": "paoquente.com.br",
"plan": "Pro",
"mrr_cents": 29900,
"renewal_date": "2027-03-01",
"contacts": [{ "external_id": "u_9", "name": "Joana", "email": "joana@paoquente.com.br", "role": "champion" }]
}'
Resposta 201 (criada) ou 200 (atualizada) com meta.created.
Registrar uso do produto
curl -X POST https://suporte.inspire4u.com.br/api/v1/events \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"events": [
{"id": "evt_8812", "customer_external_id": "cust_1042", "user_external_id": "u_9",
"event": "report_exported", "quantity": 1, "occurred_at": "2026-10-28T09:12:00-03:00"}
]}'
Resposta 202: {"data": {"inserted": 1, "skipped": 0, "errors": []}}. Eventos com o mesmo id não são duplicados.
Publicar conhecimento
curl -X POST https://suporte.inspire4u.com.br/api/v1/knowledge \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"source_id": "politica-trocas", "title": "Política de trocas", "visibility": "public",
"url": "https://loja.com.br/trocas", "body_markdown": "## Prazo\n\nTrocas em até 30 dias..."}'
Abrir um ticket
curl -X POST https://suporte.inspire4u.com.br/api/v1/tickets \
-H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
-d '{"subject": "Erro ao emitir nota", "body": "Ao emitir a NF aparece erro 500.",
"contact_email": "joana@paoquente.com.br", "contact_name": "Joana", "priority": "high", "tags": ["nfe"]}'
Webhooks (saída)
Configure em Integrações › API & Webhooks › Webhooks. Cada entrega:
POST https://seu-sistema.com/webhooks/encantra
Content-Type: application/json
X-Encantra-Event: ticket.created
X-Encantra-Signature: t=1761657600,v1=5f2b…
{"id": "…", "event": "ticket.created", "created_at": "2026-10-28T10:20:00-03:00", "data": {"tenant_id": 1, "ticket_id": 42, …}}
Valide: hex(hmac_sha256(segredo, t + "." + corpo_bruto)) == v1 e |agora − t| ≤ 300 s. Responda 2xx em até 15 s; falhas são reenviadas até 5 vezes com espera exponencial.
Eventos: ticket.created, ticket.updated, ticket.status_changed, ticket.assigned, ticket.replied, ticket.solved, ticket.sla_breached, csat.received, chat.started, chat.handoff, account.created, account.updated, account.health_changed, account.stage_changed, contact.created, survey.responded, journey.started, journey.completed, task.overdue, connector.synced, usage.event_received.
// Node.js — verificação
const crypto = require('crypto');
function verify(rawBody, header, secret) {
const { t, v1 } = Object.fromEntries(header.split(',').map(p => p.split('=')));
if (Math.abs(Date.now() / 1000 - Number(t)) > 300) return false;
const expected = crypto.createHmac('sha256', secret).update(`${t}.${rawBody}`).digest('hex');
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(v1));
}
Conectar seu produto inteiro
Para trazer documentação, catálogo, clientes, uso, contexto ao vivo e ações de uma vez, implemente o protocolo aberto EKSP — veja docs/eksp.
Encontrou algo para melhorar? Escreva para master@inspire4u.com.br.