{
 "info": {
  "name": "minik — Admin API v1",
  "description": "Полный REST API администрирования minik. Сначала выполните запрос \"POST /auth/login\" из папки \"Авторизация\" — тест-скрипт на нём сохранит токен в переменную коллекции {{token}}, которую переиспользуют все остальные запросы.",
  "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
 },
 "variable": [
  {
   "key": "base_url",
   "value": "http://localhost:8080",
   "type": "string"
  },
  {
   "key": "token",
   "value": "",
   "type": "string",
   "description": "Заполняется автоматически после POST /auth/login (см. тест-скрипт на этом запросе)."
  }
 ],
 "auth": {
  "type": "bearer",
  "bearer": [
   {
    "key": "token",
    "value": "{{token}}",
    "type": "string"
   }
  ]
 },
 "item": [
  {
   "name": "Авторизация",
   "item": [
    {
     "name": "POST /auth/login",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/auth/login",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "auth",
        "login"
       ]
      },
      "description": "Аутентифицирует пользователя по email/паролю (и TOTP/backup-коду, если у него включена 2FA) и выдаёт JWT на 7 дней.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"email\": \"user@example.com\",\n  \"password\": \"MySecurePass123\",\n  \"mfa_code\": \"482913\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     },
     "event": [
      {
       "listen": "test",
       "script": {
        "type": "text/javascript",
        "exec": [
         "const b = pm.response.json();",
         "if (b.token) { pm.collectionVariables.set('token', b.token); }"
        ]
       }
      }
     ]
    },
    {
     "name": "GET /me",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me"
       ]
      },
      "description": "Возвращает профиль текущего аутентифицированного пользователя вместе с его активным workspace_id."
     }
    },
    {
     "name": "PUT /me/profile",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/profile",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "profile"
       ]
      },
      "description": "Частично обновляет редактируемые пользователем поля своего профиля (имя, локаль, часовой пояс).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Jane Doe\",\n  \"locale\": \"ru\",\n  \"timezone\": \"Europe/Moscow\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /me/permissions",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/permissions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "permissions"
       ]
      },
      "description": "Возвращает роль пользователя в активном workspace и полную эффективную RBAC-матрицу (view/edit/delete/admin по каждой сущности) с учётом персональных override'ов."
     }
    },
    {
     "name": "POST /me/password",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/password",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "password"
       ]
      },
      "description": "Меняет пароль текущего пользователя, предварительно проверив текущий пароль.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"current_password\": \"OldPass123\",\n  \"new_password\": \"NewSecurePass456\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /me/onboarding",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/onboarding",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "onboarding"
       ]
      },
      "description": "Возвращает текущее состояние онбординг-чеклиста: вычисленный на лету прогресс по шагам (домен, SSL, источник, лендинг, оффер, кампания, первый клик, первая конверсия) и флаги welcome/dismissed."
     }
    },
    {
     "name": "POST /me/onboarding/welcome-seen",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/onboarding/welcome-seen",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "onboarding",
        "welcome-seen"
       ]
      },
      "description": "Помечает приветственный модал онбординга как показанный для текущего пользователя."
     }
    },
    {
     "name": "POST /me/onboarding/dismiss",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/onboarding/dismiss",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "onboarding",
        "dismiss"
       ]
      },
      "description": "Скрывает блок чеклиста онбординга на дашборде текущего пользователя."
     }
    },
    {
     "name": "POST /me/onboarding/reset",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/onboarding/reset",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "onboarding",
        "reset"
       ]
      },
      "description": "Сбрасывает флаги welcome_seen и checklist_dismissed, возвращая чеклист онбординга на дашборд."
     }
    },
    {
     "name": "POST /me/2fa/setup",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/2fa/setup",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "2fa",
        "setup"
       ]
      },
      "description": "Генерирует новый TOTP-секрет для текущего пользователя и возвращает его вместе с otpauth:// URI и QR-кодом в виде data:URI (2FA при этом ещё не активируется).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"password\": \"MySecurePass123\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /me/2fa/enable",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/2fa/enable",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "2fa",
        "enable"
       ]
      },
      "description": "Активирует 2FA после подтверждения TOTP-кода, сгенерированного от секрета из /me/2fa/setup, и выдаёт набор backup-кодов.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"482913\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /me/2fa/disable",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/2fa/disable",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "2fa",
        "disable"
       ]
      },
      "description": "Отключает 2FA для текущего пользователя после проверки пароля и текущего TOTP-кода.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"password\": \"MySecurePass123\",\n  \"code\": \"482913\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /me/2fa/backup-codes",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/me/2fa/backup-codes",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "me",
        "2fa",
        "backup-codes"
       ]
      },
      "description": "Перегенерирует набор резервных кодов 2FA текущего пользователя, полностью заменяя старые.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"482913\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /search",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/search?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "search"
       ],
       "query": [
        {
         "key": "q",
         "value": "",
         "description": "(string) поисковая строка; при длине менее 2 символов сразу возвращается пустой массив без запросов к БД",
         "disabled": true
        }
       ]
      },
      "description": "Глобальный поиск по кампаниям, флоу, лендингам, офферам, доменам, источникам трафика и партнёрским сетям текущего workspace для командной палитры."
     }
    }
   ]
  },
  {
   "name": "API-ключи",
   "item": [
    {
     "name": "GET /api-keys",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/api-keys",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "api-keys"
       ]
      },
      "description": "Список API-ключей текущего workspace (без секрета — только id/имя/prefix/scopes)."
     }
    },
    {
     "name": "POST /api-keys",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/api-keys",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "api-keys"
       ]
      },
      "description": "Создаёт новый API-ключ для Click API, привязанный к текущему workspace. Секрет показывается один раз в этом ответе.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"CRM integration\",\n  \"scopes\": [\n    \"write\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /api-keys/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/api-keys/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "api-keys",
        "{id}"
       ]
      },
      "description": "Отзывает (удаляет) API-ключ."
     }
    }
   ]
  },
  {
   "name": "Домены",
   "item": [
    {
     "name": "GET /domains",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains"
       ]
      },
      "description": "Список доменов текущего workspace."
     }
    },
    {
     "name": "POST /domains",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains"
       ]
      },
      "description": "Регистрирует новый домен.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"host\": \"track.example.com\",\n  \"type\": \"tracking\",\n  \"notes\": \"main tracking domain\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /domains/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}"
       ]
      },
      "description": "Обновляет домен.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"host\": \"track.example.com\",\n  \"type\": \"tracking\",\n  \"notes\": \"updated\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /domains/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}"
       ]
      },
      "description": "Удаляет домен."
     }
    },
    {
     "name": "GET /domains/{id}/ssl",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/ssl",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "ssl"
       ]
      },
      "description": "Возвращает текущее состояние SSL-сертификата домена (без приватного ключа) — статус, даты выпуска/истечения, последнюю ошибку."
     }
    },
    {
     "name": "POST /domains/{id}/ssl/issue",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/ssl/issue",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "ssl",
        "issue"
       ]
      },
      "description": "Синхронно выпускает новый SSL-сертификат для домена через ACME (Let's Encrypt) и сохраняет его в БД."
     }
    },
    {
     "name": "POST /domains/{id}/ssl/renew",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/ssl/renew",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "ssl",
        "renew"
       ]
      },
      "description": "Продлевает (переиздаёт) SSL-сертификат домена — на уровне кода полный алиас Issue, оставленный отдельным маршрутом только ради разных подписей в UI."
     }
    },
    {
     "name": "GET /domains/{id}/ssl/download",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/ssl/download",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "ssl",
        "download"
       ]
      },
      "description": "Отдаёт ZIP-архив с файлами сертификата домена (cert.pem, chain.pem, fullchain.pem, key.pem) для подключения к внешнему прокси (Caddy/nginx)."
     }
    },
    {
     "name": "POST /domains/bulk",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/bulk",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "bulk"
       ]
      },
      "description": "Создаёт несколько доменов за один запрос, обрабатывая каждый independently — ошибка по одному хосту не откатывает остальные.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"items\": [\n    {\n      \"host\": \"track1.example.com\",\n      \"type\": \"tracking\",\n      \"notes\": \"\"\n    },\n    {\n      \"host\": \"lp.example.com\",\n      \"type\": \"landing\",\n      \"notes\": \"лендинг-домен\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /domains/bulk-action",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/bulk-action",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "bulk-action"
       ]
      },
      "description": "Выполняет массовое действие (выпуск SSL, продление SSL или удаление) над списком доменов по их ID.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"action\": \"issue_ssl\",\n  \"ids\": [\n    \"3fa85f64-5717-4562-b3fc-2c963f66afa6\",\n    \"7c9e6679-7425-40de-944b-e07fc1f90ae7\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /domains/{id}/cloudflare",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/cloudflare",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "cloudflare"
       ]
      },
      "description": "Возвращает текущее состояние синхронизации домена с Cloudflare (zone_id, proxied) и готовность интеграции."
     }
    },
    {
     "name": "POST /domains/{id}/cloudflare/sync",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/cloudflare/sync",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "cloudflare",
        "sync"
       ]
      },
      "description": "Создаёт или обновляет A-запись в Cloudflare для домена, указывающую на IP трекера, и сохраняет zone_id/proxied в БД.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"zone_id\": \"023e105f4ecef8ad9ca31a8372d0c353\",\n  \"ip\": \"203.0.113.10\",\n  \"proxied\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /domains/{id}/cloudflare/unsync",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/cloudflare/unsync",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "cloudflare",
        "unsync"
       ]
      },
      "description": "Удаляет A-запись домена из Cloudflare и очищает связанные поля синхронизации в БД."
     }
    },
    {
     "name": "POST /domains/{id}/cloudflare/purge",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/cloudflare/purge",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "cloudflare",
        "purge"
       ]
      },
      "description": "Очищает кэш Cloudflare для зоны, к которой привязан домен."
     }
    },
    {
     "name": "POST /domains/{id}/cloudflare/proxy",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/domains/{id}/cloudflare/proxy",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "domains",
        "{id}",
        "cloudflare",
        "proxy"
       ]
      },
      "description": "Включает или выключает Cloudflare-проксирование (orange cloud) для уже синхронизированной A-записи домена.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"proxied\": false,\n  \"ip\": \"203.0.113.10\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Источники трафика",
   "item": [
    {
     "name": "GET /traffic-sources",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/traffic-sources",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "traffic-sources"
       ]
      },
      "description": "Список источников трафика workspace."
     }
    },
    {
     "name": "POST /traffic-sources",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/traffic-sources",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "traffic-sources"
       ]
      },
      "description": "Создаёт источник трафика.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Facebook Ads\",\n  \"postback_url\": \"https://facebook.example/pb\",\n  \"postback_secret\": \"secret123\",\n  \"parameters\": [\n    {\n      \"name\": \"sub1\",\n      \"param\": \"clickid\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /traffic-sources/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/traffic-sources/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "traffic-sources",
        "{id}"
       ]
      },
      "description": "Обновляет источник трафика.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Facebook Ads\",\n  \"postback_url\": \"https://facebook.example/pb\",\n  \"parameters\": []\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /traffic-sources/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/traffic-sources/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "traffic-sources",
        "{id}"
       ]
      },
      "description": "Удаляет источник трафика."
     }
    },
    {
     "name": "POST /traffic-sources/from-template/{key}",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/traffic-sources/from-template/{key}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "traffic-sources",
        "from-template",
        "{key}"
       ]
      },
      "description": "Создаёт новый источник трафика в текущем воркспейсе на основе встроенного шаблона по его ключу, с опциональным переопределением имени/заметок/postback URL.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"My FB Ads\",\n  \"notes\": \"основной рекламный кабинет\",\n  \"postback_url\": \"https://track.example.com/pb\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Партнёрские сети",
   "item": [
    {
     "name": "GET /affiliate-networks",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/affiliate-networks",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "affiliate-networks"
       ]
      },
      "description": "Список партнёрских сетей workspace."
     }
    },
    {
     "name": "POST /affiliate-networks",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/affiliate-networks",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "affiliate-networks"
       ]
      },
      "description": "Создаёт партнёрскую сеть.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"MyAffNet\",\n  \"status_mapping\": {\n    \"1\": \"approved\",\n    \"2\": \"rejected\"\n  },\n  \"default_currency\": \"USD\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /affiliate-networks/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/affiliate-networks/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "affiliate-networks",
        "{id}"
       ]
      },
      "description": "Обновляет партнёрскую сеть.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"MyAffNet\",\n  \"status_mapping\": {\n    \"1\": \"approved\"\n  },\n  \"default_currency\": \"USD\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /affiliate-networks/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/affiliate-networks/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "affiliate-networks",
        "{id}"
       ]
      },
      "description": "Удаляет партнёрскую сеть."
     }
    },
    {
     "name": "POST /affiliate-networks/from-template/{key}",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/affiliate-networks/from-template/{key}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "affiliate-networks",
        "from-template",
        "{key}"
       ]
      },
      "description": "Создаёт новую партнёрскую сеть в текущем воркспейсе на основе встроенного шаблона по его ключу, с опциональным переопределением имени/заметок/postback-шаблона/валюты.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"MyLead RU\",\n  \"notes\": \"\",\n  \"postback_url_template\": \"https://track.example.com/postback?clickid={subid}&status={status}\",\n  \"default_currency\": \"EUR\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Лендинги",
   "item": [
    {
     "name": "GET /landings",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings"
       ],
       "query": [
        {
         "key": "archived",
         "value": "",
         "description": "(string (\"true\")) если \"true\" — включает архивные лендинги; по умолчанию только активные",
         "disabled": true
        }
       ]
      },
      "description": "Список лендингов workspace."
     }
    },
    {
     "name": "POST /landings",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings"
       ]
      },
      "description": "Создаёт лендинг.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Main LP\",\n  \"type\": \"redirect\",\n  \"url\": \"https://cdn.example.com/lp/index.html\",\n  \"tags\": [\n    \"weight-loss\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /landings/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}"
       ]
      },
      "description": "Обновляет лендинг.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Main LP v2\",\n  \"type\": \"redirect\",\n  \"url\": \"https://cdn.example.com/lp/v2.html\",\n  \"tags\": []\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /landings/{id}/archive",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/archive",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "archive"
       ]
      },
      "description": "Архивирует лендинг (мягкое удаление — ставит archived_at)."
     }
    },
    {
     "name": "GET /landings/{id}/files",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/files",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "files"
       ]
      },
      "description": "Возвращает список всех файлов лендинга (метаданные без содержимого), отсортированный по пути по возрастанию."
     }
    },
    {
     "name": "GET /landings/{id}/file",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/file?path=",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "file"
       ],
       "query": [
        {
         "key": "path",
         "value": "",
         "description": "(string) Путь к запрашиваемому файлу внутри лендинга",
         "disabled": false
        }
       ]
      },
      "description": "Возвращает содержимое одного файла лендинга по указанному пути: JSON с полем content для текстовых файлов или сырые байты с заголовком Content-Type для бинарных."
     }
    },
    {
     "name": "PUT /landings/{id}/file",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/file",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "file"
       ]
      },
      "description": "Создаёт новый текстовый файл лендинга или перезаписывает существующий по указанному пути (инлайн-редактор).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"path\": \"index.html\",\n  \"mime\": \"text/html; charset=utf-8\",\n  \"content\": \"<html><body>Hello</body></html>\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /landings/{id}/file",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/file?path=",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "file"
       ],
       "query": [
        {
         "key": "path",
         "value": "",
         "description": "(string) Путь к удаляемому файлу; нормализуется cleanPath (отклоняет попытки \"..\")",
         "disabled": false
        }
       ]
      },
      "description": "Удаляет файл лендинга по указанному пути из БД и с диска."
     }
    },
    {
     "name": "POST /landings/{id}/upload-zip",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/upload-zip",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "upload-zip"
       ]
      },
      "description": "Загружает ZIP-архив (multipart/form-data) и распаковывает его файлы в файловый набор лендинга, автоматически подбирая local_index по эвристике.",
      "body": {
       "mode": "raw",
       "raw": "\"multipart/form-data; поле \\\"file\\\": landing.zip (бинарные данные ZIP-архива)\"",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /landings/{id}/file/versions",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/file/versions?path=",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "file",
        "versions"
       ],
       "query": [
        {
         "key": "path",
         "value": "",
         "description": "(string) Путь файла, для которого запрашивается история версий",
         "disabled": false
        }
       ]
      },
      "description": "Возвращает до 10 последних версий указанного файла лендинга (метаданные без содержимого), от новых к старым."
     }
    },
    {
     "name": "GET /landings/{id}/file/versions/{vid}",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/file/versions/{vid}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "file",
        "versions",
        "{vid}"
       ]
      },
      "description": "Возвращает полное содержимое конкретной исторической версии файла лендинга по её id: JSON с content для текстовых версий или сырые байты для бинарных."
     }
    },
    {
     "name": "POST /landings/{id}/file/versions/{vid}/restore",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/landings/{id}/file/versions/{vid}/restore",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "landings",
        "{id}",
        "file",
        "versions",
        "{vid}",
        "restore"
       ]
      },
      "description": "Восстанавливает текущий файл лендинга из указанной исторической версии, перезаписывая его текущее содержимое."
     }
    }
   ]
  },
  {
   "name": "Офферы",
   "item": [
    {
     "name": "GET /offers",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/offers?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "offers"
       ],
       "query": [
        {
         "key": "archived",
         "value": "",
         "description": "(string (\"true\")) включить архивные",
         "disabled": true
        }
       ]
      },
      "description": "Список офферов workspace."
     }
    },
    {
     "name": "POST /offers",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/offers",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "offers"
       ]
      },
      "description": "Создаёт оффер.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Weight Loss US\",\n  \"url\": \"https://net.example/click?aff=123\",\n  \"payout\": 25.5,\n  \"currency\": \"USD\",\n  \"country\": \"US\",\n  \"cap_day\": 500\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /offers/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/offers/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "offers",
        "{id}"
       ]
      },
      "description": "Обновляет оффер.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Weight Loss US\",\n  \"payout\": 27,\n  \"currency\": \"USD\",\n  \"country\": \"US\",\n  \"cap_day\": 600\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /offers/{id}/archive",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/offers/{id}/archive",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "offers",
        "{id}",
        "archive"
       ]
      },
      "description": "Архивирует оффер (мягкое удаление)."
     }
    },
    {
     "name": "GET /offers/cap-state",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/offers/cap-state",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "offers",
        "cap-state"
       ]
      },
      "description": "Возвращает текущее использование капов (часовой/дневной/общий) по всем неархивированным офферам рабочего пространства одним запросом."
     }
    },
    {
     "name": "GET /offers/{id}/cap-state",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/offers/{id}/cap-state",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "offers",
        "{id}",
        "cap-state"
       ]
      },
      "description": "Возвращает текущее использование капов для одного конкретного оффера — та же структура данных, что и в общей ручке cap-state."
     }
    }
   ]
  },
  {
   "name": "Кампании и флоу",
   "item": [
    {
     "name": "GET /campaigns",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns"
       ],
       "query": [
        {
         "key": "archived",
         "value": "",
         "description": "(string (\"true\")) включить архивные (state='archived'); по умолчанию исключены",
         "disabled": true
        }
       ]
      },
      "description": "Список кампаний workspace с готовыми tracking_url для каждой."
     }
    },
    {
     "name": "POST /campaigns",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns"
       ]
      },
      "description": "Создаёт кампанию (без флоу — флоу создаются отдельными вызовами).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"US FB traffic\",\n  \"domain_id\": \"d1000000-0000-4000-8000-000000000001\",\n  \"traffic_source_id\": \"s1000000-0000-4000-8000-000000000001\",\n  \"cost_mode\": \"cpc\",\n  \"cost_value\": 0.1,\n  \"currency\": \"USD\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /campaigns/{id}",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}"
       ]
      },
      "description": "Возвращает кампанию целиком, включая её флоу."
     }
    },
    {
     "name": "PUT /campaigns/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}"
       ]
      },
      "description": "Обновляет кампанию (флоу этим вызовом не меняются).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"alias\": \"x7f2a1\",\n  \"name\": \"US FB traffic v2\",\n  \"rotation_mode\": \"by_weight\",\n  \"uniqueness_method\": \"cookie\",\n  \"uniqueness_ttl_hours\": 24,\n  \"cost_mode\": \"cpc\",\n  \"cost_value\": 0.12,\n  \"currency\": \"USD\",\n  \"tags\": [],\n  \"state\": \"active\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /campaigns/{id}/archive",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/archive",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "archive"
       ]
      },
      "description": "Архивирует кампанию (state='archived', archived_at=now())."
     }
    },
    {
     "name": "GET /flows",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/flows",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "flows"
       ]
      },
      "description": "Лёгкий список всех флоу workspace (id, name, campaign_id) — для резолва flow_id в отчётах, а не для редактирования."
     }
    },
    {
     "name": "GET /campaigns/{id}/flows",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/flows",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "flows"
       ]
      },
      "description": "Полный список флоу конкретной кампании."
     }
    },
    {
     "name": "POST /campaigns/{id}/flows",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/flows",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "flows"
       ]
      },
      "description": "Создаёт флоу внутри кампании.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Default\",\n  \"scheme\": \"landings_offers\",\n  \"redirect_type\": \"302\",\n  \"weight\": 100,\n  \"landings\": [\n    {\n      \"landing_id\": \"l1000000-0000-4000-8000-000000000001\",\n      \"weight\": 100\n    }\n  ],\n  \"offers\": [\n    {\n      \"offer_id\": \"o1000000-0000-4000-8000-000000000001\",\n      \"weight\": 100\n    }\n  ],\n  \"save_traffic\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /campaigns/{id}/flows/{flowId}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/flows/{flowId}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "flows",
        "{flowId}"
       ]
      },
      "description": "Обновляет флоу.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Default\",\n  \"scheme\": \"landings_offers\",\n  \"redirect_type\": \"302\",\n  \"weight\": 100,\n  \"landings\": [\n    {\n      \"landing_id\": \"l1000000-0000-4000-8000-000000000001\",\n      \"weight\": 100\n    }\n  ],\n  \"offers\": [\n    {\n      \"offer_id\": \"o1000000-0000-4000-8000-000000000001\",\n      \"weight\": 100\n    }\n  ],\n  \"save_traffic\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /campaigns/{id}/flows/{flowId}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/flows/{flowId}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "flows",
        "{flowId}"
       ]
      },
      "description": "Удаляет флоу."
     }
    },
    {
     "name": "POST /campaigns/{id}/clone",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/clone",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "clone"
       ]
      },
      "description": "Клонирует кампанию вместе со всеми её флоу под новым алиасом, новая копия создаётся в состоянии \"paused\".",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Facebook UK — copy\",\n  \"alias\": \"fbuk2\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /campaigns/bulk/archive",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/bulk/archive",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "bulk",
        "archive"
       ]
      },
      "description": "Массово переводит указанные кампании в состояние archived и проставляет archived_at.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"ids\": [\n    \"6c9d2b0a-1f3e-4a2b-9c7d-1a2b3c4d5e6f\",\n    \"a1b2c3d4-e5f6-47a8-9b0c-1d2e3f405060\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /campaigns/bulk/unarchive",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/bulk/unarchive",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "bulk",
        "unarchive"
       ]
      },
      "description": "Массово возвращает указанные кампании из архива в состояние paused, сбрасывая archived_at.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"ids\": [\n    \"6c9d2b0a-1f3e-4a2b-9c7d-1a2b3c4d5e6f\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /campaigns/bulk/state",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/bulk/state",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "bulk",
        "state"
       ]
      },
      "description": "Массово меняет операционное состояние (active/paused/draft) у указанных кампаний.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"ids\": [\n    \"6c9d2b0a-1f3e-4a2b-9c7d-1a2b3c4d5e6f\"\n  ],\n  \"state\": \"active\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /campaigns/bulk/tags",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/bulk/tags",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "bulk",
        "tags"
       ]
      },
      "description": "Массово добавляет и/или удаляет теги у указанных кампаний.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"ids\": [\n    \"6c9d2b0a-1f3e-4a2b-9c7d-1a2b3c4d5e6f\"\n  ],\n  \"add\": [\n    \"promo\"\n  ],\n  \"drop\": [\n    \"old-tag\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /campaigns/bulk/group",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/bulk/group",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "bulk",
        "group"
       ]
      },
      "description": "Массово переносит указанные кампании в другую группу (group_name).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"ids\": [\n    \"6c9d2b0a-1f3e-4a2b-9c7d-1a2b3c4d5e6f\"\n  ],\n  \"group\": \"Q3 Push\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /campaigns/{id}/unarchive",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/unarchive",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "unarchive"
       ]
      },
      "description": "Разархивирует одну кампанию, переводя её в состояние paused и сбрасывая archived_at (обратная операция архивации)."
     }
    },
    {
     "name": "GET /campaigns/{id}/export",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/export",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "export"
       ]
      },
      "description": "Экспортирует кампанию вместе со всеми флоу в самодостаточный JSON-бандл для последующего импорта (в т.ч. в другой инстанс)."
     }
    },
    {
     "name": "POST /campaigns/import",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/import",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "import"
       ]
      },
      "description": "Создаёт новую кампанию и её флоу из ранее экспортированного JSON-бандла, генерируя новые ID.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"version\": 1,\n  \"exported_at\": \"2026-07-28T10:15:00Z\",\n  \"campaign\": {\n    \"alias\": \"\",\n    \"name\": \"Facebook UK\",\n    \"notes\": \"\",\n    \"domain_id\": null,\n    \"traffic_source_id\": null,\n    \"parameters\": [],\n    \"rotation_mode\": \"weight\",\n    \"bind_visitor\": \"none\",\n    \"uniqueness_method\": \"click_id\",\n    \"uniqueness_ttl_hours\": 24,\n    \"cost_mode\": \"auto\",\n    \"cost_value\": 0,\n    \"currency\": \"USD\",\n    \"s2s_postback_url\": \"\",\n    \"tags\": [],\n    \"state\": \"active\"\n  },\n  \"flows\": [\n    {\n      \"name\": \"Main\",\n      \"position\": 0,\n      \"type\": \"regular\",\n      \"weight\": 100,\n      \"state\": \"active\",\n      \"scheme\": \"landings_offers\",\n      \"redirect_type\": \"302\",\n      \"redirect_url\": \"\",\n      \"filters\": [],\n      \"filters_logic\": \"AND\",\n      \"landings\": [],\n      \"offers\": [],\n      \"action_script\": \"\",\n      \"save_traffic\": true\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /import/keitaro",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/import/keitaro",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "import",
        "keitaro"
       ]
      },
      "description": "Импортирует трекер Keitaro в текущий workspace — сущности (домены, источники, сети, лендинги, офферы, кампании, флоу, статусы конверсий) из mysqldump конфигурационной БД MariaDB и, опционально, историю кликов/конверсий из TSV-экспорта ClickHouse-таблицы keitaro.events.",
      "body": {
       "mode": "raw",
       "raw": "\"multipart/form-data; поле \\\"dump\\\": keitaro.sql.gz, поле \\\"events\\\": events.tsv.gz (всё тело запроса — до 1GB)\"",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /script/test",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/script/test",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "script",
        "test"
       ]
      },
      "description": "Тестово выполняет action_script (сохранённый или ещё не сохранённый черновик) против синтетического клика и возвращает результат/лог, не затрагивая реальный трафик.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"script\": \"<?php if ($click['country'] === 'DE') { $action = 'redirect'; $url = 'https://example.com/de'; } ?>\",\n  \"click\": {\n    \"country\": \"DE\",\n    \"subs\": {\n      \"sub_id_1\": \"zone42\"\n    }\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /campaigns/{id}/simulate",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/campaigns/{id}/simulate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "campaigns",
        "{id}",
        "simulate"
       ]
      },
      "description": "Прогоняет синтетический клик с заданными параметрами через активные флоу кампании и показывает, какой флоу победит и как отработали фильтры каждого флоу.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"ip\": \"203.0.113.42\",\n  \"user_agent\": \"Mozilla/5.0 (iPhone; CPU iPhone OS 17_0)\",\n  \"country\": \"DE\",\n  \"region\": \"BE\",\n  \"city\": \"Berlin\",\n  \"language\": \"de\",\n  \"device\": \"mobile\",\n  \"os\": \"iOS\",\n  \"browser\": \"Safari\",\n  \"isp\": \"Deutsche Telekom\",\n  \"referrer\": \"\",\n  \"referrer_host\": \"\",\n  \"is_bot\": false,\n  \"is_unique\": true,\n  \"is_proxy\": false,\n  \"is_tor\": false,\n  \"is_ipv6\": false,\n  \"is_datacenter\": false,\n  \"is_vpn\": false,\n  \"keyword\": \"\",\n  \"search_engine\": \"\",\n  \"sub_ids\": {\n    \"sub_id_1\": \"zone42\"\n  },\n  \"timezone\": \"Europe/Berlin\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Команда",
   "item": [
    {
     "name": "GET /invitations/{token}",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/invitations/{token}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "invitations",
        "{token}"
       ]
      },
      "description": "Возвращает публичную информацию о приглашении (email, роль, название workspace, срок действия) по токену для страницы принятия приглашения."
     }
    },
    {
     "name": "POST /invitations/{token}/accept",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/invitations/{token}/accept",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "invitations",
        "{token}",
        "accept"
       ]
      },
      "description": "Принимает приглашение по токену: создаёт нового пользователя (или использует существующего по email), добавляет членство в workspace и помечает приглашение принятым.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Ivan Petrov\",\n  \"password\": \"MySecurePass123\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /team/invitations",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team/invitations",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team",
        "invitations"
       ]
      },
      "description": "Возвращает список приглашений (ожидающих и недавно принятых) текущего workspace."
     }
    },
    {
     "name": "POST /team/invitations",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team/invitations",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team",
        "invitations"
       ]
      },
      "description": "Создаёт новое приглашение в текущий workspace и возвращает одноразовую ссылку-приглашение с токеном.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"email\": \"newuser@example.com\",\n  \"role\": \"manager\",\n  \"permissions\": {},\n  \"ttl_hours\": 168\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /team/invitations/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team/invitations/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team",
        "invitations",
        "{id}"
       ]
      },
      "description": "Удаляет ещё не принятое приглашение текущего workspace."
     }
    },
    {
     "name": "GET /team",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team"
       ]
      },
      "description": "Возвращает список всех пользователей, входящих в workspace вызывающего."
     }
    },
    {
     "name": "POST /team",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team"
       ]
      },
      "description": "Создаёт нового пользователя и сразу добавляет его участником в workspace вызывающего.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"email\": \"jane@example.com\",\n  \"name\": \"Jane Doe\",\n  \"role\": \"manager\",\n  \"password\": \"S3cureP@ss\",\n  \"permissions\": {\n    \"campaigns\": [\n      \"view\",\n      \"edit\"\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /team/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team",
        "{id}"
       ]
      },
      "description": "Обновляет имя, роль и права участника команды внутри workspace вызывающего.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Jane Doe\",\n  \"role\": \"analyst\",\n  \"permissions\": {\n    \"reports\": [\n      \"view\"\n    ]\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /team/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team",
        "{id}"
       ]
      },
      "description": "Удаляет участника из workspace вызывающего, а глобальный аккаунт — только если это было его последнее членство."
     }
    },
    {
     "name": "POST /team/{id}/password",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team/{id}/password",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team",
        "{id}",
        "password"
       ]
      },
      "description": "Принудительно сбрасывает пароль участника команды.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"password\": \"N3wPassw0rd\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /team/audit",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/team/audit?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "team",
        "audit"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "(number) Размер страницы; по умолчанию 200, максимум 2000, невалидное/неположительное значение молча заменяется на 200",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) Смещение; по умолчанию 0, невалидное/отрицательное значение молча заменяется на 0",
         "disabled": true
        },
        {
         "key": "entity",
         "value": "",
         "description": "(string) Точный фильтр по типу сущности (entity = ...)",
         "disabled": true
        },
        {
         "key": "action",
         "value": "",
         "description": "(string) Точный фильтр по действию (action = ...)",
         "disabled": true
        },
        {
         "key": "user",
         "value": "",
         "description": "(string) Подстрока email пользователя (ILIKE)",
         "disabled": true
        },
        {
         "key": "ip",
         "value": "",
         "description": "(string) Подстрока IP-адреса (ILIKE)",
         "disabled": true
        },
        {
         "key": "from",
         "value": "",
         "description": "(string) Нижняя граница created_at (created_at >= from), передаётся как есть в SQL",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string) Верхняя граница created_at (created_at < to), передаётся как есть в SQL",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "description": "(string) Поиск подстроки по entity_id или diff::text (ILIKE)",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает постранично журнал аудита действий внутри workspace вызывающего с необязательными фильтрами."
     }
    },
    {
     "name": "GET /workspaces",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/workspaces",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "workspaces"
       ]
      },
      "description": "Возвращает список всех workspace, участником которых является вызывающий пользователь."
     }
    },
    {
     "name": "POST /workspaces",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/workspaces",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "workspaces"
       ]
      },
      "description": "Создаёт новый workspace и делает вызывающего его владельцем (owner).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"slug\": \"acme\",\n  \"name\": \"Acme Inc\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /workspaces/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/workspaces/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "workspaces",
        "{id}"
       ]
      },
      "description": "Переименовывает workspace и/или меняет его слаг.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"slug\": \"acme-2\",\n  \"name\": \"Acme Inc 2\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /workspaces/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/workspaces/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "workspaces",
        "{id}"
       ]
      },
      "description": "Удаляет workspace целиком (кроме защищённого workspace 'default')."
     }
    },
    {
     "name": "POST /workspaces/{id}/switch",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/workspaces/{id}/switch",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "workspaces",
        "{id}",
        "switch"
       ]
      },
      "description": "Выдаёт новый JWT, скоуп��рованный на указанный workspace, и делает его активным по умолчанию для пользователя."
     }
    },
    {
     "name": "GET /workspaces/{id}/members",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/workspaces/{id}/members",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "workspaces",
        "{id}",
        "members"
       ]
      },
      "description": "Возвращает список участников указанного workspace."
     }
    },
    {
     "name": "POST /workspaces/{id}/members",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/workspaces/{id}/members",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "workspaces",
        "{id}",
        "members"
       ]
      },
      "description": "Добавляет уже существующего пользователя (состоящего с вызывающим в общем workspace) в указанный workspace с заданной ролью.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"email\": \"jane@example.com\",\n  \"role\": \"manager\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /workspaces/{id}/members/{userId}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/workspaces/{id}/members/{userId}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "workspaces",
        "{id}",
        "members",
        "{userId}"
       ]
      },
      "description": "Убирает пользователя из указанного workspace (удаляет только строку членства, не глобальный аккаунт)."
     }
    }
   ]
  },
  {
   "name": "Уведомления",
   "item": [
    {
     "name": "GET /notifications",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/notifications?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "notifications"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "(number) максимум записей, по умолчанию 50, максимум 500; при отсутствии/невалидном/отрицательном значении применяется значение по умолчанию без ошибки",
         "disabled": true
        },
        {
         "key": "unread",
         "value": "",
         "description": "(string) если равно \"true\", возвращаются только непрочитанные уведомления",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает список уведомлений текущего пользователя (включая общесистемные с user_id=NULL), отсортированный по дате создания по убыванию."
     }
    },
    {
     "name": "GET /notifications/unread-count",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/notifications/unread-count",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "notifications",
        "unread-count"
       ]
      },
      "description": "Возвращает количество непрочитанных уведомлений текущего пользователя (включая общесистемные) для бейджа в интерфейсе."
     }
    },
    {
     "name": "POST /notifications/{id}/read",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/notifications/{id}/read",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "notifications",
        "{id}",
        "read"
       ]
      },
      "description": "Помечает одно уведомление текущего пользователя как прочитанное."
     }
    },
    {
     "name": "POST /notifications/read-all",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/notifications/read-all",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "notifications",
        "read-all"
       ]
      },
      "description": "Помечает все непрочитанные уведомления текущего пользователя (включая общесистемные) как прочитанные."
     }
    }
   ]
  },
  {
   "name": "Шаблоны",
   "item": [
    {
     "name": "GET /templates/traffic-sources",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/templates/traffic-sources",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "templates",
        "traffic-sources"
       ]
      },
      "description": "Возвращает список встроенных пресетов источников трафика (Facebook, TikTok, push-сети и т.д.) для быстрого создания."
     }
    },
    {
     "name": "GET /templates/affiliate-networks",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/templates/affiliate-networks",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "templates",
        "affiliate-networks"
       ]
      },
      "description": "Возвращает список встроенных пресетов партнёрских сетей (MyLead, AdCombo и т.д.) для быстрого создания."
     }
    }
   ]
  },
  {
   "name": "Списки IP/UA",
   "item": [
    {
     "name": "GET /ip-lists",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/ip-lists",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "ip-lists"
       ]
      },
      "description": "Возвращает список всех IP-листов рабочего пространства (для использования в фильтрах флоу), отсортированный по имени."
     }
    },
    {
     "name": "POST /ip-lists",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/ip-lists",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "ip-lists"
       ]
      },
      "description": "Создаёт новый именованный IP-лист в рабочем пространстве.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Datacenter blacklist\",\n  \"description\": \"Known DC ranges\",\n  \"values\": [\n    \"203.0.113.0/24\",\n    \"198.51.100.5\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /ip-lists/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/ip-lists/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "ip-lists",
        "{id}"
       ]
      },
      "description": "Обновляет название, описание и значения существующего IP-листа.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Datacenter blacklist v2\",\n  \"description\": \"Updated DC ranges\",\n  \"values\": [\n    \"203.0.113.0/24\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /ip-lists/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/ip-lists/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "ip-lists",
        "{id}"
       ]
      },
      "description": "Удаляет IP-лист рабочего пространства."
     }
    },
    {
     "name": "GET /ua-lists",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/ua-lists",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "ua-lists"
       ]
      },
      "description": "Возвращает список всех User-Agent-листов рабочего пространства, отсортированный по имени."
     }
    },
    {
     "name": "POST /ua-lists",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/ua-lists",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "ua-lists"
       ]
      },
      "description": "Создаёт новый именованный User-Agent-лист в рабочем пространстве.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Bot UAs\",\n  \"description\": \"Known bot signatures\",\n  \"values\": [\n    \"bot\",\n    \"crawler\",\n    \"spider\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /ua-lists/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/ua-lists/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "ua-lists",
        "{id}"
       ]
      },
      "description": "Обновляет название, описание и значения существующего User-Agent-листа.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Bot UAs v2\",\n  \"description\": \"Updated bot signatures\",\n  \"values\": [\n    \"bot\",\n    \"crawler\"\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /ua-lists/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/ua-lists/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "ua-lists",
        "{id}"
       ]
      },
      "description": "Удаляет User-Agent-лист рабочего пространства."
     }
    }
   ]
  },
  {
   "name": "Отчёты",
   "item": [
    {
     "name": "GET /reports/dashboard",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/dashboard?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "dashboard"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода; по умолчанию — сейчас минус 24 часа. Невалидное значение молча игнорируется (остаётся дефолт).",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода; по умолчанию — текущее время. Невалидное значение молча игнорируется.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Учитывать ли строки, сгенерированные симулятором (is_simulated=1), наравне с реальным трафиком.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает агрегированные KPI дашборда (клики, уникальные клики, конверсии, доход, расход, прибыль, CR, ROI, EPC) за выбранный период."
     }
    },
    {
     "name": "GET /reports/timeseries",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/timeseries?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "timeseries"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода; по умолчанию — сейчас минус 24 часа.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода; по умолчанию — текущее время.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Учитывать симулированный трафик.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает временной ряд кликов, дохода и расхода для построения графика на дашборде."
     }
    },
    {
     "name": "GET /reports/cohort",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/cohort?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "cohort"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Учитывать симулированный трафик.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает матрицу 7×24 (день недели × час) с числом кликов для тепловой карты дашборда."
     }
    },
    {
     "name": "POST /reports/cohort",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/cohort?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "cohort"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Резервный источник периода через общий parseRange.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Резервный источник периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Резервный флаг учёта симулированного трафика.",
         "disabled": true
        }
       ]
      },
      "description": "Строит матрицу когорт привлечения по клику × лаг до конверсии (в днях или часах) с фильтрами отчёта.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from\": \"2026-07-01T00:00:00Z\",\n  \"to\": \"2026-07-28T00:00:00Z\",\n  \"granularity\": \"day\",\n  \"lag_buckets\": 10,\n  \"filters\": []\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /reports/funnel",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/funnel?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "funnel"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Учитывать симулированный трафик.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает агрегированные счётчики базовой воронки клики → уникальные → конверсии → продажи для графика на дашборде."
     }
    },
    {
     "name": "POST /reports/funnel",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/funnel?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "funnel"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Резервный источник периода, если не задан в теле; читается общим parseRange.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Резервный источник периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Резервный флаг учёта симулированного трафика (объединяется через OR с полем тела).",
         "disabled": true
        }
       ]
      },
      "description": "Выполняет настраиваемый многоступенчатый анализ воронки с необязательной сегментацией по измерению и фильтрами отчёта.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from\": \"2026-07-21T00:00:00Z\",\n  \"to\": \"2026-07-28T00:00:00Z\",\n  \"breakdown\": \"campaign\",\n  \"date_mode\": \"click\",\n  \"stages\": [\n    {\n      \"key\": \"clicks\",\n      \"label\": \"Клики\",\n      \"type\": \"clicks\"\n    },\n    {\n      \"key\": \"lead\",\n      \"label\": \"Лиды\",\n      \"type\": \"status\",\n      \"status\": \"lead\"\n    },\n    {\n      \"key\": \"sale\",\n      \"label\": \"Продажи\",\n      \"type\": \"status\",\n      \"status\": \"sale\"\n    }\n  ],\n  \"filters\": [\n    {\n      \"field\": \"country\",\n      \"op\": \"eq\",\n      \"values\": [\n        \"US\"\n      ]\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /reports/group-by",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/group-by?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "group-by"
       ],
       "query": [
        {
         "key": "dims",
         "value": "",
         "description": "(string (список через запятую)) Измерения для группировки; пустое значение → группировка по date; максимум MaxDimensions=16.",
         "disabled": true
        },
        {
         "key": "campaign_id",
         "value": "",
         "description": "(string) Фильтр по campaign_id (сырое сравнение, формат не валидируется).",
         "disabled": true
        },
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Учитывать симулированный трафик.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает агрегированный отчёт по кликам и конверсиям, сгруппированный по заданным измерениям (упрощённый движок без пагинации и кастомных метрик)."
     }
    },
    {
     "name": "GET /reports/dimensions",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/dimensions",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "dimensions"
       ]
      },
      "description": "Возвращает список всех допустимых имён измерений, которые можно использовать в group-by/query/funnel/cohort фильтрах и breakdown."
     }
    },
    {
     "name": "GET /reports/clicks",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/clicks?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "clicks"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Учитывать симулированные клики (is_simulated=1) наравне с реальными; по умолчанию в списке только реальный трафик.",
         "disabled": true
        },
        {
         "key": "campaign_id",
         "value": "",
         "description": "(string) Фильтр по campaign_id.",
         "disabled": true
        },
        {
         "key": "subid",
         "value": "",
         "description": "(string) Полный click_id (36 символов) → точное совпадение; более короткая строка → поиск по префиксу click_id.",
         "disabled": true
        },
        {
         "key": "country",
         "value": "",
         "description": "(string (ISO-2)) Фильтр по коду страны, без учёта регистра (сравнение через upper(country_code)).",
         "disabled": true
        },
        {
         "key": "bot",
         "value": "",
         "description": "(string (\"1\" | \"true\" | \"0\" | \"false\")) \"1\"/\"true\" — только боты, \"0\"/\"false\" — только не-боты; пустое или любое иное значение — без фильтра.",
         "disabled": true
        },
        {
         "key": "outcome",
         "value": "",
         "description": "(string (\"routed\" | \"rejected\")) \"routed\" — только клики, ушедшие в редирект (outcome = ''), \"rejected\" — только отказные (outcome != '', то есть no_match/do_nothing); пустое или любое иное значение — без фильтра.",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "description": "(number) Размер страницы; по умолчанию 100, максимум 1000, невалидное/≤0 значение → дефолт.",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) Смещение страницы; по умолчанию 0.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает постраничный список сырых событий кликов с фильтрами по кампании и sub id."
     }
    },
    {
     "name": "GET /reports/conversions",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/conversions?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "conversions"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Читается, но не влияет на результат (см. notes).",
         "disabled": true
        },
        {
         "key": "date_field",
         "value": "",
         "description": "(string (\"click\" | \"conversion\")) По какой временной метке фильтровать from/to; по умолчанию conversion.",
         "disabled": true
        },
        {
         "key": "status",
         "value": "",
         "description": "(string) Фильтр по статусу конверсии (lead|sale|rejected|trash или кастомный код).",
         "disabled": true
        },
        {
         "key": "campaign_id",
         "value": "",
         "description": "(string) Фильтр по campaign_id.",
         "disabled": true
        },
        {
         "key": "click_id",
         "value": "",
         "description": "(string) Точное совпадение click_id.",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "description": "(number) Размер страницы; по умолчанию 200, максимум 2000.",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) Смещение страницы; по умолчанию 0.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает постраничный список конверсий с фильтрами по статусу, кампании и click_id."
     }
    },
    {
     "name": "GET /reports/postbacks",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/postbacks?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "postbacks"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Читается, но не используется этим эндпоинтом.",
         "disabled": true
        },
        {
         "key": "direction",
         "value": "",
         "description": "(string) Фильтр направления постбэка (значение не валидируется набором допустимых значений).",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "description": "(number) Размер страницы; по умолчанию 100, максимум 1000.",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) Смещение страницы; по умолчанию 0.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает постраничный лог входящих/исходящих постбэков кампаний воркспейса."
     }
    },
    {
     "name": "GET /reports/traffic-log",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/traffic-log?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "traffic-log"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Начало периода.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Конец периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Читается, но не используется этим эндпоинтом.",
         "disabled": true
        },
        {
         "key": "campaign_id",
         "value": "",
         "description": "(string) Фильтр по campaign_id.",
         "disabled": true
        },
        {
         "key": "outcome",
         "value": "",
         "description": "(string (\"redirect\" | \"do_nothing\" | \"no_match\")) Фильтр по исходу; пусто = все.",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "description": "(number) Размер страницы; по умолчанию 100, максимум 1000.",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) Смещение страницы; по умолчанию 0.",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает постраничный листинг отладочного трейса кликов (click_trace, TTL 72ч) без блока шагов."
     }
    },
    {
     "name": "GET /clicks/{click_id}/trace",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/clicks/{click_id}/trace",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "clicks",
        "{click_id}",
        "trace"
       ]
      },
      "description": "Возвращает полную запись трейса одного клика, включая декодированный блок шагов пайплайна."
     }
    },
    {
     "name": "POST /reports/query",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/query?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "query"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Резервный источник периода через общий parseRange, перекрывается полем тела from.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Резервный источник периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Резервный флаг учёта симулированного трафика (OR с полем тела).",
         "disabled": true
        }
       ]
      },
      "description": "Выполняет универсальный настраиваемый отчёт по кликам и конверсиям с измерениями, фильтрами, сортировкой, кастомными метриками и сравнением периодов.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from\": \"2026-07-21T00:00:00Z\",\n  \"to\": \"2026-07-28T00:00:00Z\",\n  \"dimensions\": [\n    \"campaign\",\n    \"country\"\n  ],\n  \"filters\": [\n    {\n      \"field\": \"country\",\n      \"op\": \"eq\",\n      \"values\": [\n        \"US\"\n      ]\n    }\n  ],\n  \"sort\": [\n    {\n      \"field\": \"revenue\",\n      \"dir\": \"desc\"\n    }\n  ],\n  \"limit\": 50,\n  \"offset\": 0,\n  \"date_mode\": \"click\",\n  \"compare\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /reports/export",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/export?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "export"
       ],
       "query": [
        {
         "key": "from",
         "value": "",
         "description": "(string (RFC3339)) Резервный источник периода через общий parseRange.",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string (RFC3339)) Резервный источник периода.",
         "disabled": true
        },
        {
         "key": "include_simulated",
         "value": "",
         "description": "(string (\"1\" | \"true\")) Резервный флаг учёта симулированного трафика.",
         "disabled": true
        }
       ]
      },
      "description": "Стримит тот же отчёт, что и /reports/query, в виде файла CSV или HTML для скачивания.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from\": \"2026-07-01T00:00:00Z\",\n  \"to\": \"2026-07-28T00:00:00Z\",\n  \"dimensions\": [\n    \"campaign\"\n  ],\n  \"filters\": [],\n  \"format\": \"csv\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /reports/clean",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/reports/clean",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "reports",
        "clean"
       ]
      },
      "description": "Удаляет данные кликов и/или конверсий из ClickHouse для кампании и/или диапазона дат в пределах воркспейса.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"campaign_id\": \"c1a1a1a1-1111-1111-1111-111111111111\",\n  \"table\": \"clicks\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /saved-reports",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/saved-reports",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "saved-reports"
       ]
      },
      "description": "Возвращает список сохранённых отчётов воркспейса: общие (shared) плюс собственные приватные отчёты вызывающего пользователя."
     }
    },
    {
     "name": "POST /saved-reports",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/saved-reports",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "saved-reports"
       ]
      },
      "description": "Создаёт новый сохранённый отчёт, принадлежащий текущему пользователю.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Weekly ROI\",\n  \"config\": {\n    \"dimensions\": [\n      \"campaign\"\n    ],\n    \"filters\": []\n  },\n  \"shared\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /saved-reports/{id}",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/saved-reports/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "saved-reports",
        "{id}"
       ]
      },
      "description": "Возвращает один сохранённый отчёт по ID, если он общий или принадлежит текущему пользователю."
     }
    },
    {
     "name": "PUT /saved-reports/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/saved-reports/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "saved-reports",
        "{id}"
       ]
      },
      "description": "Обновляет название, конфигурацию и флаг shared сохранённого отчёта; изменять может только владелец.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Weekly ROI v2\",\n  \"config\": {\n    \"dimensions\": [\n      \"campaign\",\n      \"country\"\n    ]\n  },\n  \"shared\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /saved-reports/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/saved-reports/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "saved-reports",
        "{id}"
       ]
      },
      "description": "Удаляет сохранённый отчёт; удалить может только владелец."
     }
    },
    {
     "name": "GET /custom-metrics",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/custom-metrics",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "custom-metrics"
       ]
      },
      "description": "Возвращает список кастомных метрик воркспейса, доступных для использования в отчётах."
     }
    },
    {
     "name": "POST /custom-metrics",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/custom-metrics",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "custom-metrics"
       ]
      },
      "description": "Создаёт новую кастомную метрику воркспейса, проверяя формулу компиляцией через DSL движка отчётов.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"epc2\",\n  \"expr\": \"revenue / clicks * 2\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /custom-metrics/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/custom-metrics/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "custom-metrics",
        "{id}"
       ]
      },
      "description": "Обновляет название и формулу кастомной метрики воркспейса.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"epc2\",\n  \"expr\": \"revenue / clicks * 3\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /custom-metrics/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/custom-metrics/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "custom-metrics",
        "{id}"
       ]
      },
      "description": "Удаляет кастомную метрику воркспейса."
     }
    }
   ]
  },
  {
   "name": "Симулятор трафика",
   "item": [
    {
     "name": "GET /simulator/status",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/simulator/status",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "simulator",
        "status"
       ]
      },
      "description": "Возвращает текущее число симулированных кликов и конверсий (is_simulated=1) в воркспейсе."
     }
    },
    {
     "name": "POST /simulator/run",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/simulator/run",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "simulator",
        "run"
       ]
      },
      "description": "Синхронно генерирует синтетический трафик (клики и конверсии) для кампании и записывает его в ClickHouse с флагом is_simulated=1.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"campaign_id\": \"c1a1a1a1-1111-1111-1111-111111111111\",\n  \"clicks\": 5000,\n  \"spread_hours\": 24,\n  \"conversion_rate\": 0.08,\n  \"status_mix\": {\n    \"lead\": 60,\n    \"sale\": 30,\n    \"rejected\": 10,\n    \"trash\": 0\n  },\n  \"device_mix\": {\n    \"mobile\": 70,\n    \"desktop\": 25,\n    \"tablet\": 5\n  },\n  \"geo\": \"tier1\",\n  \"cost_per_click\": 0.02,\n  \"payout_min\": 5,\n  \"payout_max\": 25,\n  \"bot_rate\": 0.03\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /simulator/clean",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/simulator/clean",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "simulator",
        "clean"
       ]
      },
      "description": "Удаляет все строки с is_simulated=1 (клики и конверсии) для текущего воркспейса."
     }
    }
   ]
  },
  {
   "name": "Статусы конверсий",
   "item": [
    {
     "name": "GET /conversion-statuses",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/conversion-statuses",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "conversion-statuses"
       ]
      },
      "description": "Возвращает список статусов конверсий: глобальные встроенные (workspace_id IS NULL) плюс кастомные статусы текущего воркспейса, отсортированные по коду."
     }
    },
    {
     "name": "POST /conversion-statuses",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/conversion-statuses",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "conversion-statuses"
       ]
      },
      "description": "Создаёт новый кастомный статус конверсии для текущего воркспейса.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"code\": \"lead\",\n  \"name\": \"Lead\",\n  \"color\": \"#3b82f6\",\n  \"counts_as\": \"lead\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /conversion-statuses/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/conversion-statuses/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "conversion-statuses",
        "{id}"
       ]
      },
      "description": "Обновляет имя, цвет и категорию засчитывания кастомного статуса конверсии текущего воркспейса.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Lead (qualified)\",\n  \"color\": \"#16a34a\",\n  \"counts_as\": \"lead\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /conversion-statuses/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/conversion-statuses/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "conversion-statuses",
        "{id}"
       ]
      },
      "description": "Удаляет кастомный статус конверсии текущего воркспейса."
     }
    }
   ]
  },
  {
   "name": "Входящий постбэк",
   "item": [
    {
     "name": "GET /postback-url",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/postback-url",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "postback-url"
       ]
      },
      "description": "Отдаёт URL входящего постбэка текущего workspace — тот, что вставляется в настройки CPA-сети. Ключ в пути аутентифицирует каждую входящую конверсию."
     }
    }
   ]
  },
  {
   "name": "DLQ постбеков",
   "item": [
    {
     "name": "GET /postback-dlq",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/postback-dlq?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "postback-dlq"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "(number) макс. число строк, по умолчанию 100, максимум 1000; при невалидном/отрицательном значении тихо используется дефолт",
         "disabled": true
        },
        {
         "key": "unresolved",
         "value": "",
         "description": "(string) если равно \"true\" — вернуть только записи с resolved_at IS NULL",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает список постбэков из dead-letter очереди (постбэки трафик-сорсам, исчерпавшие попытки доставки), отсортированный по дате создания."
     }
    },
    {
     "name": "POST /postback-dlq/{id}/replay",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/postback-dlq/{id}/replay",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "postback-dlq",
        "{id}",
        "replay"
       ]
      },
      "description": "Повторно отправляет один постбэк из dead-letter очереди."
     }
    },
    {
     "name": "POST /postback-dlq/replay-all",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/postback-dlq/replay-all",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "postback-dlq",
        "replay-all"
       ]
      },
      "description": "Массово повторно отправляет до 1000 постбэков из dead-letter очереди текущего воркспейса."
     }
    }
   ]
  },
  {
   "name": "DLQ форвардинга конверсий",
   "item": [
    {
     "name": "GET /conv-forward-dlq",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/conv-forward-dlq?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "conv-forward-dlq"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "(number) макс. число строк, по умолчанию 100, максимум 1000",
         "disabled": true
        },
        {
         "key": "unresolved",
         "value": "",
         "description": "(string) если равно \"true\" — вернуть только записи с resolved_at IS NULL",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает список server-side пересылок конверсий (CAPI/Events API), исчерпавших попытки доставки, из dead-letter очереди."
     }
    },
    {
     "name": "POST /conv-forward-dlq/{id}/replay",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/conv-forward-dlq/{id}/replay",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "conv-forward-dlq",
        "{id}",
        "replay"
       ]
      },
      "description": "Повторно отправляет одну запись из dead-letter очереди пересылки конверсий."
     }
    },
    {
     "name": "POST /conv-forward-dlq/replay-all",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/conv-forward-dlq/replay-all",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "conv-forward-dlq",
        "replay-all"
       ]
      },
      "description": "Массово повторно отправляет до 1000 записей из dead-letter очереди пересылки конверсий текущего воркспейса."
     }
    }
   ]
  },
  {
   "name": "Вебхуки",
   "item": [
    {
     "name": "GET /webhooks",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/webhooks",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "webhooks"
       ]
      },
      "description": "Возвращает список исходящих вебхуков текущего воркспейса. Секрет подписи никогда не возвращается — вместо него флаг has_secret."
     }
    },
    {
     "name": "POST /webhooks",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/webhooks",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "webhooks"
       ]
      },
      "description": "Создаёт новый исходящий вебхук для текущего воркспейса.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Slack alerts\",\n  \"url\": \"https://hooks.example.com/abc\",\n  \"secret\": \"whsec_live_9f8a\",\n  \"events\": [\n    \"conversion.created\",\n    \"rule.fired\"\n  ],\n  \"enabled\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /webhooks/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/webhooks/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "webhooks",
        "{id}"
       ]
      },
      "description": "Обновляет параметры существующего вебхука (имя, URL, секрет, события, включённость).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Slack alerts\",\n  \"url\": \"https://hooks.example.com/abc2\",\n  \"secret\": \"whsec_live_9f8a\",\n  \"events\": [\n    \"conversion.created\"\n  ],\n  \"enabled\": false\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /webhooks/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/webhooks/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "webhooks",
        "{id}"
       ]
      },
      "description": "Удаляет вебхук текущего воркспейса."
     }
    },
    {
     "name": "GET /webhooks/deliveries",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/webhooks/deliveries?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "webhooks",
        "deliveries"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "(number) макс. число строк, по умолчанию 100, максимум 1000",
         "disabled": true
        },
        {
         "key": "webhook_id",
         "value": "",
         "description": "(uuid) фильтр по конкретному вебхуку; если передан и не парсится как uuid — 400",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает журнал попыток доставки вебхуков (успешных и неуспешных) для текущего воркспейса."
     }
    }
   ]
  },
  {
   "name": "Интеграции",
   "item": [
    {
     "name": "GET /integrations",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations"
       ]
      },
      "description": "Возвращает список подключённых интеграций текущего воркспейса без раскрытия секретов конфигурации."
     }
    },
    {
     "name": "POST /integrations",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations"
       ]
      },
      "description": "Создаёт или обновляет конфигурацию интеграции провайдера (например, Cloudflare, Facebook CAPI, Telegram) для текущего воркспейса.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"provider\": \"cloudflare\",\n  \"name\": \"default\",\n  \"enabled\": true,\n  \"config\": {\n    \"token\": \"cf_abc123secret\"\n  }\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /integrations/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations",
        "{id}"
       ]
      },
      "description": "Удаляет интеграцию текущего воркспейса."
     }
    },
    {
     "name": "POST /integrations/cloudflare/test",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations/cloudflare/test",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations",
        "cloudflare",
        "test"
       ]
      },
      "description": "Проверяет валидность сохранённого Cloudflare API-токена пробным запросом списка зон (GET /zones?per_page=1 — сознательно не /user/tokens/verify, который отвергает account-owned токены и не проверяет права Zone:Read) и сохраняет результат проверки."
     }
    },
    {
     "name": "GET /integrations/cloudflare/zones",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations/cloudflare/zones",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations",
        "cloudflare",
        "zones"
       ]
      },
      "description": "Возвращает список зон Cloudflare, доступных сохранённому API-токену."
     }
    },
    {
     "name": "POST /integrations/telegram/test",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations/telegram/test",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations",
        "telegram",
        "test"
       ]
      },
      "description": "Отправляет тестовое сообщение в настроенный Telegram-канал воркспейса, чтобы проверить конфигурацию интеграции."
     }
    },
    {
     "name": "GET /integrations/fb-capi/deliveries",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations/fb-capi/deliveries?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations",
        "fb-capi",
        "deliveries"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "(number) по умолчанию 100, максимум 1000",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) по умолчанию 0",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает журнал последних доставок Facebook Conversions API (CAPI) для воркспейса вместе со сводной статистикой за 24 часа."
     }
    },
    {
     "name": "POST /integrations/fb-capi/test",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations/fb-capi/test",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations",
        "fb-capi",
        "test"
       ]
      },
      "description": "Отправляет синтетическое тестовое событие Lead через интеграцию Facebook CAPI и возвращает ответ Facebook, чтобы проверить pixel_id/access_token.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"integration_id\": \"66666666-6666-6666-6666-666666666666\",\n  \"email\": \"test@example.com\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /integrations/tiktok-events/deliveries",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations/tiktok-events/deliveries?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations",
        "tiktok-events",
        "deliveries"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "(number) по умолчанию 100, максимум 1000",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) по умолчанию 0",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает журнал последних доставок TikTok Events API для воркспейса вместе со сводной статистикой за 24 часа."
     }
    },
    {
     "name": "POST /integrations/tiktok-events/test",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/integrations/tiktok-events/test",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "integrations",
        "tiktok-events",
        "test"
       ]
      },
      "description": "Отправляет синтетическое тестовое событие через интеграцию TikTok Events и возвращает ответ TikTok, чтобы проверить настройки pixel/access_token.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"integration_id\": \"99999999-9999-9999-9999-999999999999\",\n  \"email\": \"test@example.com\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Мультивалютность (FX)",
   "item": [
    {
     "name": "GET /fx/base-currency",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/fx/base-currency",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "fx",
        "base-currency"
       ]
      },
      "description": "Возвращает базовую валюту воркспейса и текущий процент сэмплирования трафик-логов."
     }
    },
    {
     "name": "PUT /fx/base-currency",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/fx/base-currency",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "fx",
        "base-currency"
       ]
      },
      "description": "Устанавливает базовую валюту воркспейса, используемую для нормализации новых кликов и конверсий.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"base_currency\": \"EUR\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "PUT /fx/traffic-sample",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/fx/traffic-sample",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "fx",
        "traffic-sample"
       ]
      },
      "description": "Устанавливает процент сэмплирования трафик-логов (click_trace) для воркспейса.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"traffic_log_sample\": 50\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /fx/rates",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/fx/rates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "fx",
        "rates"
       ]
      },
      "description": "Возвращает таблицу курсов обмена валют воркспейса, отсортированную по дате (новые сначала)."
     }
    },
    {
     "name": "PUT /fx/rates",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/fx/rates",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "fx",
        "rates"
       ]
      },
      "description": "Создаёт или перезаписывает вручную заданный курс обмена валют на конкретную дату.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"from_currency\": \"EUR\",\n  \"to_currency\": \"USD\",\n  \"rate\": 1.08,\n  \"rate_date\": \"2026-07-27\",\n  \"source\": \"manual\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /fx/rates/refresh",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/fx/rates/refresh",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "fx",
        "rates",
        "refresh"
       ]
      },
      "description": "Принудительно подтягивает актуальные рыночные курсы валют у внешнего провайдера и перезагружает кэш курсов."
     }
    },
    {
     "name": "DELETE /fx/rates/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/fx/rates/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "fx",
        "rates",
        "{id}"
       ]
      },
      "description": "Удаляет одну запись курса обмена валют."
     }
    }
   ]
  },
  {
   "name": "Автоправила",
   "item": [
    {
     "name": "GET /rules",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules"
       ]
      },
      "description": "Возвращает список всех автоправил (rules) текущего воркспейса, отсортированных по дате создания (новые первыми)."
     }
    },
    {
     "name": "POST /rules",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules"
       ]
      },
      "description": "Создаёт новое автоправило в воркспейсе текущего пользователя.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"ROI drop guard\",\n  \"enabled\": true,\n  \"dry_run\": false,\n  \"scope\": {\n    \"kind\": \"campaign\",\n    \"campaign_ids\": [\n      \"22222222-2222-2222-2222-222222222222\"\n    ]\n  },\n  \"trigger\": {\n    \"type\": \"schedule\",\n    \"interval_sec\": 300\n  },\n  \"metric_window\": {\n    \"preset\": \"last_3h\"\n  },\n  \"condition\": {\n    \"kind\": \"cond\",\n    \"metric\": \"roi\",\n    \"op\": \"lt\",\n    \"value\": -30\n  },\n  \"guards\": {\n    \"min_clicks\": 100,\n    \"cooldown_sec\": 1800\n  },\n  \"actions\": [\n    {\n      \"type\": \"pause\"\n    },\n    {\n      \"type\": \"notify\",\n      \"channels\": [\n        \"telegram\"\n      ],\n      \"message\": \"ROI упал ниже -30% для {{name}}\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /rules/{id}",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules",
        "{id}"
       ]
      },
      "description": "Возвращает одно автоправило по id."
     }
    },
    {
     "name": "PUT /rules/{id}",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules",
        "{id}"
       ]
      },
      "description": "Полностью обновляет автоправило по id.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"ROI drop guard v2\",\n  \"enabled\": true,\n  \"dry_run\": false,\n  \"scope\": {\n    \"kind\": \"campaign\",\n    \"campaign_ids\": [\n      \"22222222-2222-2222-2222-222222222222\"\n    ]\n  },\n  \"trigger\": {\n    \"type\": \"schedule\",\n    \"interval_sec\": 600\n  },\n  \"metric_window\": {\n    \"preset\": \"last_6h\"\n  },\n  \"condition\": {\n    \"kind\": \"cond\",\n    \"metric\": \"roi\",\n    \"op\": \"lt\",\n    \"value\": -25\n  },\n  \"guards\": {\n    \"min_clicks\": 150,\n    \"cooldown_sec\": 3600\n  },\n  \"actions\": [\n    {\n      \"type\": \"pause\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "DELETE /rules/{id}",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules/{id}",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules",
        "{id}"
       ]
      },
      "description": "Удаляет автоправило по id."
     }
    },
    {
     "name": "POST /rules/{id}/toggle",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules/{id}/toggle",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules",
        "{id}",
        "toggle"
       ]
      },
      "description": "Переключает флаги enabled и/или dry_run у правила без пересохранения всего объекта.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"enabled\": true\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /rules/{id}/test",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules/{id}/test",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules",
        "{id}",
        "test"
       ]
      },
      "description": "Выполняет сухой прогон (dry-evaluate) сохранённого правила прямо сейчас и возвращает результат по каждой цели, не выполняя реальных действий."
     }
    },
    {
     "name": "POST /rules/test",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules/test",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules",
        "test"
       ]
      },
      "description": "Тот же обработчик, что и POST /rules/{id}/test, но тестирует несохранённый черновик правила, переданный целиком в теле запроса (используется редактором до первого сохранения).",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"name\": \"Draft ROI check\",\n  \"scope\": {\n    \"kind\": \"campaign\",\n    \"campaign_ids\": [\n      \"22222222-2222-2222-2222-222222222222\"\n    ]\n  },\n  \"trigger\": {\n    \"type\": \"schedule\",\n    \"interval_sec\": 300\n  },\n  \"metric_window\": {\n    \"preset\": \"last_3h\"\n  },\n  \"condition\": {\n    \"kind\": \"cond\",\n    \"metric\": \"roi\",\n    \"op\": \"lt\",\n    \"value\": -30\n  },\n  \"guards\": {\n    \"min_clicks\": 100\n  },\n  \"actions\": [\n    {\n      \"type\": \"pause\"\n    }\n  ]\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /rules/{id}/runs",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/rules/{id}/runs?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "rules",
        "{id}",
        "runs"
       ],
       "query": [
        {
         "key": "limit",
         "value": "",
         "description": "(number) макс. число записей; при <=0 или >200 сервер тихо подставляет 50 (значение по умолчанию)",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) смещение; при отсутствии/ошибке парсинга — 0",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает историю прогонов (evaluation runs) конкретного правила с пагинацией."
     }
    }
   ]
  },
  {
   "name": "Система",
   "item": [
    {
     "name": "GET /system/status",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/system/status",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "system",
        "status"
       ]
      },
      "description": "Возвращает состояние здоровья сервера: версию, аптайм, память, число горутин и доступность Postgres/ClickHouse/Redis."
     }
    },
    {
     "name": "GET /system/logs",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/system/logs?",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "system",
        "logs"
       ],
       "query": [
        {
         "key": "level",
         "value": "",
         "description": "(string) точное совпадение по колонке level",
         "disabled": true
        },
        {
         "key": "source",
         "value": "",
         "description": "(string) точное совпадение по колонке source",
         "disabled": true
        },
        {
         "key": "from",
         "value": "",
         "description": "(string) нижняя граница created_at (>=); передаётся как строка прямо в SQL-сравнение, парсинг делает Postgres",
         "disabled": true
        },
        {
         "key": "to",
         "value": "",
         "description": "(string) верхняя граница created_at (<); аналогично from",
         "disabled": true
        },
        {
         "key": "q",
         "value": "",
         "description": "(string) подстрока для ILIKE-поиска по message или detail::text",
         "disabled": true
        },
        {
         "key": "limit",
         "value": "",
         "description": "(number) по умолчанию 200, максимум 1000",
         "disabled": true
        },
        {
         "key": "offset",
         "value": "",
         "description": "(number) по умолчанию 0",
         "disabled": true
        }
       ]
      },
      "description": "Возвращает постраничный список записей операционного системного лога (уровень/источник/сообщение) с фильтрами."
     }
    }
   ]
  },
  {
   "name": "Realtime",
   "item": [
    {
     "name": "POST /realtime/token",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/realtime/token",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "realtime",
        "token"
       ]
      },
      "description": "Выпускает краткоживущий Centrifugo connection-токен для подключения текущего пользователя к real-time шине."
     }
    },
    {
     "name": "POST /realtime/subscription-token",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/realtime/subscription-token",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "realtime",
        "subscription-token"
       ]
      },
      "description": "Выпускает Centrifugo subscription-токен для подписки на один конкретный канал, только если этот канал принадлежит активному воркспейсу вызывающего.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"channel\": \"ws:clicks#11111111-1111-1111-1111-111111111111\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    }
   ]
  },
  {
   "name": "Брендирование",
   "item": [
    {
     "name": "GET /branding",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/branding",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "branding"
       ]
      },
      "description": "Публичный дескриптор white-label брендирования инстанса — имя панели, текст логина, флаги наличия логотипа/favicon и версия v для cache-busting."
     }
    },
    {
     "name": "PUT /branding",
     "request": {
      "method": "PUT",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/branding",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "branding"
       ]
      },
      "description": "Частично обновляет текстовые поля брендирования (panel_name, login_note); непереданные поля не меняются, ответ — свежий дескриптор как у GET /branding.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"panel_name\": \"My Tracker\",\n  \"login_note\": \"Only for team members\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "GET /branding/logo",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/branding/logo",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "branding",
        "logo"
       ]
      },
      "description": "Отдаёт байты загруженного логотипа (Content-Type = mime при загрузке); 404, если логотип не загружен."
     }
    },
    {
     "name": "POST /branding/logo",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/branding/logo",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "branding",
        "logo"
       ]
      },
      "description": "Загружает логотип — сырые байты изображения в теле запроса (Content-Type игнорируется, формат sniff'ится); максимум 1 MiB."
     }
    },
    {
     "name": "DELETE /branding/logo",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/branding/logo",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "branding",
        "logo"
       ]
      },
      "description": "Удаляет кастомный логотип (сброс к дефолту) — GET /branding/logo снова отвечает 404."
     }
    },
    {
     "name": "GET /branding/favicon",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/branding/favicon",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "branding",
        "favicon"
       ]
      },
      "description": "Отдаёт загруженный favicon; 404 не бывает — без кастомного файла генерируется дефолтный SVG с первой буквой panel_name."
     }
    },
    {
     "name": "POST /branding/favicon",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/branding/favicon",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "branding",
        "favicon"
       ]
      },
      "description": "Загружает favicon — сырые байты изображения в теле запроса (Content-Type игнорируется, формат sniff'ится); максимум 256 KiB."
     }
    },
    {
     "name": "DELETE /branding/favicon",
     "request": {
      "method": "DELETE",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/branding/favicon",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "branding",
        "favicon"
       ]
      },
      "description": "Удаляет кастомный favicon — GET /branding/favicon возвращается к сгенерированному дефолту."
     }
    }
   ]
  },
  {
   "name": "Лицензия",
   "item": [
    {
     "name": "GET /license",
     "request": {
      "method": "GET",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/license",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "license"
       ]
      },
      "description": "Возвращает производный (без секретов) статус лицензии инстанса — сам ключ и install_token не отдаются никогда."
     }
    },
    {
     "name": "POST /license/activate",
     "request": {
      "method": "POST",
      "header": [
       {
        "key": "Content-Type",
        "value": "application/json"
       }
      ],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/license/activate",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "license",
        "activate"
       ]
      },
      "description": "Активирует лицензионный ключ на сервере лицензий, сохраняет установку и возвращает свежий статус.",
      "body": {
       "mode": "raw",
       "raw": "{\n  \"key\": \"MNK-XXXX-XXXX-XXXX\"\n}",
       "options": {
        "raw": {
         "language": "json"
        }
       }
      }
     }
    },
    {
     "name": "POST /license/recheck",
     "request": {
      "method": "POST",
      "header": [],
      "url": {
       "raw": "{{base_url}}/admin_api/v1/license/recheck",
       "host": [
        "{{base_url}}"
       ],
       "path": [
        "admin_api",
        "v1",
        "license",
        "recheck"
       ]
      },
      "description": "Выполняет внеочередную проверку лицензии на сервере лицензий и возвращает обновлённый статус."
     }
    }
   ]
  }
 ]
}
