Registrar o próximo passo do negócio
const url = 'https://developers.nexo.winningsales.com.br/v1/deals/example/next-step';const options = { method: 'PUT', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"what":"example","dueDate":"example","owedBy":"seller","note":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request PUT \ --url https://developers.nexo.winningsales.com.br/v1/deals/example/next-step \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "what": "example", "dueDate": "example", "owedBy": "seller", "note": "example" }'O próximo passo do Radar do Vendedor em 2 cliques: o que foi combinado, a data e quem deve (o vendedor ou o cliente), com uma observação opcional (“Combinado por telefone? Registre aqui”). O Nexo guarda cada registro com quem, quando e por onde, e o próximo passo passa a valer na hora no estado do negócio: o Radar (Sem próximo passo, Próximo passo vencido) e Negócios já leem ele na próxima chamada, até uma conversa posterior trazer outro. Em segundo plano, o texto vai para o campo de próximo passo do CRM (hs_next_step no HubSpot) e a data para o campo de data mapeado para o próximo passo, numa escrita só; sem campo de data mapeado, a data vai no texto. Sem o campo de próximo passo mapeado ou sem escrita no CRM, o registro fica só no Nexo (crm.status nexo_only). A observação nunca sobe para o CRM. O vendedor registra nos próprios negócios; admin e líder de vendas, nos negócios do time. Exige o escopo deals:write, que nenhum token recebe por padrão; cada registro fica na atividade da empresa.
Authorizations
Seção intitulada “Authorizations”Parameters
Seção intitulada “Parameters”Path Parameters
Seção intitulada “Path Parameters”Id do negócio no Nexo
Request Bodyrequired
Seção intitulada “Request Bodyrequired”object
O que foi combinado com o cliente
Data do próximo passo, AAAA-MM-DD; de hoje em diante, no fuso da empresa
Quem deve o próximo passo: seller = o vendedor (Você); client = o cliente
Observação opcional (“Combinado por telefone? Registre aqui”); fica no Nexo e não sobe para o CRM
Responses
Seção intitulada “Responses”O próximo passo do negócio depois do registro
object
Id do negócio
O último próximo passo registrado por uma pessoa; nulo se ninguém registrou
object
Id do registro
O que foi combinado
Data do próximo passo (AAAA-MM-DD)
Quem deve o próximo passo: seller = o vendedor (Você); client = o cliente
Observação de quem registrou
Quando foi registrado
Quem registrou
Por onde foi registrado: app, API (rest), CLI ou MCP
O que aconteceu com o registro no CRM
object
Pending: subindo para o CRM em segundo plano; written: gravado no CRM; nexo_only: o CRM não tem o campo de próximo passo mapeado ou não aceita escrita, então fica só no Nexo; failed: o CRM recusou (motivo em detail); superseded: um registro mais novo substituiu este antes de subir
Por que não subiu, quando não subiu
Quando foi gravado no CRM
True quando o último registro ainda é o próximo passo do negócio no Radar e em Negócios; false quando uma conversa posterior trouxe outro próximo passo, ou quando ninguém registrou
Os registros mais recentes, do mais novo para o mais antigo (até 10)
object
Id do registro
O que foi combinado
Data do próximo passo (AAAA-MM-DD)
Quem deve o próximo passo: seller = o vendedor (Você); client = o cliente
Observação de quem registrou
Quando foi registrado
Quem registrou
Por onde foi registrado: app, API (rest), CLI ou MCP
O que aconteceu com o registro no CRM
object
Pending: subindo para o CRM em segundo plano; written: gravado no CRM; nexo_only: o CRM não tem o campo de próximo passo mapeado ou não aceita escrita, então fica só no Nexo; failed: o CRM recusou (motivo em detail); superseded: um registro mais novo substituiu este antes de subir
Por que não subiu, quando não subiu
Quando foi gravado no CRM
Example
{ "current": { "owedBy": "seller", "surface": "app", "crm": { "status": "pending" } }, "history": [ { "owedBy": "seller", "surface": "app", "crm": { "status": "pending" } } ]}Entrada inválida (detalhes do zod em meta.errors)
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example generated
{ "type": "example", "title": "example", "status": 1, "detail": "example", "requestId": "example", "meta": { "additionalProperty": "example" }}Token ausente, inválido, expirado ou revogado
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "public_api.invalid_credential", "title": "InvalidCredentialError", "status": 401, "detail": "Token de acesso inválido, expirado ou revogado. Crie um novo token de acesso no Nexo.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb"}Papel, escopo do token ou plano não permitem a operação
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "public_api.insufficient_scope", "title": "InsufficientScopeError", "status": 403, "detail": "Este token não tem o escopo conversations:read, exigido por esta operação. Gere um token com esse escopo.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "operation": "conversations.reading", "scope": "conversations:read" }}Negócio inexistente ou fora da visibilidade do dono do token
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "deals.not_found", "title": "DealNotFoundError", "status": 404, "detail": "Negócio não encontrado.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "dealId": "019fcae7-3e54-755a-8458-bdb605b324aa" }}O negócio já foi fechado
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "deals.next_step_deal_closed", "title": "NextStepDealClosedError", "status": 409, "detail": "Este negócio já foi fechado; o próximo passo só é registrado em negócio aberto.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "dealId": "019fcae7-3e54-755a-8458-bdb605b324aa" }}A data do próximo passo já passou
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "deals.next_step_due_past", "title": "NextStepDuePastError", "status": 422, "detail": "A data do próximo passo (2026-10-01) já passou. Escolha uma data a partir de hoje (2026-10-09).", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "dueDate": "2026-10-01", "today": "2026-10-09" }}Limite de chamadas da empresa ou do token atingido
object
Stable machine-readable error code (e.g. identity.email_already_in_use)
Error class name
HTTP status code
Human-readable message, safe to display to end users
Correlation id — send it to support to locate the full trail
Structured details safe for the frontend (field errors, ids)
object
Example
{ "type": "public_api.rate_limited", "title": "PublicRateLimitedError", "status": 429, "detail": "Muitas chamadas em pouco tempo. Tente de novo em 12 segundos.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "class": "content", "limitedBy": "company", "limit": 120, "windowSeconds": 60, "retryAfterSeconds": 12 }}