{"info":{"_postman_id":"56944ed6-bdfc-428f-bd99-190089c31ebb","name":"Monitor Status DFe API","description":"<html><head></head><body><p>API JSON pública do Monitor Status DFe (projeto open-source, MIT — desenvolvido e mantido pela CTEC). Alimenta o dashboard e a página de detalhe por UF e pode ser consumida por integrações externas.\n<strong>Proteções aplicadas às rotas <code>/api/*</code>:</strong> - <em>Rate limit</em>: por padrão 30 requisições por minuto por endereço IP\n  (configurável em <code>config.json</code> → <code>rate_limit.api_requisicoes_por_minuto</code>).\n  Resposta de excesso: HTTP 429 com cabeçalho <code>Retry-After: 60</code>.</p>\n<ul>\n<li><em>Anti-bot opcional (Cloudflare Turnstile)</em>: quando configurado\n(<code>TURNSTILE_SITE_KEY</code>/<code>TURNSTILE_SECRET_KEY</code> no <code>.env</code>), as rotas <code>/api/*</code>\nexigem o cabeçalho <code>CF-Turnstile-Token</code> com token válido; ausente/inválido\nresponde HTTP 403.</li>\n</ul>\n<p>Horários retornados estão em ISO 8601 UTC (sufixo <code>Z</code> ou offset); a interface exibe em America/Sao_Paulo.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"53424652","collectionId":"56944ed6-bdfc-428f-bd99-190089c31ebb","publishedId":"2sBYHUTLTg","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-10-23T19:50:42.000Z"},"item":[{"name":"api","item":[{"name":"Estado atual de todas as células (UF × documento × ambiente)","id":"22215c5b-03d1-46d7-8958-15355e6ff92b","request":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"<p>Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.</p>\n"},{"key":"Accept","value":"application/json"}],"url":"https://monitor.exemplo.com/api/status","description":"<p>Devolve a leitura mais recente de cada combinação UF × documento × ambiente. É o endpoint consumido pelo polling do dashboard.</p>\n","urlObject":{"path":["api","status"],"host":["https://monitor.exemplo.com"],"query":[],"variable":[]}},"response":[{"id":"caaa70f0-e1d1-4bfe-b756-d27e5c9c7632","name":"Células atuais com rótulos exibíveis.","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":"https://monitor.exemplo.com/api/status"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"gerado_em\": \"2026-10-17T13:27:05.481561+00:00\",\n  \"ambientes\": [\n    {\n      \"tp_amb\": 1,\n      \"rotulo\": \"Producao\"\n    },\n    {\n      \"tp_amb\": 2,\n      \"rotulo\": \"Homologacao\"\n    }\n  ],\n  \"celulas\": [\n    {\n      \"uf\": \"MG\",\n      \"documento\": \"nfe\",\n      \"tp_amb\": 1,\n      \"estado\": \"operacional\",\n      \"rotulo\": \"Operacional\",\n      \"cor\": \"#22C55E\",\n      \"cstat\": \"107\",\n      \"t_med\": 512,\n      \"response_time\": 480,\n      \"coletado_em\": \"2026-10-17T13:27:05.481561+00:00\",\n      \"erro\": null\n    }\n  ]\n}"},{"id":"3fe779cc-ab8d-4c73-bd3e-9775847fe8b3","name":"Verificação anti-bot ausente ou inválida (apenas quando habilitada).","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":"https://monitor.exemplo.com/api/status"},"status":"Forbidden","code":403,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"erro\": \"Verificação anti-bot falhou.\"\n}"},{"id":"1eda51ac-3561-44ab-931e-534abab53c22","name":"Limite de requisições por IP excedido.","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":"https://monitor.exemplo.com/api/status"},"status":"Too Many Requests","code":429,"_postman_previewlanguage":"json","header":[{"key":"Retry-After","value":"60","disabled":false,"description":"Segundos até poder tentar novamente."},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"erro\": \"Limite de requisições excedido. Tente novamente em instantes.\"\n}"}],"_postman_id":"22215c5b-03d1-46d7-8958-15355e6ff92b"},{"name":"Série histórica de uma UF (uptime e sparkline)","id":"bbaee35a-6920-45fe-8f1d-d2ea2a15daab","request":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"<p>Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.</p>\n"},{"key":"Accept","value":"application/json"}],"url":"https://monitor.exemplo.com/api/uf/:uf/historico?horas=24&documento=nfe&tp_amb=1","urlObject":{"path":["api","uf",":uf","historico"],"host":["https://monitor.exemplo.com"],"query":[{"disabled":false,"description":{"content":"<p>Tamanho da janela em horas (1 a 720). Padrão: 24.</p>\n","type":"text/plain"},"key":"horas","value":"24"},{"disabled":false,"description":{"content":"<p>Código do modelo (ex.: nfe). Padrão: primeiro modelo ativo.</p>\n","type":"text/plain"},"key":"documento","value":"nfe"},{"disabled":false,"description":{"content":"<p>Ambiente — 1 (produção) ou 2 (homologação). Padrão: 1.</p>\n","type":"text/plain"},"key":"tp_amb","value":"1"}],"variable":[{"disabled":false,"description":{"content":"<p>(Required) Sigla da UF (ex.: MG). Inválida responde 404.</p>\n","type":"text/plain"},"type":"any","value":"MG","key":"uf"}]}},"response":[{"id":"efad730b-6c53-40e6-a08a-5ce890767c91","name":"Pontos da janela, uptime e último status.","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":{"raw":"https://monitor.exemplo.com/api/uf/:uf/historico?horas=24&documento=nfe&tp_amb=1","host":["https://monitor.exemplo.com"],"path":["api","uf",":uf","historico"],"query":[{"key":"horas","value":"24"},{"key":"documento","value":"nfe"},{"key":"tp_amb","value":"1"}],"variable":[{"key":"uf","value":"MG","disabled":false,"description":"(Required) Sigla da UF (ex.: MG). Inválida responde 404."}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"uf\": \"MG\",\n  \"horas\": 24,\n  \"documento\": \"nfe\",\n  \"tp_amb\": 1,\n  \"pontos\": [\n    {\n      \"coletado_em\": \"2026-10-17T10:00:00+00:00\",\n      \"cstat\": \"107\",\n      \"estado\": \"operacional\",\n      \"cor\": \"#22C55E\",\n      \"t_med\": 512,\n      \"response_time\": 480,\n      \"erro\": null\n    }\n  ],\n  \"uptime_pct\": 100,\n  \"ultimo\": {\n    \"uf\": \"MG\",\n    \"documento\": \"nfe\",\n    \"tp_amb\": 1,\n    \"estado\": \"operacional\",\n    \"rotulo\": \"Operacional\",\n    \"cor\": \"#22C55E\",\n    \"cstat\": \"107\",\n    \"t_med\": 512,\n    \"response_time\": 480,\n    \"coletado_em\": \"2026-10-17T13:27:05.481561+00:00\",\n    \"erro\": null,\n    \"msg\": null,\n    \"x_motivo\": null,\n    \"ver_aplic\": null,\n    \"dh_recebto\": null\n  }\n}"},{"id":"45b86cc6-f438-4c20-9d51-9c178fbb9137","name":"Parâmetro inválido (horas ou tp_amb fora das faixas).","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":{"raw":"https://monitor.exemplo.com/api/uf/:uf/historico?horas=24&documento=nfe&tp_amb=1","host":["https://monitor.exemplo.com"],"path":["api","uf",":uf","historico"],"query":[{"key":"horas","value":"24"},{"key":"documento","value":"nfe"},{"key":"tp_amb","value":"1"}],"variable":[{"key":"uf","value":"MG","disabled":false,"description":"(Required) Sigla da UF (ex.: MG). Inválida responde 404."}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"erro\": \"Parâmetro 'tp_amb' deve ser 1 ou 2.\"\n}"},{"id":"1946c52d-6110-464d-ba5f-a2271f0c0863","name":"Verificação anti-bot ausente ou inválida (apenas quando habilitada).","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":{"raw":"https://monitor.exemplo.com/api/uf/:uf/historico?horas=24&documento=nfe&tp_amb=1","host":["https://monitor.exemplo.com"],"path":["api","uf",":uf","historico"],"query":[{"key":"horas","value":"24"},{"key":"documento","value":"nfe"},{"key":"tp_amb","value":"1"}],"variable":[{"key":"uf","value":"MG","disabled":false,"description":"(Required) Sigla da UF (ex.: MG). Inválida responde 404."}]}},"status":"Forbidden","code":403,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"erro\": \"Verificação anti-bot falhou.\"\n}"},{"id":"51ef7b09-9371-4da6-b569-b6121e278093","name":"UF inválida.","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":{"raw":"https://monitor.exemplo.com/api/uf/:uf/historico?horas=24&documento=nfe&tp_amb=1","host":["https://monitor.exemplo.com"],"path":["api","uf",":uf","historico"],"query":[{"key":"horas","value":"24"},{"key":"documento","value":"nfe"},{"key":"tp_amb","value":"1"}],"variable":[{"key":"uf","value":"MG","disabled":false,"description":"(Required) Sigla da UF (ex.: MG). Inválida responde 404."}]}},"status":"Not Found","code":404,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"erro\": \"UF inválida.\"\n}"},{"id":"d0d81157-7a1c-482d-9cac-41a3bb42e49a","name":"Limite de requisições por IP excedido.","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":{"raw":"https://monitor.exemplo.com/api/uf/:uf/historico?horas=24&documento=nfe&tp_amb=1","host":["https://monitor.exemplo.com"],"path":["api","uf",":uf","historico"],"query":[{"key":"horas","value":"24"},{"key":"documento","value":"nfe"},{"key":"tp_amb","value":"1"}],"variable":[{"key":"uf","value":"MG","disabled":false,"description":"(Required) Sigla da UF (ex.: MG). Inválida responde 404."}]}},"status":"Too Many Requests","code":429,"_postman_previewlanguage":"json","header":[{"key":"Retry-After","value":"60","disabled":false,"description":"Segundos até poder tentar novamente."},{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"erro\": \"Limite de requisições excedido. Tente novamente em instantes.\"\n}"}],"_postman_id":"bbaee35a-6920-45fe-8f1d-d2ea2a15daab"},{"name":"Histórico de todas as UFs (séries por UF)","id":"1eb3bb0d-48ff-49d9-8cd6-80263cbd596a","request":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"<p>Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.</p>\n"},{"key":"Accept","value":"application/json"}],"url":"https://monitor.exemplo.com/api/historico?horas=24&documento=nfe&tp_amb=1","description":"<p>Devolve, numa única chamada, as séries históricas de todas as UFs monitoradas para um documento e ambiente. UFs sem leituras na janela aparecem com lista vazia. Ideal para gráficos comparativos e dashboards externos.</p>\n","urlObject":{"path":["api","historico"],"host":["https://monitor.exemplo.com"],"query":[{"disabled":false,"description":{"content":"<p>Tamanho da janela em horas (1 a 720). Padrão: 24.</p>\n","type":"text/plain"},"key":"horas","value":"24"},{"disabled":false,"description":{"content":"<p>Código do modelo (ex.: nfe). Padrão: primeiro modelo ativo.</p>\n","type":"text/plain"},"key":"documento","value":"nfe"},{"disabled":false,"description":{"content":"<p>Ambiente — 1 (produção) ou 2 (homologação). Padrão: 1.</p>\n","type":"text/plain"},"key":"tp_amb","value":"1"}],"variable":[]}},"response":[{"id":"b79cf211-f6a0-4b15-af7b-d29ad57a7bfc","name":"Séries por UF e metadados da consulta.","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":{"raw":"https://monitor.exemplo.com/api/historico?horas=24&documento=nfe&tp_amb=1","host":["https://monitor.exemplo.com"],"path":["api","historico"],"query":[{"key":"horas","value":"24"},{"key":"documento","value":"nfe"},{"key":"tp_amb","value":"1"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"gerado_em\": \"2026-10-17T13:27:05.481561+00:00\",\n  \"documento\": \"nfe\",\n  \"tp_amb\": 1,\n  \"horas\": 24,\n  \"ufs\": [\"AC\", \"AL\", \"AP\", \"AM\", \"BA\", \"CE\", \"DF\", \"ES\", \"GO\", \"MA\", \"MT\", \"MS\", \"MG\", \"PA\", \"PB\", \"PR\", \"PE\", \"PI\", \"RJ\", \"RN\", \"RS\", \"RO\", \"RR\", \"SC\", \"SP\", \"SE\", \"TO\"],\n  \"series\": {\n    \"MG\": [\n      {\n        \"coletado_em\": \"2026-10-17T10:00:00+00:00\",\n        \"cstat\": \"107\",\n        \"estado\": \"operacional\",\n        \"cor\": \"#22C55E\",\n        \"t_med\": 512,\n        \"response_time\": 480,\n        \"erro\": null\n      }\n    ],\n    \"SP\": []\n  }\n}"},{"id":"29887f97-dfa7-4b7f-8daa-40c32247e1ec","name":"Parâmetro inválido (horas, documento ou tp_amb).","originalRequest":{"method":"GET","header":[{"key":"CF-Turnstile-Token","value":"string","disabled":false,"description":"Token do Cloudflare Turnstile. Exigido APENAS quando a proteção anti-bot está habilitada na instalação; sem chaves configuradas, o cabeçalho é ignorado.\n"},{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":{"raw":"https://monitor.exemplo.com/api/historico?horas=24&documento=nfe&tp_amb=1","host":["https://monitor.exemplo.com"],"path":["api","historico"],"query":[{"key":"horas","value":"24"},{"key":"documento","value":"nfe"},{"key":"tp_amb","value":"1"}]}},"status":"Bad Request","code":400,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"erro\": \"Parâmetro 'tp_amb' deve ser 1 ou 2.\"\n}"}],"_postman_id":"1eb3bb0d-48ff-49d9-8cd6-80263cbd596a"}],"id":"99949e17-76bb-4b08-9082-715a040aa4ff","_postman_id":"99949e17-76bb-4b08-9082-715a040aa4ff","description":""},{"name":"Saúde do monitor (banco, scheduler, última coleta)","id":"a67c3735-3fb8-4166-be68-b99681bb284a","request":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"url":"https://monitor.exemplo.com/health","description":"<p>HTTP 200 apenas quando o banco está acessível E o scheduler está ativo; caso contrário, HTTP 503 com <code>status: erro</code>. Não tem rate limit nem proteção anti-bot.</p>\n","urlObject":{"path":["health"],"host":["https://monitor.exemplo.com"],"query":[],"variable":[]}},"response":[{"id":"ff7e405a-989c-40c0-ae04-400467ae500b","name":"Serviço saudável.","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":"https://monitor.exemplo.com/health"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"ok\",\n  \"banco\": \"ok\",\n  \"scheduler\": \"ativo\",\n  \"ultima_coleta\": \"2026-10-17T13:27:05.481561+00:00\",\n  \"leituras_total\": 226\n}"},{"id":"7ddb99d8-64a0-452b-8d4b-07c418bc2ec3","name":"Banco com erro ou scheduler inativo.","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json"}],"body":{"mode":"raw","raw":"","options":{"raw":{"language":"text"}}},"url":"https://monitor.exemplo.com/health"},"status":"Service Unavailable","code":503,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"}],"cookie":[],"responseTime":null,"body":"{\n  \"status\": \"erro\",\n  \"banco\": \"ok\",\n  \"scheduler\": \"inativo\",\n  \"ultima_coleta\": null,\n  \"leituras_total\": 0\n}"}],"_postman_id":"a67c3735-3fb8-4166-be68-b99681bb284a"}],"event":[{"listen":"prerequest","script":{"id":"35461d7b-bafd-4270-b9d7-711f01baaa66","type":"text/javascript","packages":{},"requests":{},"exec":[""]}},{"listen":"test","script":{"id":"3b2989e0-1006-40b4-91a8-5a0523cdf3b2","type":"text/javascript","packages":{},"requests":{},"exec":[""]}}],"variable":[{"key":"baseUrl","value":"https://monitor.exemplo.com"}]}