Guia rapido integracao completa
Do CRM vazio a uma negociação ganha, em uma única sessão de terminal: origem, empresa, produto, contato, negociação, tarefa, arquivo, proposta e anotação.
A jornada de integração completa em uma única sessão de terminal, do CRM vazio a uma negociação ganha, com contato, empresa, produtos, tarefa, arquivo, proposta e linha do tempo. Cada id é capturado com jq (instale-o, ou copie os ids manualmente), então o bloco roda de cima a baixo como está. No Windows, execute no Git Bash.
Antes de começar
Obtenha no painel:
os ids do funil e dos estágios: abra o funil, a URL é
/dashboard/funis/{KANBAN_ID}/...; os ids dos estágios estão nas configurações do funil;se quiser atribuir responsáveis, o id de um usuário da conta.
Campos personalizados também precisam existir previamente no painel (chaves desconhecidas retornam 422).
Acentos no Windows: o curl do Git Bash converte argumentos -d '...' digitados na linha de comando pela página de código ANSI do Windows, corrompendo caracteres acentuados (ç, ã, í…). Para payloads com texto acentuado, salve o JSON em um arquivo UTF-8 e envie com --data-binary @corpo.json. Arquivos são transmitidos byte a byte, sem conversão.
A sessão completa
Configurar a sessão
export KEY="lc360_live_..." # chave de API com todos os escopos
export BASE="https://app-api.atendeserver.com.br/v1"
export KANBAN_ID=9 # id do funil (da URL do painel)
export STAGE_NEW=40 # id do estágio de entrada
export STAGE_NEGOTIATING=41 # id de um estágio intermediário
export OWNER_ID=3 # id de usuário da conta (opcional em todo o guia)
AUTH="Authorization: Bearer $KEY"
JSON="Content-Type: application/json"Atualizar o contato
PUT parcial: só os campos enviados mudam. company_id vincula o contato à empresa criada acima.
curl -s -X PUT -H "$AUTH" -H "$JSON" \
-d '{"occupation":"Designer","address_city":"Londrina","address_uf":"pr","company_id":'$COMPANY_ID'}' \
"$BASE/leads/$LEAD_ID" | jq '.data | {id, occupation, address_uf, company_id}'Criar a negociação
Reúne contato + empresa + origem no funil. Aparece em tempo real no quadro; as automações de criação são disparadas.
DEAL_ID=$(curl -s -X POST -H "$AUTH" -H "$JSON" \
-d '{"kanban_id":'$KANBAN_ID',"kanban_status_id":'$STAGE_NEW',"contact_ids":['$LEAD_ID'],"name":"Negociação - Plano Anual","company_id":'$COMPANY_ID',"source_id":'$SOURCE_ID',"owner_id":'$OWNER_ID',"rating":4,"expected_close_date":"2026-07-31"}' \
"$BASE/deals" | jq -r '.data.id')Adicionar uma linha de produto
O valor da negociação é calculado a partir das linhas de produto.
LINE_ID=$(curl -s -X POST -H "$AUTH" -H "$JSON" \
-d '{"product_id":'$PRODUCT_ID',"quantity":2,"discount_type":"percentage","discount":10}' \
"$BASE/deals/$DEAL_ID/products" | jq -r '.data.id')
curl -s -H "$AUTH" "$BASE/deals/$DEAL_ID" \
| jq '.data | {total_amount, recurring_amount, one_time_amount}' # valores calculadosCriar uma tarefa
A categoria "Ligação" é criada por nome; owner_id substitui os responsáveis.
TASK_ID=$(curl -s -X POST -H "$AUTH" -H "$JSON" \
-d '{"deal_id":'$DEAL_ID',"name":"Ligar para confirmar proposta","category":"Ligação","due_date":"2026-07-10T14:00:00Z","owner_id":'$OWNER_ID'}' \
"$BASE/tasks" | jq -r '.data.id')Anexar um arquivo
Multipart, binário no campo file. Aponte para um arquivo existente na sua máquina. O ;type= importa: o padrão do curl (application/octet-stream) é rejeitado — declare o tipo MIME real do seu arquivo.
FILE_ID=$(curl -s -X POST -H "$AUTH" \
-F "file=@contrato.pdf;type=application/pdf" -F "name=Contrato assinado.pdf" \
"$BASE/deals/$DEAL_ID/files" | jq -r '.data.id')Avançar a negociação
curl -s -X PUT -H "$AUTH" -H "$JSON" -d '{"is_completed":true}' "$BASE/tasks/$TASK_ID" \
| jq '.data | {id, is_completed}'
curl -s -X PUT -H "$AUTH" -H "$JSON" -d '{"kanban_status_id":'$STAGE_NEGOTIATING'}' \
"$BASE/deals/$DEAL_ID" | jq '.data | {kanban_status_id, status}' # mudança de estágio
curl -s -X PUT -H "$AUTH" -H "$JSON" -d '{"status":"won"}' "$BASE/deals/$DEAL_ID" \
| jq '.data | {status, closed_at}' # → "won" + closed_at preenchido; 🎉 na linha do tempoChamadas do dia a dia
# Encontrar um contato pelo id do seu ERP (filtro de campo personalizado)
curl -s -H "$AUTH" "$BASE/leads?custom__erp_id=9981" | jq '.data[].id'
# Negociações ganhas no mês, mais recentes primeiro
curl -s -H "$AUTH" "$BASE/deals?status=won&closed_at__gte=2026-07-01&sort=-closed_at" | jq '.meta'
# Tarefas abertas com vencimento nesta semana
curl -s -H "$AUTH" "$BASE/tasks?is_completed=false&due_date__lte=2026-07-12" | jq '.data'
# A linha do tempo completa da negociação (registros do sistema têm user_id: null)
curl -s -H "$AUTH" "$BASE/deals/$DEAL_ID/annotations?per_page=50" | jq '.data'
# Reabrir a negociação — sair do estágio terminal limpa o closed_at
curl -s -X PUT -H "$AUTH" -H "$JSON" -d '{"kanban_status_id":'$STAGE_NEGOTIATING'}' \
"$BASE/deals/$DEAL_ID" | jq '.data | {status, closed_at}'
# Exclusões disponíveis: linhas de produto, arquivos e contatos
curl -s -X DELETE -H "$AUTH" "$BASE/deals/$DEAL_ID/products/$LINE_ID" -w "%{http_code}\n"
curl -s -X DELETE -H "$AUTH" "$BASE/deals/$DEAL_ID/files/$FILE_ID" -w "%{http_code}\n"
curl -s -X DELETE -H "$AUTH" "$BASE/leads/$LEAD_ID" -w "%{http_code}\n"