{
  "info": {
    "name": "ADS-Tools Integration API",
    "description": "API de integração para sistemas externos (Chatwood, N8N, Make, Whaticket, etc.)\n\n## Autenticação\n\nTodos os endpoints requerem autenticação via Bearer Token (API Key).\n\nFormato: `Authorization: Bearer ads_live_xxxxxxxxxxxx`\n\n## Scopes Disponíveis\n\n- `full:access` - Acesso total\n- `sync:read`, `sync:write` - Endpoint de sincronização\n- `leads:read`, `leads:write` - Leads\n- `contacts:read`, `contacts:write` - Contatos\n- `tags:read`, `tags:write` - Tags\n- `interactions:read`, `interactions:write` - Interações\n- `conversations:read`, `conversations:write` - Conversas\n\n## Vinculação por Protocolo (Magic Link)\n\nQuando um usuário acessa um Magic Link, ele recebe um protocolo único (ex: `ML-20251030-143052-A8F3D-META`).\nVocê pode enviar este protocolo no campo `protocol` dos endpoints `/sync`, `/leads` ou `/contacts` para vincular dados a um registro existente.\n\n## Formato de Resposta\n\nTodas as respostas seguem o formato:\n```json\n{\n  \"success\": true,\n  \"data\": { ... }\n}\n```\n\nErros:\n```json\n{\n  \"success\": false,\n  \"error\": \"Mensagem de erro\"\n}\n```",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "version": {
      "major": 1,
      "minor": 0,
      "patch": 3
    }
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{apiKey}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "http://localhost:3001/api/v1/integration",
      "type": "string"
    },
    {
      "key": "apiBaseUrl",
      "value": "http://localhost:3001",
      "type": "string"
    },
    {
      "key": "apiKey",
      "value": "ads_live_xxxxxxxxxxxx",
      "type": "string"
    },
    {
      "key": "authToken",
      "value": "",
      "type": "string"
    },
    {
      "key": "clientId",
      "value": "",
      "type": "string"
    },
    {
      "key": "mccId",
      "value": "",
      "type": "string"
    },
    {
      "key": "leadUuid",
      "value": "",
      "type": "string"
    },
    {
      "key": "contactId",
      "value": "",
      "type": "string"
    },
    {
      "key": "conversationId",
      "value": "",
      "type": "string"
    },
    {
      "key": "messageId",
      "value": "",
      "type": "string"
    },
    {
      "key": "tagId",
      "value": "",
      "type": "string"
    },
    {
      "key": "externalId",
      "value": "test_external_001",
      "type": "string"
    },
    {
      "key": "protocol",
      "value": "ML-20251030-143052-A8F3D-META",
      "type": "string"
    }
  ],
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Log do request (debug)",
          "console.log('Request:', pm.request.method, pm.request.url.toString());",
          "",
          "// Adicionar timestamp para requests únicos",
          "pm.variables.set('timestamp', Date.now());"
        ]
      }
    },
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Verificar se resposta é JSON válido",
          "pm.test('Response is JSON', function () {",
          "    pm.response.to.be.json;",
          "});",
          "",
          "// Log da resposta (debug)",
          "console.log('Response:', pm.response.code, pm.response.json());"
        ]
      }
    }
  ],
  "item": [
    {
      "name": "Health",
      "description": "Verificação de saúde da API e informações do integrador.",
      "item": [
        {
          "name": "Health Check",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('API is healthy', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.success).to.eql(true);",
                  "    pm.expect(jsonData.data.status).to.eql('healthy');",
                  "});",
                  "",
                  "pm.test('Has integrator info', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data).to.have.property('integrator');",
                  "    pm.expect(jsonData.data).to.have.property('scopes');",
                  "});",
                  "",
                  "// Mostrar informações no console",
                  "var jsonData = pm.response.json();",
                  "console.log('Integrator:', jsonData.data.integrator);",
                  "console.log('Scopes:', jsonData.data.scopes);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/health",
              "host": ["{{baseUrl}}"],
              "path": ["health"]
            },
            "description": "Verifica se a API está funcionando e retorna informações do integrador autenticado.\n\n**Scopes:** Nenhum específico (apenas autenticação)\n\n**Response:**\n- `status`: Estado da API (healthy)\n- `version`: Versão da API (v1)\n- `integrator`: Slug do integrador\n- `scopes`: Lista de permissões da API Key"
          },
          "response": [
            {
              "name": "Success",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/health",
                  "host": ["{{baseUrl}}"],
                  "path": ["health"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"status\": \"healthy\",\n    \"version\": \"v1\",\n    \"timestamp\": \"2026-02-02T12:00:00.000Z\",\n    \"integrator\": \"chatwood\",\n    \"scopes\": [\"full:access\"]\n  }\n}"
            },
            {
              "name": "Unauthorized",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/health",
                  "host": ["{{baseUrl}}"],
                  "path": ["health"]
                }
              },
              "status": "Unauthorized",
              "code": 401,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": false,\n  \"error\": \"API Key inválida ou não fornecida\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Sync (Recomendado)",
      "description": "Endpoint unificado para sincronização de contato, lead, tags, interações e conversas em uma única requisição.\n\n**Este é o método preferido para integradores!**\n\n- Idempotente (pode ser chamado múltiplas vezes)\n- Cria ou atualiza automaticamente\n- Suporta dados parciais",
      "item": [
        {
          "name": "Sync - Exemplo Básico",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test('Response has success true', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.success).to.eql(true);",
                  "});",
                  "",
                  "pm.test('Response has lead data', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data).to.have.property('lead');",
                  "    pm.expect(jsonData.data.lead).to.have.property('uuid');",
                  "});",
                  "",
                  "// Salvar dados para próximos requests",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.lead) {",
                  "    pm.collectionVariables.set('leadUuid', jsonData.data.lead.uuid);",
                  "    console.log('Lead UUID salvo:', jsonData.data.lead.uuid);",
                  "}",
                  "if (jsonData.data && jsonData.data.contact) {",
                  "    pm.collectionVariables.set('contactId', jsonData.data.contact.id.toString());",
                  "    console.log('Contact ID salvo:', jsonData.data.contact.id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"externalId\": \"chat_conversation_{{timestamp}}\",\n  \"contact\": {\n    \"name\": \"João Silva\",\n    \"email\": \"joao.silva@email.com\",\n    \"phone\": \"+5511999999999\"\n  },\n  \"tags\": [\"interessado\", \"chatwood\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/sync",
              "host": ["{{baseUrl}}"],
              "path": ["sync"]
            },
            "description": "Sincroniza contato e lead com tags simples (apenas nomes).\n\n**Scopes:** `sync:write` ou `full:access`\n\n**Campos do Contact:**\n- `name`, `email`, `phone` - Dados básicos\n- `company`, `jobTitle` - Dados profissionais\n- `cpf`, `cnpj` - Documentos\n- `address`, `city`, `state`, `country`, `zipCode` - Endereço\n- `customFields` - Campos personalizados\n\n**Tags:**\n- Strings simples: `[\"tag1\", \"tag2\"]`\n- Objetos completos com configuração de conversão"
          },
          "response": [
            {
              "name": "Created",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"externalId\": \"chat_conversation_123\",\n  \"contact\": {\n    \"name\": \"João Silva\",\n    \"email\": \"joao.silva@email.com\",\n    \"phone\": \"+5511999999999\"\n  },\n  \"tags\": [\"interessado\", \"chatwood\"]\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/sync",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"lead\": {\n      \"id\": 123,\n      \"uuid\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"externalId\": \"chat_conversation_123\",\n      \"status\": \"open\",\n      \"priority\": \"medium\"\n    },\n    \"contact\": {\n      \"id\": 456,\n      \"name\": \"João Silva\",\n      \"email\": \"joao.silva@email.com\",\n      \"phone\": \"+5511999999999\"\n    },\n    \"tags\": [\n      { \"id\": 1, \"name\": \"interessado\" },\n      { \"id\": 2, \"name\": \"chatwood\" }\n    ],\n    \"created\": true,\n    \"contactCreated\": true\n  }\n}"
            }
          ]
        },
        {
          "name": "Sync - Com Lead Data Completo",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test('Lead has correct status', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data.lead.status).to.eql('in_progress');",
                  "});",
                  "",
                  "// Salvar dados",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.lead) {",
                  "    pm.collectionVariables.set('leadUuid', jsonData.data.lead.uuid);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"externalId\": \"chat_conversation_{{timestamp}}\",\n  \"contact\": {\n    \"name\": \"Maria Santos\",\n    \"email\": \"maria@empresa.com\",\n    \"phone\": \"+5511988887777\",\n    \"company\": \"Empresa LTDA\",\n    \"jobTitle\": \"Gerente Comercial\"\n  },\n  \"lead\": {\n    \"status\": \"in_progress\",\n    \"priority\": \"high\",\n    \"source\": \"chat\",\n    \"estimatedValue\": 5000,\n    \"notes\": \"Cliente interessado no plano enterprise\"\n  },\n  \"tags\": [\"qualificado\", \"enterprise\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/sync",
              "host": ["{{baseUrl}}"],
              "path": ["sync"]
            },
            "description": "Sincroniza com dados completos do lead.\n\n**Status disponíveis:**\n- `open` - Aberto\n- `in_progress` - Em andamento\n- `waiting` - Aguardando\n- `closed_won` - Fechado (ganho)\n- `closed_lost` - Fechado (perdido)\n\n**Prioridades:**\n- `low`, `medium`, `high`, `urgent`\n\n**Sources:**\n- `form`, `magic_link`, `api`, `import`, `manual`, `chat`, `whatsapp`, `phone`, `email`, `social`, `referral`, `other`"
          },
          "response": []
        },
        {
          "name": "Sync - Com Tags de Conversão",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test('Tags created correctly', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data.tags).to.be.an('array');",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"externalId\": \"chat_conversion_{{timestamp}}\",\n  \"contact\": {\n    \"name\": \"Pedro Almeida\",\n    \"email\": \"pedro@startup.io\"\n  },\n  \"tags\": [\n    \"interessado\",\n    {\n      \"name\": \"lead-qualificado\",\n      \"description\": \"Lead qualificado pelo time de vendas\",\n      \"color\": \"#10b981\",\n      \"orderNumber\": 1,\n      \"kanban\": 2,\n      \"eventName\": \"qualified_lead\",\n      \"categoryConversion\": \"LEAD\",\n      \"countingType\": \"ONE_PER_CLICK\",\n      \"isConversion\": true,\n      \"primaryForGoal\": true,\n      \"sendToMarketingPlatform\": true\n    }\n  ]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/sync",
              "host": ["{{baseUrl}}"],
              "path": ["sync"]
            },
            "description": "Sincroniza com tags completas incluindo configuração de conversão para Marketing Platforms.\n\n**Campos de Tag (objeto):**\n- `name` - Nome da tag (obrigatório)\n- `description` - Descrição\n- `color` - Cor em hexadecimal (#RRGGBB)\n- `orderNumber` - Ordem de exibição\n- `kanban` - Coluna do Kanban (1-5)\n- `eventName` - Nome do evento para tracking\n- `categoryConversion` - Categoria (DEFAULT, PURCHASE, SIGNUP, LEAD, etc.)\n- `countingType` - ONE_PER_CLICK ou MANY_PER_CLICK\n- `isConversion` - Se é evento de conversão\n- `primaryForGoal` - Se é objetivo principal\n- `sendToMarketingPlatform` - Enviar para Meta/Google Ads"
          },
          "response": []
        },
        {
          "name": "Sync - Com Interações",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test('Interactions created', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data.interactions).to.be.an('array');",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"externalId\": \"chat_with_interactions_{{timestamp}}\",\n  \"contact\": {\n    \"name\": \"Carlos Souza\",\n    \"email\": \"carlos@empresa.com\",\n    \"phone\": \"+5511977776666\"\n  },\n  \"lead\": {\n    \"status\": \"in_progress\",\n    \"source\": \"whatsapp\"\n  },\n  \"interactions\": [\n    {\n      \"type\": \"NOTE\",\n      \"title\": \"Primeiro contato\",\n      \"description\": \"Cliente entrou em contato pelo WhatsApp solicitando informações\"\n    },\n    {\n      \"type\": \"CALL\",\n      \"title\": \"Ligação de qualificação\",\n      \"description\": \"Ligação realizada para qualificar o lead\",\n      \"metadata\": {\n        \"duration\": 300,\n        \"outcome\": \"qualified\"\n      }\n    }\n  ]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/sync",
              "host": ["{{baseUrl}}"],
              "path": ["sync"]
            },
            "description": "Sincroniza lead com histórico de interações.\n\n**Tipos de Interação:**\n- `NOTE` - Nota manual\n- `CALL` - Ligação registrada\n- `EMAIL` - Email enviado/recebido\n- `MEETING` - Reunião agendada/realizada\n- `COMMENT` - Comentário interno\n- `TASK_CREATED` - Tarefa criada\n- `TASK_COMPLETED` - Tarefa concluída\n- `CUSTOM` - Tipo customizado\n- E outros..."
          },
          "response": []
        },
        {
          "name": "Sync - Com Conversa e Mensagens",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test('Conversation created', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data.conversation).to.be.an('object');",
                  "});",
                  "",
                  "// Salvar conversation ID",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.conversation) {",
                  "    pm.collectionVariables.set('conversationId', jsonData.data.conversation.id);",
                  "    console.log('Conversation ID salvo:', jsonData.data.conversation.id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"externalId\": \"whatsapp_chat_{{timestamp}}\",\n  \"contact\": {\n    \"name\": \"Ana Paula\",\n    \"email\": \"ana@cliente.com\",\n    \"phone\": \"+5511966665555\"\n  },\n  \"lead\": {\n    \"source\": \"whatsapp\"\n  },\n  \"conversation\": {\n    \"channel\": \"WHATSAPP\",\n    \"externalId\": \"wa_thread_{{timestamp}}\",\n    \"subject\": \"Atendimento via WhatsApp\",\n    \"messages\": [\n      {\n        \"direction\": \"INBOUND\",\n        \"content\": \"Olá, gostaria de mais informações sobre o produto\",\n        \"externalId\": \"wa_msg_001\"\n      },\n      {\n        \"direction\": \"OUTBOUND\",\n        \"content\": \"Olá Ana! Claro, posso ajudar. Qual produto você tem interesse?\",\n        \"externalId\": \"wa_msg_002\"\n      }\n    ]\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/sync",
              "host": ["{{baseUrl}}"],
              "path": ["sync"]
            },
            "description": "Sincroniza lead com thread de conversa e mensagens.\n\n**Canais de Conversa:**\n- `WHATSAPP`, `EMAIL`, `CHAT`, `PHONE`, `SMS`\n- `FACEBOOK`, `INSTAGRAM`, `TELEGRAM`\n- `MANUAL`, `API`, `OTHER`\n\n**Direção de Mensagem:**\n- `INBOUND` - Recebida do cliente\n- `OUTBOUND` - Enviada para o cliente\n- `INTERNAL` - Nota interna\n\n**Tipos de Mensagem:**\n- `TEXT`, `IMAGE`, `AUDIO`, `VIDEO`, `FILE`\n- `LOCATION`, `CONTACT`, `TEMPLATE`\n- `INTERACTIVE`, `SYSTEM`, `NOTE`"
          },
          "response": []
        },
        {
          "name": "Sync - Atualizar Existente",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('Lead updated', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data.created).to.eql(false);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"externalId\": \"{{externalId}}\",\n  \"lead\": {\n    \"status\": \"closed_won\",\n    \"estimatedValue\": 7500\n  },\n  \"tags\": [\"cliente\", \"convertido\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/sync",
              "host": ["{{baseUrl}}"],
              "path": ["sync"]
            },
            "description": "Atualiza lead existente pelo externalId.\n\nO endpoint é idempotente - pode ser chamado múltiplas vezes com o mesmo externalId:\n- Se não existir: cria novo\n- Se existir: atualiza dados\n\n**Nota:** Ao atualizar, apenas os campos fornecidos são alterados. Campos não enviados mantêm o valor atual."
          },
          "response": []
        },
        {
          "name": "Sync - Buscar por External ID",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('Has complete data', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data).to.have.property('lead');",
                  "    pm.expect(jsonData.data).to.have.property('contact');",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sync/{{externalId}}",
              "host": ["{{baseUrl}}"],
              "path": ["sync", "{{externalId}}"]
            },
            "description": "Busca dados completos (contato, lead, tags, interações) por externalId.\n\n**Scopes:** `sync:read` ou `full:access`\n\n**Retorna:**\n- `lead` - Dados do lead\n- `contact` - Dados do contato\n- `tags` - Tags associadas\n- `interactions` - Últimas interações\n- `conversations` - Conversas recentes"
          },
          "response": [
            {
              "name": "Found",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/sync/chat_conversation_123",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync", "chat_conversation_123"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"lead\": {\n      \"id\": 123,\n      \"uuid\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"externalId\": \"chat_conversation_123\",\n      \"status\": \"in_progress\",\n      \"priority\": \"high\"\n    },\n    \"contact\": {\n      \"id\": 456,\n      \"name\": \"João Silva\",\n      \"email\": \"joao@email.com\"\n    },\n    \"tags\": [\n      { \"id\": 1, \"name\": \"interessado\" }\n    ],\n    \"interactions\": [],\n    \"conversations\": []\n  }\n}"
            },
            {
              "name": "Not Found",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/sync/inexistente",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync", "inexistente"]
                }
              },
              "status": "Not Found",
              "code": 404,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": false,\n  \"error\": \"Lead com externalId 'inexistente' nao encontrado\"\n}"
            }
          ]
        },
        {
          "name": "Sync - Deletar Lead",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sync/{{externalId}}",
              "host": ["{{baseUrl}}"],
              "path": ["sync", "{{externalId}}"]
            },
            "description": "Deleta o lead pelo externalId.\n\n**Importante:** O contato é mantido! Apenas o lead é removido.\n\n**Scopes:** `sync:write` ou `full:access`"
          },
          "response": []
        },
        {
          "name": "Sync - Com Protocolo (Magic Link)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test('Response has success true', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.success).to.eql(true);",
                  "});",
                  "",
                  "pm.test('Response has protocolLink when linked', function () {",
                  "    var jsonData = pm.response.json();",
                  "    if (jsonData.data && jsonData.data.protocolLink) {",
                  "        pm.expect(jsonData.data.protocolLink.linked).to.eql(true);",
                  "        pm.expect(jsonData.data.protocolLink.protocol).to.be.a('string');",
                  "        pm.expect(jsonData.data.protocolLink.magicLinkCaptureId).to.be.a('string');",
                  "        console.log('Vinculado ao Magic Link:', jsonData.data.protocolLink.magicLinkName);",
                  "    } else {",
                  "        console.log('Protocolo nao encontrado, criado novo lead');",
                  "    }",
                  "});",
                  "",
                  "// Salvar dados",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.lead) {",
                  "    pm.collectionVariables.set('leadUuid', jsonData.data.lead.uuid);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"protocol\": \"{{protocol}}\",\n  \"contact\": {\n    \"name\": \"João Silva\",\n    \"email\": \"joao.silva@email.com\",\n    \"phone\": \"+5511999999999\"\n  },\n  \"lead\": {\n    \"status\": \"in_progress\"\n  },\n  \"conversation\": {\n    \"channel\": \"WHATSAPP\",\n    \"messages\": [\n      {\n        \"direction\": \"INBOUND\",\n        \"content\": \"Olá, meu protocolo é {{protocol}}\"\n      }\n    ]\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/sync",
              "host": ["{{baseUrl}}"],
              "path": ["sync"]
            },
            "description": "Sincroniza dados vinculando a um lead existente via protocolo do Magic Link.\n\n**Comportamento:**\n- Se o protocolo for encontrado: vincula ao lead existente e retorna `protocolLink`\n- Se o protocolo NAO for encontrado e `externalId` fornecido: cria novo lead\n- Se o protocolo NAO for encontrado e SEM `externalId`: retorna erro 400\n\n**Formatos de protocolo aceitos:**\n- FULL: `ML-YYYYMMDD-HHMMSS-XXXXX-PREFIX`\n- DATE_HASH: `ML-YYYYMMDD-XXXXX-PREFIX`\n- SHORT: `ML-XXXXX-PREFIX`\n- TIMESTAMP: `ML-TIMESTAMP-PREFIX`"
          },
          "response": [
            {
              "name": "Linked to existing lead",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"protocol\": \"ML-20251030-143052-A8F3D-META\",\n  \"contact\": {\n    \"name\": \"João Silva\"\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/sync",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"lead\": {\n      \"id\": 123,\n      \"uuid\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"status\": \"in_progress\"\n    },\n    \"contact\": {\n      \"id\": 456,\n      \"name\": \"João Silva\",\n      \"email\": \"joao.silva@email.com\"\n    },\n    \"protocolLink\": {\n      \"linked\": true,\n      \"protocol\": \"ML-20251030-143052-A8F3D-META\",\n      \"magicLinkCaptureId\": \"clx789ghi...\",\n      \"magicLinkId\": 42,\n      \"magicLinkName\": \"Landing Page Produto X\",\n      \"capturedAt\": \"2025-10-30T14:30:52.000Z\",\n      \"source\": \"magic_link\"\n    }\n  }\n}"
            },
            {
              "name": "Protocol not found (fallback to externalId)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"protocol\": \"ML-INVALID-PROTOCOL\",\n  \"externalId\": \"chat_123\",\n  \"contact\": {\n    \"name\": \"Maria Santos\"\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/sync",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"lead\": {\n      \"id\": 789,\n      \"uuid\": \"b2c3d4e5-f6g7-8901-bcde-fg2345678901\",\n      \"externalId\": \"chat_123\"\n    },\n    \"contact\": {\n      \"id\": 101,\n      \"name\": \"Maria Santos\"\n    },\n    \"created\": true,\n    \"contactCreated\": true\n  }\n}"
            },
            {
              "name": "Protocol not found without externalId (Error)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"protocol\": \"ML-INVALID-PROTOCOL\",\n  \"contact\": {\n    \"name\": \"Pedro Almeida\"\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/sync",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync"]
                }
              },
              "status": "Bad Request",
              "code": 400,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": false,\n  \"error\": \"Protocol not found and externalId not provided\",\n  \"code\": \"PROTOCOL_NOT_FOUND\"\n}"
            }
          ]
        },
        {
          "name": "GET Sync by Protocol",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});",
                  "",
                  "pm.test('Response has lead data when found', function () {",
                  "    var jsonData = pm.response.json();",
                  "    if (pm.response.code === 200) {",
                  "        pm.expect(jsonData.data).to.have.property('lead');",
                  "        pm.expect(jsonData.data).to.have.property('magicLink');",
                  "        pm.expect(jsonData.data.magicLink.protocol).to.be.a('string');",
                  "        console.log('Magic Link:', jsonData.data.magicLink.name);",
                  "    }",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/sync/protocol/{{protocol}}",
              "host": ["{{baseUrl}}"],
              "path": ["sync", "protocol", "{{protocol}}"]
            },
            "description": "Busca dados completos de um lead pelo protocolo do Magic Link.\n\n**Retorna:**\n- Dados do contato\n- Dados do lead\n- Tags vinculadas\n- Histórico de interações\n- Informações do Magic Link (id, nome, status da captura)\n\n**Formatos de protocolo aceitos:**\n- FULL: `ML-YYYYMMDD-HHMMSS-XXXXX-PREFIX`\n- DATE_HASH: `ML-YYYYMMDD-XXXXX-PREFIX`\n- SHORT: `ML-XXXXX-PREFIX`\n- TIMESTAMP: `ML-TIMESTAMP-PREFIX`"
          },
          "response": [
            {
              "name": "Success",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/sync/protocol/ML-20251030-143052-A8F3D-META",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync", "protocol", "ML-20251030-143052-A8F3D-META"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"contact\": {\n      \"id\": \"clx123abc...\",\n      \"name\": \"João Silva\",\n      \"email\": \"joao.silva@email.com\",\n      \"phone\": \"+5511999999999\"\n    },\n    \"lead\": {\n      \"id\": \"clx456def...\",\n      \"uuid\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"status\": \"in_progress\",\n      \"priority\": \"medium\"\n    },\n    \"tags\": [\n      { \"id\": 1, \"name\": \"interessado\" }\n    ],\n    \"interactions\": [\n      {\n        \"id\": \"clx789ghi...\",\n        \"type\": \"NOTE\",\n        \"title\": \"Lead capturado via Magic Link\",\n        \"createdAt\": \"2025-10-30T14:30:52.000Z\"\n      }\n    ],\n    \"magicLink\": {\n      \"id\": 42,\n      \"name\": \"Landing Page Produto X\",\n      \"captureId\": \"clx789ghi...\",\n      \"protocol\": \"ML-20251030-143052-A8F3D-META\",\n      \"protocolFormat\": \"FULL\",\n      \"status\": \"PROCESSED\",\n      \"capturedAt\": \"2025-10-30T14:30:52.000Z\",\n      \"platformSource\": \"META\"\n    }\n  }\n}"
            },
            {
              "name": "Not Found",
              "originalRequest": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/sync/protocol/ML-INVALID-PROTOCOL",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync", "protocol", "ML-INVALID-PROTOCOL"]
                }
              },
              "status": "Not Found",
              "code": 404,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": false,\n  \"error\": \"Lead with protocol not found\",\n  \"code\": \"PROTOCOL_NOT_FOUND\"\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Leads",
      "description": "Endpoints individuais para gerenciamento de leads.\n\nPara criar leads, prefira usar o endpoint `/sync` que é mais completo.",
      "item": [
        {
          "name": "Criar/Atualizar Lead",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "// Salvar UUID",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.lead) {",
                  "    pm.collectionVariables.set('leadUuid', jsonData.lead.uuid);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"externalId\": \"lead_api_{{timestamp}}\",\n  \"contact\": {\n    \"name\": \"Novo Lead via API\",\n    \"email\": \"lead@api.com\",\n    \"phone\": \"+5511955554444\"\n  },\n  \"status\": \"open\",\n  \"priority\": \"medium\",\n  \"source\": \"api\",\n  \"notes\": \"Lead criado via API de integração\",\n  \"tags\": [\"api\", \"teste\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads",
              "host": ["{{baseUrl}}"],
              "path": ["leads"]
            },
            "description": "Cria ou atualiza um lead via externalId.\n\n**Scopes:** `leads:write` ou `full:access`\n\n**Response:**\n- `created: true` - Lead foi criado\n- `created: false` - Lead foi atualizado\n- `contactCreated: true` - Contato foi criado junto"
          },
          "response": []
        },
        {
          "name": "Buscar Lead por UUID",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}"]
            },
            "description": "Busca um lead por UUID.\n\n**Scopes:** `leads:read` ou `full:access`\n\nO identificador é detectado automaticamente:\n- Se for UUID válido → busca por UUID\n- Caso contrário → busca por externalId"
          },
          "response": []
        },
        {
          "name": "Buscar Lead por External ID",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/leads/{{externalId}}",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{externalId}}"]
            },
            "description": "Busca um lead por External ID.\n\n**Scopes:** `leads:read` ou `full:access`"
          },
          "response": []
        },
        {
          "name": "Atualizar Status do Lead",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"in_progress\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/status",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "status"]
            },
            "description": "Atualiza apenas o status de um lead.\n\n**Scopes:** `leads:write` ou `full:access`\n\n**Status disponíveis:**\n- `open` - Aberto (novo lead)\n- `in_progress` - Em andamento\n- `waiting` - Aguardando resposta/ação\n- `closed_won` - Fechado (convertido/ganho)\n- `closed_lost` - Fechado (perdido)"
          },
          "response": []
        },
        {
          "name": "Adicionar Tags ao Lead",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});",
                  "",
                  "// Salvar tagId para uso posterior",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.tags && jsonData.tags.length > 0) {",
                  "    pm.collectionVariables.set('tagId', jsonData.tags[0].id.toString());",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"tags\": [\"novo-cliente\", \"premium\", \"vip\"]\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/tags",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "tags"]
            },
            "description": "Adiciona tags a um lead.\n\n**Scopes:** `tags:write` ou `full:access`\n\n**Comportamento:**\n- Tags são criadas automaticamente se não existirem\n- Tags duplicadas são ignoradas\n- Máximo de 50 tags por request"
          },
          "response": []
        },
        {
          "name": "Remover Tag do Lead",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 400 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 400, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "DELETE",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/tags/{{tagId}}",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "tags", "{{tagId}}"]
            },
            "description": "Remove uma tag específica de um lead pelo ID da tag.\n\n**Scopes:** `tags:write` ou `full:access`\n\n**Nota:** A tag em si não é deletada, apenas desvinculada do lead."
          },
          "response": []
        },
        {
          "name": "Lead - Com Protocolo (Magic Link)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test('Response has success true', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.success).to.eql(true);",
                  "});",
                  "",
                  "// Salvar dados",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.lead) {",
                  "    pm.collectionVariables.set('leadUuid', jsonData.data.lead.uuid);",
                  "    console.log('Lead UUID:', jsonData.data.lead.uuid);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"protocol\": \"{{protocol}}\",\n  \"contact\": {\n    \"name\": \"João Silva\",\n    \"phone\": \"+5511999999999\"\n  },\n  \"status\": \"in_progress\",\n  \"priority\": \"high\",\n  \"notes\": \"Veio do WhatsApp com protocolo do Magic Link\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads",
              "host": ["{{baseUrl}}"],
              "path": ["leads"]
            },
            "description": "Cria ou atualiza um lead vinculando a um registro existente via protocolo do Magic Link.\n\n**Comportamento:**\n- Se o protocolo for encontrado: vincula ao lead existente e atualiza dados\n- Se o protocolo NAO for encontrado e `externalId` fornecido: cria novo lead\n- Se o protocolo NAO for encontrado e SEM `externalId`: retorna erro 400"
          },
          "response": [
            {
              "name": "Linked to existing lead",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"protocol\": \"ML-20251030-143052-A8F3D-META\",\n  \"contact\": {\n    \"name\": \"João Silva\",\n    \"phone\": \"+5511999999999\"\n  },\n  \"status\": \"in_progress\"\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/leads",
                  "host": ["{{baseUrl}}"],
                  "path": ["leads"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"lead\": {\n      \"id\": 123,\n      \"uuid\": \"a1b2c3d4-e5f6-7890-abcd-ef1234567890\",\n      \"status\": \"in_progress\",\n      \"priority\": \"high\"\n    },\n    \"contact\": {\n      \"id\": 456,\n      \"name\": \"João Silva\",\n      \"phone\": \"+5511999999999\"\n    },\n    \"created\": false\n  }\n}"
            },
            {
              "name": "Protocol not found (fallback to externalId)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"protocol\": \"ML-NOTFOUND-PROTOCOL\",\n  \"externalId\": \"whatsapp_789\",\n  \"contact\": {\n    \"name\": \"Maria Santos\",\n    \"email\": \"maria@email.com\"\n  },\n  \"status\": \"open\",\n  \"source\": \"whatsapp\"\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/leads",
                  "host": ["{{baseUrl}}"],
                  "path": ["leads"]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"lead\": {\n      \"id\": 789,\n      \"uuid\": \"b2c3d4e5-f6g7-8901-bcde-fg2345678901\",\n      \"externalId\": \"whatsapp_789\",\n      \"status\": \"open\"\n    },\n    \"contact\": {\n      \"id\": 101,\n      \"name\": \"Maria Santos\"\n    },\n    \"created\": true\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Contacts",
      "description": "Endpoints para gerenciamento de contatos.",
      "item": [
        {
          "name": "Criar/Atualizar Contato",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "// Salvar contact ID",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.contact) {",
                  "    pm.collectionVariables.set('contactId', jsonData.contact.id.toString());",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"externalId\": \"contact_{{timestamp}}\",\n  \"name\": \"Novo Contato\",\n  \"email\": \"novo@contato.com\",\n  \"phone\": \"+5511977776666\",\n  \"company\": \"Empresa Nova\",\n  \"jobTitle\": \"Gerente\",\n  \"cpf\": \"12345678901\",\n  \"address\": \"Rua Exemplo, 123\",\n  \"city\": \"São Paulo\",\n  \"state\": \"SP\",\n  \"country\": \"Brasil\",\n  \"zipCode\": \"01234-567\",\n  \"customFields\": {\n    \"origem\": \"chatwood\",\n    \"segmento\": \"tecnologia\"\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/contacts",
              "host": ["{{baseUrl}}"],
              "path": ["contacts"]
            },
            "description": "Cria ou atualiza um contato via externalId.\n\n**Scopes:** `contacts:write` ou `full:access`\n\n**Campos disponíveis:**\n- `name`, `email`, `phone`, `mobilePhone`\n- `cpf`, `cnpj`\n- `company`, `jobTitle`, `website`\n- `address`, `city`, `state`, `country`, `zipCode`\n- `customFields` - Objeto com campos personalizados"
          },
          "response": []
        },
        {
          "name": "Buscar Contato por Email",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/contacts/lookup?email=joao@email.com",
              "host": ["{{baseUrl}}"],
              "path": ["contacts", "lookup"],
              "query": [
                {
                  "key": "email",
                  "value": "joao@email.com"
                }
              ]
            },
            "description": "Busca contato por email.\n\n**Scopes:** `contacts:read` ou `full:access`"
          },
          "response": []
        },
        {
          "name": "Buscar Contato por Telefone",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/contacts/lookup?phone=+5511999999999",
              "host": ["{{baseUrl}}"],
              "path": ["contacts", "lookup"],
              "query": [
                {
                  "key": "phone",
                  "value": "+5511999999999"
                }
              ]
            },
            "description": "Busca contato por telefone.\n\n**Scopes:** `contacts:read` ou `full:access`"
          },
          "response": []
        },
        {
          "name": "Buscar Contato por CPF",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/contacts/lookup?cpf=12345678901",
              "host": ["{{baseUrl}}"],
              "path": ["contacts", "lookup"],
              "query": [
                {
                  "key": "cpf",
                  "value": "12345678901"
                }
              ]
            },
            "description": "Busca contato por CPF.\n\n**Scopes:** `contacts:read` ou `full:access`"
          },
          "response": []
        },
        {
          "name": "Buscar Contato por External ID",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/contacts/lookup?externalId={{externalId}}",
              "host": ["{{baseUrl}}"],
              "path": ["contacts", "lookup"],
              "query": [
                {
                  "key": "externalId",
                  "value": "{{externalId}}"
                }
              ]
            },
            "description": "Busca contato por External ID.\n\n**Scopes:** `contacts:read` ou `full:access`"
          },
          "response": []
        },
        {
          "name": "Buscar Contato por ID",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/contacts/{{contactId}}",
              "host": ["{{baseUrl}}"],
              "path": ["contacts", "{{contactId}}"]
            },
            "description": "Busca contato por ID numérico ou External ID.\n\n**Scopes:** `contacts:read` ou `full:access`\n\nO identificador é detectado automaticamente:\n- Se for numérico → busca por ID\n- Caso contrário → busca por externalId"
          },
          "response": []
        },
        {
          "name": "Contact - Com Protocolo (Magic Link)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "pm.test('Response has success true', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.success).to.eql(true);",
                  "});",
                  "",
                  "// Salvar dados",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.contact) {",
                  "    console.log('Contact ID:', jsonData.data.contact.id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"protocol\": \"{{protocol}}\",\n  \"name\": \"João Silva\",\n  \"email\": \"joao@empresa.com\",\n  \"phone\": \"+5511999999999\",\n  \"company\": \"Empresa ABC\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/contacts",
              "host": ["{{baseUrl}}"],
              "path": ["contacts"]
            },
            "description": "Cria ou atualiza um contato vinculando a um registro existente via protocolo do Magic Link.\n\n**Comportamento:**\n- Se o protocolo for encontrado: vincula ao contato existente e atualiza dados\n- Se o protocolo NAO for encontrado e `externalId` fornecido: cria novo contato\n- Se o protocolo NAO for encontrado e SEM `externalId`: retorna erro 400"
          },
          "response": [
            {
              "name": "Linked to existing contact",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"protocol\": \"ML-20251030-143052-A8F3D-META\",\n  \"name\": \"João Silva\",\n  \"email\": \"joao@empresa.com\",\n  \"phone\": \"+5511999999999\"\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/contacts",
                  "host": ["{{baseUrl}}"],
                  "path": ["contacts"]
                }
              },
              "status": "OK",
              "code": 200,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"contact\": {\n      \"id\": 456,\n      \"name\": \"João Silva\",\n      \"email\": \"joao@empresa.com\",\n      \"phone\": \"+5511999999999\",\n      \"company\": \"Empresa ABC\"\n    },\n    \"created\": false\n  }\n}"
            },
            {
              "name": "Protocol not found (fallback to externalId)",
              "originalRequest": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"protocol\": \"ML-NOTFOUND-PROTOCOL\",\n  \"externalId\": \"whatsapp_contact_789\",\n  \"name\": \"Maria Santos\",\n  \"email\": \"maria@email.com\",\n  \"phone\": \"+5511988888888\"\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/contacts",
                  "host": ["{{baseUrl}}"],
                  "path": ["contacts"]
                }
              },
              "status": "Created",
              "code": 201,
              "_postman_previewlanguage": "json",
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"success\": true,\n  \"data\": {\n    \"contact\": {\n      \"id\": 789,\n      \"externalId\": \"whatsapp_contact_789\",\n      \"name\": \"Maria Santos\",\n      \"email\": \"maria@email.com\"\n    },\n    \"created\": true\n  }\n}"
            }
          ]
        }
      ]
    },
    {
      "name": "Tags",
      "description": "Endpoints para gerenciamento de tags.",
      "item": [
        {
          "name": "Listar Tags",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('Has tags array', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData.data).to.be.an('array');",
                  "});",
                  "",
                  "// Salvar primeira tag para uso posterior",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.length > 0) {",
                  "    pm.collectionVariables.set('tagId', jsonData.data[0].id.toString());",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tags?page=1&limit=50",
              "host": ["{{baseUrl}}"],
              "path": ["tags"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "50"
                },
                {
                  "key": "search",
                  "value": "",
                  "disabled": true
                }
              ]
            },
            "description": "Lista todas as tags do cliente.\n\n**Scopes:** `tags:read` ou `full:access`\n\n**Query params:**\n- `page` - Número da página (default: 1)\n- `limit` - Itens por página (default: 50, max: 100)\n- `search` - Busca por nome"
          },
          "response": []
        },
        {
          "name": "Buscar Tags (com search)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/tags?search=qualificado",
              "host": ["{{baseUrl}}"],
              "path": ["tags"],
              "query": [
                {
                  "key": "search",
                  "value": "qualificado"
                }
              ]
            },
            "description": "Busca tags por nome.\n\n**Scopes:** `tags:read` ou `full:access`"
          },
          "response": []
        },
        {
          "name": "Criar Tag Simples",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "// Salvar tagId",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.tag) {",
                  "    pm.collectionVariables.set('tagId', jsonData.tag.id.toString());",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"nova-tag-api\",\n  \"description\": \"Tag criada via API\",\n  \"color\": \"#6366f1\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/tags",
              "host": ["{{baseUrl}}"],
              "path": ["tags"]
            },
            "description": "Cria uma nova tag básica.\n\n**Scopes:** `tags:write` ou `full:access`\n\n**Comportamento:**\n- Se a tag já existir (mesmo nome), retorna a existente\n- `created: true` indica que foi criada\n- `created: false` indica que já existia"
          },
          "response": []
        },
        {
          "name": "Criar Tag de Conversão",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"compra-realizada\",\n  \"description\": \"Cliente realizou compra\",\n  \"color\": \"#22c55e\",\n  \"orderNumber\": 10,\n  \"kanban\": 5,\n  \"eventName\": \"purchase\",\n  \"categoryConversion\": \"PURCHASE\",\n  \"countingType\": \"MANY_PER_CLICK\",\n  \"isConversion\": true,\n  \"primaryForGoal\": false,\n  \"sendToMarketingPlatform\": true\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/tags",
              "host": ["{{baseUrl}}"],
              "path": ["tags"]
            },
            "description": "Cria uma tag com configuração de conversão completa.\n\n**Scopes:** `tags:write` ou `full:access`\n\n**Categorias de Conversão:**\n- `DEFAULT` - Padrão\n- `PURCHASE` - Compra\n- `SIGNUP` - Cadastro\n- `LEAD` - Lead qualificado\n- `PAGE_VIEW` - Visualização de página\n- `ADD_TO_CART` - Adicionar ao carrinho\n- `BEGIN_CHECKOUT` - Iniciar checkout\n- `SUBSCRIBE` - Assinatura\n- `CONTACT` - Contato\n- `DOWNLOAD` - Download\n- `SUBMIT_FORM` - Envio de formulário\n- `BOOK_APPOINTMENT` - Agendamento\n- `REQUEST_QUOTE` - Solicitação de orçamento\n- `OTHER` - Outro\n\n**Tipo de Contagem:**\n- `ONE_PER_CLICK` - Uma conversão por clique/sessão\n- `MANY_PER_CLICK` - Múltiplas conversões permitidas"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Interactions",
      "description": "Endpoints para gerenciamento de interações de leads.\n\nInterações são registros de eventos no histórico do lead.",
      "item": [
        {
          "name": "Criar Interação - Nota",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"NOTE\",\n  \"title\": \"Contato realizado\",\n  \"description\": \"Cliente demonstrou interesse no produto. Agendar follow-up para próxima semana.\",\n  \"isInternal\": false\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/interactions",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "interactions"]
            },
            "description": "Cria uma nota no histórico do lead.\n\n**Scopes:** `interactions:write` ou `full:access`\n\n**Campos:**\n- `type` - Tipo da interação (obrigatório)\n- `title` - Título/resumo (opcional)\n- `description` - Descrição completa (opcional)\n- `metadata` - Dados extras em JSON (opcional)\n- `isInternal` - Se é nota interna (default: false)"
          },
          "response": []
        },
        {
          "name": "Criar Interação - Ligação",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"CALL\",\n  \"title\": \"Ligação de qualificação\",\n  \"description\": \"Ligação realizada para qualificar o lead\",\n  \"metadata\": {\n    \"duration\": 300,\n    \"outcome\": \"qualified\",\n    \"phoneNumber\": \"+5511999999999\",\n    \"recording_url\": \"https://example.com/recordings/123.mp3\"\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/interactions",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "interactions"]
            },
            "description": "Registra uma ligação no histórico do lead.\n\n**Metadata sugerido para CALL:**\n- `duration` - Duração em segundos\n- `outcome` - Resultado (answered, voicemail, no_answer)\n- `phoneNumber` - Número discado\n- `recording_url` - URL da gravação"
          },
          "response": []
        },
        {
          "name": "Criar Interação - Email",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"EMAIL\",\n  \"title\": \"Email de proposta enviado\",\n  \"description\": \"Proposta comercial enviada conforme solicitado\",\n  \"metadata\": {\n    \"subject\": \"Proposta Comercial - Plano Enterprise\",\n    \"from\": \"vendas@empresa.com\",\n    \"to\": \"cliente@email.com\",\n    \"status\": \"sent\"\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/interactions",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "interactions"]
            },
            "description": "Registra um email no histórico do lead.\n\n**Metadata sugerido para EMAIL:**\n- `subject` - Assunto\n- `from` - Remetente\n- `to` - Destinatário\n- `status` - sent, delivered, opened, clicked, bounced"
          },
          "response": []
        },
        {
          "name": "Criar Interação - Reunião",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"MEETING\",\n  \"title\": \"Reunião de apresentação\",\n  \"description\": \"Demonstração do produto para equipe de TI\",\n  \"metadata\": {\n    \"scheduledAt\": \"2026-02-10T14:00:00Z\",\n    \"duration\": 60,\n    \"location\": \"Google Meet\",\n    \"meetingUrl\": \"https://meet.google.com/abc-defg-hij\",\n    \"attendees\": [\"cliente@email.com\", \"ti@email.com\"]\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/interactions",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "interactions"]
            },
            "description": "Registra uma reunião no histórico do lead.\n\n**Metadata sugerido para MEETING:**\n- `scheduledAt` - Data/hora agendada\n- `duration` - Duração em minutos\n- `location` - Local ou plataforma\n- `meetingUrl` - Link da reunião\n- `attendees` - Lista de participantes"
          },
          "response": []
        },
        {
          "name": "Criar Interação - Comentário Interno",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"COMMENT\",\n  \"title\": \"Alerta\",\n  \"description\": \"Cliente mencionou que está avaliando concorrente X. Priorizar contato.\",\n  \"isInternal\": true\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/interactions",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "interactions"]
            },
            "description": "Cria um comentário interno (não visível ao cliente).\n\n**isInternal: true** indica que é uma nota interna da equipe."
          },
          "response": []
        },
        {
          "name": "Criar Interação - Customizada",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"CUSTOM\",\n  \"title\": \"Evento externo\",\n  \"description\": \"Evento customizado do sistema integrador\",\n  \"metadata\": {\n    \"custom_event_type\": \"form_submitted\",\n    \"form_id\": \"contact-form-123\",\n    \"source\": \"landing-page\"\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/interactions",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "interactions"]
            },
            "description": "Cria uma interação com tipo customizado.\n\nUse CUSTOM para eventos que não se encaixam nos tipos padrão. Os dados específicos vão no campo metadata."
          },
          "response": []
        },
        {
          "name": "Listar Interações do Lead",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('Has data and pagination', function () {",
                  "    var jsonData = pm.response.json();",
                  "    pm.expect(jsonData).to.have.property('data');",
                  "    pm.expect(jsonData).to.have.property('pagination');",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/leads/{{leadUuid}}/interactions?page=1&limit=20",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{leadUuid}}", "interactions"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "20"
                },
                {
                  "key": "types",
                  "value": "NOTE,CALL,EMAIL",
                  "disabled": true
                },
                {
                  "key": "includeInternal",
                  "value": "true",
                  "disabled": true
                },
                {
                  "key": "startDate",
                  "value": "2026-01-01T00:00:00Z",
                  "disabled": true
                },
                {
                  "key": "endDate",
                  "value": "2026-12-31T23:59:59Z",
                  "disabled": true
                }
              ]
            },
            "description": "Lista interações do lead com paginação.\n\n**Scopes:** `interactions:read` ou `full:access`\n\n**Query params:**\n- `page` - Número da página (default: 1)\n- `limit` - Itens por página (default: 20, max: 100)\n- `types` - Filtrar por tipos (separados por vírgula)\n- `includeInternal` - Incluir notas internas (default: false)\n- `startDate` - Data inicial (ISO 8601)\n- `endDate` - Data final (ISO 8601)"
          },
          "response": []
        },
        {
          "name": "Listar Interações (por External ID)",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/leads/{{externalId}}/interactions?page=1&limit=20",
              "host": ["{{baseUrl}}"],
              "path": ["leads", "{{externalId}}", "interactions"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "20"
                }
              ]
            },
            "description": "Lista interações buscando o lead por External ID.\n\nO identificador é detectado automaticamente (UUID ou externalId)."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Conversations",
      "description": "Endpoints para gerenciamento de conversas e mensagens.\n\nConversas são threads de comunicação entre a equipe e o cliente.",
      "item": [
        {
          "name": "Criar Conversa",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 201', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                  "});",
                  "",
                  "// Salvar conversation ID",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.conversation) {",
                  "    pm.collectionVariables.set('conversationId', jsonData.data.conversation.id);",
                  "    console.log('Conversation ID salvo:', jsonData.data.conversation.id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"contactExternalId\": \"{{externalId}}\",\n  \"leadExternalId\": \"{{leadUuid}}\",\n  \"channel\": \"WHATSAPP\",\n  \"externalId\": \"wa_chat_{{timestamp}}\",\n  \"subject\": \"Atendimento via WhatsApp\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/conversations",
              "host": ["{{baseUrl}}"],
              "path": ["conversations"]
            },
            "description": "Cria ou busca uma conversa existente.\n\n**Scopes:** `conversations:write` ou `full:access`\n\n**Campos:**\n- `contactExternalId` - External ID do contato (obrigatório)\n- `leadExternalId` - UUID do lead (opcional)\n- `channel` - Canal da conversa (obrigatório)\n- `externalId` - ID externo para idempotência\n- `subject` - Assunto/título da conversa\n\n**Canais disponíveis:**\n- WHATSAPP, EMAIL, CHAT, PHONE, SMS\n- FACEBOOK, INSTAGRAM, TELEGRAM\n- MANUAL, API, OTHER"
          },
          "response": []
        },
        {
          "name": "Listar Conversas",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "// Salvar primeira conversa",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.length > 0) {",
                  "    pm.collectionVariables.set('conversationId', jsonData.data[0].id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/conversations?page=1&limit=20",
              "host": ["{{baseUrl}}"],
              "path": ["conversations"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "20"
                },
                {
                  "key": "contactExternalId",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "leadExternalId",
                  "value": "",
                  "disabled": true
                },
                {
                  "key": "channel",
                  "value": "WHATSAPP",
                  "disabled": true
                },
                {
                  "key": "status",
                  "value": "ACTIVE",
                  "disabled": true
                }
              ]
            },
            "description": "Lista conversas com filtros.\n\n**Scopes:** `conversations:read` ou `full:access`\n\n**Query params:**\n- `contactExternalId` - Filtrar por contato\n- `leadExternalId` - Filtrar por lead\n- `channel` - Filtrar por canal\n- `status` - Filtrar por status (ACTIVE, WAITING_RESPONSE, RESOLVED, CLOSED)\n- `page`, `limit` - Paginação"
          },
          "response": []
        },
        {
          "name": "Buscar Conversa por ID",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/conversations/{{conversationId}}",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "{{conversationId}}"]
            },
            "description": "Busca uma conversa com suas últimas 20 mensagens.\n\n**Scopes:** `conversations:read` ou `full:access`"
          },
          "response": []
        },
        {
          "name": "Enviar Mensagem - Inbound",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});",
                  "",
                  "// Salvar message ID",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data) {",
                  "    pm.collectionVariables.set('messageId', jsonData.data.id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"direction\": \"INBOUND\",\n  \"type\": \"TEXT\",\n  \"content\": \"Olá, gostaria de mais informações sobre o produto\",\n  \"externalId\": \"wa_msg_inbound_{{timestamp}}\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/conversations/{{conversationId}}/messages",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "{{conversationId}}", "messages"]
            },
            "description": "Adiciona uma mensagem recebida do cliente.\n\n**Scopes:** `conversations:write` ou `full:access`\n\n**direction: INBOUND** = Mensagem do cliente para a equipe"
          },
          "response": []
        },
        {
          "name": "Enviar Mensagem - Outbound",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});",
                  "",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data) {",
                  "    pm.collectionVariables.set('messageId', jsonData.data.id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"direction\": \"OUTBOUND\",\n  \"type\": \"TEXT\",\n  \"content\": \"Olá! Claro, posso ajudar com informações. Qual produto você tem interesse?\",\n  \"externalId\": \"wa_msg_outbound_{{timestamp}}\",\n  \"metadata\": {\n    \"senderName\": \"Atendente\",\n    \"senderEmail\": \"atendente@empresa.com\"\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/conversations/{{conversationId}}/messages",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "{{conversationId}}", "messages"]
            },
            "description": "Adiciona uma mensagem enviada para o cliente.\n\n**direction: OUTBOUND** = Mensagem da equipe para o cliente\n\n**Metadata sugerido:**\n- `senderName` - Nome do remetente\n- `senderEmail` - Email do remetente\n- `templateId` - ID do template usado"
          },
          "response": []
        },
        {
          "name": "Enviar Mensagem - Com Mídia",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"direction\": \"OUTBOUND\",\n  \"type\": \"IMAGE\",\n  \"content\": \"Segue a imagem do produto solicitado\",\n  \"externalId\": \"wa_msg_media_{{timestamp}}\",\n  \"metadata\": {\n    \"mediaUrl\": \"https://example.com/images/product.jpg\",\n    \"mediaType\": \"image/jpeg\",\n    \"fileName\": \"product.jpg\",\n    \"fileSize\": 102400\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/conversations/{{conversationId}}/messages",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "{{conversationId}}", "messages"]
            },
            "description": "Envia mensagem com mídia (imagem, áudio, vídeo, arquivo).\n\n**Tipos de mídia:**\n- `IMAGE` - Imagem\n- `AUDIO` - Áudio\n- `VIDEO` - Vídeo\n- `FILE` - Arquivo/documento\n\n**Metadata sugerido:**\n- `mediaUrl` - URL do arquivo\n- `mediaType` - MIME type\n- `fileName` - Nome do arquivo\n- `fileSize` - Tamanho em bytes"
          },
          "response": []
        },
        {
          "name": "Enviar Mensagem - Nota Interna",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 201', function () {",
                  "    pm.response.to.have.status(201);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"direction\": \"INTERNAL\",\n  \"type\": \"NOTE\",\n  \"content\": \"Cliente está comparando com concorrente. Oferecer desconto se necessário.\",\n  \"metadata\": {\n    \"authorName\": \"Supervisor\",\n    \"priority\": \"high\"\n  }\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/conversations/{{conversationId}}/messages",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "{{conversationId}}", "messages"]
            },
            "description": "Adiciona uma nota interna na conversa.\n\n**direction: INTERNAL** = Nota interna (não visível ao cliente)\n\n**type: NOTE** = Tipo de mensagem interna\n\nNotas internas são úteis para comunicação entre a equipe sobre o atendimento."
          },
          "response": []
        },
        {
          "name": "Listar Mensagens da Conversa",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});",
                  "",
                  "// Salvar primeira mensagem",
                  "var jsonData = pm.response.json();",
                  "if (jsonData.data && jsonData.data.length > 0) {",
                  "    pm.collectionVariables.set('messageId', jsonData.data[0].id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [],
            "url": {
              "raw": "{{baseUrl}}/conversations/{{conversationId}}/messages?page=1&limit=50",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "{{conversationId}}", "messages"],
              "query": [
                {
                  "key": "page",
                  "value": "1"
                },
                {
                  "key": "limit",
                  "value": "50"
                },
                {
                  "key": "direction",
                  "value": "INBOUND",
                  "disabled": true
                }
              ]
            },
            "description": "Lista mensagens de uma conversa com paginação.\n\n**Scopes:** `conversations:read` ou `full:access`\n\n**Query params:**\n- `page` - Número da página (default: 1)\n- `limit` - Itens por página (default: 50, max: 100)\n- `direction` - Filtrar por direção (INBOUND, OUTBOUND, INTERNAL)"
          },
          "response": []
        },
        {
          "name": "Atualizar Status de Mensagem - Delivered",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"delivered\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/conversations/messages/{{messageId}}/status",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "messages", "{{messageId}}", "status"]
            },
            "description": "Atualiza status de entrega para 'delivered' (entregue).\n\n**Scopes:** `conversations:write` ou `full:access`\n\nUse quando receber confirmação de entrega do provedor (WhatsApp, etc.)."
          },
          "response": []
        },
        {
          "name": "Atualizar Status de Mensagem - Read",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"read\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/conversations/messages/{{messageId}}/status",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "messages", "{{messageId}}", "status"]
            },
            "description": "Atualiza status de entrega para 'read' (lido).\n\nUse quando receber confirmação de leitura do provedor."
          },
          "response": []
        },
        {
          "name": "Atualizar Status de Mensagem - Failed",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "pm.test('Status code is 200 or 404', function () {",
                  "    pm.expect(pm.response.code).to.be.oneOf([200, 404]);",
                  "});"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "PATCH",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"status\": \"failed\",\n  \"failureReason\": \"Número de telefone inválido ou bloqueado\"\n}"
            },
            "url": {
              "raw": "{{baseUrl}}/conversations/messages/{{messageId}}/status",
              "host": ["{{baseUrl}}"],
              "path": ["conversations", "messages", "{{messageId}}", "status"]
            },
            "description": "Marca mensagem como falha de envio.\n\n**Campos:**\n- `status: failed` - Indica falha\n- `failureReason` - Motivo da falha (opcional)"
          },
          "response": []
        }
      ]
    },
    {
      "name": "Fluxos de Exemplo",
      "description": "Exemplos de fluxos completos de integração.",
      "item": [
        {
          "name": "Fluxo 1: Novo Chat do WhatsApp",
          "item": [
            {
              "name": "1. Sync - Criar Lead do Chat",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "pm.test('Status code is 200 or 201', function () {",
                      "    pm.expect(pm.response.code).to.be.oneOf([200, 201]);",
                      "});",
                      "",
                      "var jsonData = pm.response.json();",
                      "if (jsonData.data) {",
                      "    pm.collectionVariables.set('leadUuid', jsonData.data.lead.uuid);",
                      "    pm.collectionVariables.set('contactId', jsonData.data.contact.id.toString());",
                      "    pm.collectionVariables.set('externalId', 'wa_chat_flow_' + Date.now());",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"externalId\": \"wa_chat_flow_{{timestamp}}\",\n  \"contact\": {\n    \"name\": \"Cliente WhatsApp\",\n    \"phone\": \"+5511999887766\"\n  },\n  \"lead\": {\n    \"source\": \"whatsapp\",\n    \"status\": \"open\"\n  },\n  \"tags\": [\"whatsapp\", \"novo-chat\"],\n  \"conversation\": {\n    \"channel\": \"WHATSAPP\",\n    \"externalId\": \"wa_thread_flow_{{timestamp}}\",\n    \"messages\": [\n      {\n        \"direction\": \"INBOUND\",\n        \"content\": \"Oi, vi o anúncio e tenho interesse\"\n      }\n    ]\n  }\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/sync",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync"]
                }
              },
              "response": []
            },
            {
              "name": "2. Buscar Lead Criado",
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/sync/wa_chat_flow_{{timestamp}}",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync", "wa_chat_flow_{{timestamp}}"]
                }
              },
              "response": []
            },
            {
              "name": "3. Adicionar Interação",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"type\": \"NOTE\",\n  \"title\": \"Lead qualificado\",\n  \"description\": \"Cliente demonstrou interesse genuíno no produto\"\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/leads/{{leadUuid}}/interactions",
                  "host": ["{{baseUrl}}"],
                  "path": ["leads", "{{leadUuid}}", "interactions"]
                }
              },
              "response": []
            },
            {
              "name": "4. Atualizar Status para Qualificado",
              "request": {
                "method": "PATCH",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"status\": \"in_progress\"\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/leads/{{leadUuid}}/status",
                  "host": ["{{baseUrl}}"],
                  "path": ["leads", "{{leadUuid}}", "status"]
                }
              },
              "response": []
            },
            {
              "name": "5. Adicionar Tag de Conversão",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"tags\": [\"qualificado\"]\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/leads/{{leadUuid}}/tags",
                  "host": ["{{baseUrl}}"],
                  "path": ["leads", "{{leadUuid}}", "tags"]
                }
              },
              "response": []
            }
          ],
          "description": "Fluxo completo para quando um novo chat do WhatsApp é iniciado:\n1. Criar lead com conversa inicial\n2. Verificar dados criados\n3. Adicionar nota de qualificação\n4. Atualizar status\n5. Adicionar tag de conversão"
        },
        {
          "name": "Fluxo 2: Atualização de Status de Venda",
          "item": [
            {
              "name": "1. Buscar Lead Existente",
              "event": [
                {
                  "listen": "test",
                  "script": {
                    "exec": [
                      "var jsonData = pm.response.json();",
                      "if (jsonData.data && jsonData.data.lead) {",
                      "    pm.collectionVariables.set('leadUuid', jsonData.data.lead.uuid);",
                      "}"
                    ],
                    "type": "text/javascript"
                  }
                }
              ],
              "request": {
                "method": "GET",
                "header": [],
                "url": {
                  "raw": "{{baseUrl}}/sync/{{externalId}}",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync", "{{externalId}}"]
                }
              },
              "response": []
            },
            {
              "name": "2. Sync - Marcar como Convertido",
              "request": {
                "method": "POST",
                "header": [
                  {
                    "key": "Content-Type",
                    "value": "application/json"
                  }
                ],
                "body": {
                  "mode": "raw",
                  "raw": "{\n  \"externalId\": \"{{externalId}}\",\n  \"lead\": {\n    \"status\": \"closed_won\",\n    \"estimatedValue\": 5000\n  },\n  \"tags\": [\n    \"cliente\",\n    {\n      \"name\": \"compra-realizada\",\n      \"eventName\": \"purchase\",\n      \"categoryConversion\": \"PURCHASE\",\n      \"isConversion\": true,\n      \"sendToMarketingPlatform\": true\n    }\n  ],\n  \"interactions\": [\n    {\n      \"type\": \"CONVERTED\",\n      \"title\": \"Venda realizada\",\n      \"description\": \"Cliente realizou compra do plano Pro\",\n      \"metadata\": {\n        \"value\": 5000,\n        \"product\": \"Plano Pro\",\n        \"paymentMethod\": \"credit_card\"\n      }\n    }\n  ]\n}"
                },
                "url": {
                  "raw": "{{baseUrl}}/sync",
                  "host": ["{{baseUrl}}"],
                  "path": ["sync"]
                }
              },
              "response": []
            }
          ],
          "description": "Fluxo para quando uma venda é realizada:\n1. Buscar lead existente\n2. Atualizar com status de conversão e tag de compra"
        }
      ]
    },
    {
      "name": "Google Ads",
      "description": "Rotas dedicadas de Google Ads (autenticação via JWT).",
      "item": [
        {
          "name": "Status da Conexão",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-ads/{{clientId}}",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-ads", "{{clientId}}"]
            }
          },
          "response": []
        },
        {
          "name": "Listar Contas",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-ads/{{clientId}}/accounts",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-ads", "{{clientId}}", "accounts"]
            }
          },
          "response": []
        },
        {
          "name": "Selecionar Conta",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              },
              {
    {
      "name": "Google Analytics",
      "description": "Rotas dedicadas de Google Analytics (autenticação via JWT).",
      "item": [
        {
          "name": "Status da Conexão",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-analytics/{{clientId}}",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-analytics", "{{clientId}}"]
            }
          },
          "response": []
        },
        {
          "name": "Listar Propriedades",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-analytics/{{clientId}}/properties",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-analytics", "{{clientId}}", "properties"]
            }
          },
          "response": []
        },
        {
          "name": "Propriedade Selecionada",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-analytics/{{clientId}}/properties/selected",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-analytics", "{{clientId}}", "properties", "selected"]
            }
          },
          "response": []
        },
        {
          "name": "Selecionar Propriedade",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"propertyId\": \"123456789\",\n  \"exclusive\": true\n}"
            },
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-analytics/{{clientId}}/properties/select",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-analytics", "{{clientId}}", "properties", "select"]
            }
          },
          "response": []
        },
        {
          "name": "Sincronizar Propriedades",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-analytics/{{clientId}}/sync",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-analytics", "{{clientId}}", "sync"]
            }
          },
          "response": []
        },
        {
          "name": "Verificar Saúde",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-analytics/{{clientId}}/health",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-analytics", "{{clientId}}", "health"]
            }
          },
          "response": []
        },
        {
          "name": "Desconectar",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"invalidateToken\": false\n}"
            },
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-analytics/{{clientId}}",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-analytics", "{{clientId}}"]
            }
          },
          "response": []
        }
      ]
    }
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"accountId\": \"1234567890\",\n  \"exclusive\": true\n}"
            },
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-ads/{{clientId}}/accounts/select",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-ads", "{{clientId}}", "accounts", "select"]
            }
          },
          "response": []
        },
        {
          "name": "Carregar MCC",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"mccCustomerId\": \"9998887777\",\n  \"limit\": 50\n}"
            },
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-ads/{{clientId}}/mcc/load",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-ads", "{{clientId}}", "mcc", "load"]
            }
          },
          "response": []
        },
        {
          "name": "Informações do MCC",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-ads/{{clientId}}/mcc/{{mccId}}",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-ads", "{{clientId}}", "mcc", "{{mccId}}"]
            }
          },
          "response": []
        },
        {
          "name": "Listar Contas do MCC",
          "request": {
            "method": "GET",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-ads/{{clientId}}/mcc/{{mccId}}/accounts?limit=50",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-ads", "{{clientId}}", "mcc", "{{mccId}}", "accounts"],
              "query": [
                {
                  "key": "limit",
                  "value": "50"
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "Sincronizar Contas",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              }
            ],
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-ads/{{clientId}}/sync",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-ads", "{{clientId}}", "sync"]
            }
          },
          "response": []
        },
        {
          "name": "Desconectar",
          "request": {
            "method": "DELETE",
            "header": [
              {
                "key": "Authorization",
                "value": "Bearer {{authToken}}"
              },
              {
                "key": "Content-Type",
                "value": "application/json"
              }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"invalidateToken\": false\n}"
            },
            "url": {
              "raw": "{{apiBaseUrl}}/api/integrations/google-ads/{{clientId}}",
              "host": ["{{apiBaseUrl}}"],
              "path": ["api", "integrations", "google-ads", "{{clientId}}"]
            }
          },
          "response": []
        }
      ]
    }
  ]
}
