Vendas, catálogo e empresas (API)

Lançar e consultar vendas com idempotência de verdade, ler o catálogo e cadastrar empresas.

Lançar uma venda

curl -X POST https://www.scalacrm.com/api/v1/sales \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "contact_id": "3f9a…",
    "external_id": "planilha-linha-482",
    "items": [
      { "description": "Plano Anual", "quantity": 1, "unit_price_cents": 149900 }
    ],
    "move_to_stage_id": "4d5c…"
  }'
{ "ok": true, "sale_id": "aa11…", "duplicated": false, "stage_name": "Venda" }

Campos: contact_id ou phone, items (até 50, com product_id opcional), discount_cents, sold_at, notes, move_to_stage_id.

external_id é a idempotência que importa aqui — e não o cabeçalho Idempotency-Key. A diferença: o cabeçalho vale 24h e cobre o retry imediato; o external_id vale para sempre, porque venda concluída dispara conversão para Meta e Google. Duplicar envenena a otimização das suas campanhas com receita que não existiu.

Use o identificador do seu sistema: a linha da planilha, o número do pedido, o id do seu ERP. Reenvio devolve duplicated: true e a venda original — retry seguro.

Se o move_to_stage_id falhar (etapa apagada, por exemplo), a venda não é desfeita: você recebe 200 com stage_warning. O lançamento é o fato principal; só o funil ficou pendente.

Consultar vendas

curl "https://www.scalacrm.com/api/v1/sales?status=completed&sold_after=2026-08-01T00:00:00Z" \
  -H "Authorization: Bearer sk_live_…"

Filtros: status, contact_id, external_id, sold_after.

Buscar por external_id é o jeito de perguntar "eu já lancei esta linha?" antes de tentar de novo.

Catálogo

curl https://www.scalacrm.com/api/v1/products \
  -H "Authorization: Bearer sk_live_…"

Traz nome, preço, tipo, modo de preço (fixo, gratuito, sob consulta), custo, formas de pagamento e promoção. Só os ativos por padrão — item desativado não deve ser cotado. Use include_inactive=true se precisar do histórico.

Empresas

# buscar por parte do nome
curl "https://www.scalacrm.com/api/v1/companies?name=acme" \
  -H "Authorization: Bearer sk_live_…"

# cadastrar
curl -X POST https://www.scalacrm.com/api/v1/companies \
  -H "Authorization: Bearer sk_live_…" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Acme Ltda", "email": "contato@acme.com" }'

Para vincular um contato à empresa, use o PATCH de contatos com company_id. Venda e tarefa herdam a empresa do contato automaticamente.

Veja também