Conversa de WhatsApp em PDF
const url = 'https://developers.nexo.winningsales.com.br/v1/downloads/whatsapp-sessions/example/transcript';const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
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/whatsapp-sessions/example/transcript \ --header 'Authorization: Bearer <token>'Contato, período, negócio e cada mensagem com o horário e o lado; mídia aparece marcada. 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 downloads de arquivo: 60 por pessoa e 600 pela empresa inteira, numa janela de 10 minutos 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”Parameters
Seção intitulada “Parameters”Path Parameters
Seção intitulada “Path Parameters”Id da sessão de WhatsApp
Responses
Seção intitulada “Responses”A URL assinada do PDF e o nome do arquivo
object
URL assinada do PDF no lake, válida por poucos minutos; o navegador baixa com o nome sugerido
Quando a URL deixa de funcionar
Nome sugerido para o arquivo: data no fuso da empresa e título
Example generated
{ "url": "https://example.com", "expiresAt": "2026-04-15T12:00:00Z", "fileName": "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" }}Sessão 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": "downloads.session_unavailable", "title": "DownloadSessionUnavailableError", "status": 404, "detail": "Essa conversa de WhatsApp não está disponível para baixar.", "requestId": "019fcae7-3e54-755a-8458-bdb605b324bb", "meta": { "sessionId": "019fcae7-3e54-755a-8458-bdb605b324aa" }}Limite de downloads de arquivo: 60 por pessoa e 600 pela empresa inteira, numa janela de 10 minutos 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 }}