{
  "info": {
    "_postman_id": "7d58bce2-b071-4d74-949f-87cb4cc2474c",
    "name": "SYSLED Public API — 18 safe methods",
    "description": "Coleção server-side para os 18 métodos da edição pública public-consultations-v1, commit auditado b49957403d667e1870099ca7506039e7cac66736 (02/10/2026). Essa proveniência não comprova publicação; os exemplos são sintéticos. A coleção não contém credenciais, não executa automaticamente e bloqueia hosts placeholder, HTTP remoto e tokens fora do formato documentado antes de enviar. Desative Automatically follow redirects antes de executar. O token fica no caminho da URL: não compartilhe histórico, console ou relatórios de execução sem sanitização.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "noauth"
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "const baseUrl = pm.variables.replaceIn('{{baseUrl}}');",
          "const token = pm.variables.replaceIn('{{token}}');",
          "const isLocal = /^http:[/][/](localhost|127[.]0[.]0[.]1)(?::[0-9]{1,5})?$/i.test(baseUrl);",
          "const isHttps = /^https:[/][/][a-z0-9](?:[a-z0-9.-]*[a-z0-9])?(?::[0-9]{1,5})?$/i.test(baseUrl);",
          "const placeholder = /SEU_HOST|example[.](com|invalid)(:|$)|[.]invalid(:|$)/i.test(baseUrl);",
          "const port = baseUrl.match(/:([0-9]+)$/);",
          "const invalidPort = port && (Number(port[1]) < 1 || Number(port[1]) > 65535);",
          "if ((!isHttps && !isLocal) || placeholder || invalidPort || !/^[a-f0-9]{64}$/i.test(token)) {",
          "  if (pm.execution && typeof pm.execution.skipRequest === 'function') pm.execution.skipRequest();",
          "  throw new Error('Requisição bloqueada: configure uma origem HTTPS sem caminho/credenciais e um token hexadecimal de 64 caracteres. Use loopback apenas em testes locais.');",
          "}"
        ]
      }
    },
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "exec": [
          "pm.test('Resposta JSON', function () {",
          "  pm.expect(pm.response.headers.get('Content-Type') || '').to.match(/application\\/json/i);",
          "});",
          "pm.test('Envelope SYSLED coerente em sucesso', function () {",
          "  const body = pm.response.json();",
          "  if (pm.response.code >= 200 && pm.response.code < 300) {",
          "    pm.expect(body).to.have.property('ok', true);",
          "    pm.expect(body).to.have.property('method', pm.info.requestName);",
          "    pm.expect(body).to.have.property('result');",
          "  } else {",
          "    pm.expect(body).to.be.an('object');",
          "  }",
          "});"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://SEU_HOST_SYSLED",
      "type": "string"
    },
    {
      "key": "token",
      "value": "",
      "type": "secret"
    }
  ],
  "item": [
    {
      "name": "Mensagens",
      "item": [
        {
          "name": "messages.list",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"conversation_id\": \"22222222-2222-4222-8222-222222222222\",\n  \"limit\": 50\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/messages.list",
            "description": "Lista mensagens recentes de uma conversa. Este corpo inicia a primeira página. Para continuar, adicione before com result.next_cursor sem interpretar ou modificar o cursor; result.hasMore indica continuação. result.total é o tamanho do lote e result.total_count conta todo o histórico. delivered_at e read_at podem ser null. Confirme a revisão 8319cf51 no backend. Pode retornar dados pessoais e URLs de mídia; use escopo exclusivo e não registre o corpo sem necessidade."
          }
        }
      ]
    },
    {
      "name": "Leads",
      "item": [
        {
          "name": "leads.list",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"status\": \"new\",\n  \"page\": 1,\n  \"limit\": 50\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/leads.list",
            "description": "Lista leads. Pode retornar dados pessoais e comerciais; limite retenção e exposição."
          }
        }
      ]
    },
    {
      "name": "Funis",
      "item": [
        {
          "name": "pipelines.list",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/pipelines.list",
            "description": "Lista funis da empresa do token."
          }
        },
        {
          "name": "pipelines.get",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"id\": 10\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/pipelines.get",
            "description": "Obtém um funil por identificador numérico. Verifique result.found."
          }
        },
        {
          "name": "stages.list",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"pipeline_id\": 10\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/stages.list",
            "description": "Lista etapas de um funil pertencente à empresa."
          }
        }
      ]
    },
    {
      "name": "Tarefas",
      "item": [
        {
          "name": "tasks.list",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"owner_type\": \"deal\",\n  \"owner_id\": 201,\n  \"completed\": false,\n  \"page\": 1,\n  \"limit\": 25\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/tasks.list",
            "description": "Lista tarefas; total representa o lote retornado na revisão documentada."
          }
        },
        {
          "name": "tasks.get",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"id\": 401\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/tasks.get",
            "description": "Obtém uma tarefa por identificador numérico. Verifique result.found."
          }
        }
      ]
    },
    {
      "name": "Catálogo",
      "item": [
        {
          "name": "products.list",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"limit\": 24,\n  \"offset\": 0\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/products.list",
            "description": "Lista produtos ativos. Use result.next_cursor como offset numérico até receber null."
          }
        },
        {
          "name": "products.search",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"q\": \"produto\",\n  \"limit\": 24,\n  \"offset\": 0\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/products.search",
            "description": "Busca produtos; usa a mesma função de catálogo de products.list."
          }
        },
        {
          "name": "products.get",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"codigo\": \"DEMO-01\"\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/products.get",
            "description": "Obtém produto por codigo ou sku; codigo tem precedência."
          }
        },
        {
          "name": "products.brands",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/products.brands",
            "description": "Lista marcas no recorte de catálogo da empresa."
          }
        },
        {
          "name": "products.categories",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/products.categories",
            "description": "Lista categorias no recorte de catálogo da empresa."
          }
        }
      ]
    },
    {
      "name": "Shop",
      "item": [
        {
          "name": "shop.banners.list",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"slot\": \"home\"\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/shop.banners.list",
            "description": "Lista banners e configuração de carrossel."
          }
        },
        {
          "name": "shop.frete.config",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/shop.frete.config",
            "description": "Lê opções gerais de entrega."
          }
        },
        {
          "name": "shop.frete.calcular",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"cep\": \"01001000\",\n  \"itens\": [\n    { \"sku\": \"DEMO-01\", \"qtd\": 2 }\n  ]\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/shop.frete.calcular",
            "description": "Calcula opções de frete; não cria pedidos nem altera tarifas. CEP e SKU são demonstrativos."
          }
        },
        {
          "name": "shop.desconto.validar",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"codigo\": \"DEMO10\",\n  \"itens\": [\n    { \"sku\": \"DEMO-01\", \"qtd\": 2 }\n  ],\n  \"frete_cents\": 900,\n  \"cliente\": { \"email\": \"comprador@example.com\" }\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/shop.desconto.validar",
            "description": "Valida cupom e descontos automáticos. O valor final deve ser recalculado no fluxo comercial autorizado."
          }
        },
        {
          "name": "shop.loja.config",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/shop.loja.config",
            "description": "Lê identidade e aparência pública da loja."
          }
        }
      ]
    },
    {
      "name": "Marketing",
      "item": [
        {
          "name": "marketing.funnel",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }, { "key": "Accept", "value": "application/json" }],
            "body": { "mode": "raw", "raw": "{\n  \"from\": \"2026-09-18\",\n  \"to\": \"2026-09-18\",\n  \"pipeline_id\": 1\n}", "options": { "raw": { "language": "json" } } },
            "url": "{{baseUrl}}/api/v1/{{token}}/marketing.funnel",
            "description": "Consulta o funil de marketing em intervalo inclusivo de 1 a 92 dias. Datas e ID são sintéticos."
          }
        }
      ]
    }
  ]
}
