{"info":{"_postman_id":"057b9fc3-8398-4bd7-85b3-34321d7e98df","name":"Excel > Socket","description":"<html><head></head><body><h1 id=\"documentacao-de-apis\">Documentação de APIs</h1>\n<p>Esta coleção contém as APIs disponíveis:</p>\n<h2 id=\"1-converter-csv-para-xlsx\">1. Converter CSV para XLSX</h2>\n<p>API para conversão de CSV em texto para arquivo XLSX, é retornado um link para download do documento.</p>\n<h2 id=\"2-api-fetch---socket-que-envia-o-excel-para-a-maquina-remota\">2. API Fetch - Socket que envia o excel para a maquina remota</h2>\n<p>API para download de arquivos Excel e broadcast via WebSocket.</p>\n<p><strong>Mantido por:</strong> FreedomAI</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Documentação de APIs","slug":"documentacao-de-apis"}],"owner":"50660444","collectionId":"057b9fc3-8398-4bd7-85b3-34321d7e98df","publishedId":"2sB3dQupY7","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FFdf29"},"publishDate":"2025-12-08T23:00:04.000Z"},"item":[{"name":"1. Gerar excel (link)","item":[{"name":"Converter CSV para XLSX","id":"6ce39772-f8e4-4b3e-891e-557b90cc0c33","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","description":"<p>Tipo de conteúdo JSON</p>\n"}],"body":{"mode":"raw","raw":"{\n  \"csv\": \"produto;preco;estoque\\nCamiseta;59.9;120\\nCalça;129.9;80\\nTênis;199.9;45\"\n}","options":{"raw":{"language":"json"}}},"url":"https://send.freedomai.dev.br/brasanitas/doc/csv-to-xlsx","description":"<h1 id=\"converter-csv-para-xlsx\">Converter CSV para XLSX</h1>\n<p>Este endpoint recebe um CSV em formato texto e retorna uma URL para download do arquivo XLSX gerado.</p>\n<h2 id=\"campos-aceitos-no-body\">Campos aceitos no body</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Tipo</th>\n<th>Obrigatório</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>csv</code></td>\n<td>string</td>\n<td>Sim*</td>\n<td>CSV completo em texto</td>\n</tr>\n<tr>\n<td><code>csvText</code></td>\n<td>string</td>\n<td>Sim*</td>\n<td>Alias opcional para o CSV</td>\n</tr>\n</tbody>\n</table>\n</div><p>*Um dos dois campos é obrigatório.</p>\n<h2 id=\"delimitadores-suportados\">Delimitadores suportados</h2>\n<ul>\n<li>Ponto e vírgula (<code>;</code>)</li>\n<li>Vírgula (<code>,</code>)</li>\n</ul>\n<h2 id=\"exemplo-de-csv-válido\">Exemplo de CSV válido</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>produto;preco;estoque\nCamiseta;59.9;120\nCalça;129.9;80\n</code></pre><h2 id=\"respostas\">Respostas</h2>\n<h3 id=\"✅-200---sucesso\">✅ 200 - Sucesso</h3>\n<p>Retorna objeto com URL de download.</p>\n<h3 id=\"❌-400---csv-ausente\">❌ 400 - CSV ausente</h3>\n<p>Campo <code>csv</code> ou <code>csvText</code> não foi enviado.</p>\n<h3 id=\"❌-500---erro-interno\">❌ 500 - Erro interno</h3>\n<p>Falha ao processar a conversão.</p>\n","urlObject":{"protocol":"https","path":["brasanitas","doc","csv-to-xlsx"],"host":["send","freedomai","dev","br"],"query":[],"variable":[]}},"response":[{"id":"e8cc272c-6e97-4b38-8b9f-e7e638a14440","name":"200 - XLSX Gerado com Sucesso","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"csv\": \"produto;preco;estoque\\nCamiseta;59.9;120\\nCalça;129.9;80\"\n}"},"url":"http://179.127.151.101:3607/csv-to-xlsx"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"XLSX gerado com sucesso\",\n  \"filename\": \"csv-1698425600000.xlsx\",\n  \"downloadUrl\": \"http://179.127.151.101:3607/xlsx/csv-1698425600000.xlsx\",\n  \"size\": 5321\n}"},{"id":"4ca2f3b5-0485-4365-9d75-56417e43c823","name":"400 - CSV Ausente","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{}"},"url":"http://179.127.151.101:3607/csv-to-xlsx"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": false,\n  \"error\": \"Envie o CSV no campo \\\"csv\\\" ou \\\"csvText\\\" do JSON.\"\n}"},{"id":"3b7448a0-c76c-422a-8940-2260fef28602","name":"500 - Erro na Conversão","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"csv\": \"dados_invalidos\"\n}"},"url":"http://179.127.151.101:3607/csv-to-xlsx"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": false,\n  \"error\": \"Falha ao gerar XLSX.\"\n}"}],"_postman_id":"6ce39772-f8e4-4b3e-891e-557b90cc0c33"},{"name":"Converter CSV para XLSX - Usando csvText (alias)","id":"d967f0d4-0899-4ec8-84b3-93c705bbda18","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","description":"<p>Tipo de conteúdo JSON</p>\n"}],"body":{"mode":"raw","raw":"{\n  \"csvText\": \"nome,idade,cidade\\nJoão,30,São Paulo\\nMaria,25,Rio de Janeiro\\nPedro,35,Belo Horizonte\"\n}","options":{"raw":{"language":"json"}}},"url":"https://send.freedomai.dev.br/brasanitas/doc/csv-to-xlsx","description":"<h1 id=\"converter-csv-usando-campo-csvtext\">Converter CSV usando campo csvText</h1>\n<p>Exemplo alternativo usando o campo <code>csvText</code> ao invés de <code>csv</code>.</p>\n<p>Ambos os campos são aceitos e funcionam da mesma forma.</p>\n","urlObject":{"protocol":"https","path":["brasanitas","doc","csv-to-xlsx"],"host":["send","freedomai","dev","br"],"query":[],"variable":[]}},"response":[],"_postman_id":"d967f0d4-0899-4ec8-84b3-93c705bbda18"},{"name":"Recuperar XLSX gerado","id":"ba8c9485-0e1b-4883-843b-5a3c36b88cef","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"json"}}},"url":"https://send.freedomai.dev.br/brasanitas/doc/xlsx/[filename].xlsx","description":"<h1 id=\"download-do-arquivo-xlsx\">Download do arquivo XLSX</h1>\n<p>Faz o download do arquivo XLSX gerado anteriormente.</p>\n<h2 id=\"parâmetros-de-url\">Parâmetros de URL</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parâmetro</th>\n<th>Tipo</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>filename</code></td>\n<td>string</td>\n<td>Nome do arquivo retornado na conversão</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"headers-de-resposta-200\">Headers de Resposta (200)</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\nContent-Disposition: attachment; filename=\"csv-1698425600000.xlsx\"\n</code></pre><h2 id=\"respostas\">Respostas</h2>\n<h3 id=\"✅-200---download-do-arquivo\">✅ 200 - Download do arquivo</h3>\n<p>Retorna o arquivo binário XLSX.</p>\n<h3 id=\"❌-404---arquivo-não-encontrado\">❌ 404 - Arquivo não encontrado</h3>\n<p>O arquivo solicitado não existe ou expirou.</p>\n<h3 id=\"❌-400---nome-inválido\">❌ 400 - Nome inválido</h3>\n<p>O nome do arquivo contém caracteres inválidos.</p>\n","urlObject":{"protocol":"https","path":["brasanitas","doc","xlsx","[filename].xlsx"],"host":["send","freedomai","dev","br"],"query":[],"variable":[]}},"response":[{"id":"04692485-dcc1-4ff5-8697-a4b42181430f","name":"404 - Arquivo Não Encontrado","originalRequest":{"method":"GET","header":[],"url":"http://179.127.151.101:3607/xlsx/arquivo-inexistente.xlsx"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": false,\n  \"error\": \"Arquivo não encontrado.\"\n}"},{"id":"369020c2-d413-4f62-97b1-babef61e6456","name":"400 - Nome de Arquivo Inválido","originalRequest":{"method":"GET","header":[],"url":"http://179.127.151.101:3607/xlsx/../../../etc/passwd"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": false,\n  \"error\": \"Arquivo inválido.\"\n}"}],"_postman_id":"ba8c9485-0e1b-4883-843b-5a3c36b88cef"}],"id":"5909598c-0460-45da-8e87-256906ab1b8f","description":"<h1 id=\"gerar-excel\">Gerar excel</h1>\n<p>API mínima que converte um CSV enviado como texto para XLSX e devolve uma URL para download.</p>\n<h2 id=\"endpoints-disponíveis\">Endpoints disponíveis</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Método</th>\n<th>Endpoint</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>POST</td>\n<td><code>/csv-to-xlsx</code></td>\n<td>Converte CSV para XLSX</td>\n</tr>\n<tr>\n<td>GET</td>\n<td><code>/xlsx/{filename}</code></td>\n<td>Download do arquivo gerado</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"5909598c-0460-45da-8e87-256906ab1b8f"},{"name":"2. Enviar para maquina remota (Socket)","item":[{"name":"Broadcast XLSX","id":"0d0f2a99-cb0d-4556-b057-b3a53ed26416","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Content-Type","value":"application/json","description":"<p>Tipo de conteúdo JSON</p>\n"}],"body":{"mode":"raw","raw":"{\n  \"url\": \"https://servidor.com/arquivo.xlsx\"\n}","options":{"raw":{"language":"json"}}},"url":"https://send.freedomai.dev.br/brasanitas/socket/fetch","description":"<h1 id=\"fetchandbroadcast\">fetchAndBroadcast</h1>\n<p>Este endpoint realiza as seguintes operações:</p>\n<ol>\n<li><strong>Recebe</strong> uma URL de download direto de um arquivo Excel</li>\n<li><strong>Faz download</strong> do arquivo diretamente (sem redirecionamentos)</li>\n<li><strong>Salva</strong> o arquivo na pasta configurada da máquina remota</li>\n<li><strong>Notifica</strong> todos os clientes WebSocket conectados em <code>ws://localhost:1213</code></li>\n<li><strong>Retorna</strong> confirmação do download e broadcast</li>\n</ol>\n<hr />\n<h2 id=\"⚠️-requisito-obrigatório\">⚠️ Requisito Obrigatório</h2>\n<p>A URL enviada <strong>precisa ser um link direto</strong>, ou seja:</p>\n<ul>\n<li>✅ Deve apontar para o arquivo Excel diretamente</li>\n<li>❌ Não pode depender de botão de download</li>\n<li>❌ Não pode abrir uma página HTML intermediária</li>\n<li>✅ Deve permitir download imediato com HTTP GET</li>\n</ul>\n<h3 id=\"exemplos-de-urls-válidas\">Exemplos de URLs válidas</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>https://servidor.com/arquivo.xlsx\nhttps://dominio.com/downloads/relatorio.xls\nhttps://exemplo.com/api/export.xlsx?token=123\n</code></pre><h3 id=\"exemplos-de-urls-inválidas\">Exemplos de URLs inválidas</h3>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>https://drive.google.com/file/d/xxx/view  (página de preview)\nhttps://site.com/download-page            (página com botão)\n</code></pre><hr />\n<h2 id=\"🔐-autenticação\">🔐 Autenticação</h2>\n<p>Este endpoint requer autenticação via <strong>Bearer Token</strong>.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: {{vault:bearer-token}}\n</code></pre><hr />\n<h2 id=\"respostas\">Respostas</h2>\n<h3 id=\"✅-200---sucesso\">✅ 200 - Sucesso</h3>\n<p>Arquivo baixado, salvo e broadcast enviado.</p>\n<h3 id=\"❌-400---url-ausente\">❌ 400 - URL ausente</h3>\n<p>Campo <code>url</code> não foi enviado no body.</p>\n<h3 id=\"❌-500---falha-no-download\">❌ 500 - Falha no download</h3>\n<p>Erro ao baixar ou salvar o arquivo.</p>\n","urlObject":{"protocol":"https","path":["brasanitas","socket","fetch"],"host":["send","freedomai","dev","br"],"query":[],"variable":[]}},"response":[{"id":"46a7af4a-8354-4864-aabd-bd873fa4ca94","name":"200 - Sucesso","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"{{vault:bearer-token}}"}],"body":{"mode":"raw","raw":"{\n  \"url\": \"https://servidor.com/arquivo.xlsx\"\n}"},"url":"http://179.127.151.101:5000/fetch"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"success\": true,\n  \"message\": \"Excel baixado, salvo na máquina remota e publicado aos clientes WebSocket.\",\n  \"clients\": 3\n}"},{"id":"7d8221fd-9e68-4c54-9aac-3df80a7c5475","name":"400 - URL Ausente","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"{{vault:bearer-token}}"}],"body":{"mode":"raw","raw":"{}"},"url":"http://179.127.151.101:5000/fetch"},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"URL is required\"\n}"},{"id":"26905c61-d85b-48db-95dc-8e6cb1a9b69c","name":"500 - Falha no Download","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"{{vault:bearer-token}}"}],"body":{"mode":"raw","raw":"{\n  \"url\": \"https://dominio-invalido.xyz/arquivo.xlsx\"\n}"},"url":"http://179.127.151.101:5000/fetch"},"status":"Internal Server Error","code":500,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"Failed to fetch URL\",\n  \"message\": \"getaddrinfo ENOTFOUND dominio-invalido.xyz\"\n}"},{"id":"5e8abace-aaa5-48d5-9b62-a61adab4180b","name":"401 - Não Autorizado (Token inválido)","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"{{vault:bearer-token}}"}],"body":{"mode":"raw","raw":"{\n  \"url\": \"https://servidor.com/arquivo.xlsx\"\n}"},"url":"http://179.127.151.101:5000/fetch"},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"error\": \"Unauthorized\"\n}"}],"_postman_id":"0d0f2a99-cb0d-4556-b057-b3a53ed26416"}],"id":"e3b93643-6592-4804-b214-74082edd6887","description":"<h1 id=\"enviar-excel-para-maquina-remota\">Enviar excel para maquina remota</h1>\n<p>API para download de arquivos Excel via URL direta e notificação automática via WebSocket.</p>\n<h2 id=\"🔐-autenticação\">🔐 Autenticação</h2>\n<p>Todos os endpoints desta API requerem autenticação via Bearer Token:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Authorization: {{vault:bearer-token}}\n\n</code></pre><h2 id=\"websocket\">WebSocket</h2>\n<p>Se a resposta for positiva, a planilha foi enviada e baixada em todas as maquinas configuradas.</p>\n<h2 id=\"endpoints-disponíveis\">Endpoints disponíveis</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Método</th>\n<th>Endpoint</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>POST</td>\n<td><code>/fetch</code></td>\n<td>Download de Excel e broadcast</td>\n</tr>\n</tbody>\n</table>\n</div>","auth":{"type":"bearer","bearer":{"basicConfig":[{"key":"token","value":"{{vault:authorization-secret}}"}]},"isInherited":false},"_postman_id":"e3b93643-6592-4804-b214-74082edd6887"}],"event":[{"listen":"prerequest","script":{"id":"62aded2b-9b92-428a-8845-3cf8722edd16","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"93df7e06-146c-4758-8fcd-77ae2e08fc92","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"csv_server","value":""},{"key":"fetch_server","value":""},{"key":"bearer_token","value":""}]}