Criar negócio

POST/api/v1/deals

Cria um deal · o ponto de entrada principal pra captura de leads. Aceita 3 estilos de vinculação: 1) sem account/contact (mais simples); 2) com IDs existentes (accountId e/ou contactIds); 3) com criação inline — passe os objetos contact e/ou account e o CRM cria e vincula tudo num passo só (ideal pra formulário de site).

Body (JSON)

titleobrigatório
string
Título do deal (1-200 caracteres).
valueCents
number
Valor em centavos, inteiro ≥ 0.
default: 0
currency
string
Moeda com exatamente 3 caracteres.
default: BRL
pipelineId
string
Funil de destino. Quando omitido, usa o pipeline padrão do workspace. Precisa combinar com stageId e pertencer ao workspace (senão 422).
stageId
string
Estágio de destino. Quando omitido, usa o primeiro estágio do pipeline resolvido.
ownerId
string | null
Dono do deal · precisa ser membro do workspace (senão 404). Quando omitido, usa o primeiro membro do workspace.
expectedCloseAt
string (ISO 8601) | null
Data esperada de fechamento.
accountId
string | null
Empresa existente pra vincular (senão 404).
contactIds
string[]
Contatos existentes pra vincular (todos precisam existir, senão 404).
contact
object
Atalho de criação inline: { name (obrigatório, 1-120), email?, phone? (max 30), title? (max 120) }. Cria o contato e vincula ao deal (e à empresa, se houver).
account
object
Atalho de criação inline: { name (obrigatório, 1-160), website? (max 300), industry? (max 120) }. Cria a empresa e vincula ao deal.
customFields
object
Objeto { chave: valor } com as keys de custom fields de DEAL do workspace (descubra em GET /custom-fields?entity=DEAL). Chave desconhecida ou valor de tipo errado retorna 422.

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.
Resposta 201 Created com o deal completo.
Suporta Idempotency-Key · replays com mesmo body em até 24h retornam a resposta cacheada sem duplicar (útil pra retries de n8n/Zapier).
Dispara webhook deal.created (e contact.created / account.created quando a criação inline é usada).
Sem pipelineId/stageId, o lead cai no funil padrão, no primeiro estágio · perfeito pra captura.
Workspace sem pipeline configurado retorna 502 PROVIDER_ERROR.

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

curl -X POST "https://crmdojordao.com.br/api/v1/deals" \
  -H "Authorization: Bearer rmk_SUA_CHAVE" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Lead João - Proposta Premium", "valueCents": 250000, "currency": "BRL", "pipelineId": "pip_vendas", "stageId": "stg_novo_lead", "expectedCloseAt": "2026-08-15T00:00:00Z", "contact": { "name": "João Silva", "email": "joao@empresaexemplo.com.br", "phone": "+5511999999999" }, "account": { "name": "Empresa Exemplo LTDA" }, "customFields": { "fonte_lead": "Site" } }'
Request body
{
  "title": "Lead João - Proposta Premium",
  "valueCents": 250000,
  "currency": "BRL",
  "pipelineId": "pip_vendas",
  "stageId": "stg_novo_lead",
  "expectedCloseAt": "2026-08-15T00:00:00Z",
  "contact": {
    "name": "João Silva",
    "email": "joao@empresaexemplo.com.br",
    "phone": "+5511999999999"
  },
  "account": {
    "name": "Empresa Exemplo LTDA"
  },
  "customFields": {
    "fonte_lead": "Site"
  }
}
Resposta · POST /api/v1/deals
{
  "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"
}