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_won e is_lost continuam 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.

Veja também