Negociações
Criar, listar, atualizar negociações (deals), mover de estágio e gerenciar anotações através da API do Modari.
Uma negociação (deal) representa uma oportunidade de venda vinculada a um contato e a um funil.
POST /api/deals
Authorization: Bearer elv_...
Content-Type: application/jsonCriar uma negociação#
POST /api/deals| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name |
string | sim | Nome da negociação. |
contactId |
string | sim | ID do contato vinculado. |
pipelineId |
string | sim | ID do funil. |
description |
string | não | Descrição livre. |
assigneeId |
string | não | ID do responsável (contato interno). |
value |
number | não | Valor da negociação. |
stageId |
string | não | Estágio inicial. Se omitido, usa o estágio padrão do funil. |
origin |
string | não | Origem da negociação (mesmos valores de origem do contato). |
briefingDate |
data | não | Data do briefing, ISO 8601. |
presentationDate |
data | não | Data da apresentação, ISO 8601. |
Exemplo#
{
"name": "Negociação Empresa XYZ",
"contactId": "677a8121849dfc001b863851",
"pipelineId": "507f1f77bcf86cd799439011",
"value": 5000,
"origin": "meta"
}Resposta — 201#
{
"status": 201,
"createdRegistry": {
"_id": "6866fe673d11620018434523",
"name": "Negociação Empresa XYZ",
"contactId": "677a8121849dfc001b863851",
"pipelineId": "507f1f77bcf86cd799439011",
"stageId": "507f1f77bcf86cd799439012",
"assigneeId": null,
"value": 5000,
"status": "open",
"notes": [],
"origin": "meta",
"createdAt": "2025-07-18T14:15:13.321Z",
"updatedAt": "2025-07-18T14:15:13.321Z"
}
}Listar negociações#
GET /api/dealsSuporta a paginação padrão da API, mais os filtros abaixo:
| Filtro (query string) | Tipo | Descrição |
|---|---|---|
pipelineId |
string | Filtra por funil. |
status |
string | open, paused, won ou lost. |
assigneeIds |
array | Filtra por um ou mais responsáveis. |
origin |
string | Filtra por origem da negociação. |
inactiveDays |
number | Negociações sem atividade há N dias (baseado em updatedAt). |
{
"status": 200,
"registersList": [
{ "_id": "6866fe673d11620018434523", "name": "Negociação Empresa XYZ", "...": "..." }
],
"pagination": {
"currentPage": 1,
"totalPages": 1,
"totalItems": 1,
"itemsPerPage": 10,
"hasNextPage": false,
"hasPreviousPage": false
}
}Buscar negociação por ID#
GET /api/deals/:dealIdRetorna 404 se a negociação não existir para a empresa dona da API key.
Atualizar negociação#
PATCH /api/deals/:dealId| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name |
string | não | Nome da negociação. |
description |
string | não | Descrição livre. |
assigneeId |
string | não | ID do responsável. |
value |
number | não | Valor da negociação. |
origin |
string | não | Origem da negociação. |
campaign |
string | não | Campanha de origem. |
briefingDate |
data | não | Data do briefing, ISO 8601. |
presentationDate |
data | não | Data da apresentação, ISO 8601. |
Este endpoint não move a negociação de estágio nem de funil — para isso, use mover de estágio abaixo.
{
"value": 7500,
"assigneeId": "6512c0f2a3b1d4e5f6a7b8c9"
}Mover para outro estágio#
Move a negociação para outro estágio dentro do mesmo funil.
PATCH /api/deals/:dealId/stage| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
stageId |
string | sim | ID do estágio de destino. Precisa pertencer ao funil atual da negociação. |
{ "stageId": "507f1f77bcf86cd799439012" }Resposta — 200#
{
"status": 200,
"updatedRegistry": { "_id": "6866fe673d11620018434523", "stageId": "507f1f77bcf86cd799439012", "...": "..." }
}Alterar o status#
Altera o status da negociação — é como se marca uma negociação como ganha ou perdida.
PATCH /api/deals/:dealId/status| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
status |
string | sim | Novo status: open, paused, won ou lost. |
{ "status": "won" }Resposta — 200#
{
"status": 200,
"updatedRegistry": { "_id": "6866fe673d11620018434523", "status": "won", "...": "..." }
}Um valor fora da lista acima responde 400.
Anotações da negociação#
Anotações (notes) são registros de texto livre vinculados a uma negociação — usados para histórico de contato, observações da equipe, etc.
Adicionar anotação#
POST /api/deals/:dealId/notes| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
text |
string | sim | Texto da anotação. |
{ "text": "Cliente demonstrou interesse no plano premium." }Resposta — 201, retorna a negociação atualizada com a nova anotação em notes.
Listar anotações#
GET /api/deals/:dealId/notes{
"status": 200,
"notes": [
{
"_id": "507f1f77bcf86cd799439011",
"text": "Cliente demonstrou interesse no plano premium.",
"createdAt": "2025-07-18T14:15:13.321Z",
"updatedAt": "2025-07-18T14:15:13.321Z"
}
]
}Exemplo com curl#
curl -X PATCH "https://moveis-api.smarktech.app.br/api/deals/6866fe673d11620018434523/stage" \
-H "Authorization: Bearer $MODARI_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "stageId": "507f1f77bcf86cd799439012" }'Erros comuns#
| Situação | Resposta |
|---|---|
contactId ou pipelineId que não existem na sua empresa |
404 |
stageId que não pertence ao funil atual da negociação |
400 |
dealId que não existe para a sua empresa |
404 |
| API key sem permissão para o endpoint | 401 |
Atualizado em 05 de out. de 2026 · modari