{"info":{"_postman_id":"7e207411-7624-4909-8d24-35ec0605eb45","name":"Hubii API","description":"<html><head></head><body><h1 id=\"integracao-para-parceiros\">Integração para parceiros</h1>\n<p>Esta collection documenta a integração de parceiros com a API pública da Hubii. O fluxo foi desenhado para ERPs, PDVs e WMS que precisam aceitar pedidos, importar dados para operação, faturar, acompanhar eventos logísticos e tratar cancelamentos.</p>\n<p>A integração usa <strong>dois pollings independentes</strong>, executados em paralelo. Eles não são alternativas entre si: cada um cobre uma etapa diferente do ciclo do pedido.</p>\n<hr>\n<h2 id=\"visão-rápida-dos-pollings\">Visão rápida dos pollings</h2>\n<h3 id=\"polling-1--aceite-de-pedidos\">Polling 1 — Aceite de pedidos</h3>\n<p>Usado para decidir se o hub aceita ou recusa uma <strong>oferta de pedido</strong>.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Ponto</th>\n<th>Regra</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Quando usar</td>\n<td>Sempre que o hub precisa responder pedidos novos</td>\n</tr>\n<tr>\n<td>Rotas</td>\n<td><code>GET /hubs/{hub_uuid}/orders/to-answer</code> → <code>GET /hubs/{hub_uuid}/orders/{order_uuid}</code> → <code>POST .../answer</code></td>\n</tr>\n<tr>\n<td>O que retorna</td>\n<td>Ofertas pendentes, ainda não aceitas</td>\n</tr>\n<tr>\n<td>Decisão</td>\n<td>Para cada oferta, consulte o pedido completo antes de aceitar ou recusar</td>\n</tr>\n<tr>\n<td>Prazo</td>\n<td>Cada oferta expira em <code>available_until_at</code>; depois disso, some da fila</td>\n</tr>\n<tr>\n<td>Aceite via painel</td>\n<td>Também é válido e dispara o Polling 2</td>\n</tr>\n<tr>\n<td>Recusa / expiração</td>\n<td>Remove a oferta de <code>to-answer</code> e não gera notificação para aquele hub</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>A listagem de <code>to-answer</code> deve ser tratada como fila de ofertas. A decisão normalmente depende do pedido completo, principalmente dos itens, quantidades, preços e disponibilidade do hub. </p>\n</blockquote>\n<h3 id=\"polling-2--notificações-de-pedidos-aceitos\">Polling 2 — Notificações de pedidos aceitos</h3>\n<p>Usado para acompanhar pedidos <strong>após o aceite</strong>: importação no ERP, entrega, NF-e, etiqueta e cancelamentos.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Ponto</th>\n<th>Regra</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Quando usar</td>\n<td>Depois do aceite via API ou painel, em paralelo ao Polling 1</td>\n</tr>\n<tr>\n<td>Rotas</td>\n<td><code>GET /v2/notifications</code> → processar → <code>POST /notifications/ack</code></td>\n</tr>\n<tr>\n<td>O que retorna</td>\n<td>Eventos de pedidos aceitos, como <code>ORDER_CREATED</code>, entrega e etiqueta</td>\n</tr>\n<tr>\n<td><code>ORDER_CREATED</code></td>\n<td>Só chega após o aceite; é o gatilho para importar o pedido no ERP</td>\n</tr>\n<tr>\n<td>ACK</td>\n<td>Obrigatório após processar; eventos reaparecem até ACK e expiram em 2 dias</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p><strong>Resumo:</strong> Polling 1 decide se o hub aceita a oferta. Polling 2 opera o pedido depois que ele foi aceito. Execute os dois a cada <strong>30–60 segundos</strong>. </p>\n</blockquote>\n<hr>\n<h2 id=\"implementação-mínima\">Implementação mínima</h2>\n<p>Para uma integração funcional, implemente este caminho primeiro:</p>\n<ol>\n<li><p>Configure <code>base_url</code> e envie o header <code>apikey</code> em todas as requisições.</p>\n</li>\n<li><p>Chame <code>GET /hubs</code> e salve o <code>uuid</code> de cada hub.</p>\n</li>\n<li><p>A cada 30–60 segundos, execute o <strong>Polling 1</strong>: <code>GET /hubs/{hub_uuid}/orders/to-answer</code>.</p>\n</li>\n<li><p>Para cada oferta retornada, consulte o pedido completo em <code>GET /hubs/{hub_uuid}/orders/{order_uuid}</code>.</p>\n</li>\n<li><p>Com base no pedido completo, principalmente nos itens, estoque e regras do hub, aceite ou recuse com <code>POST .../answer</code> antes de <code>available_until_at</code>.</p>\n</li>\n<li><p>Em paralelo, execute o <strong>Polling 2</strong>: <code>GET /v2/notifications</code>.</p>\n</li>\n<li><p>Ao receber <code>ORDER_CREATED</code>, busque ou reconcilie os detalhes do pedido e importe no ERP.</p>\n</li>\n<li><p>Após processar e persistir a notificação, envie <code>POST /notifications/ack</code> usando <code>notification_uuid</code>.</p>\n</li>\n<li><p>Quando aplicável, envie a NF-e com <code>POST .../invoice</code>.</p>\n</li>\n<li><p>Ao receber <code>SHIPPING_LABEL_AVAILABLE</code>, baixe a etiqueta com <code>GET .../label</code>.</p>\n</li>\n</ol>\n<p>Não use busy-loop. Em <code>429</code>, interrompa o ciclo atual, aplique backoff e tente novamente no próximo intervalo.</p>\n<hr>\n<h2 id=\"fluxo-operacional\">Fluxo operacional</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">GET /hubs\n  ↓\n[Polling 1] GET .../to-answer\n  ↓ para cada order_uuid\nGET /hubs/{hub_uuid}/orders/{order_uuid}\n  ↓ decidir com base no pedido completo\nPOST .../answer\n  ↓ após aceite via API ou painel\n[Polling 2] GET /v2/notifications\n  ↓ ORDER_CREATED\nGET /hubs/{hub_uuid}/orders/{order_uuid}\n  ↓ após persistir no ERP\nPOST /notifications/ack\n  ↓ quando aplicável\nPOST .../invoice\n  ↓ SHIPPING_LABEL_AVAILABLE\nGET .../label\n\n</code></pre>\n<p><code>GET .../to-invoice</code> está <strong>descontinuado</strong> e existe apenas por compatibilidade. Para novas integrações, use <code>ORDER_CREATED</code> no Polling 2.</p>\n<hr>\n<h2 id=\"decisão-de-aceite-ou-recusa\">Decisão de aceite ou recusa</h2>\n<p>A Hubii recomenda este padrão para cada oferta retornada em <code>to-answer</code>:</p>\n<ol>\n<li><p>Ler <code>order_uuid</code> e <code>available_until_at</code> na listagem.</p>\n</li>\n<li><p>Buscar o pedido completo em <code>GET /hubs/{hub_uuid}/orders/{order_uuid}</code>.</p>\n</li>\n<li><p>Avaliar itens, quantidades, preços, disponibilidade, regras fiscais e operação do hub.</p>\n</li>\n<li><p>Responder com <code>POST .../answer</code> antes do prazo.</p>\n</li>\n</ol>\n<p>Essa etapa evita decisões baseadas apenas no resumo da fila e reduz recusa incorreta, aceite sem estoque ou divergência operacional.</p>\n<hr>\n<h2 id=\"variáveis-da-collection\">Variáveis da collection</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Variável</th>\n<th>Uso</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>base_url</code></td>\n<td><code>https://api.staging.hubii.co</code> em homologação ou <code>https://api.hubii.co</code> em produção</td>\n</tr>\n<tr>\n<td><code>apikey</code></td>\n<td>API Key Hubii enviada no header <code>apikey</code></td>\n</tr>\n<tr>\n<td><code>hub_uuid</code></td>\n<td>UUID do hub retornado em <code>GET /hubs</code></td>\n</tr>\n<tr>\n<td><code>hub_uuid_2</code></td>\n<td>Opcional; segundo hub para exemplos de filtro com múltiplos hubs</td>\n</tr>\n<tr>\n<td><code>order_uuid</code></td>\n<td>UUID do pedido retornado em <code>to-answer</code> ou em uma notificação</td>\n</tr>\n<tr>\n<td><code>notification_uuid</code></td>\n<td>UUID da notificação retornada em <code>GET /v2/notifications</code>; usar no ACK</td>\n</tr>\n</tbody>\n</table>\n</div><hr>\n<h2 id=\"autenticação\">Autenticação</h2>\n<p>Envie o header abaixo em todas as requisições:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-http\">apikey: {sua_chave}\n\n</code></pre>\n<p>API Key ausente, inválida ou sem permissão deve ser tratada como erro de configuração, não como falha temporária.</p>\n<hr>\n<h2 id=\"rate-limits\">Rate limits</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Grupo</th>\n<th>Limite</th>\n<th>Rotas</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Listagem</td>\n<td>60/min por token</td>\n<td><code>/hubs</code>, <code>.../to-answer</code>, <code>.../to-invoice</code> legado</td>\n</tr>\n<tr>\n<td>Detalhe</td>\n<td>30/min por token</td>\n<td><code>.../orders/{order_uuid}</code></td>\n</tr>\n<tr>\n<td>Ação</td>\n<td>10/min por token</td>\n<td><code>.../answer</code>, <code>.../invoice</code>, <code>/notifications/ack</code>, <code>.../cancel-accepted</code></td>\n</tr>\n<tr>\n<td>Notificações</td>\n<td>5/min por token</td>\n<td><code>/v2/notifications</code></td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-\\\\\\\\\\*</code></strong> como referência operacional. A tabela acima documenta o limite esperado/contratual. </p>\n</blockquote>\n<p>Em <code>429</code>, não faça retry imediato em loop. Aguarde com backoff exponencial e retome o polling no próximo ciclo.</p>\n<hr>\n<h2 id=\"idempotência-e-retry-seguro\">Idempotência e retry seguro</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Operação</th>\n<th>Como tratar retry</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>GET /hubs</code></td>\n<td>Seguro repetir</td>\n</tr>\n<tr>\n<td><code>GET .../to-answer</code></td>\n<td>Seguro repetir; a lista reflete a fila atual</td>\n</tr>\n<tr>\n<td><code>GET .../orders/{order_uuid}</code></td>\n<td>Seguro repetir; use antes de decidir aceite/recusa e para reconciliar pedido aceito</td>\n</tr>\n<tr>\n<td><code>POST .../answer</code></td>\n<td>Não é retry cego; pode retornar <code>422</code> se o pedido já foi respondido</td>\n</tr>\n<tr>\n<td><code>GET /v2/notifications</code></td>\n<td>Seguro repetir; eventos reaparecem até ACK</td>\n</tr>\n<tr>\n<td><code>POST /notifications/ack</code></td>\n<td>Enviar só depois de persistir; se falhar, retentar o ACK, não o processamento</td>\n</tr>\n<tr>\n<td><code>POST .../invoice</code></td>\n<td>Reenvio do mesmo XML é idempotente</td>\n</tr>\n<tr>\n<td><code>POST .../cancel-accepted</code></td>\n<td>Ação sensível; evitar retry automático sem checar o estado do pedido</td>\n</tr>\n</tbody>\n</table>\n</div><p>Use <code>notification_uuid</code> como chave de idempotência dos eventos no ERP.</p>\n<hr>\n<h2 id=\"estratégia-recomendada-de-ack\">Estratégia recomendada de ACK</h2>\n<ol>\n<li><p>Buscar notificações.</p>\n</li>\n<li><p>Processar cada evento no ERP.</p>\n</li>\n<li><p>Persistir localmente usando <code>notification_uuid</code> como chave única.</p>\n</li>\n<li><p>Enviar ACK somente após sucesso da persistência.</p>\n</li>\n<li><p>Se o ACK falhar, retentar apenas o ACK. Não reprocessar o evento duplicado.</p>\n</li>\n</ol>\n<blockquote>\n<p>ACK cedo demais pode causar perda de evento no ERP. Sem ACK, a notificação reaparece por até 2 dias. </p>\n</blockquote>\n<hr>\n<h2 id=\"segurança-operacional\">Segurança operacional</h2>\n<ul>\n<li><p>Nunca exponha API Key em frontend, repositório, tickets públicos ou logs.</p>\n</li>\n<li><p>Não commite environments do Postman com secrets preenchidos.</p>\n</li>\n<li><p>Mascare credenciais em evidências de homologação.</p>\n</li>\n<li><p>Trate <code>401</code> como configuração incorreta e acione revisão de credenciais.</p>\n</li>\n</ul>\n<hr>\n<h2 id=\"homologação\">Homologação</h2>\n<h3 id=\"obrigatório-para-todos-os-parceiros\">Obrigatório para todos os parceiros</h3>\n<ul>\n<li><p>Smoke test: <code>GET /hubs</code>, <code>401</code> com key inválida e <code>403</code>/<code>404</code> em hub sem permissão.</p>\n</li>\n<li><p>Polling 1: listar ofertas, consultar detalhe completo antes da decisão, aceitar pedido, recusar com motivos, tratar pedido já respondido e pedido expirado.</p>\n</li>\n<li><p>Polling 2: buscar notificações, processar <code>ORDER_CREATED</code>, fazer ACK e validar reprocessamento quando não há ACK.</p>\n</li>\n<li><p>Detalhes do pedido: importar dados completos e exibir <code>order.id</code> no ERP.</p>\n</li>\n<li><p>Operação: aplicar backoff em <code>429</code>, retry em <code>5xx</code>/timeout e proteger credenciais nos logs.</p>\n</li>\n</ul>\n<h3 id=\"obrigatório-quando-aplicável-ao-escopo\">Obrigatório quando aplicável ao escopo</h3>\n<ul>\n<li><p>Envio de NF-e XML com campo multipart <code>invoice_file</code>.</p>\n</li>\n<li><p>Tratamento de formatos diferentes de NF-e.</p>\n</li>\n<li><p>Download de etiqueta após <code>SHIPPING_LABEL_AVAILABLE</code>.</p>\n</li>\n<li><p>Consulta de <code>pickup_code</code> após <code>ORDER_DELIVERY_PICKING_UP</code>.</p>\n</li>\n<li><p>Cancelamento pós-aceite antes da coleta.</p>\n</li>\n</ul>\n<h3 id=\"evidências-aceitas\">Evidências aceitas</h3>\n<ul>\n<li><p>Logs com credenciais mascaradas.</p>\n</li>\n<li><p>Gravação de tela do fluxo em staging.</p>\n</li>\n</ul>\n<hr>\n<h2 id=\"boas-práticas\">Boas práticas</h2>\n<ul>\n<li><p>Consulte o detalhe completo de cada oferta antes de aceitar ou recusar.</p>\n</li>\n<li><p>Exiba <code>order.id</code> no ERP; é o identificador usado no painel Hubii e no suporte.</p>\n</li>\n<li><p>Armazene <code>notification_uuid</code> para evitar duplicidade de processamento.</p>\n</li>\n<li><p>Execute Polling 1 e Polling 2 com o mesmo intervalo recomendado: 30–60 segundos.</p>\n</li>\n<li><p>Cancelamentos Hubii/cliente podem chegar até 1 dia após o evento real.</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Integração para parceiros","slug":"integracao-para-parceiros"}],"owner":"34374925","collectionId":"7e207411-7624-4909-8d24-35ec0605eb45","publishedId":"2sBXwvJoRJ","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"6348e5"},"publishDate":"2026-06-19T21:15:22.000Z"},"item":[{"name":"01 — Setup","item":[{"name":"Listagem de Hubs","id":"77a24f11-72c3-4936-b98f-54224cf8d1c8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/hubs","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p>Lista os hubs vinculados à API Key. Este é o primeiro passo da integração: use <code>data[].uuid</code> como <code>hub_uuid</code> nas demais rotas.</p>\n<h2 id=\"quando-chamar\">Quando chamar</h2>\n<ul>\n<li>Na configuração inicial do ERP, para mapear lojas/hubs.</li>\n<li>Periodicamente, por exemplo 1 vez ao dia, se novos hubs puderem ser vinculados.</li>\n<li>Antes de iniciar os dois pollings.</li>\n</ul>\n<h2 id=\"posição-no-fluxo\">Posição no fluxo</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">GET /hubs\n  ↓ guardar hub_uuid\n[Polling 1] GET .../to-answer → POST .../answer\n[Polling 2] GET /v2/notifications → processar → ACK\n</code></pre>\n<h2 id=\"query-params-opcionais\">Query params opcionais</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>search</code></td>\n<td>string</td>\n<td>Filtra por nome do hub</td>\n</tr>\n<tr>\n<td><code>order_by</code></td>\n<td>string</td>\n<td>Campo de ordenação; padrão: <code>name</code></td>\n</tr>\n<tr>\n<td><code>order_direction</code></td>\n<td><code>asc</code> ou <code>desc</code></td>\n<td>Direção da ordenação</td>\n</tr>\n<tr>\n<td><code>per_page</code></td>\n<td>int</td>\n<td>Itens por página; padrão: 10</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>int</td>\n<td>Página atual</td>\n</tr>\n<tr>\n<td><code>load</code></td>\n<td>string</td>\n<td>Relacionamentos extras, por exemplo <code>address</code></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"campos-relevantes\">Campos relevantes</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Uso</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>data[].uuid</code></td>\n<td><code>hub_uuid</code> usado nas URLs</td>\n</tr>\n<tr>\n<td><code>data[].name</code></td>\n<td>Nome fantasia</td>\n</tr>\n<tr>\n<td><code>data[].trading_name</code></td>\n<td>Razão social</td>\n</tr>\n<tr>\n<td><code>data[].document</code></td>\n<td>CNPJ</td>\n</tr>\n<tr>\n<td><code>data[].address</code></td>\n<td>Endereço do hub, quando carregado</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"exemplo-curl\">Exemplo cURL</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s \"$BASE_URL/hubs\" \\\n  -H \"Accept: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\"\n</code></pre>\n<h2 id=\"idempotência\">Idempotência</h2>\n<p><code>GET</code> seguro repetir a qualquer momento.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n<h2 id=\"próximo-passo\">Próximo passo</h2>\n<p>Com os hubs mapeados, inicie os dois pollings em paralelo:</p>\n<ol>\n<li>Polling 1: <code>GET /hubs/{hub_uuid}/orders/to-answer</code>.</li>\n<li>Polling 2: <code>GET /v2/notifications?hub_uuids={hub_uuid}</code>.</li>\n</ol>\n","urlObject":{"path":["hubs"],"host":["https://api.staging.hubii.co"],"query":[],"variable":[]}},"response":[{"id":"a87a5409-4c95-434e-bf8e-4f98a29ab09e","name":"[200] Listagem de Hubs","originalRequest":{"method":"GET","header":[],"url":"https://api.staging.hubii.co/hubs"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"58"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"9"},{"key":"RateLimit-Limit","value":"10"},{"key":"RateLimit-Remaining","value":"9"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:00:02 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"59"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"530"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"fb00546bf610dd0d360cc12a3cbd5545"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"uuid\": \"fabb88b2-0954-43db-b32a-e482d5406183\",\n            \"name\": \"Nome do Seu Hub\",\n            \"trading_name\": \"Seu Hub LTDA\",\n            \"document\": \"00000000000100\",\n            \"address\": {\n                \"street_name\": \"Rua do Seu Hub\",\n                \"address_number\": \"000\",\n                \"complement\": \"loja 1 e 2\",\n                \"postal_code\": \"00000-000\",\n                \"neighborhood_name\": \"bairro\",\n                \"city_name\": \"cidade\",\n                \"province_code\": \"UF\",\n                \"country_code\": \"BR\"\n            }\n        }\n    ],\n    \"links\": {\n        \"first\": \"https://api.staging.hubii.co/hubs?search=&order_by=name&order_direction=asc&per_page=10&load=address&page=1\",\n        \"last\": \"https://api.staging.hubii.co/hubs?search=&order_by=name&order_direction=asc&per_page=10&load=address&page=1\",\n        \"prev\": null,\n        \"next\": null\n    },\n    \"meta\": {\n        \"current_page\": 1,\n        \"from\": 1,\n        \"last_page\": 1,\n        \"links\": [\n            {\n                \"url\": null,\n                \"label\": \"&laquo; Previous\",\n                \"active\": false\n            },\n            {\n                \"url\": \"https://api.staging.hubii.co/hubs?search=&order_by=name&order_direction=asc&per_page=10&load=address&page=1\",\n                \"label\": \"1\",\n                \"active\": true\n            },\n            {\n                \"url\": null,\n                \"label\": \"Next &raquo;\",\n                \"active\": false\n            }\n        ],\n        \"path\": \"https://api.staging.hubii.co/hubs\",\n        \"per_page\": 10,\n        \"to\": 6,\n        \"total\": 6\n    }\n}"}],"_postman_id":"77a24f11-72c3-4936-b98f-54224cf8d1c8"}],"id":"8c934f25-50e9-4597-b1b5-71659418c22e","_postman_id":"8c934f25-50e9-4597-b1b5-71659418c22e","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":true,"source":{"_postman_id":"7e207411-7624-4909-8d24-35ec0605eb45","id":"7e207411-7624-4909-8d24-35ec0605eb45","name":"Hubii API","type":"collection"}}},{"name":"02 — Polling 1: Aceite de pedidos","item":[{"name":"Listagem de pedidos para resposta","id":"5ba35a9c-54f0-4076-aa01-9d604092d2bb","protocolProfileBehavior":{"disabledSystemHeaders":{"accept":true},"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/to-answer","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p><strong>Polling 1 — Aceite.</strong> Lista ofertas de pedidos pendentes para um hub. Esses pedidos ainda não foram aceitos e precisam de resposta antes de <code>available_until_at</code>.</p>\n<blockquote>\n<p>A listagem deve ser tratada como uma fila de ofertas. Para cada pedido retornado, consulte o detalhe completo em <code>GET /hubs/{hub_uuid}/orders/{order_uuid}</code> antes de aceitar ou recusar. </p>\n</blockquote>\n<h2 id=\"quando-chamar\">Quando chamar</h2>\n<ul>\n<li><p>A cada 30–60 segundos.</p>\n</li>\n<li><p>Em paralelo ao Polling 2.</p>\n</li>\n<li><p>Para cada <code>hub_uuid</code> vinculado à API Key.</p>\n</li>\n</ul>\n<h2 id=\"fluxo-recomendado\">Fluxo recomendado</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">GET /hubs/{hub_uuid}/orders/to-answer\n  ↓ para cada data[].uuid\nGET /hubs/{hub_uuid}/orders/{order_uuid}\n  ↓ avaliar itens, quantidades, preço, disponibilidade e regras do hub\nPOST /hubs/{hub_uuid}/orders/{order_uuid}/answer\n  ↓ se aceito\nGET /v2/notifications → ORDER_CREATED\n\n</code></pre>\n<h2 id=\"por-que-consultar-o-pedido-completo\">Por que consultar o pedido completo</h2>\n<p>O hub normalmente decide aceitar ou recusar com base no pedido completo, principalmente:</p>\n<ul>\n<li><p>itens do pedido;</p>\n</li>\n<li><p>quantidades solicitadas;</p>\n</li>\n<li><p>disponibilidade de estoque;</p>\n</li>\n<li><p>preço/repasse;</p>\n</li>\n<li><p>regras fiscais e operacionais;</p>\n</li>\n<li><p>endereço e condições de atendimento.</p>\n</li>\n</ul>\n<p>A resposta de <code>to-answer</code> é útil para identificar as ofertas pendentes e o prazo de resposta, mas não deve ser a única base da decisão.</p>\n<h2 id=\"path-params\">Path params</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Obrigatório</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>hub_uuid</code></td>\n<td>Sim</td>\n<td>UUID do hub retornado em <code>GET /hubs</code></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"campos-relevantes\">Campos relevantes</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Uso</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>data[].uuid</code></td>\n<td><code>order_uuid</code> usado para consultar detalhes e aceitar ou recusar</td>\n</tr>\n<tr>\n<td><code>data[].id</code></td>\n<td>ID numérico; exiba no ERP para suporte operacional</td>\n</tr>\n<tr>\n<td><code>data[].total</code></td>\n<td>Valor total resumido da oferta</td>\n</tr>\n<tr>\n<td><code>data[].available_until_at</code></td>\n<td>Prazo máximo para resposta; depois disso, a oferta expira</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"regras-importantes\">Regras importantes</h2>\n<ul>\n<li><p>Consulte o pedido completo antes de responder.</p>\n</li>\n<li><p>Responda antes de <code>available_until_at</code>.</p>\n</li>\n<li><p>Após expirar, a oferta some da fila e pode ser repassada a outro hub.</p>\n</li>\n<li><p>Expiração e recusa não geram notificação para este hub.</p>\n</li>\n<li><p>Aceite pelo painel Hubii também é válido e gera <code>ORDER_CREATED</code> no Polling 2.</p>\n</li>\n</ul>\n<h2 id=\"exemplo-curl\">Exemplo cURL</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s \"$BASE_URL/hubs/$HUB_UUID/orders/to-answer\" \\\n  -H \"Accept: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\"\n\n</code></pre>\n<h2 id=\"diagrama-de-sequência\">Diagrama de sequência</h2>\n<img src=\"https://content.pstmn.io/61117942-a924-4c4d-abfc-13c9e3a58437/c2VxLW9yZGVyLnBuZw==\" />\n\n<h2 id=\"idempotência\">Idempotência</h2>\n<p><code>GET</code> seguro repetir. A resposta sempre representa o estado atual da fila.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-\\\\*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual. </p>\n</blockquote>\n<h2 id=\"próximo-passo\">Próximo passo</h2>\n<p>Para cada <code>order_uuid</code>, chame <code>GET /hubs/{hub_uuid}/orders/{order_uuid}</code> e só então use <code>POST /hubs/{hub_uuid}/orders/{order_uuid}/answer</code> para aceitar ou recusar.</p>\n","urlObject":{"path":["hubs",":hub_uuid","orders","to-answer"],"host":["https://api.staging.hubii.co"],"query":[],"variable":[{"id":"2607de8e-1837-4a5b-94e6-0e5891177065","description":{"content":"<p>UUID do hub retornado em GET /hubs</p>\n","type":"text/plain"},"type":"any","value":"","key":"hub_uuid"}]}},"response":[{"id":"1a63a9d6-d26a-4c26-84f0-dd7f02839e61","name":"[200] Listagem de pedidos para resposta","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/to-answer","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders","to-answer"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"55"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"9"},{"key":"RateLimit-Limit","value":"10"},{"key":"RateLimit-Remaining","value":"9"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:17:05 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"59"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"273"},{"key":"X-Kong-Proxy-Latency","value":"184"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"ee558d06e231553a42fbd973c1e83a0d"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"id\": 102656,\n            \"uuid\": \"71402839-ecb5-4ee0-b73a-331e7bef74f5\",\n            \"available_until_at\": \"2024-12-20T10:55:20+00:00\",\n            \"total\": 50.55\n        },\n        {\n            \"id\": 102864,\n            \"uuid\": \"bccf34dd-5501-4070-a846-926fb9fa02d6\",\n            \"available_until_at\": \"2024-12-20T10:55:20+00:00\",\n            \"total\": 63.33\n        }\n    ]\n}"}],"_postman_id":"5ba35a9c-54f0-4076-aa01-9d604092d2bb"},{"name":"Responder pedido","id":"14070808-d799-44fa-a76e-b0d56660583a","protocolProfileBehavior":{"disabledSystemHeaders":{"accept":true},"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"accept\": false,\n    \"details\": [\n        {\n            \"type\": \"out_of_portfolio\",\n            \"message\": null,\n            \"item\": \"7fa6c19c-063e-4670-b825-asd\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/answer","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p><strong>Polling 1 — Aceite.</strong> Registra a decisão do hub sobre uma oferta retornada em <code>to-answer</code>: aceitar ou recusar.</p>\n<h2 id=\"antes-de-chamar\">Antes de chamar</h2>\n<p>Para cada oferta retornada em <code>GET .../to-answer</code>, consulte primeiro <code>GET /hubs/{hub_uuid}/orders/{order_uuid}</code>. A decisão normalmente depende do pedido completo, especialmente dos itens, quantidades, disponibilidade, preço e regras operacionais do hub.</p>\n<h2 id=\"relação-com-os-dois-pollings\">Relação com os dois pollings</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Situação</th>\n<th>Polling 1</th>\n<th>Polling 2</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Oferta pendente</td>\n<td>Aparece em <code>to-answer</code></td>\n<td>Não aparece</td>\n</tr>\n<tr>\n<td>Consulta de detalhes</td>\n<td>Use antes de decidir aceite/recusa</td>\n<td>Também pode ser usada após <code>ORDER_CREATED</code></td>\n</tr>\n<tr>\n<td>Aceite pela API</td>\n<td>Some de <code>to-answer</code></td>\n<td>Gera <code>ORDER_CREATED</code></td>\n</tr>\n<tr>\n<td>Aceite pelo painel Hubii</td>\n<td>Não exige esta chamada</td>\n<td>Gera <code>ORDER_CREATED</code></td>\n</tr>\n<tr>\n<td>Recusa ou expiração</td>\n<td>Some de <code>to-answer</code></td>\n<td>Não gera notificação para este hub</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"path-params\">Path params</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Obrigatório</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>hub_uuid</code></td>\n<td>Sim</td>\n<td>UUID do hub</td>\n</tr>\n<tr>\n<td><code>order_uuid</code></td>\n<td>Sim</td>\n<td>UUID da oferta retornada em <code>to-answer</code></td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"body-para-aceitar\">Body para aceitar</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"accept\": true\n}\n</code></pre>\n<h2 id=\"body-para-recusar\">Body para recusar</h2>\n<p>Para recusa, <code>details</code> é obrigatório e deve ter pelo menos um item.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"accept\": false,\n  \"details\": [\n    {\n      \"type\": \"out_of_stock\",\n      \"message\": null,\n      \"item\": \"uuid-do-item\"\n    }\n  ]\n}\n</code></pre>\n<h2 id=\"motivos-de-recusa\">Motivos de recusa</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Valor</th>\n<th>Significado</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>out_of_portfolio</code></td>\n<td>Produto fora do portfólio do hub</td>\n</tr>\n<tr>\n<td><code>out_of_stock</code></td>\n<td>Sem estoque</td>\n</tr>\n<tr>\n<td><code>quantity_not_enough</code></td>\n<td>Estoque insuficiente para a quantidade solicitada</td>\n</tr>\n<tr>\n<td><code>price</code></td>\n<td>Preço ou repasse não aceito</td>\n</tr>\n<tr>\n<td><code>hub_unavailable</code></td>\n<td>Hub indisponível para atender</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"exemplos-curl\">Exemplos cURL</h2>\n<p>Aceitar:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s -X POST \"$BASE_URL/hubs/$HUB_UUID/orders/$ORDER_UUID/answer\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\" \\\n  -d '{\"accept\": true}'\n</code></pre>\n<p>Recusar:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s -X POST \"$BASE_URL/hubs/$HUB_UUID/orders/$ORDER_UUID/answer\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\" \\\n  -d '{\"accept\": false, \"details\": [{\"type\": \"out_of_stock\", \"message\": null, \"item\": \"uuid-do-item\"}]}'\n</code></pre>\n<h2 id=\"idempotência\">Idempotência</h2>\n<p>Não faça retry cego. Se o mesmo pedido já foi respondido, a API pode retornar <code>422</code> com <code>Order already answered</code>. Trate isso como estado de negócio e verifique o fluxo antes de repetir a ação.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n<h2 id=\"após-o-aceite\">Após o aceite</h2>\n<p>Continue o Polling 2. Aguarde <code>ORDER_CREATED</code>, reconcilie os detalhes do pedido no ERP e só depois envie ACK da notificação processada.</p>\n","urlObject":{"path":["hubs",":hub_uuid","orders",":order_uuid","answer"],"host":["https://api.staging.hubii.co"],"query":[],"variable":[{"id":"80b82d14-72f6-4625-ab41-20637eaf1083","description":{"content":"<p>UUID do hub retornado em GET /hubs</p>\n","type":"text/plain"},"type":"any","value":"","key":"hub_uuid"},{"id":"cd3f4987-7359-4294-a71d-f02549b04035","description":{"content":"<p>UUID do pedido</p>\n","type":"text/plain"},"type":"any","value":"","key":"order_uuid"}]}},"response":[{"id":"4c3ee9d9-bc83-483d-920c-f2e21d4dc270","name":"[200] Responder pedido positivamente","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"accept\": true\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/answer","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","answer"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"},{"key":"order_uuid","value":"71402839-ecb5-4ee0-b73a-331e7bef74f5"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"22"},{"key":"RateLimit-Limit","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"8"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"RateLimit-Remaining","value":"8"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:37:39 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"58"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"1261"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"c3d55a45ab449b4958b37255173f7c63"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"success\": true,\n        \"message\": \"Order answered\"\n    }\n}"},{"id":"e75ed151-f4e4-4911-9edc-69aabcbc7edf","name":"[200] Responder pedido negativamente por não trabalhar com um dos items","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"accept\": false,\n    \"details\": [\n        {\n            \"type\": \"out_of_portfolio\",\n            \"message\": null,\n            \"item\": \"a933aab6-c880-470b-b3be-2cc5af040263\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/answer","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","answer"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"},{"key":"order_uuid","value":"71402839-ecb5-4ee0-b73a-331e7bef74f5"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"22"},{"key":"RateLimit-Limit","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"8"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"RateLimit-Remaining","value":"8"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:37:39 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"58"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"1261"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"c3d55a45ab449b4958b37255173f7c63"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"success\": true,\n        \"message\": \"Order answered\"\n    }\n}"},{"id":"594878c9-c02f-47f4-b902-f9e7a9904011","name":"[200] Responder pedido negativamente por não ter em estoque um dos items","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"accept\": false,\n    \"details\": [\n        {\n            \"type\": \"out_of_stock\",\n            \"message\": null,\n            \"item\": \"a933aab6-c880-470b-b3be-2cc5af040263\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/answer","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","answer"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"},{"key":"order_uuid","value":"71402839-ecb5-4ee0-b73a-331e7bef74f5"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"22"},{"key":"RateLimit-Limit","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"8"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"RateLimit-Remaining","value":"8"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:37:39 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"58"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"1261"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"c3d55a45ab449b4958b37255173f7c63"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"success\": true,\n        \"message\": \"Order answered\"\n    }\n}"},{"id":"535a9edd-3799-434f-9813-aaa914e0aaf1","name":"[200] Responder pedido negativamente por estoque insuficiente","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"accept\": false,\n    \"details\": [\n        {\n            \"type\": \"quantity_not_enough\",\n            \"message\": null,\n            \"item\": \"a933aab6-c880-470b-b3be-2cc5af040263\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/answer","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","answer"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"},{"key":"order_uuid","value":"71402839-ecb5-4ee0-b73a-331e7bef74f5"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"22"},{"key":"RateLimit-Limit","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"8"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"RateLimit-Remaining","value":"8"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:37:39 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"58"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"1261"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"c3d55a45ab449b4958b37255173f7c63"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"success\": true,\n        \"message\": \"Order answered\"\n    }\n}"},{"id":"cea6ebf3-78da-466b-8fee-6fa45dea028a","name":"[200] Responder pedido negativamente por não aceitar o valor do repasse de um dos itens","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"accept\": false,\n    \"details\": [\n        {\n            \"type\": \"price\",\n            \"message\": null,\n            \"item\": \"a933aab6-c880-470b-b3be-2cc5af040263\"\n        }\n    ]\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/answer","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","answer"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"},{"key":"order_uuid","value":"71402839-ecb5-4ee0-b73a-331e7bef74f5"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"22"},{"key":"RateLimit-Limit","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"8"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"RateLimit-Remaining","value":"8"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:37:39 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"58"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"1261"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"c3d55a45ab449b4958b37255173f7c63"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"success\": true,\n        \"message\": \"Order answered\"\n    }\n}"},{"id":"ead0b8c6-f0b3-4119-a715-63d8a8bb2ed7","name":"[422] Responder pedido","originalRequest":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\r\n    \"accept\": false,\r\n    \"details\": [\r\n        {\r\n            \"type\": \"price\",\r\n            \"message\": null,\r\n            \"item\": \"a933aab6-c880-470b-b3be-2cc5af040263\"\r\n        }\r\n    ]\r\n}","options":{"raw":{"language":"json"}}},"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/answer","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","answer"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"},{"key":"order_uuid","value":"71402839-ecb5-4ee0-b73a-331e7bef74f5"}]}},"status":"Unprocessable Content","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"21"},{"key":"RateLimit-Limit","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"9"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"RateLimit-Remaining","value":"9"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:35:40 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"59"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"258"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"26954260301cc67ab1c5237a1a2f3d24"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"success\": false,\n        \"error\": \"Order already answered\"\n    }\n}"}],"_postman_id":"14070808-d799-44fa-a76e-b0d56660583a"}],"id":"40a6ae6d-be81-4ce0-a1c5-001b00bc5a19","_postman_id":"40a6ae6d-be81-4ce0-a1c5-001b00bc5a19","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":true,"source":{"_postman_id":"7e207411-7624-4909-8d24-35ec0605eb45","id":"7e207411-7624-4909-8d24-35ec0605eb45","name":"Hubii API","type":"collection"}}},{"name":"03 — Polling 2: Notificações (pedidos aceitos)","item":[{"name":"Notificações de Eventos","id":"3f651bb4-3c68-45e2-81e1-3eea7185abf6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/v2/notifications","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p><strong>Polling 2 — Notificações.</strong> Lista eventos de pedidos já aceitos pelo hub, seja por API ou pelo painel Hubii.</p>\n<blockquote>\n<p>Esta rota não mostra ofertas pendentes. Pedido ainda não aceito, recusado ou expirado não aparece aqui para este hub. </p>\n</blockquote>\n<h2 id=\"quando-chamar\">Quando chamar</h2>\n<ul>\n<li><p>A cada 30–60 segundos, em paralelo ao Polling 1.</p>\n</li>\n<li><p>Depois de processar e persistir cada evento, chame <code>POST /notifications/ack</code>.</p>\n</li>\n</ul>\n<h2 id=\"fluxo\">Fluxo</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">[Polling 1] aceite via API ou painel\n  ↓\nGET /v2/notifications\n  ↓ ORDER_CREATED\nGET /hubs/{hub_uuid}/orders/{order_uuid}\n  ↓ persistir no ERP\nPOST /notifications/ack\n\n</code></pre>\n<h2 id=\"filtros-opcionais\">Filtros opcionais</h2>\n<p>Formato oficial documentado nesta collection: repetir o mesmo parâmetro para múltiplos valores.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Exemplo</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>hub_uuids</code></td>\n<td><code>?hub_uuids={hub_uuid}</code></td>\n<td>Filtra por um hub</td>\n</tr>\n<tr>\n<td><code>hub_uuids</code></td>\n<td><code>?hub_uuids={hub_uuid}&amp;hub_uuids={hub_uuid_2}</code></td>\n<td>Filtra por vários hubs</td>\n</tr>\n<tr>\n<td><code>types</code></td>\n<td><code>?types=ORDER_CREATED</code></td>\n<td>Filtra por um tipo</td>\n</tr>\n<tr>\n<td><code>types</code></td>\n<td><code>?types=ORDER_CREATED&amp;types=ORDER_CANCELLED</code></td>\n<td>Filtra por vários tipos</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Se a implementação do parceiro usar biblioteca que converte arrays para <code>hub_uuids[]</code>, valide com o time Hubii antes da homologação. A collection usa <code>hub_uuids</code> e <code>types</code> sem colchetes. </p>\n</blockquote>\n<h2 id=\"paginação\">Paginação</h2>\n<p>A resposta é um objeto paginado. Itere <code>page</code> até <code>page &gt;= last_page</code> quando houver mais eventos.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Uso</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>data</code></td>\n<td>Lista de notificações da página atual</td>\n</tr>\n<tr>\n<td><code>total</code></td>\n<td>Total de notificações no filtro</td>\n</tr>\n<tr>\n<td><code>page</code></td>\n<td>Página atual</td>\n</tr>\n<tr>\n<td><code>last_page</code></td>\n<td>Última página disponível</td>\n</tr>\n<tr>\n<td><code>per_page</code></td>\n<td>Tamanho da página (equivale a <code>limit</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"query-params-de-paginação\">Query params de paginação</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Padrão</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>page</code></td>\n<td><code>1</code></td>\n<td>Página atual</td>\n</tr>\n<tr>\n<td><code>limit</code></td>\n<td><code>15</code></td>\n<td>Itens por página (máx. <code>100</code>)</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"campos-de-cada-item-em-data\">Campos de cada item em <code>data[]</code></h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Uso</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>notification_uuid</code></td>\n<td>Chave de idempotência no ERP e valor usado no ACK</td>\n</tr>\n<tr>\n<td><code>type</code> / <code>subtype</code></td>\n<td>Tipo e subtipo do evento</td>\n</tr>\n<tr>\n<td><code>order_uuid</code> / <code>order_id</code></td>\n<td>Identificadores do pedido</td>\n</tr>\n<tr>\n<td><code>hub_uuid</code></td>\n<td>Hub relacionado ao evento</td>\n</tr>\n<tr>\n<td><code>date</code></td>\n<td>Data/hora do evento</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"matriz-de-eventos\">Matriz de eventos</h2>\n<h3 id=\"eventos-que-exigem-ação-no-erp\">Eventos que exigem ação no ERP</h3>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>type</th>\n<th>subtype</th>\n<th>Quando acontece</th>\n<th>Ação esperada</th>\n<th>Buscar detalhes do pedido?</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>ORDER_CREATED</code></td>\n<td>—</td>\n<td>Após aceite via API ou painel</td>\n<td>Importar/reconciliar pedido</td>\n<td>Sim</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_SEARCHING_COURIER</code></td>\n<td>Buscando entregador</td>\n<td>Atualizar status logístico</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_COURIER_NOT_FOUND</code></td>\n<td>Entregador não encontrado</td>\n<td>Atualizar status logístico</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_COURIER_FOUND</code></td>\n<td>Entregador atribuído</td>\n<td>Atualizar status logístico</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_PICKING_UP</code></td>\n<td>Coleta iniciada</td>\n<td>Atualizar status e buscar <code>pickup_code</code></td>\n<td>Sim</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_PICKED_UP</code></td>\n<td>Pedido coletado</td>\n<td>Atualizar status logístico</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_DELIVERING</code></td>\n<td>Em rota</td>\n<td>Atualizar status logístico</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_FAILED_TO_DELIVERY</code></td>\n<td>Falha na entrega</td>\n<td>Atualizar status logístico</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_DELIVERED</code></td>\n<td>Pedido entregue</td>\n<td>Atualizar status logístico</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_DELIVERY_UPDATED</code></td>\n<td><code>ORDER_DELIVERY_LOST</code></td>\n<td>Extravio</td>\n<td>Atualizar status logístico</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_CANCELLED</code></td>\n<td><code>ORDER_CANCELLED</code></td>\n<td>Cancelamento pelo cliente/plataforma</td>\n<td>Cancelar ou inutilizar NF se aplicável</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>ORDER_CANCELLED</code></td>\n<td><code>ORDER_CANCELLED_BY_HUB</code></td>\n<td>Cancelamento pelo hub</td>\n<td>Atualizar pedido e NF se aplicável</td>\n<td>Opcional</td>\n</tr>\n<tr>\n<td><code>SHIPPING_LABEL_AVAILABLE</code></td>\n<td>—</td>\n<td>Etiqueta disponível para o pedido</td>\n<td>Baixar etiqueta em <code>GET .../label</code></td>\n<td>Opcional</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>A necessidade de etiqueta depende do pedido, não apenas do canal de venda. </p>\n</blockquote>\n<h3 id=\"eventos-informativos\">Eventos informativos</h3>\n<p>Registre e envie ACK, mas não exigem lógica operacional específica no ERP.</p>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>type</th>\n<th>Observação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>INVOICE_PENDING</code></td>\n<td>Informativo; não substitui o envio de NF quando aplicável</td>\n</tr>\n<tr>\n<td><code>ORDER_UPDATED</code></td>\n<td>Informativo; use apenas se o escopo do parceiro exigir</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"estratégia-de-ack\">Estratégia de ACK</h2>\n<ol>\n<li><p>Buscar notificações.</p>\n</li>\n<li><p>Processar uma a uma no ERP.</p>\n</li>\n<li><p>Persistir localmente usando <code>notification_uuid</code>.</p>\n</li>\n<li><p>Enviar ACK somente após sucesso.</p>\n</li>\n<li><p>Se o ACK falhar, retentar o ACK e não reprocessar o evento duplicado.</p>\n</li>\n</ol>\n<blockquote>\n<p>ACK cedo demais pode causar perda de evento. Sem ACK, a notificação reaparece por até 2 dias. </p>\n</blockquote>\n<h2 id=\"regras-críticas\">Regras críticas</h2>\n<ul>\n<li><p><code>ORDER_CREATED</code> é o gatilho recomendado para importar ou reconciliar o pedido aceito.</p>\n</li>\n<li><p>Notificações expiram em 2 dias sem ACK.</p>\n</li>\n<li><p>Cancelamentos podem chegar até 1 dia após o cancelamento real.</p>\n</li>\n<li><p>Pedido recusado ou expirado no Polling 1 não gera evento neste polling para o hub.</p>\n</li>\n</ul>\n<h2 id=\"exemplos-curl\">Exemplos cURL</h2>\n<p>Sem filtro:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s \"$BASE_URL/v2/notifications\" \\\n  -H \"Accept: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\"\n\n</code></pre>\n<p>Com filtros:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s \"$BASE_URL/v2/notifications?hub_uuids=$HUB_UUID&amp;types=ORDER_CREATED\" \\\n  -H \"Accept: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\"\n\n</code></pre>\n<h2 id=\"idempotência\">Idempotência</h2>\n<p><code>GET</code> seguro repetir. O mesmo <code>notification_uuid</code> retorna até receber ACK.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-\\\\\\\\*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual. </p>\n</blockquote>\n<h2 id=\"diagramas\">Diagramas</h2>\n<h5 id=\"importação-e-faturamento\">Importação e faturamento</h5>\n<img src=\"https://content.pstmn.io/426c6be9-7ada-4976-b875-72c436cf566a/c2VxLWltcG9ydC1iaWxsLnBuZw==\" />\n\n<h5 id=\"atualizações-de-entrega\">Atualizações de entrega</h5>\n<img src=\"https://content.pstmn.io/ca0a1d30-f880-419b-8a66-2da2afdb4870/c2VxLXVwZGF0ZS5wbmc=\" />\n\n<h5 id=\"sequência-de-eventos\">Sequência de eventos</h5>\n<img src=\"https://content.pstmn.io/bbb80891-10aa-45d7-bf95-cf39fb980413/bGluayBwaXJlcy5zdmc=\" />","urlObject":{"path":["v2","notifications"],"host":["https://api.staging.hubii.co"],"query":[{"disabled":true,"description":{"content":"<p>Página atual; padrão: 1</p>\n","type":"text/plain"},"key":"page","value":"1"},{"disabled":true,"description":{"content":"<p>Itens por página; padrão: 15; máximo: 100</p>\n","type":"text/plain"},"key":"limit","value":"15"},{"disabled":true,"description":{"content":"<p>Filtrar por hub</p>\n","type":"text/plain"},"key":"hub_uuid","value":""},{"disabled":true,"description":{"content":"<p>Segundo hub opcional; repetir o parâmetro para múltiplos hubs</p>\n","type":"text/plain"},"key":"hub_uuids[0]","value":""},{"disabled":true,"description":{"content":"<p>Filtrar por tipo de evento</p>\n","type":"text/plain"},"key":"types","value":"ORDER_CREATED"},{"disabled":true,"description":{"content":"<p>Segundo tipo opcional; repetir o parâmetro para múltiplos tipos</p>\n","type":"text/plain"},"key":"types","value":"ORDER_CANCELLED"}],"variable":[]}},"response":[{"id":"ef79a613-555b-40e6-8c3a-5f60d108395f","name":"Notificações paginadas sem filtros","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"https://api.staging.hubii.co/v2/notifications","host":["https://api.staging.hubii.co"],"path":["v2","notifications"],"query":[{"key":"hub_uuids","value":"a93dd09b-4c47-479a-9dca-9fb8026301a6","description":"Utilize o UUID's dos hubs para filtrar notificações referentes a eles. Para mais de 1 hub envie com separação por virgula","disabled":true},{"key":"types[0]","value":"ORDER_CREATED,ORDER_DELIVERY_UPDATE,ORDER_CANCELLED","description":"Filtre as notificações pelo seu tipo. Para mais de 1 tipo envie com separação por virgula.","disabled":true}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Fri, 05 Sep 2025 19:31:23 GMT"},{"key":"Content-Type","value":"application/json; charset=utf-8"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"x-ratelimit-remaining-minute","value":"9"},{"key":"x-ratelimit-limit-minute","value":"10"},{"key":"ratelimit-remaining","value":"9"},{"key":"ratelimit-reset","value":"38"},{"key":"ratelimit-limit","value":"10"},{"key":"x-powered-by","value":"Express"},{"key":"etag","value":"W/\"f92-vQDqeTTBSMMFuOt/SQZLfa/TQ5M\""},{"key":"Server","value":"cloudflare"},{"key":"x-kong-upstream-latency","value":"39"},{"key":"x-kong-proxy-latency","value":"32"},{"key":"via","value":"1.1 kong/3.9.1"},{"key":"x-kong-request-id","value":"1e499a7323da6603dad0cd7dcfb2a278"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Nel","value":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}"},{"key":"Report-To","value":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=RWjTNpOyWLU2jx1FVJVpG4maaZC0x3YyEPxwkFJVD%2BMl7WI4eWzRVENHZmHsjrmiKJwlmvTm6fyvI0S6E5aiHZ5XBqKG61a15Ri%2FXwRJsfgP4J4%3D\"}]}"},{"key":"Content-Encoding","value":"br"},{"key":"CF-RAY","value":"97a825824f821ce5-GRU"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": [\n        {\n            \"notification_uuid\": \"066d19b9-4aef-4b40-941b-d104ab158cd2\",\n            \"type\": \"ORDER_CREATED\",\n            \"subtype\": null,\n            \"order_uuid\": \"356a4241-456b-49a6-8bdc-93f92ddec7f2\",\n            \"order_id\": \"146167\",\n            \"order_delivery_id\": \"119758\",\n            \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n            \"date\": \"2025-09-03T21:46:59.000Z\"\n        },\n        {\n            \"notification_uuid\": \"c3bc1f55-fe65-49c5-ac89-fcef38827d41\",\n            \"type\": \"ORDER_DELIVERY_UPDATED\",\n            \"subtype\": \"ORDER_DELIVERY_SEARCHING_COURIER\",\n            \"order_uuid\": \"356a4241-456b-49a6-8bdc-93f92ddec7f2\",\n            \"order_id\": \"146167\",\n            \"order_delivery_id\": \"119758\",\n            \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n            \"date\": \"2025-09-03T21:47:29.000Z\"\n        },\n        {\n            \"notification_uuid\": \"636b4abf-2458-4e5e-a285-4184af2ffdfd\",\n            \"type\": \"ORDER_CREATED\",\n            \"subtype\": null,\n            \"order_uuid\": \"c71af0ac-6d96-4d1f-a59f-a651ce2c4eb8\",\n            \"order_id\": \"146199\",\n            \"order_delivery_id\": \"119790\",\n            \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n            \"date\": \"2025-09-04T12:49:40.000Z\"\n        },\n        {\n            \"notification_uuid\": \"09d0613e-50de-4ed0-9383-184a93429275\",\n            \"type\": \"ORDER_DELIVERY_UPDATED\",\n            \"subtype\": \"ORDER_DELIVERY_SEARCHING_COURIER\",\n            \"order_uuid\": \"c71af0ac-6d96-4d1f-a59f-a651ce2c4eb8\",\n            \"order_id\": \"146199\",\n            \"order_delivery_id\": \"119790\",\n            \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n            \"date\": \"2025-09-04T12:49:44.000Z\"\n        },\n        {\n            \"notification_uuid\": \"f8bb9ca5-961c-4bc3-9bf5-2b47452b2f81\",\n            \"type\": \"ORDER_CREATED\",\n            \"subtype\": null,\n            \"order_uuid\": \"571cdfbe-ba9a-4cf2-aaea-45c67b064c88\",\n            \"order_id\": \"146265\",\n            \"order_delivery_id\": \"119856\",\n            \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n            \"date\": \"2025-09-04T16:18:40.000Z\"\n        },\n        {\n            \"notification_uuid\": \"d987097a-a097-49c8-8c57-cf302f3efabd\",\n            \"type\": \"ORDER_DELIVERY_UPDATED\",\n            \"subtype\": \"ORDER_DELIVERY_COURIER_NOT_FOUND\",\n            \"order_uuid\": \"c71af0ac-6d96-4d1f-a59f-a651ce2c4eb8\",\n            \"order_id\": \"146199\",\n            \"order_delivery_id\": \"119790\",\n            \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n            \"date\": \"2025-09-04T12:50:59.000Z\"\n        },\n        {\n            \"notification_uuid\": \"35f09ebf-94e4-440f-902e-f74c1f89670c\",\n            \"type\": \"ORDER_DELIVERY_UPDATED\",\n            \"subtype\": \"ORDER_DELIVERY_SEARCHING_COURIER\",\n            \"order_uuid\": \"571cdfbe-ba9a-4cf2-aaea-45c67b064c88\",\n            \"order_id\": \"146265\",\n            \"order_delivery_id\": \"119856\",\n            \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n            \"date\": \"2025-09-04T16:18:44.000Z\"\n        },\n        {\n            \"notification_uuid\": \"07451006-152c-4406-8ae1-f755bff7bdca\",\n            \"type\": \"ORDER_CREATED\",\n            \"subtype\": null,\n            \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n            \"order_id\": \"146390\",\n            \"order_delivery_id\": \"119981\",\n            \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n            \"date\": \"2025-09-05T18:57:59.000Z\"\n        },\n        {\n            \"notification_uuid\": \"883596c5-dbdd-4720-9178-68b13f428e30\",\n            \"type\": \"ORDER_CREATED\",\n            \"subtype\": null,\n            \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n            \"order_id\": \"146390\",\n            \"order_delivery_id\": \"119981\",\n            \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n            \"date\": \"2025-09-05T19:06:53.000Z\"\n        },\n        {\n            \"notification_uuid\": \"0cdd2ae7-4a0e-4480-b1e9-950141be78dd\",\n            \"type\": \"ORDER_DELIVERY_UPDATED\",\n            \"subtype\": \"ORDER_DELIVERY_SEARCHING_COURIER\",\n            \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n            \"order_id\": \"146390\",\n            \"order_delivery_id\": \"119981\",\n            \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n            \"date\": \"2025-09-05T19:07:35.000Z\"\n        },\n        {\n            \"notification_uuid\": \"95af8726-3833-424d-bb18-0d0c716b4ffa\",\n            \"type\": \"ORDER_DELIVERY_UPDATED\",\n            \"subtype\": \"ORDER_DELIVERY_COURIER_FOUND\",\n            \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n            \"order_id\": \"146390\",\n            \"order_delivery_id\": \"119981\",\n            \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n            \"date\": \"2025-09-05T19:07:51.000Z\"\n        },\n        {\n            \"notification_uuid\": \"1766ae9b-b06d-4486-8c41-37add23fe872\",\n            \"type\": \"ORDER_DELIVERY_UPDATED\",\n            \"subtype\": \"ORDER_DELIVERY_DELIVERING\",\n            \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n            \"order_id\": \"146390\",\n            \"order_delivery_id\": \"119981\",\n            \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n            \"date\": \"2025-09-05T19:08:03.000Z\"\n        },\n        {\n            \"notification_uuid\": \"7d122bff-d184-4a19-bd62-b30e03fee07f\",\n            \"type\": \"ORDER_DELIVERY_UPDATED\",\n            \"subtype\": \"ORDER_DELIVERY_DELIVERED\",\n            \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n            \"order_id\": \"146390\",\n            \"order_delivery_id\": \"119981\",\n            \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n            \"date\": \"2025-09-05T19:08:11.000Z\"\n        }\n    ],\n    \"total\": 13,\n    \"page\": 1,\n    \"last_page\": 1,\n    \"per_page\": 13\n}"}],"_postman_id":"3f651bb4-3c68-45e2-81e1-3eea7185abf6"},{"name":"Reconhecimento de Notificação em Massa","id":"301bfd7e-ba77-454c-9e0f-f31a2c186825","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"},{"key":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"uuids\": [\n        \"9018e5d3-f653-443b-b64e-c45d475f0189\",\n        \"4996dc47-1832-47da-82b9-04468e2696bf\"\n    ]\n}","options":{"raw":{"language":"json"}}},"url":"https://api.staging.hubii.co/notifications/ack","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p>Confirma que uma ou mais notificações do Polling 2 foram processadas com sucesso no ERP. Após o ACK, elas deixam de aparecer na fila.</p>\n<h2 id=\"quando-chamar\">Quando chamar</h2>\n<p>Somente depois de processar e persistir o evento localmente. Não envie ACK antes de gravar o resultado no ERP.</p>\n<h2 id=\"fluxo-recomendado\">Fluxo recomendado</h2>\n<ol>\n<li><code>GET /v2/notifications</code>.</li>\n<li>Processar cada evento no ERP.</li>\n<li>Persistir <code>notification_uuid</code> como chave única.</li>\n<li>Enviar ACK para os eventos concluídos.</li>\n<li>Se o ACK falhar, retentar apenas o ACK.</li>\n</ol>\n<h2 id=\"body\">Body</h2>\n<p>O campo <code>uuids</code> recebe uma lista de <code>notification_uuid</code>.</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"uuids\": [\n    \"notification-uuid-1\",\n    \"notification-uuid-2\"\n  ]\n}\n</code></pre>\n<h2 id=\"comportamento-esperado\">Comportamento esperado</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Situação</th>\n<th>Efeito</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Sem ACK</td>\n<td>A notificação reaparece no próximo poll, por até 2 dias</td>\n</tr>\n<tr>\n<td>ACK após processamento</td>\n<td>A notificação é removida da fila</td>\n</tr>\n<tr>\n<td>ACK antes da persistência</td>\n<td>Risco de perda do evento se o ERP falhar depois</td>\n</tr>\n<tr>\n<td>ACK falhou por timeout ou <code>5xx</code></td>\n<td>Retentar ACK; não reprocessar o evento</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"exemplo-curl\">Exemplo cURL</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s -X POST \"$BASE_URL/notifications/ack\" \\\n  -H \"Accept: application/json\" \\\n  -H \"Content-Type: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\" \\\n  -d '{\"uuids\": [\"NOTIFICATION_UUID\"]}'\n</code></pre>\n<h2 id=\"idempotência\">Idempotência</h2>\n<p>No ERP, trate <code>notification_uuid</code> como chave única. Se a mesma notificação reaparecer, não duplique o processamento; apenas tente confirmar o ACK novamente.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n","urlObject":{"path":["notifications","ack"],"host":["https://api.staging.hubii.co"],"query":[],"variable":[]}},"response":[],"_postman_id":"301bfd7e-ba77-454c-9e0f-f31a2c186825"}],"id":"e74c0a81-e8cc-4c6d-83c8-2d975bcec6a5","description":"<blockquote>\n<p><strong>Descontinuação:</strong> <code>GET /notifications</code> foi substituído por <code>GET /v2/notifications</code> (resposta paginada com <code>page</code> e <code>limit</code>). O endpoint legado permanece disponível apenas por compatibilidade e retorna os headers <code>X-API-Deprecated: true</code> e <code>X-API-Replacement: /v2/notifications</code>. <strong>Novas integrações devem usar apenas a v2.</strong> O endpoint legado está documentado na pasta <code>[Descontinuado]</code>.</p>\n</blockquote>\n","_postman_id":"e74c0a81-e8cc-4c6d-83c8-2d975bcec6a5","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":true,"source":{"_postman_id":"7e207411-7624-4909-8d24-35ec0605eb45","id":"7e207411-7624-4909-8d24-35ec0605eb45","name":"Hubii API","type":"collection"}}},{"name":"04 — Pedidos","item":[{"name":"Detalhes do pedido","id":"8b997ef8-e0ce-4b2f-ac17-628322e3e8d7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p>Retorna os dados completos de um pedido. Use este endpoint em dois momentos principais:</p>\n<ol>\n<li><strong>Antes de aceitar ou recusar uma oferta</strong> retornada em <code>to-answer</code>, para avaliar itens, quantidades, preços, disponibilidade e regras do hub.</li>\n<li><strong>Depois do aceite</strong>, ao receber <code>ORDER_CREATED</code>, para importar ou reconciliar o pedido no ERP.</li>\n</ol>\n<h2 id=\"quando-chamar\">Quando chamar</h2>\n<ul>\n<li>Para cada pedido recebido em <code>GET .../to-answer</code>, antes de <code>POST .../answer</code>.</li>\n<li>Após receber <code>ORDER_CREATED</code> no Polling 2.</li>\n<li>Antes de emitir ou enviar NF-e.</li>\n<li>Após <code>ORDER_DELIVERY_PICKING_UP</code>, quando for necessário obter <code>pickup_code</code>.</li>\n<li>Sempre que o ERP precisar reconciliar o estado atual do pedido.</li>\n</ul>\n<h2 id=\"path-params\">Path params</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>hub_uuid</code></td>\n<td>UUID do hub</td>\n</tr>\n<tr>\n<td><code>order_uuid</code></td>\n<td>UUID do pedido</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"campos-principais\">Campos principais</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Campo</th>\n<th>Uso</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>id</code></td>\n<td>ID numérico; exiba no ERP e use em suporte Hubii</td>\n</tr>\n<tr>\n<td><code>uuid</code></td>\n<td>UUID do pedido</td>\n</tr>\n<tr>\n<td><code>subtotal</code>, <code>discount</code>, <code>delivery_cost</code>, <code>total</code></td>\n<td>Valores financeiros</td>\n</tr>\n<tr>\n<td><code>invoice_allowed</code></td>\n<td>Formatos permitidos para NF-e (55 ou 65)</td>\n</tr>\n<tr>\n<td><code>delivery_status</code></td>\n<td>Status logístico atual</td>\n</tr>\n<tr>\n<td><code>estimated_delivery_at</code></td>\n<td>Previsão de entrega</td>\n</tr>\n<tr>\n<td><code>pickup_code</code></td>\n<td><code>null</code> até <code>ORDER_DELIVERY_PICKING_UP</code>; depois do evento, consulte novamente</td>\n</tr>\n<tr>\n<td><code>customer</code></td>\n<td>Dados do comprador</td>\n</tr>\n<tr>\n<td><code>delivery_address</code> / <code>invoice_address</code></td>\n<td>Endereços de entrega e faturamento</td>\n</tr>\n<tr>\n<td><code>items[]</code></td>\n<td>Itens do pedido, incluindo <code>uuid</code>, produto, EAN, quantidade e preços</td>\n</tr>\n<tr>\n<td><code>courier</code> / <code>carrier</code></td>\n<td>Entregador ou transportadora, quando disponível</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"uso-na-decisão-de-aceite\">Uso na decisão de aceite</h2>\n<p>A decisão do hub normalmente depende dos itens e condições do pedido completo. Antes de responder uma oferta, use os dados deste endpoint para validar:</p>\n<ul>\n<li>se os itens fazem parte do portfólio do hub;</li>\n<li>se há estoque suficiente;</li>\n<li>se preço/repasse é aceitável;</li>\n<li>se há alguma restrição operacional ou fiscal;</li>\n<li>se o pedido pode ser atendido dentro do fluxo esperado.</li>\n</ul>\n<h2 id=\"exemplo-curl\">Exemplo cURL</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s \"$BASE_URL/hubs/$HUB_UUID/orders/$ORDER_UUID\" \\\n  -H \"Accept: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\"\n</code></pre>\n<h2 id=\"idempotência\">Idempotência</h2>\n<p><code>GET</code> seguro repetir.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n<h2 id=\"próximo-passo\">Próximo passo</h2>\n<ul>\n<li>Se a consulta veio a partir de <code>to-answer</code>, responda a oferta com <code>POST .../answer</code> antes de <code>available_until_at</code>.</li>\n<li>Se a consulta veio a partir de <code>ORDER_CREATED</code>, importe ou reconcilie o pedido no ERP e depois envie ACK da notificação processada.</li>\n</ul>\n","urlObject":{"path":["hubs",":hub_uuid","orders",":order_uuid"],"host":["https://api.staging.hubii.co"],"query":[],"variable":[{"id":"dd9b13f8-fe72-4be2-99ff-727f8d246ecd","description":{"content":"<p>UUID do hub retornado em GET /hubs</p>\n","type":"text/plain"},"type":"any","value":"","key":"hub_uuid"},{"id":"8d957234-31c1-406e-be36-eee7b95cc2ab","description":{"content":"<p>UUID do pedido</p>\n","type":"text/plain"},"type":"any","value":"","key":"order_uuid"}]}},"response":[{"id":"ae84feb1-41d2-48d5-9a0a-b31b76799a84","name":"[200] Detalhes do pedido","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid"],"variable":[{"key":"hub_uuid","value":"dbe03cf0-c04b-458c-9b68-16af9faaa9ea"},{"key":"order_uuid","value":"e43a1dac-6a3b-40ff-88cb-296ef253c344"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":":status","value":200},{"key":"date","value":"Tue, 02 Jun 2026 13:04:13 GMT"},{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"ratelimit-reset","value":"48"},{"key":"x-ratelimit-remaining-minute","value":"299"},{"key":"ratelimit-limit","value":"300"},{"key":"x-ratelimit-limit-minute","value":"300"},{"key":"ratelimit-remaining","value":"299"},{"key":"server","value":"cloudflare"},{"key":"vary","value":"Accept-Encoding"},{"key":"x-powered-by","value":"PHP/8.2.31"},{"key":"cache-control","value":"no-cache, private"},{"key":"x-ratelimit-limit","value":"60"},{"key":"x-ratelimit-remaining","value":"59"},{"key":"access-control-allow-origin","value":"*"},{"key":"x-frame-options","value":"SAMEORIGIN"},{"key":"x-xss-protection","value":"1; mode=block"},{"key":"x-content-type-options","value":"nosniff"},{"key":"content-encoding","value":"gzip"},{"key":"x-kong-upstream-latency","value":"1112"},{"key":"x-kong-proxy-latency","value":"3"},{"key":"via","value":"1.1 kong/3.9.1"},{"key":"x-kong-request-id","value":"9771364eb10892350cd59d33b696df33"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"nel","value":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}"},{"key":"report-to","value":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=OoLxjchW%2F3qXCK%2FhYJmY6tLtWS4Sea2e0tnnL6htY4fWV1wEbBd6f2O6szshWgiui%2FpxGEYzPLU8sdyZKlMZXvtdhzRUehJOM05%2FZInxpio6v03e4NaHDvacUHDv6P9%2BLiQfe%2B8QwVdQ9Aw98zyAQbO5\"}]}"},{"key":"cf-ray","value":"a056a99cf987b559-GRU"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"id\": 162422,\n        \"uuid\": \"e43a1dac-6a3b-40ff-88cb-296ef253c344\",\n        \"subtotal\": 169.6,\n        \"discount\": 0,\n        \"delivery_cost\": 0,\n        \"total\": 169.6,\n        \"invoice_allowed\": [\n            55\n        ],\n        \"delivery_status\": \"searching_courier\",\n        \"estimated_delivery_at\": \"2027-01-05 02:59:59\",\n        \"pickup_code\": null,\n        \"customer\": {\n            \"name\": \"Jonathan Sauer\",\n            \"document\": \"51423502868\"\n        },\n        \"delivery_address\": {\n            \"street_name\": \"R. Marechal José Bernardino Bormann\",\n            \"address_number\": \"101\",\n            \"complement\": \"AP 01\",\n            \"postal_code\": \"80730-350\",\n            \"neighborhood_name\": \"Bigorrilho\",\n            \"city_name\": \"Curitiba\",\n            \"province_code\": \"PR\",\n            \"country_code\": \"BR\"\n        },\n        \"invoice_address\": {\n            \"street_name\": \"R. Marechal José Bernardino Bormann\",\n            \"address_number\": \"101\",\n            \"complement\": \"AP 01\",\n            \"postal_code\": \"80730-350\",\n            \"neighborhood_name\": \"Bigorrilho\",\n            \"city_name\": \"Curitiba\",\n            \"province_code\": \"PR\",\n            \"country_code\": \"BR\"\n        },\n        \"carrier\": {\n            \"name\": null,\n            \"document\": null\n        },\n        \"courier\": {\n            \"name\": \"JOÃO ENTREGADOR\",\n            \"document\": \"+5581999999999\",\n            \"document_type\": \"phone\"\n        },\n        \"items\": [\n            {\n                \"uuid\": \"f3c763fa-0b9c-4c25-a90a-cc6b1a540d0c\",\n                \"quantity\": 1,\n                \"unit_price\": 29.9,\n                \"total\": 29.9,\n                \"ean\": \"7899598360602\",\n                \"product\": \"Teste auto\"\n            },\n            {\n                \"uuid\": \"d9d68530-e6ac-4cd4-bc76-895739891980\",\n                \"quantity\": 2,\n                \"unit_price\": 49.9,\n                \"total\": 99.8,\n                \"ean\": \"7892270821064\",\n                \"product\": \"Produto\"\n            },\n            {\n                \"uuid\": \"0e9a2c01-402b-4b33-94c6-0236a0819225\",\n                \"quantity\": 1,\n                \"unit_price\": 39.9,\n                \"total\": 39.9,\n                \"ean\": \"7891234995261\",\n                \"product\": \"Produto\"\n            }\n        ]\n    }\n}"}],"_postman_id":"8b997ef8-e0ce-4b2f-ac17-628322e3e8d7"},{"name":"Cancelamento do Pedido","id":"be9ee595-9edc-4a3a-91b5-eafdea8e51a7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/cancel-accepted","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p>Permite que o hub desista de um pedido já aceito <strong>antes da coleta</strong>. O pedido é redirecionado dentro da rede Hubii; esta ação não cancela automaticamente o pedido para o cliente final.</p>\n<h2 id=\"quando-chamar\">Quando chamar</h2>\n<ul>\n<li>Quando o hub não consegue atender um pedido que já havia aceitado.</li>\n<li>Apenas antes da coleta pelo entregador/transportadora.</li>\n<li>Quando este cenário fizer parte do escopo de homologação do parceiro.</li>\n</ul>\n<h2 id=\"path-params\">Path params</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>hub_uuid</code></td>\n<td>UUID do hub</td>\n</tr>\n<tr>\n<td><code>order_uuid</code></td>\n<td>UUID do pedido</td>\n</tr>\n</tbody>\n</table>\n</div><p>Esta rota não possui body.</p>\n<h2 id=\"exemplo-curl\">Exemplo cURL</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s -X POST \"$BASE_URL/hubs/$HUB_UUID/orders/$ORDER_UUID/cancel-accepted\" \\\n  -H \"Accept: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\"\n</code></pre>\n<h2 id=\"idempotência\">Idempotência</h2>\n<p>Ação de negócio sensível. Evite retry automático sem consultar o estado do pedido, porque a situação operacional pode mudar entre tentativas. Após a coleta, a operação deve falhar.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>10 req/min por token, no grupo de ações.</p>\n","urlObject":{"path":["hubs",":hub_uuid","orders",":order_uuid","cancel-accepted"],"host":["https://api.staging.hubii.co"],"query":[],"variable":[{"id":"bb5262af-366f-41e9-95dc-d3c77ad8cd14","description":{"content":"<p>UUID do hub retornado em GET /hubs</p>\n","type":"text/plain"},"type":"any","value":"","key":"hub_uuid"},{"id":"c0d9df62-ad6d-46d9-bb8f-fa5117127c77","description":{"content":"<p>UUID do pedido</p>\n","type":"text/plain"},"type":"any","value":"","key":"order_uuid"}]}},"response":[],"_postman_id":"be9ee595-9edc-4a3a-91b5-eafdea8e51a7"}],"id":"5ed24ac5-4e83-461e-a6b9-4f36d18476b3","_postman_id":"5ed24ac5-4e83-461e-a6b9-4f36d18476b3","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":true,"source":{"_postman_id":"7e207411-7624-4909-8d24-35ec0605eb45","id":"7e207411-7624-4909-8d24-35ec0605eb45","name":"Hubii API","type":"collection"}}},{"name":"05 — Faturamento e expedição","item":[{"name":"Enviar nota fiscal para o pedido","id":"5faecefb-0073-464d-932a-895056ba9198","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"POST","header":[{"key":"Accept","value":"application/json","type":"text"}],"body":{"mode":"formdata","formdata":[{"key":"invoice_file","type":"file","value":null}]},"url":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/invoice","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p>Envia o XML da NF-e de um pedido aceito e importado no ERP.</p>\n<h2 id=\"pré-requisitos\">Pré-requisitos</h2>\n<ul>\n<li>Pedido aceito no Polling 1, via API ou painel.</li>\n<li>Pedido importado no ERP a partir de <code>ORDER_CREATED</code> no Polling 2.</li>\n<li>NF-e emitida com dados compatíveis com os detalhes do pedido.</li>\n</ul>\n<h2 id=\"body-multipartform-data\">Body multipart/form-data</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>invoice_file</code></td>\n<td>file</td>\n<td>Sim</td>\n<td>Arquivo XML da NF-e</td>\n</tr>\n</tbody>\n</table>\n</div><p>Envie apenas XML. PDF não é aceito neste endpoint.</p>\n<h2 id=\"validações-relevantes\">Validações relevantes</h2>\n<ul>\n<li>CEP do destinatário na NF-e deve ser igual ao CEP de <code>invoice_address</code> nos detalhes do pedido.</li>\n<li>CFOP deve ser compatível com <code>invoice_allowed</code>.</li>\n<li>O campo multipart deve se chamar exatamente <code>invoice_file</code>.</li>\n</ul>\n<h2 id=\"exemplo-curl\">Exemplo cURL</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s -X POST \"$BASE_URL/hubs/$HUB_UUID/orders/$ORDER_UUID/invoice\" \\\n  -H \"Accept: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\" \\\n  -F \"invoice_file=@/caminho/nota.xml\"\n</code></pre>\n<h2 id=\"idempotência\">Idempotência</h2>\n<p>Reenvio do mesmo XML é idempotente e seguro em caso de timeout ou falha temporária antes da confirmação.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n","urlObject":{"path":["hubs",":hub_uuid","orders",":order_uuid","invoice"],"host":["https://api.staging.hubii.co"],"query":[],"variable":[{"id":"71997bd6-d469-4c40-bb57-6a4cb909cc78","description":{"content":"<p>UUID do hub retornado em GET /hubs</p>\n","type":"text/plain"},"type":"any","value":"","key":"hub_uuid"},{"id":"4c24076d-3c3e-451b-b8a1-f6bd43f995cf","description":{"content":"<p>UUID do pedido</p>\n","type":"text/plain"},"type":"any","value":"","key":"order_uuid"}]}},"response":[{"id":"6f0604da-e921-443b-b32f-10da1e381075","name":"[200] Enviar nota fiscal para o pedido","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"invoice_file","type":"file","src":[]}]},"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/invoice","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","invoice"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"},{"key":"order_uuid","value":"71402839-ecb5-4ee0-b73a-331e7bef74f5"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"22"},{"key":"RateLimit-Limit","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"8"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"RateLimit-Remaining","value":"8"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:37:39 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"58"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"1261"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"c3d55a45ab449b4958b37255173f7c63"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"success\": true,\n        \"message\": \"Invoice set successfully\"\n    }\n}"},{"id":"0cc038b9-1e25-42d4-b22e-097a47e3110a","name":"[422] Enviar nota fiscal para o pedido","originalRequest":{"method":"POST","header":[],"body":{"mode":"formdata","formdata":[{"key":"invoice_file","type":"file","src":[]}]},"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/invoice","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","invoice"],"variable":[{"key":"hub_uuid","value":"b6f2eefa-da34-4daa-ae2b-98c3bd7b29c2"},{"key":"order_uuid","value":"71402839-ecb5-4ee0-b73a-331e7bef74f5"}]}},"status":"Unprocessable Content","code":422,"_postman_previewlanguage":"json","header":[{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"RateLimit-Reset","value":"21"},{"key":"RateLimit-Limit","value":"10"},{"key":"X-RateLimit-Remaining-Minute","value":"9"},{"key":"X-RateLimit-Limit-Minute","value":"10"},{"key":"RateLimit-Remaining","value":"9"},{"key":"Host","value":"api.staging.hubii.co"},{"key":"X-Powered-By","value":"PHP/8.1.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"Date","value":"Thu, 21 Nov 2024 14:35:40 GMT"},{"key":"X-RateLimit-Limit","value":"60"},{"key":"X-RateLimit-Remaining","value":"59"},{"key":"Access-Control-Allow-Origin","value":"*"},{"key":"Server","value":"kong/3.8.0"},{"key":"X-Kong-Upstream-Latency","value":"258"},{"key":"X-Kong-Proxy-Latency","value":"3"},{"key":"Via","value":"1.1 kong/3.8.0"},{"key":"X-Kong-Request-Id","value":"26954260301cc67ab1c5237a1a2f3d24"}],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"success\": false,\n        \"error\": \"O Cep do comprador da nota fiscal precisa ser a mesma da venda. Cep Nota: 00000000 Cep Venda: 00000001\"\n    }\n}"}],"_postman_id":"5faecefb-0073-464d-932a-895056ba9198"},{"name":"Download etiqueta de despacho de pedido","id":"e6f5b301-9fff-481b-ba8f-7b8ac144b977","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/label","description":"<h2 id=\"objetivo\">Objetivo</h2>\n<p>Retorna uma URL temporária para baixar a etiqueta de envio em PDF.</p>\n<h2 id=\"quando-chamar\">Quando chamar</h2>\n<p>Chame somente após receber <code>SHIPPING_LABEL_AVAILABLE</code> no Polling 2 para o pedido.</p>\n<blockquote>\n<p>A necessidade de etiqueta depende do pedido. Não assuma apenas pelo canal de venda.</p>\n</blockquote>\n<h2 id=\"path-params\">Path params</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Param</th>\n<th>Descrição</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>hub_uuid</code></td>\n<td>UUID do hub</td>\n</tr>\n<tr>\n<td><code>order_uuid</code></td>\n<td>UUID do pedido</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"exemplo-curl\">Exemplo cURL</h2>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-bash\">curl -s \"$BASE_URL/hubs/$HUB_UUID/orders/$ORDER_UUID/label\" \\\n  -H \"Accept: application/json\" \\\n  -H \"apikey: $HUBII_API_KEY\"\n</code></pre>\n<h2 id=\"idempotência\">Idempotência</h2>\n<p><code>GET</code> seguro repetir. A URL é temporária; solicite uma nova URL quando expirar.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n","urlObject":{"path":["hubs",":hub_uuid","orders",":order_uuid","label"],"host":["https://api.staging.hubii.co"],"query":[],"variable":[{"id":"59a06623-3148-4eab-aac0-4dd9a96ac3d9","description":{"content":"<p>UUID do hub retornado em GET /hubs</p>\n","type":"text/plain"},"type":"any","value":"","key":"hub_uuid"},{"id":"3c09d8b3-371c-4e1f-a80c-b1dd0a359e7c","description":{"content":"<p>UUID do pedido</p>\n","type":"text/plain"},"type":"any","value":"","key":"order_uuid"}]}},"response":[{"id":"0554fca7-405f-4102-b984-d1e4e2d89754","name":"Download etiqueta de despacho de pedido","originalRequest":{"method":"GET","header":[],"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/:order_uuid/label","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders",":order_uuid","label"],"variable":[{"key":"hub_uuid","value":"c6a276b6-ad59-498f-83b6-ee12234a513f"},{"key":"order_uuid","value":"f8aabd66-ee42-4e9e-9415-1ff0935610d7"}]}},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":":status","value":200},{"key":"date","value":"Tue, 17 Mar 2026 18:41:32 GMT"},{"key":"Content-Type","value":"application/json","description":"","type":"text"},{"key":"x-ratelimit-remaining-minute","value":"299"},{"key":"x-ratelimit-limit-minute","value":"300"},{"key":"ratelimit-remaining","value":"299"},{"key":"ratelimit-reset","value":"29"},{"key":"ratelimit-limit","value":"300"},{"key":"server","value":"cloudflare"},{"key":"vary","value":"Accept-Encoding"},{"key":"x-powered-by","value":"PHP/8.2.29"},{"key":"cache-control","value":"no-cache, private"},{"key":"x-ratelimit-limit","value":"60"},{"key":"x-ratelimit-remaining","value":"59"},{"key":"access-control-allow-origin","value":"*"},{"key":"x-frame-options","value":"SAMEORIGIN"},{"key":"x-xss-protection","value":"1; mode=block"},{"key":"x-content-type-options","value":"nosniff"},{"key":"content-encoding","value":"gzip"},{"key":"x-kong-upstream-latency","value":"1034"},{"key":"x-kong-proxy-latency","value":"3"},{"key":"via","value":"1.1 kong/3.9.1"},{"key":"x-kong-request-id","value":"ac03a46cadc78b492b0a6e6824cf4256"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"nel","value":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}"},{"key":"report-to","value":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=T70xSrp7pP4Y7w%2FH0wTkIVjUNoRYDx3zQsZ1sVXmlPU2%2BcNS6tidu5whD%2FcFLUvGw3fvFewho9POIzCSBHWivuhuDk5xUwO%2FSX6b5fvuluHGnxgSpyNEe0P72UUKqc4%3D\"}]}"},{"key":"cf-ray","value":"9dde21dbfd0ae6c8-GIG"}],"cookie":[],"responseTime":null,"body":"{\n    \"url\": \"https://etiquetas-hubii.s3.amazonaws.com/precode-0000-000000.pdf?X-Amz-Expires=300&X-Amz-Signature=REDACTED\"\n}"}],"_postman_id":"e6f5b301-9fff-481b-ba8f-7b8ac144b977"}],"id":"c723d121-037a-48b8-b8d0-e0090ceee44a","_postman_id":"c723d121-037a-48b8-b8d0-e0090ceee44a","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":true,"source":{"_postman_id":"7e207411-7624-4909-8d24-35ec0605eb45","id":"7e207411-7624-4909-8d24-35ec0605eb45","name":"Hubii API","type":"collection"}}},{"name":"[Descontinuado]","item":[{"name":"[Descontinuado] Listagem de notificações","id":"4b9f518f-9b54-4e8b-b191-73208aaba8a3","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/notifications","description":"<h2 id=\"descontinuado--não-usar-em-novas-integrações\">DESCONTINUADO — não usar em novas integrações</h2>\n<p>Endpoint legado de listagem de notificações, <strong>sem paginação</strong>. Mantido apenas por compatibilidade com integrações antigas. Novas integrações devem usar:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">GET /v2/notifications\n  ↓ data[]\nPOST /notifications/ack\n</code></pre>\n<h2 id=\"por-que-foi-descontinuado\">Por que foi descontinuado</h2>\n<ul>\n<li>A listagem sem paginação não escala para hubs com alto volume de eventos.</li>\n<li><code>GET /v2/notifications</code> retorna o mesmo conteúdo em <code>data[]</code>, com <code>page</code>, <code>limit</code>, <code>total</code> e <code>last_page</code>.</li>\n<li>A API sinaliza depreciação com <code>X-API-Deprecated: true</code> e <code>X-API-Replacement: /v2/notifications</code>.</li>\n</ul>\n<h2 id=\"diferenças-em-relação-à-v2\">Diferenças em relação à v2</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Aspecto</th>\n<th><code>GET /notifications</code> (legado)</th>\n<th><code>GET /v2/notifications</code></th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>Resposta</td>\n<td>Array direto <code>[...]</code></td>\n<td>Objeto paginado <code>{ data, total, page, last_page, per_page }</code></td>\n</tr>\n<tr>\n<td>Paginação</td>\n<td>Não suportada</td>\n<td><code>page</code> (padrão <code>1</code>) e <code>limit</code> (padrão <code>15</code>, máx. <code>100</code>)</td>\n</tr>\n<tr>\n<td>Filtros</td>\n<td><code>hub_uuids</code>, <code>types</code></td>\n<td><code>hub_uuids</code>, <code>types</code> (mesmos filtros)</td>\n</tr>\n</tbody>\n</table>\n</div><h2 id=\"se-você-já-usa-este-endpoint\">Se você já usa este endpoint</h2>\n<p>Planeje migração para <code>GET /v2/notifications</code>. Enquanto isso, trate a resposta como array e mantenha <code>POST /notifications/ack</code> inalterado.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>5 req/min por token, no grupo de notificações.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n","urlObject":{"path":["notifications"],"host":["https://api.staging.hubii.co"],"query":[{"disabled":true,"description":{"content":"<p>Filtrar por hub</p>\n","type":"text/plain"},"key":"hub_uuids","value":""},{"disabled":true,"description":{"content":"<p>Filtrar por tipo de evento</p>\n","type":"text/plain"},"key":"types","value":"ORDER_CREATED"}],"variable":[]}},"response":[{"id":"bfe074a4-941c-47c0-bdd9-6b745c166180","name":"200 OK — array legado","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/notifications"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"X-API-Deprecated","value":"true"},{"key":"X-API-Replacement","value":"/v2/notifications"},{"key":"Content-Type","value":"application/json; charset=utf-8"}],"cookie":[],"responseTime":null,"body":"[\n    {\n        \"notification_uuid\": \"066d19b9-4aef-4b40-941b-d104ab158cd2\",\n        \"type\": \"ORDER_CREATED\",\n        \"subtype\": null,\n        \"order_uuid\": \"356a4241-456b-49a6-8bdc-93f92ddec7f2\",\n        \"order_id\": \"146167\",\n        \"order_delivery_id\": \"119758\",\n        \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n        \"date\": \"2025-09-03T21:46:59.000Z\"\n    },\n    {\n        \"notification_uuid\": \"c3bc1f55-fe65-49c5-ac89-fcef38827d41\",\n        \"type\": \"ORDER_DELIVERY_UPDATED\",\n        \"subtype\": \"ORDER_DELIVERY_SEARCHING_COURIER\",\n        \"order_uuid\": \"356a4241-456b-49a6-8bdc-93f92ddec7f2\",\n        \"order_id\": \"146167\",\n        \"order_delivery_id\": \"119758\",\n        \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n        \"date\": \"2025-09-03T21:47:29.000Z\"\n    },\n    {\n        \"notification_uuid\": \"636b4abf-2458-4e5e-a285-4184af2ffdfd\",\n        \"type\": \"ORDER_CREATED\",\n        \"subtype\": null,\n        \"order_uuid\": \"c71af0ac-6d96-4d1f-a59f-a651ce2c4eb8\",\n        \"order_id\": \"146199\",\n        \"order_delivery_id\": \"119790\",\n        \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n        \"date\": \"2025-09-04T12:49:40.000Z\"\n    },\n    {\n        \"notification_uuid\": \"09d0613e-50de-4ed0-9383-184a93429275\",\n        \"type\": \"ORDER_DELIVERY_UPDATED\",\n        \"subtype\": \"ORDER_DELIVERY_SEARCHING_COURIER\",\n        \"order_uuid\": \"c71af0ac-6d96-4d1f-a59f-a651ce2c4eb8\",\n        \"order_id\": \"146199\",\n        \"order_delivery_id\": \"119790\",\n        \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n        \"date\": \"2025-09-04T12:49:44.000Z\"\n    },\n    {\n        \"notification_uuid\": \"f8bb9ca5-961c-4bc3-9bf5-2b47452b2f81\",\n        \"type\": \"ORDER_CREATED\",\n        \"subtype\": null,\n        \"order_uuid\": \"571cdfbe-ba9a-4cf2-aaea-45c67b064c88\",\n        \"order_id\": \"146265\",\n        \"order_delivery_id\": \"119856\",\n        \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n        \"date\": \"2025-09-04T16:18:40.000Z\"\n    },\n    {\n        \"notification_uuid\": \"d987097a-a097-49c8-8c57-cf302f3efabd\",\n        \"type\": \"ORDER_DELIVERY_UPDATED\",\n        \"subtype\": \"ORDER_DELIVERY_COURIER_NOT_FOUND\",\n        \"order_uuid\": \"c71af0ac-6d96-4d1f-a59f-a651ce2c4eb8\",\n        \"order_id\": \"146199\",\n        \"order_delivery_id\": \"119790\",\n        \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n        \"date\": \"2025-09-04T12:50:59.000Z\"\n    },\n    {\n        \"notification_uuid\": \"35f09ebf-94e4-440f-902e-f74c1f89670c\",\n        \"type\": \"ORDER_DELIVERY_UPDATED\",\n        \"subtype\": \"ORDER_DELIVERY_SEARCHING_COURIER\",\n        \"order_uuid\": \"571cdfbe-ba9a-4cf2-aaea-45c67b064c88\",\n        \"order_id\": \"146265\",\n        \"order_delivery_id\": \"119856\",\n        \"hub_uuid\": \"a93dd09b-4c47-479a-9dca-9fb8026301a6\",\n        \"date\": \"2025-09-04T16:18:44.000Z\"\n    },\n    {\n        \"notification_uuid\": \"07451006-152c-4406-8ae1-f755bff7bdca\",\n        \"type\": \"ORDER_CREATED\",\n        \"subtype\": null,\n        \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n        \"order_id\": \"146390\",\n        \"order_delivery_id\": \"119981\",\n        \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n        \"date\": \"2025-09-05T18:57:59.000Z\"\n    },\n    {\n        \"notification_uuid\": \"883596c5-dbdd-4720-9178-68b13f428e30\",\n        \"type\": \"ORDER_CREATED\",\n        \"subtype\": null,\n        \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n        \"order_id\": \"146390\",\n        \"order_delivery_id\": \"119981\",\n        \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n        \"date\": \"2025-09-05T19:06:53.000Z\"\n    },\n    {\n        \"notification_uuid\": \"0cdd2ae7-4a0e-4480-b1e9-950141be78dd\",\n        \"type\": \"ORDER_DELIVERY_UPDATED\",\n        \"subtype\": \"ORDER_DELIVERY_SEARCHING_COURIER\",\n        \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n        \"order_id\": \"146390\",\n        \"order_delivery_id\": \"119981\",\n        \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n        \"date\": \"2025-09-05T19:07:35.000Z\"\n    },\n    {\n        \"notification_uuid\": \"95af8726-3833-424d-bb18-0d0c716b4ffa\",\n        \"type\": \"ORDER_DELIVERY_UPDATED\",\n        \"subtype\": \"ORDER_DELIVERY_COURIER_FOUND\",\n        \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n        \"order_id\": \"146390\",\n        \"order_delivery_id\": \"119981\",\n        \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n        \"date\": \"2025-09-05T19:07:51.000Z\"\n    },\n    {\n        \"notification_uuid\": \"1766ae9b-b06d-4486-8c41-37add23fe872\",\n        \"type\": \"ORDER_DELIVERY_UPDATED\",\n        \"subtype\": \"ORDER_DELIVERY_DELIVERING\",\n        \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n        \"order_id\": \"146390\",\n        \"order_delivery_id\": \"119981\",\n        \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n        \"date\": \"2025-09-05T19:08:03.000Z\"\n    },\n    {\n        \"notification_uuid\": \"7d122bff-d184-4a19-bd62-b30e03fee07f\",\n        \"type\": \"ORDER_DELIVERY_UPDATED\",\n        \"subtype\": \"ORDER_DELIVERY_DELIVERED\",\n        \"order_uuid\": \"b3372551-01d4-4de8-9f1b-d3e0c912992f\",\n        \"order_id\": \"146390\",\n        \"order_delivery_id\": \"119981\",\n        \"hub_uuid\": \"dbe03cf0-c04b-458c-9b68-16af9faaa9ea\",\n        \"date\": \"2025-09-05T19:08:11.000Z\"\n    }\n]"}],"_postman_id":"4b9f518f-9b54-4e8b-b191-73208aaba8a3"},{"name":"[Descontinuado] Pedidos esperando faturamento","id":"29938c03-ec78-4efa-9d0e-5f5af8555463","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":false},"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/to-invoice?blocks_shipping=&date_from&accepted_from","description":"<h2 id=\"descontinuado--não-usar-em-novas-integrações\">DESCONTINUADO — não usar em novas integrações</h2>\n<p>Endpoint legado mantido apenas por compatibilidade com integrações antigas. Novas integrações devem usar o Polling 2:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-text\">GET /v2/notifications\n  ↓ ORDER_CREATED\nGET /hubs/{hub_uuid}/orders/{order_uuid}\n</code></pre>\n<h2 id=\"por-que-foi-descontinuado\">Por que foi descontinuado</h2>\n<ul>\n<li>O fluxo atual centraliza pedidos aceitos em notificações.</li>\n<li><code>ORDER_CREATED</code> chega após aceite via API ou painel e deve disparar a importação no ERP.</li>\n<li>Usar esta rota em novas integrações pode duplicar lógica e dificultar idempotência.</li>\n</ul>\n<h2 id=\"se-você-já-usa-este-endpoint\">Se você já usa este endpoint</h2>\n<p>Planeje migração para Polling 2 + <code>ORDER_CREATED</code>. Enquanto isso, mantenha retry e rate limit conforme o grupo de listagem.</p>\n<h2 id=\"rate-limit\">Rate limit</h2>\n<p>60 req/min por token, no grupo de listagem.</p>\n<h2 id=\"tratamento-de-erros\">Tratamento de erros</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Status</th>\n<th>Orientação</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><code>401</code></td>\n<td>Não retentar automaticamente; revisar API Key</td>\n</tr>\n<tr>\n<td><code>403</code></td>\n<td>Verificar se a API Key tem acesso ao hub informado</td>\n</tr>\n<tr>\n<td><code>404</code></td>\n<td>Verificar <code>hub_uuid</code>, <code>order_uuid</code> ou se o recurso ainda está disponível</td>\n</tr>\n<tr>\n<td><code>422</code></td>\n<td>Tratar como erro de regra de negócio ou payload inválido; não fazer retry cego</td>\n</tr>\n<tr>\n<td><code>429</code></td>\n<td>Aplicar backoff exponencial e respeitar os headers de rate limit</td>\n</tr>\n<tr>\n<td><code>5xx</code> / timeout</td>\n<td>Retentar com backoff exponencial e limite de tentativas</td>\n</tr>\n</tbody>\n</table>\n</div><blockquote>\n<p>Em runtime, use os headers <strong><code>X-RateLimit-*</code></strong> como referência operacional. A tabela de rate limits documenta o limite esperado/contratual.</p>\n</blockquote>\n","urlObject":{"path":["hubs",":hub_uuid","orders","to-invoice"],"host":["https://api.staging.hubii.co"],"query":[{"description":{"content":"<p>Filtra os pedidos que precisam de nota fiscal obrigatoriamente para expedição do pedido</p>\n","type":"text/plain"},"key":"blocks_shipping","value":""},{"description":{"content":"<p>Filtra os pedidos pelo datetime que o cliente realizou a compra. Ex: 2026-03-20 09:00:00-03:00</p>\n","type":"text/plain"},"key":"date_from","value":null},{"description":{"content":"<p>Filtra os pedidos pela datetime que o hub aceitou. Ex: 2026-03-20 09:00:00-03:00</p>\n","type":"text/plain"},"key":"accepted_from","value":null}],"variable":[{"id":"df5c4776-a3ef-40af-95c3-296b31b037d1","description":{"content":"<p>UUID do hub retornado em GET /hubs</p>\n","type":"text/plain"},"type":"any","value":"","key":"hub_uuid"}]}},"response":[{"id":"6ab6047b-e281-4996-8842-ca7e23e66fe0","name":"200 OK","originalRequest":{"method":"GET","header":[{"key":"Accept","value":"application/json","type":"text"}],"url":{"raw":"https://api.staging.hubii.co/hubs/:hub_uuid/orders/to-invoice","host":["https://api.staging.hubii.co"],"path":["hubs",":hub_uuid","orders","to-invoice"],"variable":[{"key":"hub_uuid","value":"","description":"UUID único do Hub"}]}},"status":"OK","code":200,"_postman_previewlanguage":"Text","header":[{"key":"Date","value":"Fri, 20 Mar 2026 12:57:23 GMT"},{"key":"Content-Type","value":"application/json"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"ratelimit-remaining","value":"598"},{"key":"ratelimit-reset","value":"37"},{"key":"ratelimit-limit","value":"600"},{"key":"x-ratelimit-remaining-minute","value":"598"},{"key":"x-ratelimit-limit-minute","value":"600"},{"key":"Server","value":"cloudflare"},{"key":"vary","value":"Accept-Encoding"},{"key":"x-powered-by","value":"PHP/8.2.29"},{"key":"Cache-Control","value":"no-cache, private"},{"key":"x-ratelimit-limit","value":"60"},{"key":"x-ratelimit-remaining","value":"58"},{"key":"access-control-allow-origin","value":"*"},{"key":"x-frame-options","value":"SAMEORIGIN"},{"key":"x-xss-protection","value":"1; mode=block"},{"key":"x-content-type-options","value":"nosniff"},{"key":"Content-Encoding","value":"gzip"},{"key":"x-kong-upstream-latency","value":"337"},{"key":"x-kong-proxy-latency","value":"2"},{"key":"via","value":"1.1 kong/3.9.1"},{"key":"x-kong-request-id","value":"0ad8ae2c72e6dc7e478804580623f662"},{"key":"cf-cache-status","value":"DYNAMIC"},{"key":"Nel","value":"{\"report_to\":\"cf-nel\",\"success_fraction\":0.0,\"max_age\":604800}"},{"key":"Report-To","value":"{\"group\":\"cf-nel\",\"max_age\":604800,\"endpoints\":[{\"url\":\"https://a.nel.cloudflare.com/report/v4?s=w3hBXflqPpn%2BzSyjQDftkxMhfmihQZN5A%2F7qTG5kTI%2FiuzwFGwVU3lHUy38ZJx%2Fnd8Kq8Tm6fTtZxKYbJxGZM5r0S95NOyT5bv4p9VE3X01dN3PzmA%3D%3D\"}]}"},{"key":"CF-RAY","value":"9df4e1e04b7581d6-GRU"}],"cookie":[],"responseTime":null,"body":"{\n    \"current_page\": 1,\n    \"data\": [\n        {\n            \"id\": 620969,\n            \"uuid\": \"c8bd105e-9f01-47e8-98e9-6f26cd463dc3\",\n            \"total\": 76.64\n        }\n    ],\n    \"next_page_url\": \"https://api.staging.hubii.co/hubs/orders/to-invoice?per_page=20&page=2\",\n    \"path\": \"https://api.staging.hubii.co/hubs/orders/to-invoice\",\n    \"per_page\": 20,\n    \"prev_page_url\": null,\n    \"to\": 20,\n    \"total\": 1\n}"}],"_postman_id":"29938c03-ec78-4efa-9d0e-5f5af8555463"}],"id":"0f484384-57d2-4290-a3a5-c7641765126c","_postman_id":"0f484384-57d2-4290-a3a5-c7641765126c","description":"","auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]},"isInherited":true,"source":{"_postman_id":"7e207411-7624-4909-8d24-35ec0605eb45","id":"7e207411-7624-4909-8d24-35ec0605eb45","name":"Hubii API","type":"collection"}}}],"auth":{"type":"apikey","apikey":{"basicConfig":[{"key":"key","value":"apikey"},{"key":"value","value":""}]}},"event":[{"listen":"prerequest","script":{"type":"text/javascript","requests":{},"exec":[""],"id":"28706e55-5f61-4349-b463-8ca45b125125"}},{"listen":"test","script":{"type":"text/javascript","requests":{},"exec":[""],"id":"798c75d2-df07-45bf-9f09-3ed499fd0e78"}}],"variable":[{"key":"base_url","value":"https://api.staging.hubii.co","description":"Homologação: https://api.staging.hubii.co | Produção: https://api.hubii.co"},{"key":"apikey","value":"","description":"API Key Hubii usada no header apikey. Nunca preencher com segredo real em arquivo versionado."},{"key":"hub_uuid","value":"","description":"UUID do hub retornado em GET /hubs"},{"key":"hub_uuid_2","value":"","description":"Opcional: segundo hub para exemplos de filtros com múltiplos hubs"},{"key":"order_uuid","value":"","description":"UUID do pedido retornado em to-answer ou notifications"},{"key":"notification_uuid","value":"","description":"UUID da notificação retornada em GET /v2/notifications (campo notification_uuid em data[]); usar em POST /notifications/ack"}]}