{
  "info": {
    "name": "Kombex API v1",
    "description": "Coleção para testar a API REST Kombex. Após obter o token, copie access_token e refresh_token para as variáveis da coleção.\n\nRotas JWT usam o header X-Kombex-Authorization: Bearer {{access_token}} (recomendado em cPanel; o header Authorization costuma não chegar ao PHP em CGI/FastCGI).",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "base_url", "value": "http://localhost/ferafox/_apps/kombex-api/public" },
    { "key": "api_key", "value": "kbx_demo_api_key_001" },
    { "key": "api_secret", "value": "demo_secret_change_me" },
    { "key": "access_token", "value": "" },
    { "key": "refresh_token", "value": "" },
    { "key": "codigo_solicitacao", "value": "KMBX20260331120000ABC123" },
    { "key": "internal_secret", "value": "altere-este-segredo-interno-kombex" }
  ],
  "item": [
    {
      "name": "Auth",
      "item": [
        {
          "name": "POST Obter token (api_key + api_secret)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"api_key\": \"{{api_key}}\",\n  \"api_secret\": \"{{api_secret}}\"\n}"
            },
            "url": "{{base_url}}/api/v1/auth/token",
            "description": "Resposta: data.access_token e data.refresh_token. Cole nas variáveis da coleção."
          }
        },
        {
          "name": "POST Renovar access (refresh_token)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"refresh_token\": \"{{refresh_token}}\"\n}"
            },
            "url": "{{base_url}}/api/v1/auth/refresh"
          }
        }
      ]
    },
    {
      "name": "Admin (interno)",
      "item": [
        {
          "name": "POST Cadastrar cliente API (clientes_api)",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "X-Kombex-Internal-Secret", "value": "{{internal_secret}}" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cliente_id\": \"MEU_ERP_001\",\n  \"ambiente\": \"desenv\",\n  \"ativo\": \"Sim\"\n}"
            },
            "url": "{{base_url}}/api/v1/admin/clientes-api",
            "description": "Sem Bearer. Header = CLIENTES_API_REGISTER_SECRET ou, se vazio, INTERNAL_STATUS_SECRET. Resposta traz api_secret apenas uma vez."
          }
        },
        {
          "name": "POST Redefinir api_secret (reset-secret)",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "X-Kombex-Internal-Secret", "value": "{{internal_secret}}" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cliente_id\": \"MEU_ERP_001\"\n}"
            },
            "url": "{{base_url}}/api/v1/admin/clientes-api/reset-secret",
            "description": "Informe exatamente um: id, cliente_id ou api_key. api_key não muda. Novo api_secret só nesta resposta. Ambiente da linha deve bater com o endpoint."
          }
        }
      ]
    },
    {
      "name": "Solicitações",
      "item": [
        {
          "name": "POST Criar solicitação",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "X-Kombex-Authorization", "value": "Bearer {{access_token}}" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"termo_aceite\": true,\n  \"origem_nome\": \"Empresa A\",\n  \"origem_documento\": \"12.345.678/0001-90\",\n  \"origem_contato\": \"João\",\n  \"origem_telefone\": \"44999990000\",\n  \"origem_cep\": \"87000000\",\n  \"origem_rua\": \"Rua Um\",\n  \"origem_numero\": \"100\",\n  \"origem_bairro\": \"Centro\",\n  \"origem_cidade\": \"MARINGA\",\n  \"origem_estado\": \"PR\",\n  \"destino_nome\": \"Empresa B\",\n  \"destino_documento\": \"98.765.432/0001-10\",\n  \"destino_contato\": \"Maria\",\n  \"destino_telefone\": \"44988887777\",\n  \"destino_cep\": \"86000000\",\n  \"destino_rua\": \"Rua Dois\",\n  \"destino_numero\": \"200\",\n  \"destino_bairro\": \"Zona 7\",\n  \"destino_cidade\": \"LONDRINA\",\n  \"destino_estado\": \"PR\",\n  \"pagamento_frete\": \"origem\",\n  \"observacao\": \"\",\n  \"itens\": [\n    {\n      \"descricao\": \"SNF\",\n      \"quantidade\": 1,\n      \"peso\": 10,\n      \"valor_nf\": 500,\n      \"nf_doc\": \"NF-001\",\n      \"metro_cubico\": 0,\n      \"dimensoes\": [\n        { \"altura\": 35, \"largura\": 45, \"comprimento\": 55 },\n        { \"altura\": 65, \"largura\": 70, \"comprimento\": 75 }\n      ]\n    }\n  ]\n}"
            },
            "url": "{{base_url}}/api/v1/solicitacoes",
            "description": "Após sucesso, atualize a variável codigo_solicitacao com o valor retornado em data.codigo."
          }
        },
        {
          "name": "GET Listar solicitações",
          "request": {
            "method": "GET",
            "header": [{ "key": "X-Kombex-Authorization", "value": "Bearer {{access_token}}" }],
            "description": "Só status 0 ou 1. Máx. 30 dias; data_inicio/fim dentro da janela. Ver periodo_consulta.",
            "url": {
              "raw": "{{base_url}}/api/v1/solicitacoes?status=0&data_inicio=2026-01-01&data_fim=2026-12-31&page=1&per_page=20",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "solicitacoes"],
              "query": [
                { "key": "status", "value": "0", "description": "opcional" },
                { "key": "data_inicio", "value": "2026-01-01", "description": "opcional YYYY-MM-DD" },
                { "key": "data_fim", "value": "2026-12-31", "description": "opcional" },
                { "key": "page", "value": "1" },
                { "key": "per_page", "value": "20" }
              ]
            }
          }
        },
        {
          "name": "GET Listar (sem filtros)",
          "request": {
            "method": "GET",
            "header": [{ "key": "X-Kombex-Authorization", "value": "Bearer {{access_token}}" }],
            "url": "{{base_url}}/api/v1/solicitacoes",
            "description": "Só status 0 ou 1; últimos 30 dias; periodo_consulta na resposta."
          }
        },
        {
          "name": "GET Consultar por código",
          "request": {
            "method": "GET",
            "header": [{ "key": "X-Kombex-Authorization", "value": "Bearer {{access_token}}" }],
            "url": "{{base_url}}/api/v1/solicitacoes/{{codigo_solicitacao}}"
          }
        },
        {
          "name": "PUT Atualizar status (interno)",
          "request": {
            "method": "PUT",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "X-Kombex-Internal-Secret", "value": "{{internal_secret}}" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": 2\n}"
            },
            "url": "{{base_url}}/api/v1/solicitacoes/{{codigo_solicitacao}}/status",
            "description": "Não usa Bearer. Segredo deve coincidir com INTERNAL_STATUS_SECRET em config/Config.php. Status: 0–4, 9 cancelado."
          }
        },
        {
          "name": "DELETE Cancelar solicitação",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "X-Kombex-Authorization", "value": "Bearer {{access_token}}" }],
            "url": "{{base_url}}/api/v1/solicitacoes/{{codigo_solicitacao}}",
            "description": "Sucesso: data com mensagem, codigo, id, status, data_atualizacao_status (resumo)."
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "item": [
        {
          "name": "POST Cadastrar webhook",
          "request": {
            "method": "POST",
            "header": [
              { "key": "Content-Type", "value": "application/json" },
              { "key": "X-Kombex-Authorization", "value": "Bearer {{access_token}}" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"url\": \"https://seu-sistema.com/webhook/kombex\",\n  \"eventos\": \"status\",\n  \"secret\": \"opcional_hmac\"\n}"
            },
            "url": "{{base_url}}/api/v1/webhooks"
          }
        },
        {
          "name": "GET Listar webhooks",
          "request": {
            "method": "GET",
            "header": [{ "key": "X-Kombex-Authorization", "value": "Bearer {{access_token}}" }],
            "url": "{{base_url}}/api/v1/webhooks"
          }
        }
      ]
    }
  ]
}
