Pedir um ZIP com várias conversas
const url = 'https://developers.nexo.winningsales.com.br/v1/downloads/bundles';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"meetingIds":[],"sessionIds":[],"threadIds":[],"includeAudio":false}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://developers.nexo.winningsales.com.br/v1/downloads/bundles \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "meetingIds": [], "sessionIds": [], "threadIds": [], "includeAudio": false }'Reuniões (transcrição em PDF e, com includeAudio, o MP3), sessões de WhatsApp e conversas de e-mail num ZIP só, de 1 a 30 conversas e até 300 MB. O ZIP é montado em segundo plano direto no lake; acompanhe em GET /v1/downloads/bundles/{id} até status ready, que traz a URL assinada. Sempre por link: o arquivo fica no lake e a resposta é a URL assinada do S3, válida por 15 minutos, que já baixa com o nome do arquivo; nenhum arquivo passa pela API. O vendedor baixa as reuniões que organizou, as próprias conversas de WhatsApp e de e-mail e as de contatos dos próprios negócios (o e-mail do CRM, pelo negócio em que foi registrado); estar vinculada a um negócio dele não basta; admin e líder de vendas baixam as do time. Exige o escopo conversations:read e todo download fica registrado. Além do limite de chamadas do token: Limite de pedidos de ZIP: 10 por pessoa e 60 pela empresa inteira, numa janela de 1 hora que começa no primeiro pedido e zera ao fim; acima disso responde 429 até a janela fechar. A conta é a mesma no app, na API pública (/v1) e no MCP.
Authorizations
Seção intitulada “Authorizations”Request Bodyrequired
Seção intitulada “Request Bodyrequired”O lote: de 1 a 30 conversas no total, somando reuniões, sessões de WhatsApp e e-mails
object
Reuniões gravadas a incluir no ZIP: a transcrição em PDF e, com includeAudio, o MP3. Repetidas contam uma vez
Sessões de WhatsApp a incluir no ZIP, cada uma como a conversa em PDF. Repetidas contam uma vez
Conversas de e-mail a incluir no ZIP (thread da caixa conectada ou e-mail registrado no CRM), cada uma em PDF. Repetidas contam uma vez
True inclui o MP3 de cada reunião que tem áudio, além da transcrição em PDF
Responses
Seção intitulada “Responses”O pedido, ainda montando
object
Id do lote
Montando, pronto para baixar ou falhou
Quantas conversas entraram no pedido, somando reuniões, WhatsApp e e-mail
Se o pedido incluiu os áudios
Tamanho do ZIP quando pronto
Por que falhou: lote acima do limite de tamanho, nenhuma conversa com conteúdo para baixar, ou erro inesperado
Nome sugerido para o ZIP
URL assinada do ZIP quando pronto, válida por poucos minutos; null antes disso
Quando a URL deixa de funcionar
Quando o lote foi pedido
Quando o ZIP ficou pronto
Example
{ "status": "building", "failureReason": "too_large"}Lote vazio, acima de 30 conversas ou com id inválido
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" }}Alguma conversa inexistente ou fora da visibilidade
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": "meetings.not_found", "title": "MeetingNotFoundError", "status": 404, "detail": "Reunião não encontrada.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "meetingId": "019fcae7-3e54-755a-8458-bdb605b324aa" }}Limite de pedidos de ZIP: 10 por pessoa e 60 pela empresa inteira, numa janela de 1 hora que começa no primeiro pedido e zera ao fim; acima disso responde 429 até a janela fechar. A conta é a mesma no app, na API pública (/v1) e no MCP.
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 }}