Atualizar negócio

PATCH/api/v1/deals/:id

Atualiza campos do deal. Todos os campos são opcionais · só os que vierem no body são alterados. Restrição importante: stageId precisa pertencer ao MESMO pipeline do deal — pra mover entre pipelines, crie um novo deal. Para fechar como perdido, passe lostReasonId (preferido · descubra os IDs em GET /loss-reasons) ou lostReason (texto livre).

Parâmetros de path

idobrigatório
string
ID do deal.

Body (JSON)

title
string
Novo título (1-200 caracteres).
valueCents
number
Novo valor em centavos, inteiro ≥ 0.
stageId
string
Novo estágio · precisa pertencer ao mesmo pipeline do deal (senão 422). Mudar grava a entrada no histórico de etapas.
ownerId
string | null
Novo dono · precisa ser membro do workspace (senão 404).
expectedCloseAt
string (ISO 8601) | null
Nova data esperada de fechamento.
status
enum
Novo status. WON/LOST seta closedAt automaticamente; voltar pra OPEN limpa closedAt.
OPENWONLOST
lostReasonId
string | null
Motivo de perda do catálogo do workspace (GET /loss-reasons) · 404 se não existe ou está arquivado.
lostReason
string | null
Motivo de perda em texto livre (alternativa ao lostReasonId).
accountId
string | null
Empresa vinculada (senão 404).
customFields
object
Objeto { chave: valor } · faz upsert dos valores informados.

Headers

Idempotency-Key
string
Opcional, recomendado (8-200 caracteres, ex.: um UUID). A primeira request é processada normalmente; requests com a mesma key e mesmo body em até 24h retornam a resposta cacheada (header Idempotency-Replay: true), sem criar duplicata. Mesma key com body diferente retorna 422 IDEMPOTENCY_CONFLICT. Só respostas 2xx são cacheadas.
Suporta Idempotency-Key · replays com mesmo body em até 24h retornam a resposta cacheada sem duplicar (útil pra retries de n8n/Zapier).
Apenas um evento webhook por PATCH, o mais específico: deal.won > deal.lost > deal.stage_changed > deal.updated.
Mudanças de stage, owner e status (won/lost) também são gravadas no event log que alimenta o copiloto de IA · a IA enxerga mudanças via API igual enxerga mudanças feitas na tela.

Autenticação: header Authorization: Bearer rmk_... · veja Introdução e autenticação.

curl -X PATCH "https://crmdojordao.com.br/api/v1/deals/:id" \
  -H "Authorization: Bearer rmk_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{ "stageId": "stg_proposta_enviada", "valueCents": 350000, "status": "WON" }'
Request body
{
  "stageId": "stg_proposta_enviada",
  "valueCents": 350000,
  "status": "WON"
}
Resposta · PATCH /api/v1/deals/:id
{
  "id": "deal_abc123",
  "title": "Lead João - Proposta Premium",
  "valueCents": 250000,
  "currency": "BRL",
  "status": "OPEN",
  "pipelineId": "pip_vendas",
  "stageId": "stg_novo_lead",
  "ownerId": "usr_maria",
  "accountId": "acc_empresa_exemplo",
  "contactIds": ["ct_joao"],
  "expectedCloseAt": "2026-08-15T00:00:00.000Z",
  "closedAt": null,
  "lostReasonId": null,
  "lostReason": null,
  "customFields": {
    "fonte_lead": "Site"
  },
  "createdAt": "2026-07-01T13:30:00.000Z",
  "updatedAt": "2026-07-01T13:30:00.000Z"
}