Listar e criar leads, importar leads de um CSV, listar e mover oportunidades e listar funis, com curl, steel CLI e SDK, respostas de exemplo e os erros de cada operação.
Nesta página
Todas as rotas desta página exigem um token com o módulo CRM e rodam com as
suas permissões no CRM. Os exemplos usam $STEEL_URL e $STEEL_TOKEN (veja
Antes da primeira chamada).
Operação
Rota
Escopo
CLI
SDK
Listar leads
GET /api/v1/crm/leads
api:read
steel crm lead list
crm.leads.list()
Criar lead
POST /api/v1/crm/leads
api:write
steel crm lead create
crm.leads.create()
Importar CSV
POST /api/v1/crm/leads/import
api:write
steel crm lead import
crm.leads.import()
Listar oportunidades
GET /api/v1/crm/opportunities
api:read
steel crm opportunity list
crm.opportunities.list()
Mover oportunidade
POST /api/v1/crm/opportunities/{opportunityId}/stage
api:write
steel crm opportunity move
crm.opportunities.move()
Listar funis
GET /api/v1/crm/pipelines
api:read
steel crm pipelines
crm.pipelines()
Listar leads
Na ordem do funil de leads. stage filtra por etapa: RECEIVED,
IN_CONTACT, QUALIFIED, OPPORTUNITY, PROPOSAL ou CLOSED.
Um lead fechado traz closeResult (WON ou LOST), closedAt,
closedAmount e billingType (ONE_TIME, MONTHLY ou YEARLY); perdido,
também lostReason e lostNote.
No CLI, --stage aceita recebido, em-contato, qualificado,
oportunidade, proposta, fechado ou o valor da API:
steel crm lead list --stage qualificado
steel crm lead list --all --json | jq -r '.items[] | [.name, .emails[0], .score] | @tsv'
A mesma entrada de leads do aplicativo: calcula a pontuação, aplica as regras
de roteamento de dono e dispara os workflows de lead criado (e o evento de
webhook crm.lead.created). Todo lead nasce na etapa RECEIVED.
Campo
Regra
name
Obrigatório, até 200 caracteres
source
Obrigatório, até 100 caracteres (Site, Feira, Indicação...)
const lead = await steel.crm.leads.create({
name: 'Carlos Lima',
emails: ['carlos@empresa.com.br'],
phones: [],
source: 'Feira',
})
if (!lead.ok && lead.error.code === 'CRM_LEAD_DUPLICATE') {
// já existe um lead em aberto com esse contato
}
Erro
Quando
409 CRM_LEAD_DUPLICATE
Já existe um lead em aberto com o mesmo e-mail ou telefone. Não repita; atualize o existente no aplicativo
422 VALIDATION_ERROR
Faltou nome ou origem, nenhum e-mail nem telefone (path: ["emails"], "Informe ao menos um email ou telefone"), ou e-mail inválido
O 409 deixa a criação idempotente pelo contato: repetir o mesmo lead
depois de uma falha de rede não cria dois.
Importar leads de um CSV
POST /api/v1/crm/leads/import recebe o próprio CSV como corpo
(Content-Type: text/csv), até 5.000 linhas e 5 MB. A primeira linha é
o cabeçalho; o separador é , ou ;.
Coluna (maiúsculas e acentos não importam)
Campo
name ou nome
Nome (obrigatória)
email
E-mails; vários na mesma célula separados por ;
phone, telefone ou celular
Telefones; vários separados por ;
company ou empresa
Empresa
job_title ou cargo
Cargo
city ou cidade
Cidade
linkedin
LinkedIn
source ou origem
Origem; vazia usa o ?source= da chamada, ou API
channel ou canal
Canal
Cada linha passa pela mesma entrada do Criar um lead, em
ordem. Uma linha igual a um lead em aberto conta em skipped; uma linha
recusada vai para errors com o número dela, e as outras seguem.
nome;email;telefone;empresa;origem
Carlos Lima;carlos@empresa.com.br;11999990000;Empresa SA;Site
Bia Rocha;;11988887777;;
Sem Contato;;;;
Leva a oportunidade para outra etapa e, com pipelineId, para outro funil.
Uma etapa da categoria WON marca a data de ganho, como no aplicativo. A
mudança dispara os workflows de oportunidade atualizada e os eventos
crm.opportunity.stage_changed e, numa etapa de ganho ou perda,
crm.deal.won ou crm.deal.lost.