{"info":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","description":"<html><head></head><body><p>Bem-vindo à <strong>API pública da Mettrix</strong> — a plataforma inteligente de monitoramento de tanques.</p>\n<p>Esta collection contém todos os endpoints disponíveis para integração com seus sistemas (ERP, BI, dashboards, automações).</p>\n<hr>\n<h2 id=\"como-começar\">Como começar</h2>\n<h3 id=\"1-obtenha-sua-api-key\">1. Obtenha sua API Key</h3>\n<p>Você pode gerar uma chave de API acessando seu perfil na plataforma e clicando em \"Chaves de API\" (<a href=\"https://app.mettrix.com.br/account/api-keys\">https://app.mettrix.com.br/account/api-keys</a>). A chave segue o formato:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n</code></pre><h3 id=\"2-configure-as-variáveis-da-collection\">2. Configure as variáveis da collection</h3>\n<p>Antes de usar, configure as variáveis abaixo na aba <strong>Variables</strong> desta collection:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variável</th>\n<th>Descrição</th>\n<th>Exemplo</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>base_url</code></td>\n<td>URL base da API</td>\n<td><code>https://connect.mettrix.com.br</code></td>\n</tr>\n<tr>\n<td><code>api_key</code></td>\n<td>Sua chave de autenticação</td>\n<td><code>mk_sua_chave_aqui</code></td>\n</tr>\n<tr>\n<td><code>tank_id</code></td>\n<td>UUID de um tanque para testes</td>\n<td><em>(preenchido automaticamente)</em></td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"3-teste-a-conexão\">3. Teste a conexão</h3>\n<p>Execute a request <strong>Health Check</strong> para validar a conectividade e depois <strong>Minha Conta</strong> para validar sua API Key.</p>\n<hr>\n<h2 id=\"autenticação\">Autenticação</h2>\n<p>Todas as requisições (exceto <code>/health</code>) devem incluir o header:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>X-API-Key: mk_sua_chave_aqui\n\n</code></pre><p>A autenticação já está configurada no nível da collection — basta preencher a variável <code>api_key</code>.</p>\n<hr>\n<h2 id=\"rate-limit\">Rate Limit</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Limite</th>\n<th>Valor</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Requisições por minuto (por IP)</td>\n<td><strong>100</strong></td>\n</tr>\n<tr>\n<td>Header de limite total</td>\n<td><code>X-RateLimit-Limit</code></td>\n</tr>\n<tr>\n<td>Header de requisições restantes</td>\n<td><code>X-RateLimit-Remaining</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>Ao exceder o limite, a API retorna <strong>HTTP 429 Too Many Requests</strong>.</p>\n<hr>\n<h2 id=\"paginação\">Paginação</h2>\n<p>Endpoints que retornam listas suportam paginação via query parameters:</p>\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>skip</code></td>\n<td>integer</td>\n<td>Número de registros para pular (offset). Default: <code>0</code></td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>integer</td>\n<td>Número máximo de registros por página. Default varia por endpoint</td>\n</tr>\n</tbody>\n</table>\n</div><p><strong>Exemplo:</strong> Para buscar a segunda página com 50 itens:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>GET /v1/tanks/?skip=50&amp;limit=50\n\n</code></pre><hr>\n<h2 id=\"códigos-de-resposta\">Códigos de Resposta</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Código</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>200</code></td>\n<td>Sucesso</td>\n</tr>\n<tr>\n<td><code>401</code></td>\n<td>API Key inválida ou ausente</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Sem permissão para o recurso solicitado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Recurso não encontrado</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Erro de validação nos parâmetros</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Rate limit excedido</td>\n</tr>\n<tr>\n<td><code>500</code></td>\n<td>Erro interno do servidor</td>\n</tr>\n</tbody>\n</table>\n</div><hr>\n<h2 id=\"formato-de-dados\">Formato de Dados</h2>\n<ul>\n<li><p>Todas as respostas são em <strong>JSON (UTF-8)</strong></p>\n</li>\n<li><p>Datas seguem o padrão <strong>ISO 8601</strong> (<code>2026-02-25T14:30:00Z</code>)</p>\n</li>\n<li><p>IDs são <strong>UUIDs v4</strong> (<code>c1d2e3f4-5678-90ab-cdef-aabbccddeeff</code>)</p>\n</li>\n<li><p>Volumes em <strong>litros</strong>, temperaturas em <strong>°C</strong>, distâncias em <strong>cm</strong></p>\n</li>\n<li><p>Porcentagens como <strong>números decimais</strong> (ex: <code>56.3</code> = 56.3%)</p>\n</li>\n</ul>\n<hr>\n<h2 id=\"suporte\">Suporte</h2>\n<p>Em caso de dúvidas ou problemas, entre em contato com o administrador da sua conta Mettrix ou acesse a central de ajuda.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"52765174","collectionId":"18ac587f-2864-4458-bf04-adf055ff23ab","publishedId":"2sBXcHheFt","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-02-27T13:40:29.000Z"},"item":[{"name":"Primeiros Passos","item":[{"name":"Health Check","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('API está operacional', function () {","    pm.response.to.have.status(200);","});","","pm.test('Status é healthy', function () {","    const json = pm.response.json();","    pm.expect(json.status).to.eql('healthy');","});","","pm.test('Versão da API está presente', function () {","    const json = pm.response.json();","    pm.expect(json.version).to.be.a('string');","    console.log('[Mettrix] Versão da API: ' + json.version);","});"],"id":"c5e61619-57e5-4dc8-b2de-c754e51476fb"}}],"id":"49ba5e55-a76f-4588-b2ea-c05ce604e951","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"noauth","isInherited":false},"method":"GET","header":[],"url":"https://connect.mettrix.com.br/health","description":"<h2 id=\"health-check\">Health Check</h2>\n<p>Verifica se o serviço da API está operacional.</p>\n<p><strong>Este endpoint não requer autenticação</strong> — ideal para validar a conectividade antes de configurar sua API Key.</p>\n<h3 id=\"quando-usar\">Quando usar</h3>\n<ul>\n<li>Antes de integrar, para confirmar que a URL base está correta</li>\n<li>Em scripts de monitoramento para verificar disponibilidade da API</li>\n<li>Para diagnosticar problemas de conexão</li>\n</ul>\n<h3 id=\"resposta\">Resposta</h3>\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>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>status</code></td>\n<td>string</td>\n<td>Status do serviço (<code>healthy</code>)</td>\n</tr>\n<tr>\n<td><code>service</code></td>\n<td>string</td>\n<td>Nome do serviço</td>\n</tr>\n<tr>\n<td><code>version</code></td>\n<td>string</td>\n<td>Versão atual da API</td>\n</tr>\n</tbody>\n</table>\n</div>","urlObject":{"path":["health"],"host":["https://connect.mettrix.com.br"],"query":[],"variable":[]}},"response":[{"id":"3f62d688-4384-46f4-a540-e3f6a481d3df","name":"200 - API Operacional","originalRequest":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/health"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"healthy\",\n  \"service\": \"mettrix-api-gateway\",\n  \"version\": \"1.0.0\"\n}"}],"_postman_id":"49ba5e55-a76f-4588-b2ea-c05ce604e951"},{"name":"Minha Conta","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Autenticação bem-sucedida', function () {","    pm.response.to.have.status(200);","});","","pm.test('Possui escopos definidos', function () {","    const json = pm.response.json();","    pm.expect(json.scopes).to.be.an('array').that.is.not.empty;","    console.log('[Mettrix] Escopos: ' + json.scopes.join(', '));","});","","pm.test('Possui empresas vinculadas', function () {","    const json = pm.response.json();","    pm.expect(json.companies).to.be.an('array').that.is.not.empty;","    console.log('[Mettrix] Empresas: ' + json.companies.map(c => c.name).join(', '));","","    // Salva o company_id da primeira empresa para uso posterior","    if (json.companies.length > 0) {","        pm.collectionVariables.set('company_id', json.companies[0].id);","        console.log('[Mettrix] company_id salvo: ' + json.companies[0].id);","    }","});"],"id":"1590b178-00e0-46d6-85d2-abe6583f5d21"}}],"id":"36871001-66a7-4816-b421-dba3612c2931","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/me","description":"<h2 id=\"minha-conta\">Minha Conta</h2>\n<p>Retorna informações do usuário vinculado à API Key e as empresas acessíveis.</p>\n<h3 id=\"quando-usar\">Quando usar</h3>\n<ul>\n<li>Para validar que sua API Key está funcionando</li>\n<li>Para descobrir os <strong>escopos (permissões)</strong> da sua chave</li>\n<li>Para listar as <strong>empresas</strong> que você pode consultar</li>\n<li>Para obter o <code>company_id</code> necessário para filtrar tanques por empresa</li>\n</ul>\n<h3 id=\"escopos-disponíveis\">Escopos disponíveis</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Escopo</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tanks:read</code></td>\n<td>Consultar tanques e suas especificações</td>\n</tr>\n<tr>\n<td><code>readings:read</code></td>\n<td>Consultar leituras (volume, nível, temperatura)</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"resposta\">Resposta</h3>\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>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>user_id</code></td>\n<td>string (UUID)</td>\n<td>ID do usuário vinculado</td>\n</tr>\n<tr>\n<td><code>api_key_name</code></td>\n<td>string</td>\n<td>Nome da API Key em uso</td>\n</tr>\n<tr>\n<td><code>scopes</code></td>\n<td>array[string]</td>\n<td>Permissões concedidas</td>\n</tr>\n<tr>\n<td><code>companies</code></td>\n<td>array[object]</td>\n<td>Empresas acessíveis (id, name, role)</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"dica\">Dica</h3>\n<p>O script de testes salva automaticamente o <code>company_id</code> da primeira empresa na variável da collection para uso nos próximos endpoints.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}},"urlObject":{"path":["v1","me"],"host":["https://connect.mettrix.com.br"],"query":[],"variable":[]}},"response":[{"id":"ca7d7dcd-b96e-4189-b412-541dc957f498","name":"200 - Conta autenticada","originalRequest":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/me"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"user_id\": \"f3919b9d-31a0-4c95-8edb-4c96f40c9804\",\n  \"api_key_name\": \"My Integration Key\",\n  \"scopes\": [\n    \"tanks:read\",\n    \"readings:read\"\n  ],\n  \"companies\": [\n    {\n      \"id\": \"a1b2c3d4-5678-90ab-cdef-1234567890ab\",\n      \"name\": \"Mettrix Ltda\",\n      \"role\": \"admin\"\n    },\n    {\n      \"id\": \"e5f6a7b8-1234-56cd-ef78-9012345abcde\",\n      \"name\": \"Empresa Parceira\",\n      \"role\": \"viewer\"\n    }\n  ]\n}"},{"id":"03f967af-704c-477d-8ff7-3ed653501846","name":"401 - API Key inválida","originalRequest":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/me"},"status":"Unauthorized","code":401,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"detail\": \"API Key inválida ou ausente. Verifique o header X-API-Key.\"\n}"}],"_postman_id":"36871001-66a7-4816-b421-dba3612c2931"}],"id":"44f72b9f-08b6-4f0d-b840-48a96d44477e","description":"<p>Endpoints para validar sua conexão e autenticação com a API Mettrix.</p>\n<p>Comece pelo <strong>Health Check</strong> para verificar se a API está acessível e depois use <strong>Minha Conta</strong> para validar sua API Key e descobrir quais empresas e permissões estão vinculadas.</p>\n<p><strong>Ordem sugerida:</strong></p>\n<ol>\n<li>Health Check</li>\n<li>Minha Conta</li>\n</ol>\n","_postman_id":"44f72b9f-08b6-4f0d-b840-48a96d44477e","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}}},{"name":"Tanques","item":[{"name":"Listar Tanques","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Requisição bem-sucedida', function () {","    pm.response.to.have.status(200);","});","","pm.test('Resposta é um array', function () {","    const json = pm.response.json();","    pm.expect(json).to.be.an('array');","    console.log('[Mettrix] Total de tanques retornados: ' + json.length);","});","","pm.test('Salvar tank_id do primeiro tanque', function () {","    const json = pm.response.json();","    if (json.length > 0) {","        pm.collectionVariables.set('tank_id', json[0].id);","        console.log('[Mettrix] tank_id salvo: ' + json[0].id + ' (' + json[0].name + ')');","    } else {","        console.warn('[Mettrix] Nenhum tanque retornado. Verifique os filtros.');","    }","});"],"id":"53b4062c-2efe-4438-838e-d779596051c8"}}],"id":"00342475-0dee-4045-9160-9033c1d9eb1f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/tanks/?only_active=true&limit=100","description":"<h2 id=\"listar-tanques\">Listar Tanques</h2>\n<p>Retorna a lista de tanques das suas empresas com informações resumidas.</p>\n<h3 id=\"quando-usar\">Quando usar</h3>\n<ul>\n<li>Para obter a visão geral de todos os tanques monitorados</li>\n<li>Para alimentar dashboards e painéis de controle</li>\n<li>Para buscar tanques por nome, produto ou localização</li>\n<li>Para obter os <code>tank_id</code> necessários para outras consultas</li>\n</ul>\n<h3 id=\"filtros-disponíveis\">Filtros disponíveis</h3>\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>Obrigatório</th>\n<th>Default</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>company_id</code></td>\n<td>string (UUID)</td>\n<td>Não</td>\n<td><em>todas</em></td>\n<td>Filtrar por empresa específica</td>\n</tr>\n<tr>\n<td><code>search</code></td>\n<td>string</td>\n<td>Não</td>\n<td>—</td>\n<td>Busca textual por nome, localização ou produto</td>\n</tr>\n<tr>\n<td><code>only_active</code></td>\n<td>boolean</td>\n<td>Não</td>\n<td><code>true</code></td>\n<td>Retornar apenas tanques ativos</td>\n</tr>\n<tr>\n<td><code>skip</code></td>\n<td>integer</td>\n<td>Não</td>\n<td><code>0</code></td>\n<td>Offset para paginação</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>integer</td>\n<td>Não</td>\n<td><code>100</code></td>\n<td>Itens por página (máx: 500)</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"cada-tanque-retorna\">Cada tanque retorna</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>UUID do tanque</td>\n</tr>\n<tr>\n<td><code>name</code></td>\n<td>Nome do tanque</td>\n</tr>\n<tr>\n<td><code>is_active</code></td>\n<td>Se está ativo</td>\n</tr>\n<tr>\n<td><code>specifications</code></td>\n<td>Formato, dimensões e capacidade</td>\n</tr>\n<tr>\n<td><code>product</code></td>\n<td>Tipo e substância armazenada</td>\n</tr>\n<tr>\n<td><code>current_reading</code></td>\n<td>Volume atual, nível % e última leitura</td>\n</tr>\n<tr>\n<td><code>zones</code></td>\n<td>Zonas de alerta configuradas</td>\n</tr>\n<tr>\n<td><code>exhaustion_estimate</code></td>\n<td>Estimativa de esgotamento</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"dica\">Dica</h3>\n<p>O script de testes salva automaticamente o <code>tank_id</code> do primeiro tanque retornado para uso nos próximos endpoints.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}},"urlObject":{"path":["v1","tanks",""],"host":["https://connect.mettrix.com.br"],"query":[{"disabled":true,"description":{"content":"<p>Filtrar por empresa específica (UUID). Sem filtro retorna tanques de todas as empresas.</p>\n","type":"text/plain"},"key":"company_id","value":""},{"disabled":true,"description":{"content":"<p>Buscar por nome do tanque, localização ou produto armazenado.</p>\n","type":"text/plain"},"key":"search","value":""},{"description":{"content":"<p>Apenas tanques ativos. Default: true.</p>\n","type":"text/plain"},"key":"only_active","value":"true"},{"disabled":true,"description":{"content":"<p>Offset para paginação. Default: 0.</p>\n","type":"text/plain"},"key":"skip","value":"0"},{"description":{"content":"<p>Máximo de resultados por página (1-500). Default: 100.</p>\n","type":"text/plain"},"key":"limit","value":"100"}],"variable":[]}},"response":[{"id":"31951045-0537-4b75-b0ef-ce4f2c11f909","name":"200 - Lista de tanques","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/?only_active=true&limit=100","host":["https://connect.mettrix.com.br"],"path":["v1","tanks",""],"query":[{"key":"only_active","value":"true"},{"key":"limit","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-RateLimit-Limit","value":"100"},{"key":"X-RateLimit-Remaining","value":"97"}],"cookie":[],"responseTime":null,"body":"[\n  {\n    \"id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n    \"name\": \"Tanque Diesel #01\",\n    \"is_active\": true,\n    \"specifications\": {\n      \"shape\": \"cylinder\",\n      \"orientation\": \"horizontal\",\n      \"height_cm\": 250.0,\n      \"diameter_cm\": 180.0,\n      \"capacity_liters\": 15000.0\n    },\n    \"product\": {\n      \"product_type\": \"fuel\",\n      \"substance_type\": \"Diesel S10\",\n      \"substance_subcategory\": null\n    },\n    \"current_reading\": {\n      \"current_volume_liters\": 8450.5,\n      \"current_level_percent\": 56.3,\n      \"last_reading_at\": \"2026-02-25T14:30:00Z\"\n    },\n    \"zones\": [\n      {\n        \"id\": \"d4e5f6a7-1234-5678-abcd-ef0123456789\",\n        \"order\": 1,\n        \"label\": \"Crítico\",\n        \"max_level_percent\": 15.0,\n        \"color\": \"#FF0000\",\n        \"enable_alerts\": true\n      },\n      {\n        \"id\": \"a7b8c9d0-5678-9012-cdef-345678901234\",\n        \"order\": 2,\n        \"label\": \"Normal\",\n        \"max_level_percent\": 80.0,\n        \"color\": \"#00CC00\",\n        \"enable_alerts\": false\n      }\n    ],\n    \"exhaustion_estimate\": {\n      \"estimated_days_remaining\": 18.5,\n      \"estimated_exhaustion_date\": \"2026-03-15T00:00:00Z\",\n      \"average_daily_consumption\": 456.8,\n      \"calculation_period_days\": 7,\n      \"data_points_count\": 42,\n      \"confidence_level\": \"high\"\n    },\n    \"created_at\": \"2025-06-15T10:00:00Z\",\n    \"updated_at\": \"2026-02-25T14:30:00Z\"\n  }\n]"},{"id":"b685b167-4466-4a71-ab1d-2e1ca7a592df","name":"200 - Lista vazia (sem tanques)","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/?only_active=true&limit=100","host":["https://connect.mettrix.com.br"],"path":["v1","tanks",""],"query":[{"key":"only_active","value":"true"},{"key":"limit","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"[]"},{"id":"3f993e77-c89e-4911-a7e2-1c867e543cf7","name":"422 - Erro de validação","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/?limit=9999","host":["https://connect.mettrix.com.br"],"path":["v1","tanks",""],"query":[{"key":"limit","value":"9999"}]}},"status":"Unprocessable Entity","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"detail\": [\n    {\n      \"loc\": [\"query\", \"limit\"],\n      \"msg\": \"Input should be less than or equal to 500\",\n      \"type\": \"less_than_equal\",\n      \"input\": 9999,\n      \"ctx\": {\n        \"le\": 500\n      }\n    }\n  ]\n}"}],"_postman_id":"00342475-0dee-4045-9160-9033c1d9eb1f"},{"name":"Detalhes do Tanque","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Requisição bem-sucedida', function () {","    pm.response.to.have.status(200);","});","","pm.test('Tanque possui campos obrigatórios', function () {","    const json = pm.response.json();","    pm.expect(json).to.have.property('id');","    pm.expect(json).to.have.property('name');","    pm.expect(json).to.have.property('is_active');","});","","pm.test('Leitura atual presente', function () {","    const json = pm.response.json();","    if (json.current_reading) {","        console.log('[Mettrix] ' + json.name + ': ' +","            json.current_reading.current_level_percent + '% | ' +","            json.current_reading.current_volume_liters + ' litros');","    }","});","","pm.test('Estimativa de esgotamento presente', function () {","    const json = pm.response.json();","    if (json.exhaustion_estimate && json.exhaustion_estimate.estimated_days_remaining) {","        console.log('[Mettrix] Dias restantes: ' +","            json.exhaustion_estimate.estimated_days_remaining +","            ' | Confiança: ' + json.exhaustion_estimate.confidence_level);","    }","});"],"id":"6c4618fe-7aac-4d10-a263-b02ba36fed30"}}],"id":"4e197e7e-9d58-4533-a76e-41099f486d7a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff?include_exhaustion_estimate=true","description":"<h2 id=\"detalhes-do-tanque\">Detalhes do Tanque</h2>\n<p>Retorna todas as informações de um tanque específico.</p>\n<h3 id=\"quando-usar\">Quando usar</h3>\n<ul>\n<li>Para obter dados completos de um tanque (especificações, leitura atual, zonas, estimativa)</li>\n<li>Para monitorar o status detalhado de um tanque crítico</li>\n<li>Para integrar dados de um tanque específico no seu sistema</li>\n</ul>\n<h3 id=\"parâmetros\">Parâmetros</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parâmetro</th>\n<th>Local</th>\n<th>Tipo</th>\n<th>Obrigatório</th>\n<th>Default</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tank_id</code></td>\n<td>path</td>\n<td>string (UUID)</td>\n<td>Sim</td>\n<td>—</td>\n<td>ID do tanque</td>\n</tr>\n<tr>\n<td><code>include_exhaustion_estimate</code></td>\n<td>query</td>\n<td>boolean</td>\n<td>Não</td>\n<td><code>true</code></td>\n<td>Incluir estimativa de esgotamento</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"estimativa-de-esgotamento\">Estimativa de esgotamento</h3>\n<p>Quando habilitada, retorna o campo <code>exhaustion_estimate</code> com:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>estimated_days_remaining</code></td>\n<td>Dias estimados até esgotamento</td>\n</tr>\n<tr>\n<td><code>estimated_exhaustion_date</code></td>\n<td>Data prevista de esgotamento</td>\n</tr>\n<tr>\n<td><code>average_daily_consumption</code></td>\n<td>Consumo médio diário (litros)</td>\n</tr>\n<tr>\n<td><code>confidence_level</code></td>\n<td>Confiança: <code>low</code>, <code>medium</code> ou <code>high</code></td>\n</tr>\n</tbody>\n</table>\n</div><p>A confiança depende da quantidade e consistência dos dados históricos disponíveis.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}},"urlObject":{"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff"],"host":["https://connect.mettrix.com.br"],"query":[{"description":{"content":"<p>Incluir estimativa de esgotamento calculada com base no consumo recente. Default: true.</p>\n","type":"text/plain"},"key":"include_exhaustion_estimate","value":"true"}],"variable":[]}},"response":[{"id":"7ad29de6-3187-43b0-bedb-c8bc9530c3dc","name":"200 - Detalhes completos","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff?include_exhaustion_estimate=true","host":["https://connect.mettrix.com.br"],"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff"],"query":[{"key":"include_exhaustion_estimate","value":"true"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n  \"name\": \"Tanque Diesel #01\",\n  \"is_active\": true,\n  \"specifications\": {\n    \"shape\": \"cylinder\",\n    \"orientation\": \"horizontal\",\n    \"height_cm\": 250.0,\n    \"diameter_cm\": 180.0,\n    \"capacity_liters\": 15000.0\n  },\n  \"product\": {\n    \"product_type\": \"fuel\",\n    \"substance_type\": \"Diesel S10\",\n    \"substance_subcategory\": null\n  },\n  \"current_reading\": {\n    \"current_volume_liters\": 8450.5,\n    \"current_level_percent\": 56.3,\n    \"last_reading_at\": \"2026-02-25T14:30:00Z\"\n  },\n  \"zones\": [\n    {\n      \"id\": \"d4e5f6a7-1234-5678-abcd-ef0123456789\",\n      \"order\": 1,\n      \"label\": \"Crítico\",\n      \"max_level_percent\": 15.0,\n      \"color\": \"#FF0000\",\n      \"enable_alerts\": true\n    },\n    {\n      \"id\": \"a7b8c9d0-5678-9012-cdef-345678901234\",\n      \"order\": 2,\n      \"label\": \"Normal\",\n      \"max_level_percent\": 80.0,\n      \"color\": \"#00CC00\",\n      \"enable_alerts\": false\n    }\n  ],\n  \"exhaustion_estimate\": {\n    \"estimated_days_remaining\": 18.5,\n    \"estimated_exhaustion_date\": \"2026-03-15T00:00:00Z\",\n    \"average_daily_consumption\": 456.8,\n    \"calculation_period_days\": 7,\n    \"data_points_count\": 42,\n    \"confidence_level\": \"high\"\n  },\n  \"created_at\": \"2025-06-15T10:00:00Z\",\n  \"updated_at\": \"2026-02-25T14:30:00Z\"\n}"},{"id":"e7d42423-b8d5-4d8a-bc7d-f1e86839d82c","name":"404 - Tanque não encontrado","originalRequest":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/tanks/00000000-0000-0000-0000-000000000000"},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"detail\": \"Tanque não encontrado ou sem permissão de acesso.\"\n}"}],"_postman_id":"4e197e7e-9d58-4533-a76e-41099f486d7a"}],"id":"dadb9bfe-0754-4c71-a8c9-0090841eb936","description":"<p>Endpoints para consultar tanques monitorados pela Mettrix.</p>\n<p>Os tanques são o recurso central da API. Cada tanque possui:</p>\n<ul>\n<li><strong>Especificações físicas</strong> — formato, dimensões, capacidade</li>\n<li><strong>Produto armazenado</strong> — tipo (combustível, químico, água), substância</li>\n<li><strong>Leitura atual</strong> — volume, nível percentual, data da última leitura</li>\n<li><strong>Zonas de alerta</strong> — faixas de nível configuradas (ex: Crítico &lt; 15%, Normal &lt; 80%)</li>\n<li><strong>Estimativa de esgotamento</strong> — dias restantes, consumo médio diário, data prevista</li>\n</ul>\n<h3 id=\"fluxo-típico-de-uso\">Fluxo típico de uso</h3>\n<ol>\n<li><strong>Listar tanques</strong> — obtenha a visão geral de todos os tanques</li>\n<li><strong>Detalhar um tanque</strong> — aprofunde nos dados de um tanque específico</li>\n<li><strong>Consultar leituras</strong> — acesse o histórico de medições</li>\n<li><strong>Consultar alertas</strong> — veja os alertas disparados</li>\n</ol>\n","_postman_id":"dadb9bfe-0754-4c71-a8c9-0090841eb936","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}}},{"name":"Leituras & Alertas","item":[{"name":"Leituras do Tanque","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Requisição bem-sucedida', function () {","    pm.response.to.have.status(200);","});","","pm.test('Resposta é um array de leituras', function () {","    const json = pm.response.json();","    pm.expect(json).to.be.an('array');","    console.log('[Mettrix] Total de leituras retornadas: ' + json.length);","","    if (json.length > 0) {","        const first = json[0];","        console.log('[Mettrix] Leitura mais recente: ' +","            first.level_percent + '% | ' +","            first.volume_liters + 'L | ' +","            first.temperature + '°C | ' +","            first.reading_at);","    }","});"],"id":"c08dae6b-53bf-4d91-b37d-6394c26d74db"}}],"id":"a598fd22-20d5-4131-bb9a-bcf765b9da1d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/readings?limit=1000","description":"<h2 id=\"leituras-do-tanque\">Leituras do Tanque</h2>\n<p>Retorna o histórico de leituras (medições) de um tanque, com suporte a filtro por período.</p>\n<h3 id=\"quando-usar\">Quando usar</h3>\n<ul>\n<li>Para gerar gráficos de evolução de volume/nível ao longo do tempo</li>\n<li>Para calcular estatísticas de consumo personalizadas</li>\n<li>Para exportar dados históricos para BI ou planilhas</li>\n<li>Para auditar medições em um período específico</li>\n</ul>\n<h3 id=\"parâmetros\">Parâmetros</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parâmetro</th>\n<th>Local</th>\n<th>Tipo</th>\n<th>Obrigatório</th>\n<th>Default</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tank_id</code></td>\n<td>path</td>\n<td>string (UUID)</td>\n<td>Sim</td>\n<td>—</td>\n<td>ID do tanque</td>\n</tr>\n<tr>\n<td><code>start_date</code></td>\n<td>query</td>\n<td>string (ISO 8601)</td>\n<td>Não</td>\n<td>—</td>\n<td>Data início do filtro</td>\n</tr>\n<tr>\n<td><code>end_date</code></td>\n<td>query</td>\n<td>string (ISO 8601)</td>\n<td>Não</td>\n<td>—</td>\n<td>Data fim do filtro</td>\n</tr>\n<tr>\n<td><code>skip</code></td>\n<td>query</td>\n<td>integer</td>\n<td>Não</td>\n<td><code>0</code></td>\n<td>Offset para paginação</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>query</td>\n<td>integer</td>\n<td>Não</td>\n<td><code>1000</code></td>\n<td>Itens por página (máx: 5000)</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"exemplos-de-filtro-por-data\">Exemplos de filtro por data</h3>\n<ul>\n<li>Último mês: <code>start_date=2026-02-01&amp;end_date=2026-02-28</code></li>\n<li>Última semana: <code>start_date=2026-02-20&amp;end_date=2026-02-27</code></li>\n<li>Sem filtro: retorna as leituras mais recentes até o <code>limit</code></li>\n</ul>\n<h3 id=\"dica-para-grandes-volumes-de-dados\">Dica para grandes volumes de dados</h3>\n<p>Se o tanque possui muitas leituras, use a paginação:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code>Página 1: ?skip=0&amp;limit=5000\nPágina 2: ?skip=5000&amp;limit=5000\n...\n</code></pre><p>Ou restrinja o período com <code>start_date</code> e <code>end_date</code>.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}},"urlObject":{"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","readings"],"host":["https://connect.mettrix.com.br"],"query":[{"disabled":true,"description":{"content":"<p>Data início no formato ISO 8601 (ex: 2026-02-01). Sem filtro retorna as leituras mais recentes.</p>\n","type":"text/plain"},"key":"start_date","value":"2026-02-01"},{"disabled":true,"description":{"content":"<p>Data fim no formato ISO 8601 (ex: 2026-02-28).</p>\n","type":"text/plain"},"key":"end_date","value":"2026-02-28"},{"disabled":true,"description":{"content":"<p>Offset para paginação. Default: 0.</p>\n","type":"text/plain"},"key":"skip","value":"0"},{"description":{"content":"<p>Máximo de resultados por página (1-5000). Default: 1000.</p>\n","type":"text/plain"},"key":"limit","value":"1000"}],"variable":[]}},"response":[{"id":"96a8106b-f9a6-42cb-8515-fe2d0d65ba0c","name":"200 - Leituras do período","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/readings?limit=1000","host":["https://connect.mettrix.com.br"],"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","readings"],"query":[{"key":"limit","value":"1000"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"[\n  {\n    \"id\": \"b2c3d4e5-6789-0abc-def1-234567890abc\",\n    \"tank_id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n    \"volume_liters\": 8450.5,\n    \"level_percent\": 56.3,\n    \"temperature\": 24.5,\n    \"distance_cm\": 109.7,\n    \"reading_at\": \"2026-02-25T14:30:00Z\"\n  },\n  {\n    \"id\": \"a1b2c3d4-0000-1111-2222-333344445555\",\n    \"tank_id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n    \"volume_liters\": 8520.1,\n    \"level_percent\": 56.8,\n    \"temperature\": 24.2,\n    \"distance_cm\": 109.3,\n    \"reading_at\": \"2026-02-25T13:30:00Z\"\n  },\n  {\n    \"id\": \"f6e5d4c3-b2a1-9876-5432-109876543210\",\n    \"tank_id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n    \"volume_liters\": 8605.7,\n    \"level_percent\": 57.4,\n    \"temperature\": 23.8,\n    \"distance_cm\": 108.8,\n    \"reading_at\": \"2026-02-25T12:30:00Z\"\n  }\n]"}],"_postman_id":"a598fd22-20d5-4131-bb9a-bcf765b9da1d"},{"name":"Alertas do Tanque","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Requisição bem-sucedida', function () {","    pm.response.to.have.status(200);","});","","pm.test('Resposta é um array de alertas', function () {","    const json = pm.response.json();","    pm.expect(json).to.be.an('array');","    console.log('[Mettrix] Total de alertas: ' + json.length);","","    const active = json.filter(a => !a.is_resolved);","    const resolved = json.filter(a => a.is_resolved);","    console.log('[Mettrix] Ativos: ' + active.length + ' | Resolvidos: ' + resolved.length);","","    if (active.length > 0) {","        console.warn('[Mettrix] ATENÇÃO: Existem ' + active.length + ' alerta(s) ativo(s)!');","    }","});"],"id":"10e9df0d-a4fb-4e08-9cd3-d28c3d8d22bc"}}],"id":"7da324ab-62c7-45c6-a4bf-faf19ee6fd8f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/alerts?limit=100","description":"<h2 id=\"alertas-do-tanque\">Alertas do Tanque</h2>\n<p>Retorna os alertas disparados para um tanque, ordenados do mais recente para o mais antigo.</p>\n<h3 id=\"quando-usar\">Quando usar</h3>\n<ul>\n<li>Para consultar o histórico de alertas de nível</li>\n<li>Para monitorar quais tanques entraram em zona crítica</li>\n<li>Para integrar alertas com sistemas de notificação externos</li>\n<li>Para gerar relatórios de ocorrências</li>\n</ul>\n<h3 id=\"parâmetros\">Parâmetros</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parâmetro</th>\n<th>Local</th>\n<th>Tipo</th>\n<th>Obrigatório</th>\n<th>Default</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tank_id</code></td>\n<td>path</td>\n<td>string (UUID)</td>\n<td>Sim</td>\n<td>—</td>\n<td>ID do tanque</td>\n</tr>\n<tr>\n<td><code>skip</code></td>\n<td>query</td>\n<td>integer</td>\n<td>Não</td>\n<td><code>0</code></td>\n<td>Offset para paginação</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td>query</td>\n<td>integer</td>\n<td>Não</td>\n<td><code>100</code></td>\n<td>Itens por página (máx: 500)</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"campos-da-resposta\">Campos da resposta</h3>\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>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>string (UUID)</td>\n<td>ID único do alerta</td>\n</tr>\n<tr>\n<td><code>alert_type</code></td>\n<td>string</td>\n<td>Tipo do alerta (ex: <code>low_level</code>)</td>\n</tr>\n<tr>\n<td><code>zone_label</code></td>\n<td>string</td>\n<td>Nome da zona que disparou (ex: Crítico, Alerta)</td>\n</tr>\n<tr>\n<td><code>level_percent</code></td>\n<td>number</td>\n<td>Nível do tanque no momento do disparo</td>\n</tr>\n<tr>\n<td><code>message</code></td>\n<td>string</td>\n<td>Mensagem descritiva do alerta</td>\n</tr>\n<tr>\n<td><code>triggered_at</code></td>\n<td>string (ISO 8601)</td>\n<td>Quando o alerta foi disparado</td>\n</tr>\n<tr>\n<td><code>resolved_at</code></td>\n<td>string (ISO 8601)</td>\n<td>Quando foi resolvido (null se ainda ativo)</td>\n</tr>\n<tr>\n<td><code>is_resolved</code></td>\n<td>boolean</td>\n<td>Se o alerta já foi resolvido</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"como-interpretar\">Como interpretar</h3>\n<ul>\n<li><strong><code>is_resolved: false</code></strong> — Alerta ainda ativo, tanque permanece na zona de alerta</li>\n<li><strong><code>is_resolved: true</code></strong> — Alerta resolvido, tanque saiu da zona de alerta</li>\n<li><strong><code>resolved_at</code></strong> — Indica quando o nível voltou ao normal</li>\n</ul>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}},"urlObject":{"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","alerts"],"host":["https://connect.mettrix.com.br"],"query":[{"disabled":true,"description":{"content":"<p>Offset para paginação. Default: 0.</p>\n","type":"text/plain"},"key":"skip","value":"0"},{"description":{"content":"<p>Máximo de resultados por página (1-500). Default: 100.</p>\n","type":"text/plain"},"key":"limit","value":"100"}],"variable":[]}},"response":[{"id":"47e6edad-b8ae-46e1-a3e0-b7626a23dab0","name":"200 - Alertas do tanque","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/alerts?limit=100","host":["https://connect.mettrix.com.br"],"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","alerts"],"query":[{"key":"limit","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"[\n  {\n    \"id\": \"e5f6a7b8-9012-3456-cdef-abcdef012345\",\n    \"tank_id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n    \"zone_id\": \"d4e5f6a7-1234-5678-abcd-ef0123456789\",\n    \"zone_label\": \"Crítico\",\n    \"alert_type\": \"low_level\",\n    \"level_percent\": 12.5,\n    \"message\": \"Nível do tanque Diesel #01 atingiu zona Crítico (12.5%)\",\n    \"triggered_at\": \"2026-02-20T08:15:00Z\",\n    \"resolved_at\": \"2026-02-20T16:30:00Z\",\n    \"is_resolved\": true\n  },\n  {\n    \"id\": \"b1c2d3e4-5678-9abc-def0-112233445566\",\n    \"tank_id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n    \"zone_id\": \"d4e5f6a7-1234-5678-abcd-ef0123456789\",\n    \"zone_label\": \"Crítico\",\n    \"alert_type\": \"low_level\",\n    \"level_percent\": 14.8,\n    \"message\": \"Nível do tanque Diesel #01 atingiu zona Crítico (14.8%)\",\n    \"triggered_at\": \"2026-02-10T06:45:00Z\",\n    \"resolved_at\": \"2026-02-10T11:20:00Z\",\n    \"is_resolved\": true\n  }\n]"},{"id":"74fa666b-7a32-4a95-9b89-3ca76ec6e667","name":"200 - Sem alertas","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/alerts?limit=100","host":["https://connect.mettrix.com.br"],"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","alerts"],"query":[{"key":"limit","value":"100"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"[]"}],"_postman_id":"7da324ab-62c7-45c6-a4bf-faf19ee6fd8f"}],"id":"aa543d82-ae9d-495d-a384-5373b853711d","description":"<p>Endpoints para consultar o histórico de leituras (medições de volume, nível e temperatura) e alertas disparados pelos tanques.</p>\n<h3 id=\"leituras\">Leituras</h3>\n<p>Cada leitura contém os dados capturados pelo sensor em um momento específico:</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Unidade</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>volume_liters</code></td>\n<td>litros</td>\n<td>Volume medido</td>\n</tr>\n<tr>\n<td><code>level_percent</code></td>\n<td>%</td>\n<td>Nível percentual do tanque</td>\n</tr>\n<tr>\n<td><code>temperature</code></td>\n<td>°C</td>\n<td>Temperatura do produto</td>\n</tr>\n<tr>\n<td><code>distance_cm</code></td>\n<td>cm</td>\n<td>Distância do sensor à superfície</td>\n</tr>\n<tr>\n<td><code>reading_at</code></td>\n<td>ISO 8601</td>\n<td>Data/hora da medição</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"alertas\">Alertas</h3>\n<p>Alertas são disparados quando o nível do tanque entra em uma zona configurada (ex: zona Crítico quando nível &lt; 15%).</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>alert_type</code></td>\n<td>Tipo do alerta (<code>low_level</code>, etc.)</td>\n</tr>\n<tr>\n<td><code>zone_label</code></td>\n<td>Nome da zona que disparou (ex: Crítico)</td>\n</tr>\n<tr>\n<td><code>level_percent</code></td>\n<td>Nível no momento do alerta</td>\n</tr>\n<tr>\n<td><code>is_resolved</code></td>\n<td>Se o alerta já foi resolvido</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"aa543d82-ae9d-495d-a384-5373b853711d","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}}},{"name":"Projeções IA","item":[{"name":"Projeção de Volume (IA)","event":[{"listen":"test","script":{"type":"text/javascript","exec":["pm.test('Requisição bem-sucedida', function () {","    pm.response.to.have.status(200);","});","","pm.test('Projeção presente na resposta', function () {","    const json = pm.response.json();","    pm.expect(json).to.have.property('volume_projection');","});","","pm.test('Verificar resultado da projeção', function () {","    const json = pm.response.json();","    const proj = json.volume_projection;","","    if (!proj) return;","","    console.log('[Mettrix] Método: ' + proj.calculation_method);","    console.log('[Mettrix] Confiança: ' + proj.confidence_level);","    console.log('[Mettrix] Pontos de dados: ' + proj.data_points_used);","","    if (proj.projected_volume !== null) {","        console.log('[Mettrix] Volume projetado: ' + proj.projected_volume + ' litros em ' + proj.projection_days + ' dias');","        console.log('[Mettrix] Consumo diário: ' + proj.daily_consumption_rate + ' litros/dia');","    }","","    if (proj.will_be_empty) {","        console.warn('[Mettrix] ATENÇÃO: Tanque vai esvaziar em ' + proj.empty_date);","    }","","    if (proj.confidence_level === 'insufficient_data') {","        console.warn('[Mettrix] Dados insuficientes. Aumente o calculation_period_days.');","    }","});"],"id":"8905ab60-babe-439d-b2f1-598790b1cbf7"}}],"id":"3f111591-7562-44d6-9c36-65ec62b4c0f5","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[],"url":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/volume-projection?projection_days=7&calculation_period_days=60","description":"<h2 id=\"projeção-de-volume-mettrix-ai-engine\">Projeção de Volume (Mettrix AI Engine)</h2>\n<p>Calcula a projeção de volume futuro de um tanque utilizando inteligência artificial (Prophet ML).</p>\n<h3 id=\"quando-usar\">Quando usar</h3>\n<ul>\n<li>Para prever quando um tanque vai esvaziar</li>\n<li>Para planejar abastecimentos com antecedência</li>\n<li>Para automatizar ordens de compra baseadas em projeções</li>\n<li>Para alimentar dashboards preditivos</li>\n</ul>\n<h3 id=\"parâmetros\">Parâmetros</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Parâmetro</th>\n<th>Local</th>\n<th>Tipo</th>\n<th>Obrigatório</th>\n<th>Default</th>\n<th>Range</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>tank_id</code></td>\n<td>path</td>\n<td>string (UUID)</td>\n<td>Sim</td>\n<td>—</td>\n<td>—</td>\n<td>ID do tanque</td>\n</tr>\n<tr>\n<td><code>projection_days</code></td>\n<td>query</td>\n<td>integer</td>\n<td>Não</td>\n<td><code>7</code></td>\n<td>1-365</td>\n<td>Dias para projetar</td>\n</tr>\n<tr>\n<td><code>calculation_period_days</code></td>\n<td>query</td>\n<td>integer</td>\n<td>Não</td>\n<td><code>60</code></td>\n<td>7-365</td>\n<td>Período histórico para cálculo</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"cenários-de-uso-comuns\">Cenários de uso comuns</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Cenário</th>\n<th>projection_days</th>\n<th>calculation_period_days</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Previsão semanal</td>\n<td>7</td>\n<td>60</td>\n</tr>\n<tr>\n<td>Previsão mensal</td>\n<td>30</td>\n<td>90</td>\n</tr>\n<tr>\n<td>Planejamento trimestral</td>\n<td>90</td>\n<td>180</td>\n</tr>\n<tr>\n<td>Análise de curto prazo</td>\n<td>3</td>\n<td>30</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"campos-da-resposta\">Campos da resposta</h3>\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>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>projected_volume</code></td>\n<td>number</td>\n<td>Volume projetado em litros na data futura</td>\n</tr>\n<tr>\n<td><code>projection_date</code></td>\n<td>string (ISO 8601)</td>\n<td>Data da projeção</td>\n</tr>\n<tr>\n<td><code>confidence_level</code></td>\n<td>string</td>\n<td>Confiança: <code>insufficient_data</code>, <code>low</code>, <code>medium</code>, <code>high</code></td>\n</tr>\n<tr>\n<td><code>calculation_method</code></td>\n<td>string</td>\n<td>Método: <code>prophet_ml</code>, <code>linear_regression</code>, <code>moving_average</code></td>\n</tr>\n<tr>\n<td><code>daily_consumption_rate</code></td>\n<td>number</td>\n<td>Taxa de consumo diário (litros/dia)</td>\n</tr>\n<tr>\n<td><code>will_be_empty</code></td>\n<td>boolean</td>\n<td>Se o tanque ficará vazio no período</td>\n</tr>\n<tr>\n<td><code>empty_date</code></td>\n<td>string (ISO 8601)</td>\n<td>Data estimada de esgotamento (se aplicável)</td>\n</tr>\n<tr>\n<td><code>message</code></td>\n<td>string</td>\n<td>Mensagem explicativa do resultado</td>\n</tr>\n<tr>\n<td><code>notes</code></td>\n<td>string</td>\n<td>Observações adicionais do engine</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"dica\">Dica</h3>\n<p>Aumente o <code>calculation_period_days</code> para projeções mais confiáveis em tanques com consumo variável. Para tanques com consumo estável, períodos menores já oferecem boa precisão.</p>\n","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}},"urlObject":{"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","volume-projection"],"host":["https://connect.mettrix.com.br"],"query":[{"description":{"content":"<p>Número de dias para projetar no futuro (1-365). Default: 7.</p>\n","type":"text/plain"},"key":"projection_days","value":"7"},{"description":{"content":"<p>Período de histórico usado para cálculo (7-365 dias). Default: 60. Quanto maior, mais dados o modelo usa.</p>\n","type":"text/plain"},"key":"calculation_period_days","value":"60"}],"variable":[]}},"response":[{"id":"434f08ab-a88a-405e-aa12-1aedf33835b5","name":"200 - Projeção com alta confiança","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/volume-projection?projection_days=7&calculation_period_days=60","host":["https://connect.mettrix.com.br"],"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","volume-projection"],"query":[{"key":"projection_days","value":"7"},{"key":"calculation_period_days","value":"60"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n  \"name\": \"Tanque Diesel #01\",\n  \"is_active\": true,\n  \"volume_projection\": {\n    \"projected_volume\": 5280.3,\n    \"projection_days\": 7,\n    \"projection_date\": \"2026-03-04T00:00:00Z\",\n    \"confidence_level\": \"high\",\n    \"calculation_method\": \"prophet_ml\",\n    \"daily_consumption_rate\": 456.8,\n    \"data_points_used\": 42,\n    \"message\": \"Projeção calculada com alta confiança usando Prophet ML\",\n    \"notes\": \"Padrão de consumo estável detectado\",\n    \"will_be_empty\": false,\n    \"empty_date\": null\n  }\n}"},{"id":"f0432190-a89d-45f8-bf31-453c1aed2e4e","name":"200 - Tanque vai esvaziar","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/volume-projection?projection_days=30&calculation_period_days=60","host":["https://connect.mettrix.com.br"],"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","volume-projection"],"query":[{"key":"projection_days","value":"30"},{"key":"calculation_period_days","value":"60"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n  \"name\": \"Tanque Diesel #01\",\n  \"is_active\": true,\n  \"volume_projection\": {\n    \"projected_volume\": 0,\n    \"projection_days\": 30,\n    \"projection_date\": \"2026-03-27T00:00:00Z\",\n    \"confidence_level\": \"high\",\n    \"calculation_method\": \"prophet_ml\",\n    \"daily_consumption_rate\": 456.8,\n    \"data_points_used\": 42,\n    \"message\": \"ATENÇÃO: Tanque ficará vazio antes do período projetado\",\n    \"notes\": \"Recomendado agendar abastecimento\",\n    \"will_be_empty\": true,\n    \"empty_date\": \"2026-03-15T00:00:00Z\"\n  }\n}"},{"id":"bfe5e0bc-fba5-4b88-8a20-7ef291d7a1a1","name":"200 - Dados insuficientes","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://connect.mettrix.com.br/v1/tanks/c1d2e3f4-5678-90ab-cdef-aabbccddeeff/volume-projection?projection_days=7&calculation_period_days=7","host":["https://connect.mettrix.com.br"],"path":["v1","tanks","c1d2e3f4-5678-90ab-cdef-aabbccddeeff","volume-projection"],"query":[{"key":"projection_days","value":"7"},{"key":"calculation_period_days","value":"7"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"id\": \"c1d2e3f4-5678-90ab-cdef-aabbccddeeff\",\n  \"name\": \"Tanque Diesel #01\",\n  \"is_active\": true,\n  \"volume_projection\": {\n    \"projected_volume\": null,\n    \"projection_days\": 7,\n    \"projection_date\": null,\n    \"confidence_level\": \"insufficient_data\",\n    \"calculation_method\": null,\n    \"daily_consumption_rate\": null,\n    \"data_points_used\": 3,\n    \"message\": \"Dados insuficientes para calcular projeção confiável\",\n    \"notes\": \"Necessário pelo menos 7 pontos de dados no período\",\n    \"will_be_empty\": false,\n    \"empty_date\": null\n  }\n}"}],"_postman_id":"3f111591-7562-44d6-9c36-65ec62b4c0f5"}],"id":"768ff7a5-c7ec-430f-b6d1-27e7e63df2d1","description":"<p>Endpoint de <strong>inteligência artificial</strong> da Mettrix para projeção de volume futuro.</p>\n<p>O Mettrix AI Engine utiliza o modelo <strong>Prophet ML</strong> (machine learning) para analisar padrões históricos de consumo e projetar o volume futuro do tanque.</p>\n<h3 id=\"como-funciona\">Como funciona</h3>\n<ol>\n<li>O engine analisa as leituras históricas do período configurado</li>\n<li>Identifica padrões de consumo (sazonalidade, tendências)</li>\n<li>Projeta o volume futuro para os dias solicitados</li>\n<li>Calcula se o tanque ficará vazio no período projetado</li>\n<li>Retorna o nível de confiança da projeção</li>\n</ol>\n<h3 id=\"níveis-de-confiança\">Níveis de confiança</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Nível</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>high</code></td>\n<td>Padrão de consumo estável e dados abundantes</td>\n</tr>\n<tr>\n<td><code>medium</code></td>\n<td>Padrão detectado com variação moderada</td>\n</tr>\n<tr>\n<td><code>low</code></td>\n<td>Dados insuficientes ou padrão instável</td>\n</tr>\n<tr>\n<td><code>insufficient_data</code></td>\n<td>Não há dados suficientes para projetar</td>\n</tr>\n</tbody>\n</table>\n</div><h3 id=\"métodos-de-cálculo\">Métodos de cálculo</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Método</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>prophet_ml</code></td>\n<td>Modelo Prophet (mais preciso, padrão)</td>\n</tr>\n<tr>\n<td><code>linear_regression</code></td>\n<td>Regressão linear simples</td>\n</tr>\n<tr>\n<td><code>moving_average</code></td>\n<td>Média móvel</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"768ff7a5-c7ec-430f-b6d1-27e7e63df2d1","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]},"isInherited":true,"source":{"_postman_id":"18ac587f-2864-4458-bf04-adf055ff23ab","id":"18ac587f-2864-4458-bf04-adf055ff23ab","name":"Mettrix Public API","type":"collection"}}}],"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"X-API-Key"},{"key":"value","value":"mk_sua_chave_aqui"}]}},"event":[{"listen":"prerequest","script":{"type":"text/javascript","exec":["// Verifica se a base_url está configurada","const baseUrl = pm.collectionVariables.get('base_url');","if (!baseUrl || baseUrl === 'https://connect.mettrix.com.br') {","    console.warn('[Mettrix] Verifique se a variável base_url está configurada corretamente.');","}"],"id":"ef00fc85-dc49-41df-8bac-38d239cabc7f"}},{"listen":"test","script":{"type":"text/javascript","exec":["// Teste global: verifica se não houve erro de rate limit","if (pm.response.code === 429) {","    console.warn('[Mettrix] Rate limit excedido. Aguarde antes de tentar novamente.');","}","","// Teste global: verifica autenticação","if (pm.response.code === 401) {","    console.error('[Mettrix] API Key inválida ou ausente. Verifique a variável api_key.');","}"],"id":"5a76e7eb-8991-4fab-aeff-2f21343c9ec5"}}],"variable":[{"key":"base_url","value":"https://connect.mettrix.com.br","type":"string"},{"key":"api_key","value":"mk_sua_chave_aqui","type":"string"},{"key":"tank_id","value":"c1d2e3f4-5678-90ab-cdef-aabbccddeeff","type":"string"},{"key":"company_id","value":"","type":"string"}]}