Itens do funil (API)
Criar um lead direto na etapa que você quiser, mover entre etapas e listar o que está em cada coluna.
Descobrir os funis e as etapas
Antes de criar qualquer coisa, você precisa do stage_id:
curl https://www.scalacrm.com/api/v1/pipelines \
-H "Authorization: Bearer sk_live_…"
{
"ok": true,
"pipelines": [{
"id": "1a2b…", "name": "Funil de vendas",
"stages": [
{ "id": "9f8e…", "name": "Entrada de leads", "is_entry": true, "is_won": false, "is_lost": false },
{ "id": "7c2b…", "name": "Em conversa", "is_entry": false, "is_won": false, "is_lost": false },
{ "id": "4d5c…", "name": "Venda", "is_entry": false, "is_won": true, "is_lost": false }
]
}]
}
Ache a etapa pela flag, não pelo nome.
is_entry,is_woneis_lostcontinuam corretos se alguém renomear a coluna no CRM. Casar por nome no seu código quebra silenciosamente no dia da renomeação — é o tipo de falha que só aparece semanas depois, quando você repara que nada mais está sendo movido.
Para etapas do meio, guarde o stage_id na configuração da sua automação (ele não muda quando o nome muda).
Criar o item no funil
curl -X POST https://www.scalacrm.com/api/v1/cards \
-H "Authorization: Bearer sk_live_…" \
-H "Idempotency-Key: lead-4821" \
-H "Content-Type: application/json" \
-d '{
"contact_id": "3f9a…",
"stage_id": "7c2b…",
"value_cents": 49900
}'
{ "ok": true, "card_id": "8b1c…", "contact_id": "3f9a…", "stage_id": "7c2b…", "stage_name": "Em conversa" }
Você também pode mandar phone no lugar de contact_id, e title para o texto do card (o padrão é o nome do contato).
O funil vem da etapa — você não informa pipeline_id, e não tem como errar a combinação.
⚠️ Se o contato já tem um card ativo, ele é MOVIDO para a etapa que você pediu, em vez de ganhar um segundo card. É o comportamento que faz sentido para "quero este lead nesta etapa" — mas repare que mover dispara o evento de conversão configurado naquela etapa (Meta/Google). Se a etapa de destino tem um evento marcado, a conversão é enviada.
Mover, mudar valor, arquivar
curl -X PATCH https://www.scalacrm.com/api/v1/cards/8b1c… \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{ "stage_id": "4d5c…" }'
Aceita stage_id, title, value_cents e archived (true tira do funil sem apagar o histórico).
Listar
curl "https://www.scalacrm.com/api/v1/cards?stage_id=7c2b…&limit=100" \
-H "Authorization: Bearer sk_live_…"
Filtros: pipeline_id, stage_id, contact_id, include_archived=true. Por padrão só os ativos — card arquivado é histórico, e devolvê-lo por omissão faria sua automação agir sobre lead que já saiu do funil.
Receita comum: lead novo já qualificado
1. POST /v1/contacts → contact_id
2. POST /v1/cards → com o stage_id da etapa certa
3. POST /v1/contacts/:id/tags → etiqueta de origem
Os três aceitam Idempotency-Key, então o retry do seu n8n não duplica nada.
