API de eventos

Mova deals e crie tarefas no Orbit

Um sistema externo manda um evento identificando o cliente pelo CNPJ — o Orbit resolve quem é, cria o contato se precisar, e aplica a ação. Sem login humano, sem precisar conhecer IDs internos do Orbit.

01

O que é

Hoje a única forma de falar com a API do Orbit é logando como gente — não serve para uma integração servidor-a-servidor. A API de eventos resolve isso: uma chave por organização, gerada uma vez, usada em toda chamada.

1Seu sistema manda o CNPJ + a ação
2Orbit resolve o contato (cria se não existir)
3Deal move de estágio ou tarefa é criada

Dois tipos de evento hoje: mover_estagio (a ação principal — move um deal pra etapa certa do funil) e criar_tarefa.

02

Gerar a chave

  1. No painel do Orbit, abra /dashboard/api-publica (link "Gerar chave" no topo desta página).
  2. Clique em Gerar nova chave.
  3. O valor completo (orbit_live_<prefixo>.<segredo>) aparece uma única vez, na hora da criação — copie e guarde num cofre de segredo do seu lado (variável de ambiente, secret manager). Depois disso o Orbit só guarda o hash, não é recuperável — mesma regra de senha.
  4. Dá pra revogar e gerar outra a qualquer momento, sem downtime — gere a nova antes de revogar a antiga.
A chave vale pra organização inteira
Qualquer integração que usar essa chave age em nome da sua organização. Trate como trataria uma senha de administrador.
03

Começo rápido

Toda chamada é um POST em /api/public/v1/events, com a chave no cabeçalho Authorization.

Campo e o que é
CampoO que é
tipo"mover_estagio" ou "criar_tarefa".
cnpjCom ou sem pontuação — o Orbit normaliza antes de comparar.
dadosEspecífico de cada tipo de evento (ver as duas seções seguintes).
CNPJ desconhecido? O Orbit cria o contato na hora
Você não precisa criar o contato antes de mover ele de estágio. Se o CNPJ é novo, o Orbit cria o contato (e o deal, no caso de mover_estagio) direto na etapa pedida.
04

Mover um deal — a ação principal

dados: {"estagio": "Nome do estágio"} — o nome é resolvido contra os estágios do funil da sua organização.

requisição
curl -X POST https://orbit.solanis.ai/api/public/v1/events \
  -H "Authorization: Bearer orbit_live_SEU_PREFIXO.SEU_SEGREDO" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: pedido-4821" \
  -d '{
    "tipo": "mover_estagio",
    "cnpj": "01.234.567/0001-89",
    "dados": { "estagio": "Qualificado" }
  }'

Resposta

200 OK
{
  "ok": true,
  "contato_criado": false,
  "deal_criado": false,
  "resultado": {
    "id": 812,
    "contact_id": 4417,
    "stage_id": 3,
    "title": "Empresa Exemplo Ltda",
    "value": 0,
    "won": null,
    "updated_at": "2026-10-14T16:19:14Z"
  }
}
  • CNPJ novo → cria contato + deal, direto na etapa pedida.
  • CNPJ já conhecido, sem deal → cria o deal nessa etapa.
  • CNPJ com deal existente → move esse deal pra etapa pedida.
  • Estágio mudou de verdade → dispara o webhook lead.stage_changed (ver última seção).
05

Criar uma tarefa

dados: {"titulo", "descricao", "vencimento"} (vencimento em YYYY-MM-DD, opcional).

requisição
curl -X POST https://orbit.solanis.ai/api/public/v1/events \
  -H "Authorization: Bearer orbit_live_SEU_PREFIXO.SEU_SEGREDO" \
  -H "Content-Type: application/json" \
  -d '{
    "tipo": "criar_tarefa",
    "cnpj": "01.234.567/0001-89",
    "dados": {
      "titulo": "Ligar pra confirmar reunião",
      "descricao": "Cliente pediu retorno até sexta",
      "vencimento": "2026-10-20"
    }
  }'

Mesma resolução de CNPJ do mover_estagio — cria o contato se precisar, sem criar deal.

06

Identificação por CNPJ

O CNPJ é normalizado pra dígitos antes de qualquer comparação — pontuação, espaços, não importa. Os três formatos abaixo resolvem pro MESMO contato:

formatos equivalentes
"01.234.567/0001-89"   // com pontuação — funciona
"01234567000189"       // só dígitos — funciona, mesmo contato
"  01234567000189  "   // com espaços — funciona, mesmo contato

O dígito verificador é validado de verdade — um CNPJ com dígito errado devolve cnpj_invalido, não cria nada.

07

Idempotência

Sistema que não recebe resposta a tempo vai reenviar. Para não duplicar deal ou tarefa nesse reenvio, mande um cabeçalho opcional Idempotency-Key (string livre, escolhida por você) — a mesma chave nas últimas 24h devolve a resposta salva da primeira vez, sem reprocessar.

  • Sem o cabeçalho, cada chamada processa normal (sem proteção).
  • Chave diferente = evento novo, processa normal.
  • Duas requisições com a MESMA chave ao mesmo tempo: uma processa, a outra espera — nunca duplica.
08

Limite de requisições

60 eventos por minuto, por organização (não por chave — duas chaves da mesma org compartilham o teto). Passar do limite devolve limite_de_taxa_excedido.

09

Erros

Toda falha tem o mesmo formato:

erro
{
  "ok": false,
  "erro": "estagio_desconhecido",
  "mensagem": "Estágio 'Fechado' não existe. Estágios válidos: Novo, Qualificado, Proposta, Negociação, Ganho, Perdido"
}
Erro e significado
ErroSignificado
chave_invalidaChave não reconhecida, mal formatada ou revogada (as duas últimas situações devolvem o mesmo erro, por segurança).
cnpj_invalidoDígito verificador do CNPJ não confere.
tipo_desconhecidoCampo "tipo" não é "mover_estagio" nem "criar_tarefa".
estagio_desconhecidoNome de estágio não existe nesta organização — a mensagem vem com a lista de estágios válidos.
limite_de_taxa_excedidoMais de 60 eventos por minuto para esta organização.
processandoA mesma Idempotency-Key já está sendo processada por outra requisição em paralelo — tente de novo em instantes.
10

O Orbit avisa de volta

Depois que um evento move um deal de estágio de verdade, o Orbit dispara o webhook lead.stage_changed pelo canal que sua organização já configurou — mesmo mecanismo de saída usado pelo resto do Orbit, nada novo aqui.

Ainda não configurou webhook de saída?
Veja a documentação de webhooks pra receber o aviso no seu sistema quando um deal mudar de estágio.