{
    "openapi": "3.0.3",
    "info": {
        "title": "API Пиксель Тулс",
        "version": "1",
        "description": "Методы инструментов (ключ key), SEO-проектов (token) и REST API (JWT в заголовке token)."
    },
    "servers": [
        {
            "url": "https://tools.pixelplus.ru"
        }
    ],
    "paths": {
        "/projects/api/v1/project/get": {
            "get": {
                "tags": [
                    "project"
                ],
                "operationId": "project_get",
                "summary": "Карточка проекта",
                "description": "Домен, главное зеркало, зеркала-алиасы и статус проекта. С details=1 в ответ добавляются интегральные оценки: внутренняя оптимизация, поведенческие, ссылочная масса и сводная оценка.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "details",
                        "in": "query",
                        "required": false,
                        "description": "Добавить интегральные оценки проекта.",
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ],
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "domain": "tools.pixelplus.ru",
                                    "main_mirror": "https://tools.pixelplus.ru/",
                                    "aliases": "",
                                    "status": "1"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/project/parse": {
            "get": {
                "tags": [
                    "project"
                ],
                "operationId": "project_parse",
                "summary": "Внеплановая проверка позиций",
                "description": "Ставит запросы проекта в очередь на съём позиций, не дожидаясь расписания. Если по проекту уже идёт незакрытый апдейт, новая проверка не запускается — в ответе придёт дата начала текущего.Проверка расходует лимиты по тарифу — столько же, сколько плановый съём по расписанию. Сколько уйдёт за месяц, показывает project/limits-forecast.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "message": "Queries of project 7002 goes to recheck (1500)"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/project/stop": {
            "get": {
                "tags": [
                    "project"
                ],
                "operationId": "project_stop",
                "summary": "Поставить проект на паузу",
                "description": "Останавливает плановые проверки проекта и запоминает его расписание, чтобы project/start вернул всё как было. Данные проекта не удаляются.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": [
                                        "Project successfully stopped"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/project/start": {
            "get": {
                "tags": [
                    "project"
                ],
                "operationId": "project_start",
                "summary": "Снять проект с паузы",
                "description": "Возвращает расписание, которое было до паузы, и проверки снова идут по нему.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": [
                                        "Project successfully started"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/project/traffic": {
            "get": {
                "tags": [
                    "project"
                ],
                "operationId": "project_traffic",
                "summary": "Трафик проекта",
                "description": "Визиты по дням, неделям или месяцам: без ss_id — всего по Метрике, с ss_id — из одной поисковой системы. Нужна подключённая к проекту Яндекс Метрика.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Начало периода, ГГГГ-ММ-ДД. Без него — с первых данных.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Конец периода включительно. Без него — по последний день.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "ss_id",
                        "in": "query",
                        "required": false,
                        "description": "Поисковая система из search-systems/get. Без него — весь трафик по Метрике.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "grouping",
                        "in": "query",
                        "required": false,
                        "description": "Шаг группировки.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "d",
                                "w",
                                "m"
                            ],
                            "default": "d"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": [
                                        {
                                            "date": "2026-09-01",
                                            "value": 1840
                                        },
                                        {
                                            "date": "2026-09-02",
                                            "value": 1912
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/project/limits-forecast": {
            "get": {
                "tags": [
                    "project"
                ],
                "operationId": "project_limits-forecast",
                "summary": "Прогноз расхода лимитов",
                "description": "Сколько лимитов спишется по проекту за 30 дней вперёд при текущих настройках. Это то же число, что калькулятор в настройках проекта и колонка «Лимитов за 30 дней» в списке проектов — расчёт один.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "project_id": 7002,
                                        "days": 30,
                                        "limits": 462330
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/groups/get": {
            "get": {
                "tags": [
                    "groups"
                ],
                "operationId": "groups_get",
                "summary": "Список групп",
                "description": "Группы проекта и системная группа «Общая» (id 1). Отдаётся массивом без обёртки status/result.Тип группы метод не фильтрует, поэтому в списке могут оказаться и группы URL проекта. Класть в них поисковые запросы нельзя: add, delete и move такие группы не примут.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "id": "1",
                                        "name": "Общая"
                                    },
                                    {
                                        "id": "22150",
                                        "name": "Брендовые"
                                    },
                                    {
                                        "id": "22151",
                                        "name": "Коммерческие"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/groups/add": {
            "post": {
                "tags": [
                    "groups"
                ],
                "operationId": "groups_add",
                "summary": "Создать группу",
                "description": "Создаёт группу и, если переданы queries, добавляет в неё новые запросы. Если группа с таким названием в проекте уже есть (или это «Общая»), новая не создаётся — запросы добавятся в существующую. Больше 50 запросов добавляются в фоне: ответ приходит сразу, по завершении придёт уведомление.Число запросов в проекте ограничено так же, как в интерфейсе. Если новые запросы не помещаются, ни один не добавляется и придёт ошибка 52, но сама группа при этом уже создана.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API владельца проекта или пользователя с доступом на запись. Промо- и тестовый ключи не принимаются.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "message": "Готово.",
                                        "group_id": 22152
                                    }
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "Название группы."
                                    },
                                    "order": {
                                        "type": "integer",
                                        "default": 100,
                                        "description": "Сортировка группы в списке. 0 тоже даёт значение по умолчанию."
                                    },
                                    "queries": {
                                        "type": "array",
                                        "description": "Фразы для группы: массив или строка через |. Фразы чистятся от спецсимволов и, без keep_case, приводятся к нижнему регистру."
                                    },
                                    "keep_case": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Сохранить регистр фраз."
                                    }
                                },
                                "required": [
                                    "project_id",
                                    "name"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/groups/delete": {
            "post": {
                "tags": [
                    "groups"
                ],
                "operationId": "groups_delete",
                "summary": "Удалить группы",
                "description": "Удаляет группы проекта. Запросы по умолчанию не теряются: они переезжают в «Общую» или в группу move_to_group_id вместе со всеми позициями и историей. Системную группу «Общая» удалить нельзя.С with_queries=1 вместе с группами безвозвратно удаляются их запросы с историей позиций — в том числе те, что состоят ещё и в других группах. Больше 50 запросов удаляются в фоне.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API владельца проекта или пользователя с доступом на запись. Промо- и тестовый ключи не принимаются.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "message": "Группы удалены, запросы перенесены.",
                                        "deleted": [
                                            22150,
                                            22151
                                        ]
                                    }
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get."
                                    },
                                    "group_ids": {
                                        "type": "array",
                                        "description": "ID групп из groups/get: массив или строка через запятую. Для одной группы можно передать group_id."
                                    },
                                    "move_to_group_id": {
                                        "type": "integer",
                                        "default": 1,
                                        "description": "Куда перенести запросы удаляемых групп. Своя группа проекта или «Общая». Не учитывается при with_queries=1."
                                    },
                                    "with_queries": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Удалить группы вместе с запросами."
                                    }
                                },
                                "required": [
                                    "project_id",
                                    "group_ids"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/groups/move": {
            "post": {
                "tags": [
                    "groups"
                ],
                "operationId": "groups_move",
                "summary": "Перенести запросы в другую группу",
                "description": "Убирает запросы из группы from_group_id и добавляет в группу назначения. Меняется только связь «запрос — группа»: позиции, история, продвигаемые URL и частоты привязаны к самому запросу и остаются при нём. Остальные группы запроса не затрагиваются. Перенос атомарный — при сбое ни один запрос не окажется вне обеих групп.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API владельца проекта или пользователя с доступом на запись. Промо- и тестовый ключи не принимаются.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "message": "Готово.",
                                        "action": "move",
                                        "count": 2
                                    }
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get."
                                    },
                                    "query_ids": {
                                        "type": "array",
                                        "description": "ID запросов проекта (из queries/get): массив или строка через запятую, до 1000. Все должны быть из этого проекта и состоять в from_group_id, иначе ничего не переносится и придёт ошибка 52 со списком лишних ID."
                                    },
                                    "from_group_id": {
                                        "type": "integer",
                                        "description": "Группа, из которой переносятся запросы."
                                    },
                                    "group_id": {
                                        "type": "integer",
                                        "description": "Группа назначения: своя группа проекта или «Общая». Нужен этот параметр или group_name."
                                    },
                                    "group_name": {
                                        "type": "string",
                                        "description": "Название группы назначения вместо group_id: найдётся или создастся. Приоритетнее group_id."
                                    }
                                },
                                "required": [
                                    "project_id",
                                    "query_ids",
                                    "from_group_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/queries/get": {
            "get": {
                "tags": [
                    "queries"
                ],
                "operationId": "queries_get",
                "summary": "Список запросов",
                "description": "Запросы проекта в порядке добавления, с группой и частотой в регионе частот проекта. Отдаётся массивом без обёртки status/result.Запрос из нескольких групп даёт по строке на каждую группу, запрос без групп — одну строку с group_id: null. offset и limit считают именно строки, а не запросы.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "required": false,
                        "description": "Сколько строк пропустить.",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Сколько строк отдать. 0 или без параметра — 50 000.",
                        "schema": {
                            "type": "integer",
                            "default": 50000
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "id": "8797228",
                                        "query": "pixeltools инструменты",
                                        "group_id": "1",
                                        "frequency": "1000",
                                        "frequency_type": "exact"
                                    },
                                    {
                                        "id": "8797229",
                                        "query": "pixeltools.ru",
                                        "group_id": "1",
                                        "frequency": "1000",
                                        "frequency_type": "exact"
                                    },
                                    {
                                        "id": "8797229",
                                        "query": "pixeltools.ru",
                                        "group_id": "22150",
                                        "frequency": "1000",
                                        "frequency_type": "exact"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/queries/set": {
            "get": {
                "tags": [
                    "queries"
                ],
                "operationId": "queries_set",
                "summary": "Добавление запросов",
                "description": "Добавляет фразы в проект и при необходимости привязывает их к группе и продвигаемому URL. Фразы, которые в проекте уже есть, повторно не создаются, но группа и URL к ним применяются. После добавления новых запросов делается то же, что в интерфейсе: запускается сбор частот, сбрасываются кэши, в сводку проекта пишется событие.Без group и group_id новые запросы попадают в «Общую» (id 1), а группы уже существующих не меняются.С группой и group_mode=replace (по умолчанию) у каждой переданной фразы снимаются все прежние группы. group_mode=add добавляет группу к прежним.Все параметры читаются только из query-строки, в том числе при POST. URL применяется ко всем переданным фразам, включая уже существующие: без url продвигаемый URL у них сбросится.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "queries",
                        "in": "query",
                        "required": true,
                        "description": "Фразы через |. Чистятся от спецсимволов и лишних пробелов, регистр сохраняется.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "group",
                        "in": "query",
                        "required": false,
                        "description": "Название группы. Если в проекте такой нет — создаётся. «Общая» указывает на системную группу (id 1).",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "group_id",
                        "in": "query",
                        "required": false,
                        "description": "ID группы из groups/get: своя группа проекта или «Общая». Приоритетнее group, новых групп не создаёт.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "group_mode",
                        "in": "query",
                        "required": false,
                        "description": "Что делать с прежними группами фраз, когда группа задана.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "replace",
                                "add"
                            ],
                            "default": "replace"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": false,
                        "description": "Продвигаемый URL для всех переданных фраз.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "id": 12052800,
                                    "query": "диван недорого"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/queries/delete": {
            "post": {
                "tags": [
                    "queries"
                ],
                "operationId": "queries_delete",
                "summary": "Удаление запросов",
                "description": "Ставит удаление запросов в очередь и сразу отвечает. Запросы удаляются в фоне вместе с историей позиций, безвозвратно. ID, которые не принадлежат проекту, молча отбрасываются — в count только запросы этого проекта.project_id и queries_id читаются из JSON-тела, формы или query-строки (в форме и query — queries_id[]=…). token — только из query-строки.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "status": "ok",
                                        "message": "Удаление запросов поставлено в очередь",
                                        "count": 2
                                    }
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get."
                                    },
                                    "queries_id": {
                                        "type": "array",
                                        "description": "Массив ID запросов из queries/get."
                                    }
                                },
                                "required": [
                                    "project_id",
                                    "queries_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/updates/get": {
            "get": {
                "tags": [
                    "updates"
                ],
                "operationId": "updates_get",
                "summary": "Список апдейтов",
                "description": "Только завершённые апдейты: идущая сейчас проверка в список не попадает. Отдаётся массивом без обёртки status/result.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "required": false,
                        "description": "Сколько апдейтов пропустить.",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Сколько апдейтов отдать. 0 или без параметра — все.",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "id": "21762",
                                        "date": "2026-09-25 14:22:32"
                                    },
                                    {
                                        "id": "21530",
                                        "date": "2026-09-23 11:15:34"
                                    },
                                    {
                                        "id": "21083",
                                        "date": "2026-09-19 11:27:40"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/positions/get": {
            "get": {
                "tags": [
                    "positions"
                ],
                "operationId": "positions_get",
                "summary": "Позиции за апдейт",
                "description": "Позиции отдаются массивом без обёртки status/result. offset и limit считают запросы, а не строки: на каждый запрос приходит по строке на каждую пару «поисковая система + регион» проекта. Какие запросы попадут на страницу, решает сортировка проекта в интерфейсе; внутри страницы строки идут по ID запроса.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "update_id",
                        "in": "query",
                        "required": false,
                        "description": "ID апдейта из updates/get. Без него — последний завершённый апдейт проекта. Апдейт другого проекта даёт пустой массив.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "group_id",
                        "in": "query",
                        "required": false,
                        "description": "Только запросы группы из groups/get. -1 — запросы без группы. Без параметра или 0 — все.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "region",
                        "in": "query",
                        "required": false,
                        "description": "Код региона: только строки этого региона. Без параметра — все регионы проекта.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "required": false,
                        "description": "Сколько запросов пропустить.",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Сколько запросов отдать. 0 или без параметра — 1000.",
                        "schema": {
                            "type": "integer",
                            "default": 1000
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "position": "1",
                                        "id": "8797228",
                                        "rel_url": "https://tools.pixelplus.ru/",
                                        "query": "pixeltools инструменты",
                                        "group_id": "1",
                                        "group_name": "Общая",
                                        "update_id": "21762",
                                        "search_system_id": "1",
                                        "search_system_name": "Яндекс",
                                        "region": "213",
                                        "region_name": "Москва",
                                        "frequency": "554",
                                        "deep": "100"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/projects/get": {
            "get": {
                "tags": [
                    "projects"
                ],
                "operationId": "projects_get",
                "summary": "Проекты аккаунта",
                "description": "Массив проектов без обёртки status/result. Порядок — как в списке проектов в интерфейсе: по названию (или домену, если названия нет), проекты на паузе — в конце.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов. Промо- и тестовый ключи не подходят: нужен ключ конкретного пользователя.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "id": "7002",
                                        "name": "Пиксель Тулс",
                                        "domain": "tools.pixelplus.ru",
                                        "main_mirror": "https://tools.pixelplus.ru/",
                                        "aliases": "",
                                        "date_update": "2026-09-06 01:10:43",
                                        "status": "1"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/competitors/get": {
            "get": {
                "tags": [
                    "competitors"
                ],
                "operationId": "competitors_get",
                "summary": "Конкуренты за период",
                "description": "Берёт апдейты позиций проекта в интервале from–to. Таблица table_data — значения на самом свежем апдейте интервала и разница с самым старым; chart_data — значения по каждому апдейту для графика. Домен проекта и домены из списка конкурентов в настройках проекта есть в ответе всегда — с нулями, если в выдаче их не нашлось.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "search_system_id",
                        "in": "query",
                        "required": false,
                        "description": "ID поисковой системы проекта из search-systems/get или all — сводно по всем системам проекта.",
                        "schema": {
                            "type": "string",
                            "default": "all"
                        }
                    },
                    {
                        "name": "from",
                        "in": "query",
                        "required": false,
                        "description": "Начало периода, ГГГГ-ММ-ДД. По умолчанию — 30 дней до to. Раньше даты создания проекта и раньше 2020-03-30 не опускается.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Конец периода. По умолчанию и при дате в будущем — сегодня.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "types",
                        "in": "query",
                        "required": false,
                        "description": "Типы конкурентов. Одно значение строкой или несколько как types[]=primary&amp;types[]=direct.",
                        "schema": {
                            "type": "array",
                            "enum": [
                                "all",
                                "primary",
                                "direct",
                                "indirect"
                            ],
                            "default": "all"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "table_data": {
                                            "2969": {
                                                "domain_id": "2969",
                                                "ss_id_arr": [
                                                    "1",
                                                    "324"
                                                ],
                                                "update_id": "1731570",
                                                "domain": "example.ru",
                                                "visibility_arr": {
                                                    "1": {
                                                        "weight": 1,
                                                        "value": "1.7"
                                                    },
                                                    "324": {
                                                        "weight": 0.86,
                                                        "value": "0.1"
                                                    }
                                                },
                                                "ctr_ws_arr": {
                                                    "1": "1760.7",
                                                    "324": "147.0"
                                                },
                                                "top_ten_arr": {
                                                    "1": "1",
                                                    "324": "1"
                                                },
                                                "top_hundred_arr": {
                                                    "1": "2",
                                                    "324": "1"
                                                },
                                                "type_id": "3",
                                                "ss_id": "all",
                                                "visibility": 0.8,
                                                "ctr_ws": 1907.7,
                                                "top_ten": 2,
                                                "top_hundred": 3,
                                                "visibility_delta": -5.1,
                                                "ctr_ws_delta": -2623.2,
                                                "top_ten_delta": -1,
                                                "top_hundred_delta": -7
                                            }
                                        },
                                        "chart_data": {
                                            "default_domains": [
                                                "example.ru"
                                            ],
                                            "visibility": {
                                                "example.ru": [
                                                    {
                                                        "x": "01.09.2026",
                                                        "y": 5.9
                                                    },
                                                    {
                                                        "x": "05.09.2026",
                                                        "y": 0.8
                                                    }
                                                ]
                                            },
                                            "ctr_ws": {
                                                "example.ru": [
                                                    {
                                                        "x": "01.09.2026",
                                                        "y": 4530.9
                                                    },
                                                    {
                                                        "x": "05.09.2026",
                                                        "y": 1907.7
                                                    }
                                                ]
                                            },
                                            "top_ten": {
                                                "example.ru": [
                                                    {
                                                        "x": "01.09.2026",
                                                        "y": 3
                                                    },
                                                    {
                                                        "x": "05.09.2026",
                                                        "y": 2
                                                    }
                                                ]
                                            },
                                            "top_hundred": {
                                                "example.ru": [
                                                    {
                                                        "x": "01.09.2026",
                                                        "y": 10
                                                    },
                                                    {
                                                        "x": "05.09.2026",
                                                        "y": 3
                                                    }
                                                ]
                                            },
                                            "options": {
                                                "visibility": {
                                                    "max": 100,
                                                    "min": 0,
                                                    "y_axis": "Проценты"
                                                },
                                                "ctr_ws": {
                                                    "max": 4530.9,
                                                    "min": 0,
                                                    "y_axis": "Хиты"
                                                },
                                                "top_ten": {
                                                    "max": 3,
                                                    "min": 0,
                                                    "y_axis": "Хиты"
                                                },
                                                "top_hundred": {
                                                    "max": 10,
                                                    "min": 0,
                                                    "y_axis": "Хиты"
                                                }
                                            }
                                        },
                                        "user_domain_types": {
                                            "1": {
                                                "id": "1",
                                                "name": "Ключевой",
                                                "slug": "primary",
                                                "order_by": "10"
                                            },
                                            "2": {
                                                "id": "2",
                                                "name": "Прямой",
                                                "slug": "direct",
                                                "order_by": "20"
                                            },
                                            "3": {
                                                "id": "3",
                                                "name": "Косвенный",
                                                "slug": "indirect",
                                                "order_by": "30"
                                            }
                                        },
                                        "ss_name": "Все поисковые системы",
                                        "ss_region": ""
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/search-systems/get": {
            "get": {
                "tags": [
                    "search-systems"
                ],
                "operationId": "search-systems_get",
                "summary": "Список поисковых систем",
                "description": "Каждая запись — пара «поисковая система + регион», подключённая к проекту. Её id передаётся как ss_id в project/traffic и как search_system_id в competitors/get.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "project": 7002,
                                        "search_systems": [
                                            {
                                                "id": 1,
                                                "name": "Яндекс (Москва)",
                                                "is_priority": 1,
                                                "region": {
                                                    "id": "213",
                                                    "name": "Москва"
                                                },
                                                "engine": {
                                                    "id": "1",
                                                    "name": "Яндекс",
                                                    "alias": "yandex"
                                                }
                                            },
                                            {
                                                "id": 324,
                                                "name": "Яндекс (мобильный) (Москва)",
                                                "is_priority": 0,
                                                "region": {
                                                    "id": "213",
                                                    "name": "Москва"
                                                },
                                                "engine": {
                                                    "id": "7",
                                                    "name": "Яндекс (мобильный)",
                                                    "alias": "yandex-mobile"
                                                }
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/uptime/get": {
            "get": {
                "tags": [
                    "uptime"
                ],
                "operationId": "uptime_get",
                "summary": "История доступности",
                "description": "Массив интервалов за выбранный период: в каждом — процент успешных проверок и признак блокировки бота. Интервалы идут подряд без пропусков, включая те, где проверок не было.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "period",
                        "in": "query",
                        "required": false,
                        "description": "Период выборки и шаг интервала.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "day",
                                "week",
                                "two_weeks",
                                "month",
                                "quarter"
                            ],
                            "default": "day"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": [
                                        {
                                            "date": "2026-09-15 10:00",
                                            "percent": 100,
                                            "bot_blocked": false
                                        },
                                        {
                                            "date": "2026-09-15 11:00",
                                            "percent": 0,
                                            "bot_blocked": true
                                        },
                                        {
                                            "date": "2026-09-15 12:00",
                                            "percent": null,
                                            "bot_blocked": null
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/audit/get": {
            "get": {
                "tags": [
                    "audit"
                ],
                "operationId": "audit_get",
                "summary": "Все результаты аудита",
                "description": "Последний результат каждой техпроверки, отмеченной в настройках проекта, одним объектом — те же данные, из которых строится вкладка «Аудит».Формат ответа служебный: это внутренняя структура страницы аудита, без обёртки status/result, и она меняется вместе с интерфейсом. Для интеграций надёжнее audit/pages, audit/getsummary и audit/robots.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "tools_dates": {
                                        "fast-audit": "28.09.2026",
                                        "server-response": "28.09.2026",
                                        "links": "21.09.2026"
                                    },
                                    "fast-audit": {
                                        "index_test": 1240,
                                        "index_test_site": 1310,
                                        "google_index": 980,
                                        "google_index_inurl": 1015,
                                        "index_test_delta": 12,
                                        "warning": false
                                    },
                                    "server-response": [
                                        {
                                            "url": "https://example.ru/",
                                            "code": 200
                                        }
                                    ],
                                    "global-warning": true
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/audit/pages": {
            "get": {
                "tags": [
                    "audit"
                ],
                "operationId": "audit_pages",
                "summary": "Индексация страниц в Яндексе и Google",
                "description": "Число страниц сайта в индексе Яндекса и Google по последнему быстрому аудиту и изменение с прошлой проверки. Нужен результат быстрого аудита — он входит в технические проверки проекта.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "index_yandex": 1240,
                                    "index_yandex_site": 1240,
                                    "delta_yandex": 12,
                                    "delta_yandex_site": null,
                                    "index_google": 980,
                                    "index_google_inurl": 1015,
                                    "delta_google": -4,
                                    "delta_google_inurl": null,
                                    "date": "28.09.2026"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/audit/getsummary": {
            "get": {
                "tags": [
                    "audit"
                ],
                "operationId": "audit_getsummary",
                "summary": "Сводка предупреждений",
                "description": "Есть ли проблемы по двум проверкам: поиск поддоменов (indexed-domains — предупреждение, если поддоменов не найдено) и коды ответа страниц (server-response — предупреждение, если хоть одна страница ответила не 200). Остальные проверки в сводку не входят.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "ID": "indexed-domains",
                                        "title": "",
                                        "warning": false,
                                        "date": "28.09.2026"
                                    },
                                    {
                                        "ID": "server-response",
                                        "title": "",
                                        "warning": true,
                                        "date": "28.09.2026"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/audit/robots": {
            "get": {
                "tags": [
                    "audit"
                ],
                "operationId": "audit_robots",
                "summary": "История robots.txt",
                "description": "Все сохранённые версии robots.txt проекта, отличия каждой от предыдущей и URL, закрытые от индексации по последней проверке. Новая версия сохраняется, только когда файл изменился.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "robots_warning": true,
                                        "robots_txt": [
                                            {
                                                "id": "5121",
                                                "project_id": "7002",
                                                "robots": "User-agent: *\nDisallow: /admin/\nDisallow: /search/\nSitemap: https://example.ru/sitemap.xml",
                                                "dt": "2026-09-28 04:12:09"
                                            },
                                            {
                                                "id": "4870",
                                                "project_id": "7002",
                                                "robots": "User-agent: *\nDisallow: /admin/\nSitemap: https://example.ru/sitemap.xml",
                                                "dt": "2026-08-14 03:55:41"
                                            }
                                        ],
                                        "robots_compare": {
                                            "5121": {
                                                "old": [
                                                    "Disallow: /search/"
                                                ],
                                                "new": []
                                            },
                                            "4870": {
                                                "old": [],
                                                "new": []
                                            }
                                        },
                                        "robots_urls_list": [
                                            {
                                                "url": "https://example.ru/search/?q=1",
                                                "dt": "2026-09-28",
                                                "pid": "7002",
                                                "rule": "Disallow: /search/"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/service-robotstxt/get": {
            "get": {
                "tags": [
                    "audit"
                ],
                "operationId": "audit_service-robotstxt",
                "summary": "Последние изменения robots.txt (служебный)",
                "description": "Облегчённый вариант audit/robots: только последние limit версий и их отличия, без списка закрытых URL, плюс имя и домен проекта.Метод служебный, сделан для внешнего сервиса: формат ответа не такой, как у остальных методов группы, — без code и msg, а ошибка доступа приходит текстом в message.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Сколько последних версий отдать.",
                        "schema": {
                            "type": "integer",
                            "default": 3
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "id": "7002",
                                    "name": "Мой сайт",
                                    "domain": "example.ru",
                                    "result": {
                                        "warnings": true,
                                        "tools_result": {
                                            "robots_txt": [
                                                {
                                                    "id": "5121",
                                                    "project_id": "7002",
                                                    "robots": "User-agent: *\nDisallow: /admin/\nDisallow: /search/\nSitemap: https://example.ru/sitemap.xml",
                                                    "dt": "2026-09-28 04:12:09"
                                                },
                                                {
                                                    "id": "4870",
                                                    "project_id": "7002",
                                                    "robots": "User-agent: *\nDisallow: /admin/\nSitemap: https://example.ru/sitemap.xml",
                                                    "dt": "2026-08-14 03:55:41"
                                                }
                                            ],
                                            "robots_compare": {
                                                "5121": {
                                                    "old": [
                                                        "Disallow: /search/"
                                                    ],
                                                    "new": []
                                                },
                                                "4870": {
                                                    "old": [],
                                                    "new": []
                                                }
                                            }
                                        }
                                    },
                                    "status": "success"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/summary/visibility/get": {
            "get": {
                "tags": [
                    "summary"
                ],
                "operationId": "summary_visibility-get",
                "summary": "Динамика видимости",
                "description": "Видимость сайта, сводно по всем поисковым системам проекта, на каждый апдейт позиций за период, который заканчивается датой to. Длина периода — интервал сводки из настроек проектов (обычно 30 дней), но не раньше даты создания проекта.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "to",
                        "in": "query",
                        "required": false,
                        "description": "Конец периода, ГГГГ-ММ-ДД, не позже сегодняшнего дня.",
                        "schema": {
                            "type": "string",
                            "default": "сегодня"
                        }
                    },
                    {
                        "name": "mode",
                        "in": "query",
                        "required": false,
                        "description": "Что отдать.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "monthly",
                                "last"
                            ],
                            "default": "monthly"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": [
                                        {
                                            "date": "2026-09-21",
                                            "visibility": 34.2
                                        },
                                        {
                                            "date": "2026-09-28",
                                            "visibility": 36.8
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/summary/visibility/change": {
            "get": {
                "tags": [
                    "summary"
                ],
                "operationId": "summary_visibility-change",
                "summary": "Изменение видимости между апдейтами",
                "description": "Видимость на выбранном апдейте и на предыдущем (закончившемся в другой день) — сводно и по каждой поисковой системе проекта, — и признак резкого падения по порогам из настроек проектов. Без update_id и date_update берётся последний успешный апдейт.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "update_id",
                        "in": "query",
                        "required": false,
                        "description": "ID апдейта из updates/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "date_update",
                        "in": "query",
                        "required": false,
                        "description": "Вместо update_id: апдейт, закончившийся в эту дату, а если такого нет — ближайший после неё. Важнее update_id.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "updates": {
                                            "current": {
                                                "id": "1731570",
                                                "project_id": "7002",
                                                "dt_start": "2026-09-28 03:00:12",
                                                "dt_end": "2026-09-28 05:41:37",
                                                "positions": "2",
                                                "ctrws": "1",
                                                "vidimost": "1",
                                                "status": "2",
                                                "queries_count": "1500"
                                            },
                                            "previous": {
                                                "id": "1729911",
                                                "project_id": "7002",
                                                "dt_start": "2026-09-21 03:00:08",
                                                "dt_end": "2026-09-21 05:12:50",
                                                "positions": "2",
                                                "ctrws": "1",
                                                "vidimost": "1",
                                                "status": "2",
                                                "queries_count": "1500"
                                            }
                                        },
                                        "dictionary": {
                                            "0": "Все поисковые системы",
                                            "1": "Яндекс (Москва)",
                                            "324": "Яндекс (мобильный) (Москва)"
                                        },
                                        "search_systems_data": {
                                            "0": {
                                                "current": 36.8,
                                                "previous": 34.2,
                                                "diff": 2.6
                                            },
                                            "1": {
                                                "current": 41.5,
                                                "previous": 38,
                                                "diff": 3.5
                                            },
                                            "324": {
                                                "current": 32.1,
                                                "previous": 30.4,
                                                "diff": 1.7
                                            }
                                        },
                                        "limits": {
                                            "absolute": 5,
                                            "relative": 10
                                        },
                                        "warnings": {
                                            "status": false
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/summary/potential/get": {
            "get": {
                "tags": [
                    "summary"
                ],
                "operationId": "summary_potential-get",
                "summary": "Реализация потенциала трафика",
                "description": "Какую долю от максимально возможного трафика сайт собирает на последнем апдейте: прогнозный трафик по текущим позициям относительно трафика, если бы все запросы стояли на первом месте. Сводно по всем поисковым системам проекта.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "date": "2026-09-28",
                                        "potential": 18
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/integrals/get": {
            "get": {
                "tags": [
                    "summary"
                ],
                "operationId": "summary_integrals-get",
                "summary": "Интегральные оценки",
                "description": "Последние значения трёх оценок проекта: внутренняя оптимизация (intopt), ссылочная масса (extopt) и поведенческие факторы (pf). С date — последние значения на эту дату. Те же оценки вместе со сводной отдаёт project/get с details=1.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "date",
                        "in": "query",
                        "required": false,
                        "description": "Взять значения, рассчитанные не позже этой даты, ГГГГ-ММ-ДД. На pf не действует — для него всегда последнее значение.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "intopt": {
                                        "date": "2026-09-28 06:10:44",
                                        "value": "72"
                                    },
                                    "extopt": {
                                        "date": "2026-09-21 07:02:18",
                                        "value": "41"
                                    },
                                    "pf": {
                                        "date": "1970-01-01",
                                        "value": "N/A"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/urls/get": {
            "get": {
                "tags": [
                    "urls"
                ],
                "operationId": "urls_get",
                "summary": "Список целевых URL",
                "description": "Целевой URL задаётся запросу в интерфейсе проекта или параметром url в queries/set. Какие запросы ведут на какой URL, этот метод не показывает — только сам список адресов.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    "https://example.ru/",
                                    "https://example.ru/catalog/",
                                    "https://example.ru/delivery/",
                                    ""
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/reports/get": {
            "get": {
                "tags": [
                    "reports"
                ],
                "operationId": "reports_reports-get",
                "summary": "Список отчётов",
                "description": "Отчёты проекта от новых к старым.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Сколько последних отчётов отдать. 0 или без параметра — все.",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": [
                                        {
                                            "id": "3f9a2c7e51b04d8e9a6c1f20b7d4e815",
                                            "status": "done",
                                            "date": "2026-10-01",
                                            "domain": "example.ru",
                                            "from": "2026-09-01",
                                            "to": "2026-09-30",
                                            "compare_from": "2026-08-01",
                                            "compare_to": "2026-08-31"
                                        },
                                        {
                                            "id": "b81e04c96d2f4a7f8c35e9d1a0f6b273",
                                            "status": "in progress",
                                            "date": "2026-10-06",
                                            "domain": "example.ru",
                                            "from": "2026-09-06",
                                            "to": "2026-10-06"
                                        }
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/report/get": {
            "get": {
                "tags": [
                    "reports"
                ],
                "operationId": "reports_report-get",
                "summary": "Отчёт и ссылки на файлы",
                "description": "Статус одного отчёта и ссылки на его файлы, если они уже сформированы. Файл PDF формируется из интерфейса; файл Word можно заказать через report/file/get.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID отчёта — поле id из reports/get.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "status": "done",
                                        "date": "2026-10-01",
                                        "domain": "example.ru",
                                        "from": "2026-09-01",
                                        "to": "2026-09-30",
                                        "files": {
                                            "docx": {
                                                "status": true,
                                                "link": "https://tools.pixelplus.ru/projects/shared/download_reports_docx/3f9a2c7e51b04d8e9a6c1f20b7d4e815"
                                            },
                                            "pdf": {
                                                "status": false,
                                                "link": ""
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/projects/api/v1/report/file/get": {
            "get": {
                "tags": [
                    "reports"
                ],
                "operationId": "reports_report-file-get",
                "summary": "Файл отчёта в Word",
                "description": "Если файл Word уже есть — отдаёт ссылку. Если нет — ставит его на формирование и отвечает in progress; повторный вызов, пока файл готовится, второй задачи не создаёт. Опрашивайте метод раз в несколько секунд, пока status не станет done. Метод отдаёт ссылку, а не сам файл.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта — тот же, что key у методов инструментов.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "project_id",
                        "in": "query",
                        "required": true,
                        "description": "ID проекта. Виден в адресе страницы проекта и в ответе projects/get.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID отчёта — поле id из reports/get.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "ok",
                                    "code": 1,
                                    "msg": "success",
                                    "result": {
                                        "files": {
                                            "docx": {
                                                "status": "in progress",
                                                "link": ""
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/geo": {
            "post": {
                "tags": [
                    "geo"
                ],
                "operationId": "geo_create",
                "summary": "Постановка задачи",
                "description": "Принимает список запросов и регион, ставит задачу в очередь и сразу отвечает её номером. Параметры задачи читаются из тела запроса; key — из query-строки.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Передаётся в query-строке и у POST-запроса тоже.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18736512
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "Запросы для проверки: массив requests[] или одна строка, где запросы разделены переводом строки \\r\\n (строка очищается от пустых строк и дублей)."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "default": 213,
                                        "description": "Регион Яндекса, код lr. Его название и синонимы и ищутся в выдаче."
                                    },
                                    "deep": {
                                        "type": "integer",
                                        "default": 50,
                                        "description": "Сколько позиций ТОПа анализировать, от 1 до 50. Значение вне диапазона заменяется на 50."
                                    },
                                    "intent": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Добавить в ответ коммерциализацию запросов (блок data). Включается любым непустым значением — даже строкой false; чтобы выключить, не передавайте параметр."
                                    },
                                    "search_system": {
                                        "type": "string",
                                        "enum": [
                                            "yandex",
                                            "google"
                                        ],
                                        "default": "yandex",
                                        "description": "Поисковая система. Неизвестное значение заменяется на yandex.Сейчас google принимается, но не учитывается: проверка всегда идёт по выдаче Яндекса, и стоимость считается как для Яндекса."
                                    }
                                },
                                "required": [
                                    "requests"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "geo"
                ],
                "operationId": "geo_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, метод отвечает ошибкой 50 «In progress» — повторите запрос позже. Готовый результат хранится в истории инструмента, его можно забирать повторно.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Передаётся в query-строке и у POST-запроса тоже.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "Номер задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "request": {
                                        "queries": [
                                            "мебель",
                                            "офисная мебель купить"
                                        ],
                                        "lr": "213",
                                        "ss": "yandex",
                                        "comm": "1",
                                        "deep": 50
                                    },
                                    "response": {
                                        "data": {
                                            "мебель": {
                                                "thematic_words": [
                                                    "диван",
                                                    "шкаф",
                                                    "кухня",
                                                    "каталог",
                                                    "цена"
                                                ],
                                                "com": 90,
                                                "rev": 6,
                                                "media": 8,
                                                "lex": 0,
                                                "music": 0,
                                                "trav": 0
                                            },
                                            "офисная мебель купить": {
                                                "thematic_words": [
                                                    "кресло",
                                                    "стол",
                                                    "офис",
                                                    "цена",
                                                    "доставка"
                                                ],
                                                "com": 98,
                                                "rev": 4,
                                                "media": 2,
                                                "lex": 0,
                                                "music": 0,
                                                "trav": 0
                                            }
                                        },
                                        "res_array": {
                                            "мебель": "Да",
                                            "офисная мебель купить": "Да"
                                        },
                                        "local_pow": {
                                            "мебель": 46,
                                            "офисная мебель купить": 70
                                        }
                                    },
                                    "time": "1759742512",
                                    "cost": 2
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/ytcy": {
            "get": {
                "tags": [
                    "ytcy"
                ],
                "operationId": "ytcy_get",
                "summary": "тИЦ сайта",
                "description": "",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": true,
                        "description": "Адрес сайта; без протокола подставляется http://.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "tcy": "0",
                                    "rang": "0",
                                    "yaca": false,
                                    "yaca_cat": false
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/advanced": {
            "get": {
                "tags": [
                    "advanced"
                ],
                "operationId": "advanced_get",
                "summary": "Позиции сайта по зонам документа",
                "description": "Из url берётся домен; позиция — первый документ этого домена или его поддоменов в выдаче. Все параметры читаются только из query-строки.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": true,
                        "description": "Адрес или домен сайта. Кириллический домен переводится в punycode.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Поисковый запрос.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lr",
                        "in": "query",
                        "required": true,
                        "description": "Регион Яндекса, код lr.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "type": "Исходный запрос",
                                        "position": 4,
                                        "rel_url": "https://pixelplus.ru/services/seo/"
                                    },
                                    {
                                        "type": "Поиск по Title",
                                        "position": 2,
                                        "rel_url": "https://pixelplus.ru/services/seo/"
                                    },
                                    {
                                        "type": "Поиск по тексту",
                                        "position": 7,
                                        "rel_url": "https://pixelplus.ru/"
                                    },
                                    {
                                        "type": "Цитатный поиск",
                                        "position": 3,
                                        "rel_url": "https://pixelplus.ru/services/seo/"
                                    },
                                    {
                                        "type": "Без СПЕКТРа и СНСС",
                                        "position": "Ниже ТОП-100",
                                        "rel_url": "Не определен"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/reoptimization": {
            "get": {
                "tags": [
                    "reoptimization"
                ],
                "operationId": "reoptimization_get",
                "summary": "Вероятность фильтра",
                "description": "Все параметры читаются только из query-строки.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": true,
                        "description": "Адрес или домен проверяемого сайта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Поисковый запрос.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lr",
                        "in": "query",
                        "required": true,
                        "description": "Регион Яндекса, код lr.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "subdomain",
                        "in": "query",
                        "required": false,
                        "description": "Учитывать поддомены: любое непустое значение засчитывает в выдаче документы с поддоменов сайта. Без параметра нужен точный домен.",
                        "schema": {
                            "type": "boolean",
                            "default": false
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "res": "80%"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/gruppirovka": {
            "post": {
                "tags": [
                    "gruppirovka"
                ],
                "operationId": "gruppirovka_create",
                "summary": "Постановка задачи",
                "description": "Задача встаёт в очередь, лимиты списываются сразу при постановке. Пустые строки и точные повторы из requests отбрасываются до подсчёта количества и стоимости.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query-строке, в том числе у POST.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617068
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "Запросы, каждый отдельным элементом: requests[]=…&amp;requests[]=…. Строка с переводами строк не принимается — только массив."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "default": 213,
                                        "description": "Регион Яндекса, например 213 — Москва."
                                    },
                                    "method": {
                                        "type": "string",
                                        "enum": [
                                            "soft",
                                            "middle",
                                            "hard"
                                        ],
                                        "default": "hard",
                                        "description": "Алгоритм группировки. hard — у всех запросов группы должны быть одни и те же общие URL; middle — цепочкой: достаточно пересечения с любым запросом группы; soft — достаточно пересечения с первым запросом группы. Любое другое значение, в том числе числа, работает как hard."
                                    },
                                    "degree_group": {
                                        "type": "integer",
                                        "default": 3,
                                        "description": "Степень группировки: сколько общих URL в ТОП-10 нужно, чтобы запросы попали в одну группу."
                                    },
                                    "ws_queries": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Собрать частоты Вордстата. Тогда группа называется запросом с наибольшей точной частотой, а стоимость растёт до 4 лимитов за запрос."
                                    }
                                },
                                "required": [
                                    "requests"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "gruppirovka"
                ],
                "operationId": "gruppirovka_result",
                "summary": "Получение результата",
                "description": "Пока задача в работе, приходит {\"error\":\"In progress\",\"code\":50}, а после старта обработки — ещё процент готовности. Обычно группировка занимает несколько минут, большое ядро — до получаса: опрашивайте раз в 30–60 секунд.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query-строке, в том числе у POST.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "time": 1759740000,
                                    "cost": 6,
                                    "0": {
                                        "request": "купить диван",
                                        "group": "купить диван"
                                    },
                                    "1": {
                                        "request": "диван купить в москве",
                                        "group": "купить диван"
                                    },
                                    "2": {
                                        "request": "угловой диван цена",
                                        "group": "угловой диван цена"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/analizsaitov": {
            "get": {
                "tags": [
                    "analizsaitov"
                ],
                "operationId": "analizsaitov_create",
                "summary": "Постановка задачи / Получение результата",
                "description": "Включите нужные проверки параметрами cb_*=on. Если не включена ни одна, выполняются все 13 и списываются лимиты за все — включая доноров (100 за домен). Лимиты списываются при постановке задачи.\n\nПока задача в работе, приходит {\"error\":\"In progress\",\"code\":50}. Опрашивайте раз в 10–30 секунд.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "domain",
                        "in": "query",
                        "required": true,
                        "description": "Домен или URL; несколько — через перевод строки (%0A). Невалидные строки пропускаются и попадают в incorrect_urls.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "cb_iks",
                        "in": "query",
                        "required": false,
                        "description": "ИКС Яндекса.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_ssl",
                        "in": "query",
                        "required": false,
                        "description": "SSL-сертификат: дата окончания или No.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_pages_yandex",
                        "in": "query",
                        "required": false,
                        "description": "Страниц в индексе Яндекса.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_pages_google",
                        "in": "query",
                        "required": false,
                        "description": "Страниц в индексе Google.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_ip",
                        "in": "query",
                        "required": false,
                        "description": "IP-адрес.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_response_code",
                        "in": "query",
                        "required": false,
                        "description": "Код ответа главной страницы и главное зеркало.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_age_main_yandex",
                        "in": "query",
                        "required": false,
                        "description": "Возраст главной страницы в Яндексе.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_age_whois",
                        "in": "query",
                        "required": false,
                        "description": "Возраст домена по WHOIS.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_dns",
                        "in": "query",
                        "required": false,
                        "description": "DNS-записи.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_out_links",
                        "in": "query",
                        "required": false,
                        "description": "Исходящих внешних ссылок с главной.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_cms",
                        "in": "query",
                        "required": false,
                        "description": "CMS сайта.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_traffic_average_daily",
                        "in": "query",
                        "required": false,
                        "description": "Среднесуточная посещаемость — 5 лимитов за домен.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_donors",
                        "in": "query",
                        "required": false,
                        "description": "Уникальных доноров — 100 лимитов за домен.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617068
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/analizzaprosa": {
            "get": {
                "tags": [
                    "analizzaprosa"
                ],
                "operationId": "analizzaprosa_create",
                "summary": "Постановка задачи / Получение результата",
                "description": "Лимиты списываются при постановке задачи.\n\nПока задача в работе, приходит {\"error\":\"In progress\",\"code\":50}. Опрашивайте раз в 10–30 секунд.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Поисковый запрос — один.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lr",
                        "in": "query",
                        "required": true,
                        "description": "Регион Яндекса, например 213 — Москва.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617068
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/filtercomplex": {
            "get": {
                "tags": [
                    "filtercomplex"
                ],
                "operationId": "filtercomplex_check",
                "summary": "Проверка на фильтры",
                "description": "Проверки идут по порядку и останавливаются на первой найденной причине: если документа нет в индексе, дальше проверяются только код ответа и запреты индексации; если найден Adult-фильтр или фильтр одинаковых сниппетов — остальное не проверяется.Каждая проверка — десятки запросов к выдаче, поэтому ответ может идти несколько минут. Ставьте таймаут HTTP-клиента не меньше 5 минут.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Поисковый запрос.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": true,
                        "description": "Адрес проверяемой страницы. Без протокола подставляется https://.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lr",
                        "in": "query",
                        "required": true,
                        "description": "Регион Яндекса, например 213 — Москва.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "rel_url",
                        "in": "query",
                        "required": false,
                        "description": "Проверять не url, а релевантную страницу сайта по выдаче. Только в query-строке.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "text": "Фильтров не обнаружено.",
                                    "flag": "ok",
                                    "position": 7,
                                    "relevant_URL": "https://example.ru/catalog/divany/",
                                    "relevant_URL_status": false,
                                    "filters_status": {
                                        "Adult-фильтр": "Нет",
                                        "Фильтр на одинаковые сниппеты": "Нет",
                                        "Дубли документа по тегу Title": "Нет",
                                        "Проверка на текстовые пост-фильтры": "Нет"
                                    },
                                    "analyzed_URL": "https://example.ru/catalog/divany/",
                                    "user_query": "купить диван"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/speedtest": {
            "get": {
                "tags": [
                    "speedtest"
                ],
                "operationId": "speedtest_get",
                "summary": "Замер страницы",
                "description": "Замеры включаются флагами cb_*; без флагов в ответе будут только адреса. Страница загружается с таймаутом 10 секунд, по редиректам — до конечного адреса. Параметры можно передать и в query-строке, и в теле POST.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": true,
                        "description": "Адрес страницы. Без протокола подставляется http://; кириллический домен допустим.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "cb_response_time",
                        "in": "query",
                        "required": false,
                        "description": "Время отклика сервера, мс — до первого байта ответа (TTFB). Включается любым непустым значением, например on.",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "cb_upload_time",
                        "in": "query",
                        "required": false,
                        "description": "Время полной загрузки HTML-кода, мс. Включается любым непустым значением, например on.",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "cb_page_size",
                        "in": "query",
                        "required": false,
                        "description": "Размер HTML-кода, КБ. Включается любым непустым значением, например on.",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "cb_server_response",
                        "in": "query",
                        "required": false,
                        "description": "HTTP-код ответа. Включается любым непустым значением, например on.",
                        "schema": {
                            "type": "boolean"
                        }
                    },
                    {
                        "name": "cb_ip",
                        "in": "query",
                        "required": false,
                        "description": "IP-адреса сервера (A-записи домена). Включается любым непустым значением, например on.",
                        "schema": {
                            "type": "boolean"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "urls": [
                                        "https://pixelplus.ru/"
                                    ],
                                    "incorrect_urls": [],
                                    "url_with_http": {
                                        "https://pixelplus.ru/": "https://pixelplus.ru/"
                                    },
                                    "connect_time": {
                                        "https://pixelplus.ru/": "184"
                                    },
                                    "size_download": {
                                        "https://pixelplus.ru/": 142.6
                                    },
                                    "warning": {
                                        "https://pixelplus.ru/": [
                                            "Размер кода документа превышает максимально рекомендованное значение в 120 КБ."
                                        ]
                                    },
                                    "warning_size_download": [
                                        "https://pixelplus.ru/"
                                    ],
                                    "total_time": {
                                        "https://pixelplus.ru/": "412"
                                    },
                                    "http_code": {
                                        "https://pixelplus.ru/": 200
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/top10": {
            "get": {
                "tags": [
                    "top10"
                ],
                "operationId": "top10_create",
                "summary": "Постановка задачи / Получение результата",
                "description": "Параметры принимаются и в query-строке, и в теле POST — для длинного списка запросов используйте POST. Лимиты списываются при постановке задачи.\n\nПока задача в работе, приходит {\"error\":\"In progress\",\"code\":50}. Опрашивайте раз в 10–30 секунд.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query-строке.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": false,
                        "description": "Один запрос. Если передан, queries не используется. Нужен query или queries.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "queries",
                        "in": "query",
                        "required": false,
                        "description": "Список запросов, каждый отдельным элементом: queries[]=…&amp;queries[]=…. До 500.",
                        "schema": {
                            "type": "array"
                        }
                    },
                    {
                        "name": "lr",
                        "in": "query",
                        "required": true,
                        "description": "Регион Яндекса, например 213 — Москва. Для Google переводится в его регион.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "deep",
                        "in": "query",
                        "required": true,
                        "description": "Глубина выдачи, от 1 до 70.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "ss",
                        "in": "query",
                        "required": false,
                        "description": "Поисковая система. Неизвестное значение — Яндекс.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "yandex",
                                "google",
                                "yandex_mobile",
                                "google_mobile"
                            ],
                            "default": "yandex"
                        }
                    },
                    {
                        "name": "language",
                        "in": "query",
                        "required": false,
                        "description": "Язык поиска: для Google — интерфейс (hl), для Яндекса — тип поиска.",
                        "schema": {
                            "type": "string",
                            "default": "ru"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "ID задачи из ответа на постановку. Только в query-строке.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617068
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/xml": {
            "get": {
                "tags": [
                    "xml"
                ],
                "operationId": "xml_search",
                "summary": "Выдача по запросу",
                "description": "Параметры передаются в query-строке. Запрос ставится в очередь парсера и ждёт ответа, поэтому вызов длится от нескольких секунд и дольше при загрузке очереди — ставьте таймаут HTTP-клиента с запасом, от минуты.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Поисковый запрос, с операторами Яндекса.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lr",
                        "in": "query",
                        "required": false,
                        "description": "Регион Яндекса.",
                        "schema": {
                            "type": "integer",
                            "default": 213
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "required": false,
                        "description": "Номер страницы выдачи, с нуля.",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    },
                    {
                        "name": "groupby",
                        "in": "query",
                        "required": false,
                        "description": "Группировка результатов в синтаксисе Яндекс.XML, например attr=d.mode=deep.groups-on-page=100.docs-in-group=1.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "is_mobile",
                        "in": "query",
                        "required": false,
                        "description": "Мобильная выдача.",
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ],
                            "default": 0
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<yandexsearch version=\"1.0\">\n  <request>…</request>\n  <response date=\"20261006T120000\">\n    <found priority=\"all\">5000000</found>\n    <results>\n      <grouping attr=\"d\" mode=\"deep\" groups-on-page=\"100\" docs-in-group=\"1\">\n        <group>\n          <doc id=\"…\">\n            <url>https://example.ru/catalog/divany/</url>\n            <domain>example.ru</domain>\n            <title>Купить <hlword>диван</hlword> в Москве</title>\n            <passages><passage>Диваны от производителя с доставкой…</passage></passages>\n          </doc>\n        </group>\n      </grouping>\n    </results>\n  </response>\n</yandexsearch>"
                            }
                        }
                    }
                }
            }
        },
        "/api/podskazkiyandex": {
            "get": {
                "tags": [
                    "podskazkiyandex"
                ],
                "operationId": "podskazkiyandex_create",
                "summary": "Постановка задачи / Получение результата",
                "description": "Все параметры передаются в query-строке. Лимиты списываются сразу при постановке.\n\nПока задача выполняется, приходит {\"error\":\"In progress\",\"code\":50} — повторяйте запрос раз в несколько секунд.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Фраза, для которой собираются подсказки. Одна фраза на задачу.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lr",
                        "in": "query",
                        "required": true,
                        "description": "Регион Яндекса, например 213 — Москва. Подставляется в запрос к подсказкам.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "deep",
                        "in": "query",
                        "required": false,
                        "description": "Глубина: на втором и третьем уровне подсказки собираются уже для найденных подсказок. Любое другое значение превращается в 1.",
                        "schema": {
                            "type": "integer",
                            "enum": [
                                1,
                                2,
                                3
                            ],
                            "default": 1
                        }
                    },
                    {
                        "name": "cb_with_space",
                        "in": "query",
                        "required": false,
                        "description": "Дополнительно запросить фразу с пробелом на конце. Каждая фраза дополнительно стоит 1 лимит.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_numbers",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать цифры 0–9 после фразы. Каждая фраза дополнительно стоит 10 лимитов.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_cyrillic",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать буквы русского алфавита после фразы. Каждая фраза дополнительно стоит 33 лимитов.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_english",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать буквы английского алфавита после фразы. Каждая фраза дополнительно стоит 26 лимитов.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "stop_list",
                        "in": "query",
                        "required": false,
                        "description": "Стоп-слова: подсказки, содержащие любое из них, отбрасываются на всех уровнях. Разделитель — перевод строки \\r\\n (в URL — %0D%0A).",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "Номер задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734521
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/podskazkigoogle": {
            "get": {
                "tags": [
                    "podskazkigoogle"
                ],
                "operationId": "podskazkigoogle_create",
                "summary": "Постановка задачи: одна фраза / Получение результата",
                "description": "Фраза и настройки передаются в query-строке.\n\nПока задача выполняется, приходит {\"error\":\"In progress\",\"code\":50}.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Фраза для сбора подсказок.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "deep",
                        "in": "query",
                        "required": false,
                        "description": "Глубина: на втором и третьем уровне подсказки собираются для найденных подсказок. Любое другое значение превращается в 1.",
                        "schema": {
                            "type": "integer",
                            "enum": [
                                1,
                                2,
                                3
                            ],
                            "default": 1
                        }
                    },
                    {
                        "name": "cb_with_space",
                        "in": "query",
                        "required": false,
                        "description": "Дополнительно запросить фразу с пробелом на конце.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_numbers",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать цифры 0–9 после фразы.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_cyrillic",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать буквы русского алфавита после фразы.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_english",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать буквы английского алфавита после фразы.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "stop_list",
                        "in": "query",
                        "required": false,
                        "description": "Стоп-слова через перевод строки \\r\\n: подсказки с ними отбрасываются.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "search_engine",
                        "in": "query",
                        "required": false,
                        "description": "Принимается, но сейчас не используется: подсказки всегда собираются с google.com для России.",
                        "schema": {
                            "type": "string",
                            "default": "google.ru"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "Номер задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734530
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "podskazkigoogle"
                ],
                "operationId": "podskazkigoogle_create-list",
                "summary": "Постановка задачи: список фраз",
                "description": "Ключ — в query-строке, фразы и настройки — в теле формы. queries — JSON-массив строк в виде строки.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734531
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "queries": {
                                        "type": "string",
                                        "description": "JSON-массив фраз, например [\"купить велосипед\",\"велосипед цена\"]."
                                    },
                                    "deep": {
                                        "type": "integer",
                                        "enum": [
                                            1,
                                            2,
                                            3
                                        ],
                                        "default": 1,
                                        "description": "Глубина: на втором и третьем уровне подсказки собираются для найденных подсказок. Любое другое значение превращается в 1."
                                    },
                                    "cb_with_space": {
                                        "type": "string",
                                        "enum": [
                                            "on"
                                        ],
                                        "description": "Дополнительно запросить фразу с пробелом на конце."
                                    },
                                    "cb_with_numbers": {
                                        "type": "string",
                                        "enum": [
                                            "on"
                                        ],
                                        "description": "Перебрать цифры 0–9 после фразы."
                                    },
                                    "cb_with_cyrillic": {
                                        "type": "string",
                                        "enum": [
                                            "on"
                                        ],
                                        "description": "Перебрать буквы русского алфавита после фразы."
                                    },
                                    "cb_with_english": {
                                        "type": "string",
                                        "enum": [
                                            "on"
                                        ],
                                        "description": "Перебрать буквы английского алфавита после фразы."
                                    },
                                    "stop_list": {
                                        "type": "string",
                                        "description": "Стоп-слова через перевод строки \\r\\n: подсказки с ними отбрасываются."
                                    },
                                    "search_engine": {
                                        "type": "string",
                                        "default": "google.ru",
                                        "description": "Принимается, но сейчас не используется: подсказки всегда собираются с google.com для России."
                                    }
                                },
                                "required": [
                                    "queries"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/unikalnost": {
            "post": {
                "tags": [
                    "unikalnost"
                ],
                "operationId": "unikalnost_check",
                "summary": "Проверка уникальности",
                "description": "Настройки передаются в query-строке, текст — в теле формы. При проверке по URL тело не нужно, запрос можно отправить GET.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "check_type",
                        "in": "query",
                        "required": true,
                        "description": "Что проверять.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "text",
                                "url"
                            ]
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": false,
                        "description": "Страница для проверки. Обязателен при check_type=url. Совпадения с самой этой страницей не учитываются.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "deep",
                        "in": "query",
                        "required": false,
                        "description": "Глубокая проверка: искать каждый фрагмент, а не каждый второй. Точнее, но дольше.",
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ],
                            "default": 0
                        }
                    },
                    {
                        "name": "ignor_domains",
                        "in": "query",
                        "required": false,
                        "description": "Домены через пробел, совпадения с которыми не учитываются, например свой сайт.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "uniqueness": 83.3,
                                    "urls": {
                                        "example.com/blog/seo-tools": 17
                                    },
                                    "repetitions": [
                                        "собирать семантику проверять позиции и анализировать"
                                    ]
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "text": {
                                        "type": "string",
                                        "description": "Текст для проверки. Обязателен при check_type=text. Читается только из тела POST."
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/intent": {
            "post": {
                "tags": [
                    "intent"
                ],
                "operationId": "intent_create",
                "summary": "Постановка задачи",
                "description": "Ключ — в query-строке, запросы и настройки — в теле формы. Лимиты списываются сразу при постановке.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734550
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "Запросы: массив requests[] или одна строка с запросами через \\r\\n. Пустые и повторяющиеся строки отбрасываются только во втором варианте."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "default": 213,
                                        "description": "Регион Яндекса, например 213 — Москва. Для Google переводится в соответствующий регион."
                                    },
                                    "search_system": {
                                        "type": "string",
                                        "enum": [
                                            "yandex",
                                            "google"
                                        ],
                                        "default": "yandex",
                                        "description": "Поисковая система. Любое другое значение — Яндекс."
                                    },
                                    "deep": {
                                        "type": "integer",
                                        "enum": [
                                            10,
                                            25,
                                            50
                                        ],
                                        "default": 10,
                                        "description": "Глубина анализа выдачи. Округляется вверх до ближайшей из трёх: до 10 включительно — ТОП-10, до 25 — ТОП-25, больше — ТОП-50."
                                    }
                                },
                                "required": [
                                    "requests"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "intent"
                ],
                "operationId": "intent_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит {\"error\":\"In progress\",\"code\":50}.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "Номер задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "request": {
                                        "requests": [
                                            "купить велосипед",
                                            "как выбрать велосипед"
                                        ],
                                        "lr": "213",
                                        "ss": "yandex",
                                        "deep": "top50"
                                    },
                                    "response": {
                                        "data": {
                                            "купить велосипед": {
                                                "thematic_words": [
                                                    "велосипед",
                                                    "купить",
                                                    "цена",
                                                    "горный",
                                                    "доставка"
                                                ],
                                                "com": 92,
                                                "rev": 4,
                                                "media": 6,
                                                "lex": 0,
                                                "music": 0,
                                                "trav": 0
                                            },
                                            "как выбрать велосипед": {
                                                "thematic_words": [
                                                    "велосипед",
                                                    "выбрать",
                                                    "рост",
                                                    "рама",
                                                    "совет"
                                                ],
                                                "com": 38,
                                                "rev": 10,
                                                "media": 18,
                                                "lex": 2,
                                                "music": 0,
                                                "trav": 0
                                            }
                                        },
                                        "time": 1.77,
                                        "system": "yandex"
                                    },
                                    "time": "12",
                                    "cost": 2
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/getlimits": {
            "get": {
                "tags": [
                    "getlimits"
                ],
                "operationId": "getlimits_get",
                "summary": "Остаток лимитов",
                "description": "Возвращает общий объём лимитов, потраченное и доступное. Если на тарифе действует месячное ограничение расхода, в ответ добавляются month_total и month_limits.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "total": 75000,
                                    "used": 1250,
                                    "available": 73750
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/fastcheckyoutube": {
            "get": {
                "tags": [
                    "fastcheckyoutube"
                ],
                "operationId": "fastcheckyoutube_check",
                "summary": "Проверка позиции",
                "description": "Видео считается принадлежащим каналу, если строка channel входит в название канала или в его адрес — без учёта регистра. Сначала разбирается первая страница выдачи, если там видео канала нет — следующие страницы.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Поисковый запрос — один.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "channel",
                        "in": "query",
                        "required": true,
                        "description": "Название канала или часть его адреса.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "request_position": {
                                        "обзор смартфона": 7
                                    },
                                    "channel_url": {
                                        "обзор смартфона": "https://www.youtube.com/watch?v=XXXXXXXXXXX"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/poiskzerkal": {
            "get": {
                "tags": [
                    "poiskzerkal"
                ],
                "operationId": "poiskzerkal_search",
                "summary": "Поиск зеркал",
                "description": "Домен приводится к основному: протокол, путь и www. отбрасываются, поддомены — тоже, то есть для shop.example.ru ищутся зеркала example.ru. Кириллические домены можно передавать как есть.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "domain",
                        "in": "query",
                        "required": true,
                        "description": "Домен или адрес сайта.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "0": {
                                        "url": "example.com",
                                        "code": "301"
                                    },
                                    "1": {
                                        "url": "www.example.ru",
                                        "code": "200"
                                    },
                                    "mirrors": [
                                        {
                                            "url": "example.com",
                                            "code": "301"
                                        },
                                        {
                                            "url": "www.example.ru",
                                            "code": "200"
                                        }
                                    ],
                                    "user_domain": "example.ru",
                                    "limitExceeded": "0"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/indexeddomains": {
            "get": {
                "tags": [
                    "indexeddomains"
                ],
                "operationId": "indexeddomains_get",
                "summary": "Список поддоменов",
                "description": "Домен можно передать с протоколом и путём — берётся только имя хоста без www.. Ищутся поддомены именно этого хоста: для pixelplus.ru — все *.pixelplus.ru, для tools.pixelplus.ru — только *.tools.pixelplus.ru.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "domain",
                        "in": "query",
                        "required": true,
                        "description": "Домен, для которого ищем поддомены. Можно передать в query или в теле POST.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "domain": "pixelplus.ru",
                                    "domains": {
                                        "3": "https://ekb.pixelplus.ru",
                                        "0": "https://pixelplus.ru",
                                        "2": "https://spb.pixelplus.ru",
                                        "1": "https://tools.pixelplus.ru"
                                    },
                                    "count": 4
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/struktura": {
            "get": {
                "tags": [
                    "struktura"
                ],
                "operationId": "struktura_get",
                "summary": "Структура сайта",
                "description": "Сначала метод собирает папки первого уровня из выдачи по url:домен/* и дособирает менее крупные, исключая семь самых больших. Затем «разворачивает» до второго уровня семь крупнейших разделов и для каждой найденной папки запрашивает число документов в индексе.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "domain",
                        "in": "query",
                        "required": true,
                        "description": "Домен сайта. Можно передать в query или в теле POST.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "count_slash": {
                                        "pixelplus.ru/": 1,
                                        "/uslugi/": 2,
                                        "/blog/": 2,
                                        "/uslugi/seo": 2
                                    },
                                    "percent": {
                                        "pixelplus.ru/": 100,
                                        "/uslugi/": 31.4,
                                        "/blog/": 22.8,
                                        "/uslugi/seo": 9.6
                                    },
                                    "all": {
                                        "pixelplus.ru/": "1853",
                                        "/uslugi/": 582,
                                        "/blog/": 423,
                                        "/uslugi/seo": 178
                                    },
                                    "first": {
                                        "domain": "pixelplus.ru/",
                                        "count": "1853"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/podskazkiyoutube": {
            "get": {
                "tags": [
                    "podskazkiyoutube"
                ],
                "operationId": "podskazkiyoutube_create",
                "summary": "Постановка задачи / Получение результата",
                "description": "Все параметры — в query-строке. Если предыдущая задача ещё не закончилась, новая не ставится: придёт код -32 и report_id текущей.\n\nПока задача выполняется, приходит {\"error\":\"In progress\",\"code\":50}.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "request",
                        "in": "query",
                        "required": true,
                        "description": "Фраза для сбора подсказок. Обратите внимание: параметр называется request, а не query.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "region",
                        "in": "query",
                        "required": false,
                        "description": "Код страны для подсказок (параметр gl YouTube), например RU, KZ, BY, UA.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "deep",
                        "in": "query",
                        "required": false,
                        "description": "Глубина сбора. Без параметра собирается только первый уровень.",
                        "schema": {
                            "type": "integer",
                            "enum": [
                                1,
                                2,
                                3
                            ],
                            "default": 1
                        }
                    },
                    {
                        "name": "cb_with_space",
                        "in": "query",
                        "required": false,
                        "description": "Дополнительно запросить фразу с пробелом на конце. +1 лимит.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_numbers",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать цифры 0–9 после фразы. +10 лимитов.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_cyrillic",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать буквы русского алфавита. +33 лимита.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "cb_with_english",
                        "in": "query",
                        "required": false,
                        "description": "Перебрать буквы английского алфавита. +26 лимитов.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "stop_list",
                        "in": "query",
                        "required": false,
                        "description": "Стоп-слова через запятую: подсказки с ними отбрасываются на всех уровнях.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "Номер задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734540
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/fastcheck": {
            "post": {
                "tags": [
                    "fastcheck"
                ],
                "operationId": "fastcheck_create",
                "summary": "Постановка задачи",
                "description": "key передаётся в query-строке, остальные параметры — в теле формы. Лимиты списываются сразу при постановке задачи.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "deep",
                        "in": "query",
                        "required": false,
                        "description": "Глубина проверки, не больше 200. Влияет на цену: множитель round(deep / 100).",
                        "schema": {
                            "type": "integer",
                            "default": 100
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 51234567
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "url": {
                                        "type": "string",
                                        "description": "Сайт, позиции которого ищем. Сравнивается по домену; www. не важен."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "description": "Регион Яндекса, например 213 — Москва."
                                    },
                                    "requests": {
                                        "type": "array",
                                        "description": "Запросы: массив requests[] или одна строка, запросы через перенос строки. Дубли схлопываются."
                                    },
                                    "ismobile": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Проверять мобильную выдачу."
                                    },
                                    "compare": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Снять обе выдачи и добавить в ответ таблицу сравнения comparePositionsArray."
                                    },
                                    "subdomains": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Засчитывать позиции поддоменов сайта. Передавайте 1, только если нужно."
                                    }
                                },
                                "required": [
                                    "url",
                                    "lr",
                                    "requests"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "fastcheck"
                ],
                "operationId": "fastcheck_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит ошибка 50 — повторите запрос позже. Готовый ответ содержит параметры задачи (request) и результат (response).",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "request": {
                                        "req_array": [
                                            "купить диван",
                                            "диван угловой"
                                        ],
                                        "url": "example.ru",
                                        "lr": "213",
                                        "subdomains": null,
                                        "ismobile": "0",
                                        "compare": "0",
                                        "deep": 100
                                    },
                                    "response": {
                                        "top1": 0,
                                        "top3": 1,
                                        "top5": 1,
                                        "top10": 1,
                                        "top20": 1,
                                        "top30": 1,
                                        "top50": 1,
                                        "top100": 1,
                                        "top100+": 1,
                                        "queries": {
                                            "купить диван": {
                                                "relevant_URL": "example.ru/catalog/divany/",
                                                "full_relevant_URL": "https://example.ru/catalog/divany/",
                                                "position": 3,
                                                "name": "купить диван",
                                                "platform": "desktop"
                                            },
                                            "диван угловой": {
                                                "relevant_URL": "-",
                                                "full_relevant_URL": "-",
                                                "position": 1000,
                                                "name": "диван угловой",
                                                "platform": "desktop"
                                            }
                                        },
                                        "queries_count": 2,
                                        "subdomains": null
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/fastcheckgoogle": {
            "post": {
                "tags": [
                    "fastcheckgoogle"
                ],
                "operationId": "fastcheckgoogle_create",
                "summary": "Постановка задачи",
                "description": "key передаётся в query-строке, остальные параметры — в теле формы. Лимиты списываются сразу при постановке задачи.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "deep",
                        "in": "query",
                        "required": false,
                        "description": "Глубина проверки. Выдача Google снимается не глубже 100; больше 200 — ошибка.",
                        "schema": {
                            "type": "integer",
                            "default": 100
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 51234568
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "url": {
                                        "type": "string",
                                        "description": "Сайт, позиции которого ищем. Должен содержать точку — иначе Not set."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "description": "Регион в кодах Яндекса, например 213 — Москва; сервис сам переводит его в регион Google."
                                    },
                                    "requests": {
                                        "type": "array",
                                        "description": "Запросы: массив requests[] или одна строка, запросы через перенос строки."
                                    },
                                    "mobile": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Проверять мобильную выдачу. Именно mobile, не ismobile, как в fastcheck."
                                    },
                                    "subdomains": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Засчитывать позиции поддоменов сайта. Передавайте 1, только если нужно."
                                    },
                                    "search_engine": {
                                        "type": "string",
                                        "description": "Сохраняется в параметрах задачи, но на проверку не влияет: регион задаёт lr."
                                    }
                                },
                                "required": [
                                    "url",
                                    "lr",
                                    "requests"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "fastcheckgoogle"
                ],
                "operationId": "fastcheckgoogle_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит ошибка 50 — повторите запрос позже. Готовый ответ содержит параметры задачи (request) и результат (response).",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "request": {
                                        "req_array": [
                                            "купить диван",
                                            "диван угловой"
                                        ],
                                        "url": "example.ru",
                                        "lr": "213",
                                        "mobile": "0",
                                        "subdomains": null,
                                        "search_engine": null,
                                        "deep": 100
                                    },
                                    "response": {
                                        "top1": 0,
                                        "top3": 0,
                                        "top5": 1,
                                        "top10": 1,
                                        "top20": 1,
                                        "top30": 1,
                                        "top50": 1,
                                        "top100": 1,
                                        "top100+": 1,
                                        "queries": {
                                            "купить диван": {
                                                "relevant_URL": "example.ru/catalog/divany/",
                                                "full_relevant_URL": "https://example.ru/catalog/divany/",
                                                "position": 5
                                            },
                                            "диван угловой": {
                                                "relevant_URL": "-",
                                                "full_relevant_URL": "-",
                                                "position": 1000
                                            }
                                        },
                                        "queries_count": 2,
                                        "subdomains": null,
                                        "plarform": "desktop"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/vozrast": {
            "post": {
                "tags": [
                    "vozrast"
                ],
                "operationId": "vozrast_create",
                "summary": "Постановка задачи",
                "description": "Индексация в Яндексе и дата первой индексации проверяются всегда; дата копии и Google — по флагам. Дубли URL отбрасываются.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query, в том числе у POST.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734521
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "URL для проверки с протоколом http:// или https://, от 1 до 300. Массив или строка, по одному URL на строке. URL без протокола попадут в incorrect_urls."
                                    },
                                    "age_saved_doc": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Определить дату сохранённой копии документа в Яндексе."
                                    },
                                    "google_check": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Проверить индексацию URL в Google."
                                    }
                                },
                                "required": [
                                    "requests"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "vozrast"
                ],
                "operationId": "vozrast_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит [{\"type\":\"in_progress\",\"code\":50,…}] — повторите запрос через 10–30 секунд.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query, в том числе у POST.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "correct_urls": {
                                        "https://pixelplus.ru/": {
                                            "date": "2014-03-12",
                                            "days": "4591",
                                            "age_saved_doc": "-1",
                                            "saved_copy_url": "",
                                            "yandex": 1,
                                            "google": 1
                                        },
                                        "https://pixelplus.ru/uslugi/": {
                                            "date": "Не в индексе",
                                            "days": "",
                                            "age_saved_doc": "-1",
                                            "saved_copy_url": "",
                                            "yandex": 0,
                                            "google": 1
                                        }
                                    },
                                    "incorrect_urls": null
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/analiztopv2": {
            "get": {
                "tags": [
                    "analiztopv2"
                ],
                "operationId": "analiztopv2_create",
                "summary": "Постановка задачи / Получение результата",
                "description": "Параметры передаются в query. Свой список конкурентов вместо ТОПа — в теле POST (custom_urls); тогда запрос делается методом POST, а остальные параметры остаются в query.\n\nПока задача выполняется, приходит {\"error\":\"In progress\",\"code\":50} — повторите запрос через 30–60 секунд. Анализ ТОП-10 обычно занимает несколько минут.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "query",
                        "in": "query",
                        "required": true,
                        "description": "Поисковый запрос.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "lr",
                        "in": "query",
                        "required": true,
                        "description": "Регион: ID региона Яндекса, для Google — тот же справочник.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": false,
                        "description": "Ваша страница. Без неё считаются только средние по ТОПу, блок user_data будет пустым.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "search_system",
                        "in": "query",
                        "required": false,
                        "description": "Поисковая система: ID или слаг. Прочие значения трактуются как Яндекс.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                1,
                                2
                            ],
                            "default": "1"
                        }
                    },
                    {
                        "name": "deep",
                        "in": "query",
                        "required": false,
                        "description": "Сколько сайтов ТОПа анализировать, от 1 до 20. Каждый — +1 лимит; больше 20 сайтов выдача не даст, а лимиты за превышение спишутся.",
                        "schema": {
                            "type": "integer",
                            "default": 5
                        }
                    },
                    {
                        "name": "rel_url",
                        "in": "query",
                        "required": false,
                        "description": "Найти в выдаче релевантную страницу вашего сайта и анализировать её вместо url. +1 лимит.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "check_iks",
                        "in": "query",
                        "required": false,
                        "description": "Добавить в ответ ИКС вашего сайта и средний по ТОПу. Только для Яндекса.",
                        "schema": {
                            "type": "string",
                            "enum": [
                                "on"
                            ]
                        }
                    },
                    {
                        "name": "mobile",
                        "in": "query",
                        "required": false,
                        "description": "Брать мобильную выдачу.",
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ],
                            "default": 0
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734522
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "custom_urls": {
                                        "type": "array",
                                        "description": "Свои URL конкурентов вместо ТОПа выдачи. Массив или строка, по одному на строке. Лимит за deep тогда не берётся, зато +1 за каждый URL."
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/analizreklamyyandex": {
            "post": {
                "tags": [
                    "analizreklamyyandex"
                ],
                "operationId": "analizreklamyyandex_create",
                "summary": "Постановка задачи",
                "description": "Выдача снимается с десктопа, ТОП-50. Дубли запросов отбрасываются. Пока предыдущая задача не закончилась, новая не ставится — придёт ошибка -32 с её report_id.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query, в том числе у POST.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734523
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "queries": {
                                        "type": "array",
                                        "description": "Запросы, от 1 до 100. Массив или строка, по одному запросу на строке."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "description": "Регион Яндекса."
                                    }
                                },
                                "required": [
                                    "queries",
                                    "lr"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "analizreklamyyandex"
                ],
                "operationId": "analizreklamyyandex_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит {\"error\":\"In progress\",\"code\":50} — повторите запрос через 10–30 секунд.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query, в том числе у POST.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "request": {
                                        "queries": [
                                            "разработка сайтов"
                                        ],
                                        "lr": "213",
                                        "csv": false
                                    },
                                    "response": {
                                        "разработка сайтов": {
                                            "countPromotion": {
                                                "top": 4,
                                                "low": 3,
                                                "middle": "Нет в выдаче",
                                                "direct": "Нет в выдаче",
                                                "all": 47
                                            },
                                            "position": {
                                                "Яндекс.Маркет среди выдачи (место)": "Нет в выдаче",
                                                "Яндекс.Видео (место)": "Нет в выдаче",
                                                "Яндекс.Картинки (место)": "Нет в выдаче",
                                                "Яндекс.Путешествия (место)": "Нет в выдаче",
                                                "Яндекс.Коллекции (место)": "Нет в выдаче",
                                                "Яндекс.Авиабилеты (место)": "Нет в выдаче",
                                                "Яндекс.Новости (место)": "Нет в выдаче",
                                                "Яндекс.Погода (место)": "Нет в выдаче",
                                                "Яндекс.Карты (место)": 5,
                                                "Яндекс.Почта (место)": "Нет в выдаче",
                                                "Яндекс.Музыка (место)": "Нет в выдаче",
                                                "Яндекс.Афиша (место)": "Нет в выдаче",
                                                "taxi.yandex.ru (место)": "Нет в выдаче",
                                                "Яндекс.Такси (место)": "Нет в выдаче",
                                                "Яндекс.Деньги (место)": "Нет в выдаче",
                                                "Яндекс.Диск (место)": "Нет в выдаче",
                                                "Яндекс.Недвижимость (место)": "Нет в выдаче",
                                                "realty.yandex.ru (место)": "Нет в выдаче",
                                                "Яндекс.Работа (место)": "Нет в выдаче",
                                                "Яндекс.Таланты (место)": "Нет в выдаче",
                                                "Яндекс.Толока (место)": "Нет в выдаче",
                                                "Авто.ру (место)": "Нет в выдаче",
                                                "Яндекс.Телефония (место)": "Нет в выдаче",
                                                "Яндекс.Доставка (место)": "Нет в выдаче",
                                                "Яндекс.Еда (место)": "Нет в выдаче"
                                            },
                                            "koldunshiki": "Организации, Яндекс.Карты справа"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/fastaudit": {
            "post": {
                "tags": [
                    "fastaudit"
                ],
                "operationId": "fastaudit_create",
                "summary": "Постановка задачи",
                "description": "Тело — обычная форма, не JSON: вложенные поля передаются как advanced[req_array][] и advanced[subdomains]. Пока предыдущая задача не закончилась, новая не ставится — придёт ошибка -32 с её report_id.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query, в том числе у POST.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734524
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "url": {
                                        "type": "string",
                                        "description": "Сайт: домен или адрес главной страницы."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "description": "Регион Яндекса — для даты индексации, индекса Google и проверки позиций."
                                    },
                                    "advanced[req_array][]": {
                                        "type": "array",
                                        "description": "Запросы для проверки позиций в Яндексе (ТОП-100, десктоп). Именно массив, по полю на запрос: advanced[req_array][]=seo&amp;advanced[req_array][]=продвижение. Без него блока fast_check в ответе нет."
                                    },
                                    "advanced[subdomains]": {
                                        "type": "string",
                                        "enum": [
                                            "on"
                                        ],
                                        "description": "Засчитывать в проверке позиций поддомены сайта."
                                    }
                                },
                                "required": [
                                    "url",
                                    "lr"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "fastaudit"
                ],
                "operationId": "fastaudit_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит {\"error\":\"In progress\",\"code\":50} — повторите запрос через 30–60 секунд.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта. Всегда в query, в том числе у POST.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "msg": "completed",
                                    "time": "1759742400",
                                    "cost": 28,
                                    "request": {
                                        "lr": "213",
                                        "url": "pixelplus.ru",
                                        "advanced": {
                                            "req_array": [
                                                "seo",
                                                "продвижение",
                                                "пиксель"
                                            ],
                                            "subdomains": "on"
                                        }
                                    },
                                    "response": {
                                        "response": {
                                            "main_mirror": "https://pixelplus.ru/",
                                            "server_response": "Ok",
                                            "robots_test": "Ok",
                                            "title_test": "ok",
                                            "title": "Создание и продвижение сайтов — веб-студия Пиксель Плюс",
                                            "description": "Интернет-агентство Пиксель Плюс — сайты под ключ и поисковое продвижение.",
                                            "h1_count": 1,
                                            "h1s": [
                                                "Создание сайтов, их продвижение и поддержка"
                                            ],
                                            "text_symb_count": 10133,
                                            "text_word_count": 1306,
                                            "double_title_urls": [],
                                            "counters_test": {
                                                "li_stat": false,
                                                "ym_stat": true,
                                                "ga_stat": true
                                            },
                                            "encode": "utf-8",
                                            "paid_till_test": 396,
                                            "index_test": "1853",
                                            "index_test_site": "113907",
                                            "data_test": "7 лет 3 месяца 28 дней",
                                            "test_404": "ok",
                                            "tcy": 0,
                                            "rang": 0,
                                            "yaca": 0,
                                            "yaca_cat": 0,
                                            "iks": "950",
                                            "indexed_domains": {
                                                "domain": "pixelplus.ru",
                                                "domains": [
                                                    "https://pixelplus.ru",
                                                    "https://spb.pixelplus.ru",
                                                    "https://tools.pixelplus.ru"
                                                ],
                                                "count": 3
                                            },
                                            "domain_ip": "93.188.42.188",
                                            "google_index": "5420",
                                            "google_index_inurl": "1960",
                                            "dmoz_found": false,
                                            "link_pad": "1515",
                                            "fast_check": {
                                                "top5": 2,
                                                "top10": 2,
                                                "top20": 2,
                                                "top50": 2,
                                                "queries": {
                                                    "seo": {
                                                        "relevant_URL": "pixelplus.ru/samostoyatelno/chto-takoe-seo/",
                                                        "full_relevant_URL": "pixelplus.ru/samostoyatelno/chto-takoe-seo/",
                                                        "position": 2,
                                                        "name": "seo",
                                                        "platform": "desktop"
                                                    },
                                                    "пиксель": {
                                                        "relevant_URL": "pixelplus.ru/",
                                                        "full_relevant_URL": "pixelplus.ru/",
                                                        "position": "1000",
                                                        "name": "пиксель",
                                                        "platform": "desktop"
                                                    }
                                                },
                                                "queries_count": 3,
                                                "subdomains": "on"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/userinfo": {
            "get": {
                "tags": [
                    "userinfo"
                ],
                "operationId": "userinfo_get",
                "summary": "Баланс и тариф",
                "description": "",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "balance": "7500",
                                    "tariff": {
                                        "name": "Гуру",
                                        "price": "2490",
                                        "date_start": "2026-10-01",
                                        "date_expire": "2026-10-31"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/iks": {
            "get": {
                "tags": [
                    "iks"
                ],
                "operationId": "iks_get",
                "summary": "ИКС домена",
                "description": "Из url берётся только хост: протокол, www. и путь отбрасываются, поддомен сохраняется. Адрес страницы и главная сайта дают одинаковый результат.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "url",
                        "in": "query",
                        "required": true,
                        "description": "Адрес или домен сайта, можно в URL-кодировке.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "iks": "2300"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/wordstatapi": {
            "post": {
                "tags": [
                    "wordstatapi"
                ],
                "operationId": "wordstatapi_create",
                "summary": "Постановка задачи",
                "description": "Параметры задачи передаются в теле формы, ключ — в query. Если не выбран ни один тип частоты, собирается общая (overall).",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617068
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "Запросы: массив requests[] или строка, по запросу на строку. До 10 000 штук, длина запроса с минус-словами — до 250–3000 символов в зависимости от источника данных."
                                    },
                                    "lr": {
                                        "type": "array",
                                        "description": "Регионы Яндекса: массив lr[], можно несколько. all — без привязки к региону."
                                    },
                                    "device": {
                                        "type": "string",
                                        "enum": [
                                            "desktop",
                                            "mobile"
                                        ],
                                        "description": "Тип устройств. Любое другое значение, в том числе all, — все устройства."
                                    },
                                    "overall": {
                                        "type": "integer",
                                        "description": "1 — общая частота (слово запроса без операторов)."
                                    },
                                    "exact": {
                                        "type": "integer",
                                        "description": "1 — точная частота (\"!слово !слово\")."
                                    },
                                    "quoted": {
                                        "type": "integer",
                                        "description": "1 — частота в кавычках."
                                    },
                                    "fixed": {
                                        "type": "integer",
                                        "description": "1 — точная частота с фиксированным порядком слов. В ответе — поле exact_fixed."
                                    },
                                    "delete_special_characters": {
                                        "type": "integer",
                                        "description": "1 — убрать спецсимволы из запросов."
                                    },
                                    "delete_zero_keywords": {
                                        "type": "integer",
                                        "description": "1 — убрать из ответа запросы с нулевой общей или точной частотой."
                                    },
                                    "frequency_relations": {
                                        "type": "integer",
                                        "description": "1 — посчитать отношение точной частоты к общей."
                                    },
                                    "cb_total_annual": {
                                        "type": "integer",
                                        "description": "1 — годовая частота: сумма общей частоты за 12 месяцев."
                                    },
                                    "cb_total_annual_by_month": {
                                        "type": "integer",
                                        "description": "1 — годовая частота с разбивкой по месяцам."
                                    },
                                    "cb_total_annual_by_month_type": {
                                        "type": "integer",
                                        "enum": [
                                            12,
                                            24
                                        ],
                                        "default": 12,
                                        "description": "За сколько месяцев отдать помесячную разбивку. Другие значения заменяются на 12."
                                    }
                                },
                                "required": [
                                    "requests",
                                    "lr"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "wordstatapi"
                ],
                "operationId": "wordstatapi_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит {\"error\": \"In progress\", \"code\": 50}. Готовый результат — объект: запрос → регион → частоты.",
                "parameters": [
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "купить диван": {
                                        "213": {
                                            "from": "Исходная фраза",
                                            "overall": 156533,
                                            "exact": 12330,
                                            "quoted": 14214,
                                            "exact_fixed": -1,
                                            "frequency_relations": -1
                                        }
                                    },
                                    "диван угловой": {
                                        "213": {
                                            "from": "Исходная фраза",
                                            "overall": 73022,
                                            "exact": 4123,
                                            "quoted": 5120,
                                            "exact_fixed": -1,
                                            "frequency_relations": -1
                                        }
                                    },
                                    "periods": []
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/complex_queries_analyser": {
            "post": {
                "tags": [
                    "complex_queries_analyser"
                ],
                "operationId": "complex_queries_analyser_create",
                "summary": "Постановка задачи",
                "description": "Ключ — в query-строке, всё остальное — в теле формы. Нужна хотя бы одна проверка: geo, intent, gruppirovka, site_type, competition, wordstat_advanced или positions. vital_answer и comm сами по себе не считаются — передавайте их вместе с одной из перечисленных.Флаги включаются самим присутствием параметра: geo=0 тоже включит проверку. Чтобы выключить — не передавайте параметр.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18734560
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "Запросы: массив requests[] или строка с запросами через перевод строки. Дубли и пустые строки отбрасываются. Не больше 5 000."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "default": 213,
                                        "description": "Регион Яндекса, например 213 — Москва."
                                    },
                                    "search_system": {
                                        "type": "integer",
                                        "enum": [
                                            1,
                                            2
                                        ],
                                        "default": 1,
                                        "description": "Поисковая система для анализа выдачи."
                                    },
                                    "deep": {
                                        "type": "integer",
                                        "enum": [
                                            10,
                                            25,
                                            50
                                        ],
                                        "default": 25,
                                        "description": "Глубина анализа выдачи."
                                    },
                                    "geo": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Геозависимость и степень локализации выдачи."
                                    },
                                    "vital_answer": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Есть ли в выдаче витальный (официальный) сайт."
                                    },
                                    "comm": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Коммерциализация. Включает и колонки интента."
                                    },
                                    "intent": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Интент: доли отзывов, медиа, словарей, музыки, путешествий и тематические слова."
                                    },
                                    "intent_comm_ai": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Уточнить коммерциализацию нейросетью. Работает только при deep=10 вместе с comm; +10 лимитов за запрос."
                                    },
                                    "site_type": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Типы сайтов в выдаче по базе размеченных сайтов."
                                    },
                                    "competition": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Конкуренция по запросу в баллах (ИКС, типы страниц, коммерциализация, агрегаторы в ТОП-10)."
                                    },
                                    "wordstat_advanced": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Общая и точная частота Wordstat по региону lr."
                                    },
                                    "gruppirovka": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Кластеризация запросов по совпадению URL в ТОПе."
                                    },
                                    "gruppirovka_method": {
                                        "type": "string",
                                        "enum": [
                                            "hard",
                                            "middle",
                                            "soft"
                                        ],
                                        "default": "hard",
                                        "description": "Сила связи при кластеризации. Другие значения — hard."
                                    },
                                    "gruppirovka_user_grouping_pow": {
                                        "type": "integer",
                                        "default": 3,
                                        "description": "Степень группировки, от 1 до 10."
                                    },
                                    "gruppirovka_generate_url": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Сформировать относительный URL из названия группы (транслитом; при wordstat_advanced — из самого частотного запроса группы)."
                                    },
                                    "gruppirovka_home_pages": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Посчитать число главных страниц в ТОПе по запросу."
                                    },
                                    "gruppirovka_exclude_data": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Исключить из сравнения витальные ответы, новости и агрегаторы. Рекомендуется."
                                    },
                                    "gruppirovka_exclude_domains_chbx": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Исключить из сравнения свой список доменов."
                                    },
                                    "gruppirovka_exclude_domains": {
                                        "type": "array",
                                        "description": "Домены для исключения, до 100."
                                    },
                                    "positions": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Позиции сайта и релевантные страницы."
                                    },
                                    "positions_url": {
                                        "type": "string",
                                        "description": "Сайт, позиции которого проверяются. Нужен при positions."
                                    },
                                    "positions_ss": {
                                        "type": "array",
                                        "description": "Поисковые системы: yandex-xml, yandex-mobile, google-desktop, google-mobile. До 6, пары с positions_lrs по порядку."
                                    },
                                    "positions_lrs": {
                                        "type": "array",
                                        "description": "Регионы Яндекса для каждой системы из positions_ss, в том же порядке."
                                    },
                                    "positions_ss_count": {
                                        "type": "integer",
                                        "description": "Сколько пар «система — регион» брать (последние N из списков). Обязателен при positions: без него не проверится ни одна пара."
                                    },
                                    "positions_deep": {
                                        "type": "integer",
                                        "enum": [
                                            10,
                                            20,
                                            50,
                                            100
                                        ],
                                        "description": "Глубина съёма позиций."
                                    },
                                    "positions_subdomains": {
                                        "type": "string",
                                        "enum": [
                                            "on"
                                        ],
                                        "description": "Учитывать поддомены сайта."
                                    },
                                    "positions_force_check_relevant": {
                                        "type": "string",
                                        "enum": [
                                            "on"
                                        ],
                                        "description": "Определить релевантный URL, даже если сайта нет в ТОП-100 (только Яндекс; +1 лимит за запрос на каждую систему Яндекса)."
                                    },
                                    "delete_none_target_queries": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Включить удаление нецелевых запросов. Без него параметры del_* ниже не действуют."
                                    },
                                    "del_implicit_duplicates": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Удалить неявные дубли (одинаковые после лемматизации); с частотами оставляется самый частотный. +5 лимитов."
                                    },
                                    "del_geo": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Удалить запросы по геозависимости (нужен geo)."
                                    },
                                    "del_geo_type": {
                                        "type": "string",
                                        "enum": [
                                            "with",
                                            "without"
                                        ],
                                        "description": "Какие удалять."
                                    },
                                    "del_local": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Удалить по степени локализации (нужен geo); пороги — del_local_less, del_local_more."
                                    },
                                    "del_commer": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Удалить по коммерциализации (нужен comm); пороги — del_commer_less, del_commer_more, в процентах."
                                    },
                                    "del_frequency": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Удалить запросы с нулевой общей или точной частотой (нужен wordstat_advanced)."
                                    },
                                    "del_frequency_ratio": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Удалить по отношению точной частоты к общей, от 0 до 1; пороги — del_frequency_ratio_less, del_frequency_ratio_more."
                                    },
                                    "exceptions_words_filter": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Отбросить запросы со стоп-словами до запуска проверок."
                                    },
                                    "exceptions_words": {
                                        "type": "array",
                                        "description": "Стоп-слова, до 1 000. Слово сравнивается по лемме; *часть* — по вхождению подстроки."
                                    }
                                },
                                "required": [
                                    "requests"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "complex_queries_analyser"
                ],
                "operationId": "complex_queries_analyser_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит массив с объектом {\"type\":\"in_progress\",\"code\":50}, по возможности с progress в процентах.",
                "parameters": [
                    {
                        "name": "key",
                        "in": "query",
                        "required": true,
                        "description": "Ключ API из настроек аккаунта.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "Номер задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "msg": "completed",
                                    "time": "184",
                                    "cost": 3,
                                    "request": {
                                        "requests": [
                                            "купить велосипед",
                                            "велосипед цена",
                                            "как выбрать велосипед"
                                        ],
                                        "lr": 213,
                                        "deep": 25,
                                        "search_system": 1,
                                        "geo": "1",
                                        "comm": "1"
                                    },
                                    "response": {
                                        "response": {
                                            "result": [
                                                {
                                                    "query": "купить велосипед",
                                                    "geo": true,
                                                    "local_pow": 64,
                                                    "vital": null,
                                                    "com": 92,
                                                    "thematic_words": [
                                                        "велосипед",
                                                        "купить",
                                                        "цена"
                                                    ],
                                                    "rev": 4,
                                                    "media": 8,
                                                    "lex": 0,
                                                    "music": 0,
                                                    "trav": 0,
                                                    "competition": null,
                                                    "classified": null,
                                                    "morda_count": null,
                                                    "rel_url": null,
                                                    "site_pos": null,
                                                    "group": null,
                                                    "top_url": null,
                                                    "generated_url": null,
                                                    "ws_exact": null,
                                                    "ws_overall": null
                                                }
                                            ],
                                            "dictionary": {
                                                "classified": null,
                                                "prep_slugs": null,
                                                "columns": {
                                                    "query": true,
                                                    "geo": true,
                                                    "local_pow": true,
                                                    "vital": false,
                                                    "com": true,
                                                    "thematic_words": true,
                                                    "competition": false,
                                                    "ws_exact": false
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/wordstatapikeywords": {
            "post": {
                "tags": [
                    "wordstatapikeywords"
                ],
                "operationId": "wordstatapikeywords_create",
                "summary": "Постановка задачи",
                "description": "Общая частота найденных запросов приходит всегда — её отдаёт сам Вордстат при сборе. Точная, в кавычках и фиксированная собираются вторым проходом, если их заказать.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617070
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "Маркерные фразы: массив requests[] или строка, по фразе на строку. До 200 штук."
                                    },
                                    "lr": {
                                        "type": "array",
                                        "description": "Регионы Яндекса: массив lr[], можно несколько."
                                    },
                                    "count_pages": {
                                        "type": "integer",
                                        "description": "Сколько страниц выдачи Вордстата собирать по каждому маркеру. Больше 10 — обрезается до 10."
                                    },
                                    "device": {
                                        "type": "string",
                                        "enum": [
                                            "desktop",
                                            "mobile"
                                        ],
                                        "description": "Тип устройств. Любое другое значение — все устройства."
                                    },
                                    "exact": {
                                        "type": "integer",
                                        "description": "1 — дособрать точную частоту найденных запросов."
                                    },
                                    "quoted": {
                                        "type": "integer",
                                        "description": "1 — дособрать частоту в кавычках."
                                    },
                                    "fixed": {
                                        "type": "integer",
                                        "description": "1 — дособрать точную частоту с фиксированным порядком слов (поле exact_fixed)."
                                    },
                                    "stop_list": {
                                        "type": "array",
                                        "description": "Стоп-слова: запросы с ними отбрасываются. Массив stop_list[] или строка, по слову на строку."
                                    },
                                    "min_count_words": {
                                        "type": "integer",
                                        "description": "Отбросить запросы короче указанного числа слов."
                                    },
                                    "max_count_words": {
                                        "type": "integer",
                                        "description": "Отбросить запросы длиннее указанного числа слов."
                                    },
                                    "min_overall_frequency": {
                                        "type": "integer",
                                        "description": "Отбросить запросы с общей частотой ниже указанной."
                                    },
                                    "delete_special_characters": {
                                        "type": "integer",
                                        "description": "1 — убрать + из запросов в ответе."
                                    },
                                    "delete_zero_keywords": {
                                        "type": "integer",
                                        "description": "1 — убрать запросы с нулевой общей или точной частотой."
                                    }
                                },
                                "required": [
                                    "requests",
                                    "lr"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "wordstatapikeywords"
                ],
                "operationId": "wordstatapikeywords_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит {\"error\": \"In progress\", \"code\": 50}. Готовый результат — объект: найденный запрос → регион → данные. Незаказанные частоты в ответ не попадают.",
                "parameters": [
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "купить диван": {
                                        "213": {
                                            "from": "Исходная фраза",
                                            "overall": 14967,
                                            "exact": 1310,
                                            "source_query": "купить диван"
                                        }
                                    },
                                    "купить диван недорого": {
                                        "213": {
                                            "from": "Левая колонка",
                                            "overall": 2690,
                                            "exact": 912,
                                            "source_query": "купить диван"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/aicontent": {
            "post": {
                "tags": [
                    "complex"
                ],
                "operationId": "complex_create",
                "summary": "Постановка задачи / Постановка задачи",
                "description": "Параметры — полями формы. Страницы передаются как file_data[N][поле], где N — номер страницы с нуля. Ниже поля первой страницы; у второй те же поля с file_data[1] и так далее.\n\nПараметры — полями формы (multipart/form-data, если прикладываете файл). JSON-тело метод не читает. Ключ остаётся в адресе. Дополнительные поля режимов — в таблице под операциями.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18452301
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "part": {
                                        "type": "string",
                                        "description": "Всегда complex."
                                    },
                                    "model": {
                                        "type": "string",
                                        "description": "value модели из справочника aicontent, например gpt-4.1 или deepseek-chat."
                                    },
                                    "metatags": {
                                        "type": "string",
                                        "description": "on — сгенерировать Title, Description и H1. Нужен хотя бы один из metatags и text."
                                    },
                                    "text": {
                                        "type": "string",
                                        "description": "on — сгенерировать описание страницы."
                                    },
                                    "emoji": {
                                        "type": "string",
                                        "default": "off",
                                        "description": "on — эмодзи в Title и Description."
                                    },
                                    "creative": {
                                        "type": "string",
                                        "default": "off",
                                        "description": "on — более свободные формулировки (температура 0.7)."
                                    },
                                    "file_data[0][url]": {
                                        "type": "string",
                                        "description": "URL страницы. Служит ключом результата — URL в одной задаче не должны повторяться."
                                    },
                                    "file_data[0][method]": {
                                        "type": "string",
                                        "enum": [
                                            "карточка товара",
                                            "карточка услуги",
                                            "листинг товаров",
                                            "листинг услуг"
                                        ],
                                        "description": "Тип страницы — одно из четырёх значений ровно в таком написании."
                                    },
                                    "file_data[0][name]": {
                                        "type": "string",
                                        "description": "Название товара, услуги или категории. Нужно name или queries."
                                    },
                                    "file_data[0][queries]": {
                                        "type": "string",
                                        "description": "Поисковые запросы через запятую; в промпт идут первые 10."
                                    },
                                    "file_data[0][length]": {
                                        "type": "integer",
                                        "description": "Объём описания в символах, до 5000. Без значения или больше 5000 — «1000–2000»."
                                    }
                                },
                                "required": [
                                    "part",
                                    "model",
                                    "file_data[0][url]",
                                    "file_data[0][method]"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "complex"
                ],
                "operationId": "complex_result",
                "summary": "Получение результата / Справочник моделей / Получение результата",
                "description": "Повторяйте раз в 10–30 секунд, пока вместо In progress не придёт результат.\n\nНейросети, доступные вашему ключу, и их возможности. Задача не ставится, лимиты не списываются. Список собирается из настроек инструмента и тарифа и меняется без предупреждения — берите value отсюда, а не из примеров на этой странице.\n\nПовторяйте раз в 5–10 секунд, пока вместо In progress не придёт результат. Повторные запросы готового отчёта бесплатны.",
                "parameters": [
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "models",
                        "in": "query",
                        "required": false,
                        "description": "Любое непустое значение — вернуть справочник.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "request": {
                                        "part": "complex",
                                        "model": "gpt-4.1",
                                        "metatags": "on",
                                        "text": "on",
                                        "file_data": [
                                            {
                                                "url": "https://example.com/catalog/kompyutery/",
                                                "method": "листинг товаров",
                                                "name": "Компьютеры",
                                                "queries": "купить компьютер,компьютеры москва,компьютер цена",
                                                "length": "1500"
                                            }
                                        ]
                                    },
                                    "response": {
                                        "https://example.com/catalog/kompyutery/": "Title: Купить компьютер в Москве — цены в каталоге\n\nDescription: Компьютеры для дома и офиса…\n\nH1: Компьютеры\n\nДетальное описание: В каталоге — готовые системные блоки…\n\n"
                                    },
                                    "response_parsed": {
                                        "https://example.com/catalog/kompyutery/": {
                                            "url": "https://example.com/catalog/kompyutery/",
                                            "title": "Купить компьютер в Москве — цены в каталоге",
                                            "description": "Компьютеры для дома и офиса…",
                                            "h1": "Компьютеры",
                                            "text": "<p> В каталоге — готовые системные блоки…</p>\n"
                                        }
                                    },
                                    "part": "complex",
                                    "image_url": null,
                                    "json_data": [],
                                    "time": "2026-10-06 14:41:05",
                                    "cost": 115
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/aiimages": {
            "get": {
                "tags": [
                    "aiimages"
                ],
                "operationId": "aiimages_models",
                "summary": "Справочник моделей / Получение результата",
                "description": "Нейросети, доступные вашему ключу, с допустимыми соотношениями сторон и разрешениями. Задача не ставится, лимиты не списываются. Состав меняется без предупреждения — берите значения отсюда.\n\nПовторяйте раз в 5–10 секунд, пока вместо In progress не придут ссылки. Задача, которую нейросеть не смогла выполнить, тоже завершается — с текстом в response.errors; лимиты за неё возвращаются.",
                "parameters": [
                    {
                        "name": "models",
                        "in": "query",
                        "required": true,
                        "description": "Любое непустое значение — вернуть справочник.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "models": [
                                        {
                                            "name": "Nano Banana Pro",
                                            "value": "nano-banana-pro",
                                            "promptLength": 0,
                                            "aspect_ratios": [
                                                "auto",
                                                "1:1",
                                                "3:4",
                                                "4:3",
                                                "9:16",
                                                "16:9"
                                            ],
                                            "resolutions": [
                                                "1K",
                                                "2K",
                                                "4K"
                                            ],
                                            "supports_image_input": true,
                                            "supports_multi_image_input": true,
                                            "supports_native_lang": true
                                        },
                                        {
                                            "name": "Midjourney 6.1",
                                            "value": "midjourney --v 6.1",
                                            "promptLength": 0,
                                            "aspect_ratios": [
                                                "1:1",
                                                "16:9",
                                                "9:16"
                                            ],
                                            "resolutions": [],
                                            "supports_image_input": true,
                                            "supports_multi_image_input": false,
                                            "supports_native_lang": false
                                        }
                                    ],
                                    "default": "nano-banana-pro"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "aiimages"
                ],
                "operationId": "aiimages_create",
                "summary": "Постановка задачи",
                "description": "Параметры — полями формы, ключ — в адресе. Файлы через API не загружаются: исходное изображение передаётся публичной ссылкой.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18452301
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "modelName": {
                                        "type": "string",
                                        "description": "value из справочника, например nano-banana-pro, gpt-image-2, flux-pro-1.1. Короткое midjourney заменяется на midjourney --v 6.0. Для удаления фона и апскейла — stableDiffusion3."
                                    },
                                    "part": {
                                        "type": "string",
                                        "enum": [
                                            "chat_bot",
                                            "remove_background",
                                            "upscale"
                                        ],
                                        "default": "chat_bot",
                                        "description": "Режим работы."
                                    },
                                    "request_field": {
                                        "type": "string",
                                        "description": "Промпт: что изобразить. Обязателен при генерации, до promptLength модели (по умолчанию 2000 символов). Без ссылок и параметров вида --ar, --v — их задают modelName и aspect_ratio."
                                    },
                                    "image_url": {
                                        "type": "string",
                                        "description": "Публичная ссылка на изображение (.png, .jpg, .jpeg, .webp): референс при генерации для моделей с supports_image_input или исходник для remove_background и upscale, где она обязательна."
                                    },
                                    "aspect_ratio": {
                                        "type": "string",
                                        "description": "Соотношение сторон из aspect_ratios модели."
                                    },
                                    "resolution": {
                                        "type": "string",
                                        "description": "Разрешение из resolutions модели. У моделей с выбором разрешения влияет на цену."
                                    },
                                    "img_ref": {
                                        "type": "string",
                                        "enum": [
                                            "img",
                                            "cref",
                                            "sref"
                                        ],
                                        "default": "img",
                                        "description": "Только Midjourney с image_url: как использовать референс."
                                    }
                                },
                                "required": [
                                    "modelName"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/aivideo": {
            "get": {
                "tags": [
                    "aivideo"
                ],
                "operationId": "aivideo_models",
                "summary": "Справочник моделей / Получение результата",
                "description": "Нейросети, доступные вашему ключу. Задача не ставится, лимиты не списываются. Состав меняется без предупреждения — берите value отсюда.\n\nПовторяйте раз в 10–30 секунд: генерация видео занимает минуты. Задача, которую нейросеть не выполнила, тоже завершается — с success: false, лимиты за неё возвращаются.",
                "parameters": [
                    {
                        "name": "models",
                        "in": "query",
                        "required": true,
                        "description": "Любое непустое значение — вернуть справочник.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "ID задачи из ответа на постановку. Передавайте в адресе.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "models": [
                                        {
                                            "name": "Sora 2",
                                            "value": "sora-2",
                                            "promptLength": 0,
                                            "isVideoEdit": false
                                        },
                                        {
                                            "name": "Runway",
                                            "value": "runway",
                                            "promptLength": 1000,
                                            "isVideoEdit": false
                                        },
                                        {
                                            "name": "Runway Aleph",
                                            "value": "runway-aleph",
                                            "promptLength": 0,
                                            "isVideoEdit": true
                                        }
                                    ],
                                    "default": "runway"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "aivideo"
                ],
                "operationId": "aivideo_create",
                "summary": "Генерация видео / Редактирование видео",
                "description": "Ролик по описанию и, по желанию, опорному изображению. Параметры — полями формы (multipart/form-data, если загружаете файл), ключ — в адресе.\n\nПравка готового ролика по описанию. Промпт перед отправкой переводится на английский; aspect_ratio, quality и duration в этом режиме не применяются.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18452301
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "prompt": {
                                        "type": "string",
                                        "description": "Описание сцены, до promptLength модели (по умолчанию 2000 символов). Без ссылок и параметров вида --param, проходит фильтр 18+."
                                    },
                                    "model": {
                                        "type": "string",
                                        "description": "value из справочника, например sora-2, runway, grok-imagine."
                                    },
                                    "aspect_ratio": {
                                        "type": "string",
                                        "default": "1:1",
                                        "description": "Соотношение сторон: 1:1, 2:3, 3:2, 3:4, 4:3, 9:16, 16:9, portrait, landscape. Список общий, не все модели поддерживают все значения."
                                    },
                                    "quality": {
                                        "type": "string",
                                        "default": "720p",
                                        "description": "Качество: 480p, 720p, 1080p или 4k. Влияет на цену."
                                    },
                                    "duration": {
                                        "type": "integer",
                                        "description": "Длительность в секундах. Допустимые значения зависят от модели, см. таблицу ниже; недопустимое молча заменяется значением по умолчанию модели. Влияет на цену."
                                    },
                                    "image_url": {
                                        "type": "string",
                                        "description": "Ссылка на опорное изображение (.png, .jpg, .jpeg, .webp): ролик начнётся с него. Ресурс должен быть доступен по сети, локальные адреса не принимаются."
                                    },
                                    "upload_image": {
                                        "type": "string",
                                        "description": "Опорное изображение файлом вместо ссылки."
                                    },
                                    "audio_description": {
                                        "type": "string",
                                        "description": "Звук или музыка — дописывается к промпту. Не передавайте пустым; модель runway звук не поддерживает."
                                    }
                                },
                                "required": [
                                    "prompt",
                                    "model"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/aianswers": {
            "get": {
                "tags": [
                    "aianswers"
                ],
                "operationId": "aianswers_options",
                "summary": "Справочник регионов и языков / Получение результата",
                "description": "Допустимые значения ss, коды регионов lr для каждой системы и языки Google. Задачу не ставит, лимиты не тратит.\n\nПовторяйте раз в 10–30 секунд: сбор идёт порциями, большая задача занимает десятки минут.",
                "parameters": [
                    {
                        "name": "options",
                        "in": "query",
                        "required": true,
                        "description": "Любое непустое значение.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "ss": [
                                        {
                                            "name": "Яндекс",
                                            "value": "yandex"
                                        },
                                        {
                                            "name": "Google",
                                            "value": "google"
                                        }
                                    ],
                                    "lr": {
                                        "yandex": [
                                            {
                                                "name": "Москва",
                                                "value": 213
                                            },
                                            {
                                                "name": "Санкт-Петербург",
                                                "value": 2
                                            }
                                        ],
                                        "google": [
                                            {
                                                "name": "Москва",
                                                "value": 213
                                            }
                                        ]
                                    },
                                    "languages": {
                                        "google": [
                                            {
                                                "name": "Русский",
                                                "value": "ru"
                                            },
                                            {
                                                "name": "Английский",
                                                "value": "en"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "aianswers"
                ],
                "operationId": "aianswers_create",
                "summary": "Постановка задачи",
                "description": "Тело — JSON-объект; поля формы метод не читает. Ключ — в адресе.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18452301
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "Поисковые запросы, от 1 до 1000."
                                    },
                                    "searchSystems": {
                                        "type": "array",
                                        "description": "Поисковые системы и регионы, от 1 до 6 элементов. Одна система может повторяться с разными регионами."
                                    },
                                    "url": {
                                        "type": "string",
                                        "description": "Ваш сайт: для него считается position среди источников ответа."
                                    },
                                    "subdomains": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "true — поддомены считаются вашим сайтом: blog.example.com засчитывается за example.com."
                                    },
                                    "collect_online": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Только Яндекс. false — нейроответы из обычного поиска, только по популярным информационным запросам. true — режим «Поиск с Алисой»: ответ запрашивается для любых запросов, включая коммерческие и редкие. Цена — 750 вместо 4 за запрос."
                                    },
                                    "collect_google_ai_mode": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Только Google. true — если блока AI Overview в выдаче нет, взять ответ из вкладки «Режим ИИ». На цену не влияет."
                                    }
                                },
                                "required": [
                                    "requests",
                                    "searchSystems"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/textanalyser": {
            "post": {
                "tags": [
                    "textanalyser"
                ],
                "operationId": "textanalyser_create",
                "summary": "Постановка задачи",
                "description": "Текст и ключевые фразы передаются в теле формы, ключ — в query.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617071
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "text": {
                                        "type": "string",
                                        "description": "Текст для анализа. Длиннее 25 000 символов — обрезается."
                                    },
                                    "requests": {
                                        "type": "string",
                                        "description": "Ключевые фразы, вхождения которых нужно посчитать, — по фразе на строку (или массив requests[]). Из фразы-элемента массива берутся первые 10 слов."
                                    },
                                    "text_unique": {
                                        "type": "integer",
                                        "description": "Проверить уникальность. Включается самим наличием параметра — любое значение, даже 0; если проверка не нужна, не передавайте его."
                                    },
                                    "text_errors": {
                                        "type": "integer",
                                        "description": "Проверить орфографию. Как и text_unique, включается наличием параметра."
                                    }
                                },
                                "required": [
                                    "text"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "textanalyser"
                ],
                "operationId": "textanalyser_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит список с одним элементом [{\"type\": \"in_progress\", \"code\": 50, \"message\": \"In progress\"}], иногда с progress и time.",
                "parameters": [
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "msg": "completed",
                                    "time": "1778052575",
                                    "cost": 10,
                                    "request": {
                                        "text": "Пиксель Тулс — SEO-платформа…",
                                        "requests": "пиксель тулс\nseo платформа",
                                        "text_errors": "1"
                                    },
                                    "response": {
                                        "count_words": 12,
                                        "count_symbols_with_spaces": 78,
                                        "count_symbols_without_spaces": 67,
                                        "words_frequency": {
                                            "seo": 2,
                                            "пиксель": 1,
                                            "тулс": 1
                                        },
                                        "find_phrases": {
                                            "пиксель тулс": {
                                                "found": true,
                                                "count": 1,
                                                "morph": 0,
                                                "density": 8.33
                                            }
                                        },
                                        "words_spam": 33,
                                        "zipf": 91.18,
                                        "stopwords_percent": 16.67,
                                        "speech_parts": {
                                            "существительное": 50,
                                            "иностранное": 25,
                                            "предлог": 25
                                        },
                                        "text_errors": {
                                            "type": {
                                                "тулс": "Слова нет в словаре."
                                            },
                                            "true_spell": {
                                                "тулс": "тулы"
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/textanalyseradvanced": {
            "post": {
                "tags": [
                    "textanalyseradvanced"
                ],
                "operationId": "text-analyser-advanced_create",
                "summary": "Постановка задачи",
                "description": "Параметры — в теле формы (массивы как multiple_urls[]=…) или JSON с заголовком Content-Type: application/json; для длинных текстов и списков запросов удобнее JSON. Ключ — в query.Флаги-опции включаются значениями 1, true, yes, on; любое другое значение и отсутствие параметра — выключено. Списки (URL, запросы, стоп-слова) можно передать массивом или строкой — по элементу на строку.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 12345678
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "part": {
                                        "type": "string",
                                        "enum": [
                                            "by_url",
                                            "by_text"
                                        ],
                                        "description": "Что анализируем: страницы по адресам или тексты из запроса."
                                    },
                                    "analyse_type": {
                                        "type": "string",
                                        "enum": [
                                            "single",
                                            "compare",
                                            "average"
                                        ],
                                        "description": "Режим анализа."
                                    },
                                    "single_url": {
                                        "type": "string",
                                        "description": "URL вашей страницы. Обязателен для by_url в режимах single и compare; в average не используется."
                                    },
                                    "multiple_urls": {
                                        "type": "string",
                                        "description": "URL конкурентов (compare) или страниц для усреднения (average), до 10. Строкой адреса приводятся к нижнему регистру — если в URL важен регистр, передавайте массивом."
                                    },
                                    "single_text": {
                                        "type": "string",
                                        "description": "Ваш текст. Обязателен для by_text во всех режимах; в average входит в усреднение вместе с multiple_texts."
                                    },
                                    "multiple_texts": {
                                        "type": "array",
                                        "description": "Для by_text: тексты конкурентов (compare) или дополнительные тексты для усреднения (average, обязательны), до 10."
                                    },
                                    "parsing_type": {
                                        "type": "string",
                                        "enum": [
                                            "withJs",
                                            "withoutJs",
                                            "curl"
                                        ],
                                        "default": "withoutJs",
                                        "description": "Для by_url: как получить контент страниц. Без параметра и с любым другим значением — браузер без JS."
                                    },
                                    "brief_summary": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Только сводка: общая статистика, популярные слова, облака релевантности. Без вхождений, LSI-слов, оценки оптимизации URL и ТЗ — быстрее, отчёт в разы меньше."
                                    },
                                    "check_occurrences": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Проверить вхождения запросов из check_occurrences_value; без запросов — ошибка."
                                    },
                                    "check_occurrences_value": {
                                        "type": "string",
                                        "description": "Запросы для вхождений, до 150; в каждом не больше 7 значимых слов (без стоп-слов). Приводятся к нижнему регистру. Без них не считается оценка оптимизации URL."
                                    },
                                    "split_occurrences": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Считать точные формы фраз отдельно от морфологических (заполняет direct_form)."
                                    },
                                    "check_uniqueness": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Проверить уникальность текста каждой страницы. 50 лимитов за каждые начатые 1000 символов текста страницы."
                                    },
                                    "check_turgenev": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Оценить риск по «Тургеневу». 25 лимитов за страницу."
                                    },
                                    "collect_lsi_words": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Собрать слова из подсветки выдачи и популярные слова тематики. Работает только с check_occurrences и непустым check_occurrences_value, иначе молча игнорируется. 1 лимит за запрос. Собранные слова попадут в отчёт только с lsi_action."
                                    },
                                    "lsi_action": {
                                        "type": "string",
                                        "enum": [
                                            "append",
                                            "replace"
                                        ],
                                        "description": "Что сделать с собранными словами. Без параметра собранные слова в LSI-слова не попадают, хотя сбор оплачен."
                                    },
                                    "collect_lr": {
                                        "type": "integer",
                                        "default": 213,
                                        "description": "Регион сбора слов, код lr."
                                    },
                                    "collect_ss": {
                                        "type": "integer",
                                        "enum": [
                                            1,
                                            7,
                                            2,
                                            8
                                        ],
                                        "default": 1,
                                        "description": "Поисковая система для сбора слов."
                                    },
                                    "ai_structure": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Сгенерировать структуру страницы нейросетью — ключ recommendations.ai_structure. Только compare и average, в single игнорируется. 50 лимитов за задачу."
                                    },
                                    "type_ai_structure": {
                                        "type": "string",
                                        "enum": [
                                            "info",
                                            "commercial"
                                        ],
                                        "default": "info",
                                        "description": "Тип страницы для структуры."
                                    },
                                    "exclude_numbers": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Исключить числа из статистики и словарей."
                                    },
                                    "seo_text_only": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Учитывать только SEO-текст и ссылки внутри него."
                                    },
                                    "remove_no_index_content": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Не учитывать контент внутри &lt;noindex&gt;."
                                    },
                                    "remove_alts": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Не учитывать текст атрибутов alt."
                                    },
                                    "custom_stop_words": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Использовать свой список стоп-слов из stop_words вместо стандартного."
                                    },
                                    "stop_words": {
                                        "type": "string",
                                        "description": "Свои стоп-слова; читаются только с custom_stop_words."
                                    },
                                    "use_chars_amount": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Считать ТЗ на фиксированный объём текста из chars_amount (сценарий with_density_by_chars в recommendations)."
                                    },
                                    "chars_amount": {
                                        "type": "integer",
                                        "description": "Объём текста для ТЗ в символах; читается только с use_chars_amount."
                                    }
                                },
                                "required": [
                                    "part",
                                    "analyse_type"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "textanalyseradvanced"
                ],
                "operationId": "text-analyser-advanced_summary",
                "summary": "Прогресс и сводка отчёта / Блок отчёта",
                "description": "Опрашивайте раз в 20–30 секунд. Пока задача выполняется, приходит {\"error\": \"In progress\", \"code\": 50, \"progress\": 60, \"time\": \"2026-08-03 12:00:00\"} (progress и time — когда прогресс уже известен). Готовая задача отдаёт сводку и оглавление блоков; сами блоки — следующим запросом. Опросы и чтение готового отчёта лимиты не тратят.\n\nК report_id добавляется path — путь до узла отчёта, шаги через точку. Что лежит в блоках — ниже. Ответ тоже содержит report_id, time и cost.",
                "parameters": [
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    },
                    {
                        "name": "path",
                        "in": "query",
                        "required": false,
                        "description": "Путь до узла, например popular_words.freq.body. Если ключ сам содержит точку (URL конкурента), передавайте путь массивом: path[]=competitors&amp;path[]=https://rival.ru/page/. * — весь отчёт целиком (может весить десятки мегабайт). Без параметра метод отдаёт сводку.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "limit",
                        "in": "query",
                        "required": false,
                        "description": "Сколько ключей узла вернуть. 0 — все.",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    },
                    {
                        "name": "offset",
                        "in": "query",
                        "required": false,
                        "description": "Смещение для постраничного чтения узла.",
                        "schema": {
                            "type": "integer",
                            "default": 0
                        }
                    },
                    {
                        "name": "keys",
                        "in": "query",
                        "required": false,
                        "description": "Вернуть только список ключей узла (поле keys вместо data). Включается любым непустым значением, кроме 0.",
                        "schema": {
                            "type": "boolean",
                            "default": false
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 12345678,
                                    "time": "1785751400",
                                    "cost": 3,
                                    "request": {
                                        "part": "by_url",
                                        "analyse_type": "compare",
                                        "single_url": "https://site.ru/page/",
                                        "multiple_urls": [
                                            "https://rival1.ru/page/",
                                            "https://rival2.ru/page/"
                                        ],
                                        "check_occurrences": "on",
                                        "check_occurrences_value": [
                                            "пластиковые окна",
                                            "купить окна"
                                        ]
                                    },
                                    "errors": [],
                                    "summary": {
                                        "analyse_type": "compare",
                                        "user_page": {
                                            "url": "https://site.ru/page/",
                                            "title": "Пластиковые окна в Москве",
                                            "description": "Пластиковые окна от производителя…",
                                            "h1": "Пластиковые окна",
                                            "general_statistics": {
                                                "character_count": 12000,
                                                "character_count_text": 9000,
                                                "character_count_links": 3000,
                                                "word_count": 1800,
                                                "word_count_text": 1300,
                                                "word_count_links": 500,
                                                "uniqueness": null,
                                                "spam_score": 43,
                                                "stop_words_percentage": 28.4,
                                                "zipf_law_quality": 78,
                                                "turgenev_risk": null
                                            },
                                            "url_optimization_estimation": 55
                                        },
                                        "competitors_benchmark": {
                                            "min": {
                                                "word_count": 1500,
                                                "spam_score": 38
                                            },
                                            "max": {
                                                "word_count": 2600,
                                                "spam_score": 51
                                            },
                                            "average": {
                                                "word_count": 2050,
                                                "spam_score": 44.5
                                            }
                                        },
                                        "competitors": {
                                            "https://rival1.ru/page/": {
                                                "url": "https://rival1.ru/page/",
                                                "title": "Окна ПВХ",
                                                "description": "…",
                                                "h1": "…",
                                                "general_statistics": {
                                                    "word_count": 2600,
                                                    "spam_score": 51
                                                },
                                                "url_optimization_estimation": 80
                                            }
                                        }
                                    },
                                    "blocks": {
                                        "users": {
                                            "items": 2,
                                            "keys": [
                                                "general_statistics",
                                                "additional"
                                            ]
                                        },
                                        "competitors": {
                                            "items": 2,
                                            "keys": [
                                                "https://rival1.ru/page/",
                                                "https://rival2.ru/page/"
                                            ]
                                        },
                                        "popular_words": {
                                            "items": 2,
                                            "keys": [
                                                "freq",
                                                "dens"
                                            ]
                                        },
                                        "clouds": {
                                            "items": 2,
                                            "keys": [
                                                "usersPage",
                                                "competitorsPage"
                                            ]
                                        },
                                        "text_and_links": {
                                            "items": 4,
                                            "keys": [
                                                "occurrences",
                                                "all_words",
                                                "lsi_words",
                                                "stop_words"
                                            ]
                                        },
                                        "headings_and_metatags": {
                                            "items": 2,
                                            "keys": [
                                                "occurrences",
                                                "all_words"
                                            ]
                                        },
                                        "url_optimization_estimation": {
                                            "items": 3,
                                            "keys": [
                                                "https://site.ru/page/",
                                                "https://rival1.ru/page/",
                                                "https://rival2.ru/page/"
                                            ]
                                        },
                                        "recommendations": {
                                            "items": 2,
                                            "keys": [
                                                "text_and_links",
                                                "headings_and_metatags"
                                            ]
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/iiotvety": {
            "get": {
                "tags": [
                    "iiotvety"
                ],
                "operationId": "iiotvety_options",
                "summary": "Справочник регионов и языков / Получение результата",
                "description": "Допустимые значения ss, коды регионов lr для каждой системы и языки Google. Задачу не ставит, лимиты не тратит.\n\nПовторяйте раз в 10–30 секунд: сбор идёт порциями, большая задача занимает десятки минут.",
                "parameters": [
                    {
                        "name": "options",
                        "in": "query",
                        "required": true,
                        "description": "Любое непустое значение.",
                        "schema": {
                            "type": "string"
                        }
                    },
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": false,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "ss": [
                                        {
                                            "name": "Яндекс",
                                            "value": "yandex"
                                        },
                                        {
                                            "name": "Google",
                                            "value": "google"
                                        }
                                    ],
                                    "lr": {
                                        "yandex": [
                                            {
                                                "name": "Москва",
                                                "value": 213
                                            },
                                            {
                                                "name": "Санкт-Петербург",
                                                "value": 2
                                            }
                                        ],
                                        "google": [
                                            {
                                                "name": "Москва",
                                                "value": 213
                                            }
                                        ]
                                    },
                                    "languages": {
                                        "google": [
                                            {
                                                "name": "Русский",
                                                "value": "ru"
                                            },
                                            {
                                                "name": "Английский",
                                                "value": "en"
                                            }
                                        ]
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "tags": [
                    "iiotvety"
                ],
                "operationId": "iiotvety_create",
                "summary": "Постановка задачи",
                "description": "Тело — JSON-объект; поля формы метод не читает. Ключ — в адресе.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 18452301
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "requests": {
                                        "type": "array",
                                        "description": "Поисковые запросы, от 1 до 1000."
                                    },
                                    "searchSystems": {
                                        "type": "array",
                                        "description": "Поисковые системы и регионы, от 1 до 6 элементов. Одна система может повторяться с разными регионами."
                                    },
                                    "url": {
                                        "type": "string",
                                        "description": "Ваш сайт: для него считается position среди источников ответа."
                                    },
                                    "subdomains": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "true — поддомены считаются вашим сайтом: blog.example.com засчитывается за example.com."
                                    },
                                    "collect_online": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Только Яндекс. false — нейроответы из обычного поиска, только по популярным информационным запросам. true — режим «Поиск с Алисой»: ответ запрашивается для любых запросов, включая коммерческие и редкие. Цена — 750 вместо 4 за запрос."
                                    },
                                    "collect_google_ai_mode": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Только Google. true — если блока AI Overview в выдаче нет, взять ответ из вкладки «Режим ИИ». На цену не влияет."
                                    }
                                },
                                "required": [
                                    "requests",
                                    "searchSystems"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/serp/yandex/searchAndContext/set": {
            "post": {
                "tags": [
                    "serp-yandex-search-and-context"
                ],
                "operationId": "serp-yandex-search-and-context_set",
                "summary": "Постановка задачи: органика и реклама",
                "description": "Ставит задачу и сразу списывает лимиты: 2 за каждый уникальный запрос, независимо от deep, is_mobile и ads_only. Параметры можно передать и в query.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "task_id": 18452301
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "keywords": {
                                        "type": "array",
                                        "description": "Запросы: строка, по запросу на строку, или массив keywords[]. Пустые строки и дубли отбрасываются. До 15 000 запросов."
                                    },
                                    "region": {
                                        "type": "integer",
                                        "description": "Регион Яндекса (lr), например 213 — Москва. Только из справочника serp/regions/get."
                                    },
                                    "deep": {
                                        "type": "integer",
                                        "default": 50,
                                        "description": "Сколько результатов органической выдачи собирать по запросу. На стоимость не влияет."
                                    },
                                    "is_mobile": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Мобильная выдача вместо десктопной."
                                    },
                                    "ads_only": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Собрать только рекламу, без органической выдачи. Цена та же."
                                    }
                                },
                                "required": [
                                    "keywords",
                                    "region"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/serp/yandex/set": {
            "post": {
                "tags": [
                    "serp-yandex-search-and-context"
                ],
                "operationId": "serp-yandex-search-and-context_set-organic",
                "summary": "Постановка задачи: только органика",
                "description": "То же без сбора рекламы — за 1 лимит на запрос; рекламные блоки в результате пустые. Параметры, ответ, статус и получение результата — как у searchAndContext/set, кроме ads_only.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "task_id": 18452302
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "keywords": {
                                        "type": "array",
                                        "description": "Запросы: строка, по запросу на строку, или массив keywords[]. Пустые строки и дубли отбрасываются. До 15 000 запросов."
                                    },
                                    "region": {
                                        "type": "integer",
                                        "description": "Регион Яндекса (lr), например 213 — Москва. Только из справочника serp/regions/get."
                                    },
                                    "deep": {
                                        "type": "integer",
                                        "default": 50,
                                        "description": "Сколько результатов органической выдачи собирать по запросу. На стоимость не влияет."
                                    },
                                    "is_mobile": {
                                        "type": "integer",
                                        "enum": [
                                            0,
                                            1
                                        ],
                                        "default": 0,
                                        "description": "Мобильная выдача вместо десктопной."
                                    }
                                },
                                "required": [
                                    "keywords",
                                    "region"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/serp/yandex/status": {
            "post": {
                "tags": [
                    "serp-yandex-search-and-context"
                ],
                "operationId": "serp-yandex-search-and-context_status",
                "summary": "Готовность задачи",
                "description": "Опрашивайте раз в 5–10 секунд, пока progress не станет 100. Сразу после постановки может прийти {\"error\": \"session is not ready\"} — задача ещё не попала в очередь, повторите запрос.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "progress": 64
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "task_id": {
                                        "type": "integer",
                                        "description": "ID задачи из ответа на постановку."
                                    }
                                },
                                "required": [
                                    "task_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/serp/yandex/get": {
            "post": {
                "tags": [
                    "serp-yandex-search-and-context"
                ],
                "operationId": "serp-yandex-search-and-context_get",
                "summary": "Результат",
                "description": "Вызывайте, когда progress дошёл до 100. Повторные вызовы бесплатны. Большую задачу читайте частями: увеличивайте offset на limit, пока не придёт пустая выборка.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "query": "купить смартфон",
                                        "query_id": "0",
                                        "region": 213,
                                        "is_mobile": 0,
                                        "source": "yandex",
                                        "organic": [
                                            {
                                                "position": 1,
                                                "url": "https://www.example-shop.ru/smartfony/",
                                                "domain": "example-shop.ru",
                                                "title": "Смартфоны — купить в интернет-магазине",
                                                "snippet": "Более 2000 моделей смартфонов с доставкой…",
                                                "visible_link": "example-shop.ru › smartfony"
                                            }
                                        ],
                                        "ads_top": [
                                            {
                                                "position": 1,
                                                "url": "https://ads.example.ru/phones/",
                                                "domain": "ads.example.ru",
                                                "title": "Смартфоны со скидкой до 30%",
                                                "snippet": "Рассрочка 0%. Доставка за 2 часа."
                                            }
                                        ],
                                        "ads_middle": [],
                                        "ads_bottom": [],
                                        "koldunshiki": {
                                            "entity_card": false,
                                            "alice_answer": false,
                                            "facts": false,
                                            "see_also": true,
                                            "map": false,
                                            "companies": true,
                                            "currency_converter": false
                                        }
                                    }
                                ]
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "task_id": {
                                        "type": "integer",
                                        "description": "ID задачи из ответа на постановку."
                                    },
                                    "limit": {
                                        "type": "integer",
                                        "default": 60000,
                                        "description": "Сколько запросов отдать за вызов."
                                    },
                                    "offset": {
                                        "type": "integer",
                                        "default": 0,
                                        "description": "Смещение для постраничного чтения."
                                    }
                                },
                                "required": [
                                    "task_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/serp/regions/get": {
            "get": {
                "tags": [
                    "serp-yandex-search-and-context"
                ],
                "operationId": "serp-yandex-search-and-context_regions",
                "summary": "Справочник регионов",
                "description": "Регионы, которые принимает параметр region. Ключ не нужен — метод открыт.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": [
                                    {
                                        "lr": "213",
                                        "slug": "Москва"
                                    },
                                    {
                                        "lr": "2",
                                        "slug": "Санкт-Петербург"
                                    }
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api/geopanel": {
            "post": {
                "tags": [
                    "geopanel"
                ],
                "operationId": "geopanel_create",
                "summary": "Постановка задачи",
                "description": "Параметры — в теле формы или JSON (Content-Type: application/json), ключ — в query.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617073
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "site": {
                                        "type": "string",
                                        "description": "Домен или URL сайта."
                                    },
                                    "include_subdomains": {
                                        "type": "boolean",
                                        "default": false,
                                        "description": "Учитывать поддомены. В форме включается любым непустым значением, в том числе строкой false — чтобы не учитывать, не передавайте параметр или передайте 0."
                                    },
                                    "models": {
                                        "type": "array",
                                        "description": "Нейросети — массив models[]. Без параметра — все доступные. Список меняется; на момент написания: yandex-alisa, google-ai-overview, openai, perplexity, alice-ai, deepseek, claude, grok, qwen, gemini. Неизвестное имя — ошибка с полным списком допустимых."
                                    }
                                },
                                "required": [
                                    "site"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "geopanel"
                ],
                "operationId": "geopanel_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит {\"error\": \"In progress\", \"code\": 50, \"progress\": 50}.",
                "parameters": [
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "prompts": [
                                            {
                                                "prompt": {
                                                    "id": 5512,
                                                    "prompt": "сервисы для проверки позиций сайта"
                                                },
                                                "neurals": [
                                                    {
                                                        "neural": "yandex-alisa",
                                                        "mention_position": 2,
                                                        "ai_response": "Для проверки позиций подойдут…",
                                                        "sources": [
                                                            {
                                                                "url": "https://tools.pixelplus.ru/tools/positions",
                                                                "domain": "tools.pixelplus.ru"
                                                            }
                                                        ],
                                                        "last_check_date": "2026-09-28"
                                                    }
                                                ],
                                                "last_check_date": "2026-09-28"
                                            }
                                        ],
                                        "mentions_chart": [
                                            {
                                                "id": "all",
                                                "name": "Все",
                                                "data": [
                                                    {
                                                        "x": "08.2026",
                                                        "y": 12
                                                    },
                                                    {
                                                        "x": "09.2026",
                                                        "y": 17
                                                    }
                                                ]
                                            }
                                        ],
                                        "sources": [
                                            {
                                                "url": "https://tools.pixelplus.ru/tools/positions",
                                                "domain": "tools.pixelplus.ru",
                                                "frequency": 9,
                                                "prompts": []
                                            }
                                        ],
                                        "competitors": [
                                            {
                                                "competitor": "example-seo.ru",
                                                "total_mentions_count": 6,
                                                "prompts": []
                                            }
                                        ],
                                        "urls_found": 128,
                                        "tables_count": {
                                            "prompts": 20,
                                            "sources": 45,
                                            "competitors": 12
                                        },
                                        "tables_total_count": {
                                            "prompts": 20,
                                            "sources": 45,
                                            "competitors": 12
                                        },
                                        "csv_files": []
                                    },
                                    "time": "1759312800",
                                    "cost": 100
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/optimizationcheck": {
            "post": {
                "tags": [
                    "optimizationcheck"
                ],
                "operationId": "optimizationcheck_create",
                "summary": "Постановка задачи",
                "description": "Параметры — в теле формы или JSON (Content-Type: application/json), ключ — в query.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "report_id": 2617072
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/x-www-form-urlencoded": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "mode": {
                                        "type": "string",
                                        "enum": [
                                            "url",
                                            "text"
                                        ],
                                        "description": "Что анализировать."
                                    },
                                    "queries": {
                                        "type": "array",
                                        "description": "Запросы, под которые оценивается страница: массив queries[] или строка, по запросу на строку. До 30 уникальных, без пустых строк."
                                    },
                                    "lr": {
                                        "type": "integer",
                                        "description": "Регион Яндекса, например 213 — Москва."
                                    },
                                    "content_fetch_method": {
                                        "type": "string",
                                        "enum": [
                                            "browser_js",
                                            "browser_no_js"
                                        ],
                                        "description": "Как загружать страницу. Проверяется в обоих режимах — при mode=text тоже передайте любое из значений."
                                    },
                                    "url": {
                                        "type": "string",
                                        "description": "Адрес страницы. Обязателен при mode=url."
                                    },
                                    "title": {
                                        "type": "string",
                                        "description": "Тег Title. Обязателен при mode=text."
                                    },
                                    "text": {
                                        "type": "string",
                                        "description": "Текст страницы. Обязателен при mode=text."
                                    }
                                },
                                "required": [
                                    "mode",
                                    "queries",
                                    "lr",
                                    "content_fetch_method"
                                ]
                            }
                        }
                    }
                }
            },
            "get": {
                "tags": [
                    "optimizationcheck"
                ],
                "operationId": "optimizationcheck_result",
                "summary": "Получение результата",
                "description": "Пока задача выполняется, приходит {\"error\": \"In progress\", \"code\": 50, \"progress\": 40}.",
                "parameters": [
                    {
                        "name": "report_id",
                        "in": "query",
                        "required": true,
                        "description": "ID задачи из ответа на постановку.",
                        "schema": {
                            "type": "integer"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "response": {
                                        "optimization": [
                                            "Текущее качество оптимизации документа — 72%"
                                        ],
                                        "title_data": [
                                            {
                                                "type": "notice",
                                                "text": "Длина Title в норме.",
                                                "data_array": []
                                            }
                                        ],
                                        "text_data": [
                                            {
                                                "type": "error",
                                                "text": "В тексте нет точного вхождения запроса «офисная мебель купить».",
                                                "data_array": []
                                            }
                                        ],
                                        "requests_summary": [
                                            {
                                                "query": "мебель для офиса",
                                                "geo": true,
                                                "lr": 213,
                                                "ws": 5120
                                            },
                                            {
                                                "query": "офисная мебель купить",
                                                "geo": true,
                                                "lr": 213,
                                                "ws": 1840
                                            }
                                        ],
                                        "url_summary": {
                                            "server_response": 200,
                                            "url_get_params": 0,
                                            "url_linkint": 14,
                                            "url_age": "2021-03-15",
                                            "url_age_in_day": "2 030 дней",
                                            "url_len": 36
                                        }
                                    },
                                    "time": "1734513600",
                                    "cost": 14
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/user/auth": {
            "post": {
                "tags": [
                    "rest-auth"
                ],
                "operationId": "rest-auth_auth",
                "summary": "Выпуск токенов по email и паролю",
                "description": "Проверяет email и пароль и выпускает пару токенов: access на час и refresh на год. Каждый вызов выпускает новую пару; прежние токены продолжают работать. Заголовок token этому методу не нужен.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Token has been created successfully. Save your refresh-token. It will be valid for one year. If you lose your's refresh-token, you can easily recreate it via auth",
                                    "code": 201,
                                    "data": {
                                        "jwt_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo…",
                                        "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo…",
                                        "valid": "2026-10-06 13:00:00"
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "Email аккаунта Пиксель Тулс."
                                    },
                                    "password": {
                                        "type": "string",
                                        "description": "Пароль аккаунта."
                                    }
                                },
                                "required": [
                                    "email",
                                    "password"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/user/refresh-token": {
            "post": {
                "tags": [
                    "rest-auth"
                ],
                "operationId": "rest-auth_refresh-token",
                "summary": "Новый access token по refresh token",
                "description": "Выпускает новый access token на час, не спрашивая пароль. Refresh token передаётся в заголовке refresh-token и возвращается в ответе тот же — новый не выпускается. Когда он истечёт, получите новую пару через user/auth.",
                "parameters": [
                    {
                        "name": "refresh-token",
                        "in": "header",
                        "required": true,
                        "description": "Refresh token из ответа user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Token has been updated successfully",
                                    "code": 201,
                                    "data": {
                                        "jwt_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo…",
                                        "refresh_token": "ВАШ_REFRESH_TOKEN",
                                        "valid": "2026-10-06 13:00:00"
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/user/register": {
            "post": {
                "tags": [
                    "rest-auth"
                ],
                "operationId": "rest-auth_register",
                "summary": "Регистрация нового аккаунта",
                "description": "Создаёт аккаунт Пиксель Тулс и сразу выпускает для него токены — отдельно вызывать user/auth не нужно. Токены лежат на уровень глубже, чем в user/auth: в data.data.",
                "parameters": [],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "User has been created successfully",
                                    "code": 201,
                                    "data": {
                                        "data": {
                                            "jwt_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo…",
                                            "refresh_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo…",
                                            "valid": "2026-10-06 13:00:00"
                                        },
                                        "code": 201,
                                        "status": "success",
                                        "message": "Token has been created successfully. Save your refresh-token. It will be valid for one year. If you lose your's refresh-token, you can easily recreate it via auth"
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "email": {
                                        "type": "string",
                                        "description": "Email нового аккаунта. Нельзя: &amp; = + &lt; &gt; , ' и две точки подряд."
                                    },
                                    "password": {
                                        "type": "string",
                                        "description": "Пароль. Проверяется только, что он не пустой."
                                    },
                                    "name": {
                                        "type": "string",
                                        "description": "Имя пользователя."
                                    },
                                    "username": {
                                        "type": "string",
                                        "description": "Логин. Без него — не задаётся."
                                    },
                                    "mobile_phone": {
                                        "type": "string",
                                        "description": "Телефон."
                                    }
                                },
                                "required": [
                                    "email",
                                    "password"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/user/delete": {
            "post": {
                "tags": [
                    "rest-auth"
                ],
                "operationId": "rest-auth_delete",
                "summary": "Отключение своего аккаунта",
                "description": "Отключает аккаунт, которому принадлежит токен из заголовка token. Данные не стираются, но войти больше нельзя: user/auth вернёт 418 User has been deleted. Вернуть аккаунт — через поддержку.Отключить можно только свой аккаунт: без действующего токена метод ответит 401 Token is not authorized.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "User has been deleted successfully",
                                    "code": 202,
                                    "data": [],
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/user/get-limits": {
            "post": {
                "tags": [
                    "rest-user"
                ],
                "operationId": "rest-user_get-limits",
                "summary": "Остаток лимитов",
                "description": "Месячный лимит пользователя: сколько всего, сколько потрачено и сколько осталось. Если тариф не даёт лимитов (базовые ограничения), все три числа — 0.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "User limits successfully received",
                                    "code": 200,
                                    "data": {
                                        "total": 65000,
                                        "used": 12480,
                                        "available": "52520",
                                        "month_total": 65000,
                                        "month_limits": 12480
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/user/state/get": {
            "post": {
                "tags": [
                    "rest-user"
                ],
                "operationId": "rest-user_state",
                "summary": "Состояние аккаунта и идущие задачи",
                "description": "Снимок для экрана приложения: задачи инструментов, которые ждут очереди или выполняются, прогресс фоновых процессов по каждому проекту, баланс и тариф. Удобно опрашивать, чтобы показать ход проверки позиций, запущенной через positions/schedule.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "tools": [
                                            {
                                                "hid": 48211903,
                                                "progress": 40,
                                                "tools_id": 12
                                            }
                                        ],
                                        "projects": {
                                            "7002": {
                                                "positions_yandex": 35,
                                                "qdata": false,
                                                "pf": false,
                                                "intopt": false,
                                                "extopt": false,
                                                "distribution_import": false,
                                                "queries_import": false,
                                                "queries_import_spreadsheet": false,
                                                "url_group_generation": false
                                            }
                                        },
                                        "notices": [],
                                        "user": {
                                            "id": "1001",
                                            "email": "user@example.com",
                                            "name": "Анна",
                                            "balance": "5000",
                                            "tariff": {
                                                "id": "10",
                                                "name": "Гуру",
                                                "date_end": "2026-11-21",
                                                "price": "2490"
                                            }
                                        }
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/tariff/list/get": {
            "post": {
                "tags": [
                    "rest-user"
                ],
                "operationId": "rest-user_tariff-list",
                "summary": "Тарифы и цены по периодам",
                "description": "Публичные тарифы и цены на 10, 30, 90 и 365 дней с учётом скидки за период и личных промо-скидок пользователя — из двух скидок берётся бо́льшая. Отсюда берут tariff_id и period для user/tariff/buy.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "tariffs": [
                                            {
                                                "id": "10",
                                                "name": "Гуру",
                                                "api_access": "1",
                                                "api_limit": "3300",
                                                "support": "6",
                                                "role": "ROLE_USER_EXPERT",
                                                "limits_price": "299",
                                                "price": "2490",
                                                "date": "2020-07-13 15:20:54",
                                                "base": null,
                                                "hourly_limits": "1500",
                                                "monthly_limits": "65000"
                                            }
                                        ],
                                        "prices": {
                                            "30": {
                                                "percent": 0,
                                                "period": 30,
                                                "label": "30 дней",
                                                "tariffs_data": {
                                                    "10": {
                                                        "id": "10",
                                                        "full_price": 2490,
                                                        "end_price": 2490,
                                                        "end_price_word": "рублей",
                                                        "benefit": {
                                                            "value": 0,
                                                            "word": "рублей",
                                                            "percent": 0
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/user/tariff/buy": {
            "post": {
                "tags": [
                    "rest-user"
                ],
                "operationId": "rest-user_tariff-buy",
                "summary": "Покупка или продление тарифа",
                "description": "Покупает тариф на выбранный период, при желании вместе с пакетом лимитов, и сразу списывает стоимость с баланса — так же, как кнопка «Купить» в калькуляторе тарифов. Тот же тариф продлевается, более высокий — подключается. Перейти на тариф ниже текущего нельзя.Метод списывает реальные деньги с баланса. Если денег не хватает, ничего не списывается — придёт ошибка 450; пополнить баланс можно через balance/add.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "tarif": "Тариф успешно продлен до 05.11.2026",
                                        "balance": "С вашего счета были списаны средства в размере: 2 490 рублей."
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "tariff_id": {
                                        "type": "integer",
                                        "description": "ID тарифа из tariff/list/get. Должен быть публичным и не ниже текущего."
                                    },
                                    "period": {
                                        "type": "integer",
                                        "enum": [
                                            10,
                                            30,
                                            90,
                                            365
                                        ],
                                        "default": 30,
                                        "description": "Период в днях. Любое другое значение молча заменяется на 30."
                                    },
                                    "limits": {
                                        "type": "integer",
                                        "default": 0,
                                        "description": "Сколько лимитов докупить вместе с тарифом. Без него — только тариф."
                                    }
                                },
                                "required": [
                                    "tariff_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/projects/list": {
            "post": {
                "tags": [
                    "rest-projects"
                ],
                "operationId": "rest-projects_list",
                "summary": "Список проектов",
                "description": "Свои проекты и проекты с выданным доступом. По каждому — карточка, даты всех завершённых проверок позиций и счётчик ошибок технического аудита.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": [
                                        {
                                            "project": {
                                                "id": "7002",
                                                "user_id": "1001",
                                                "domain": "example.ru",
                                                "main_mirror": "https://example.ru/",
                                                "aliases": "",
                                                "check_interval": "2",
                                                "subdomain_check": "1",
                                                "priority_sytem": "1",
                                                "frequency_type": "3",
                                                "date": "2026-03-02 11:10:43",
                                                "date_update": "2026-10-05 04:12:09",
                                                "status": "1",
                                                "name": ""
                                            },
                                            "update": [
                                                "2026-09-28",
                                                "2026-10-05"
                                            ],
                                            "errors": {
                                                "total_count": "64",
                                                "errors_count": "7"
                                            }
                                        }
                                    ],
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/projects/ss-list": {
            "post": {
                "tags": [
                    "rest-projects"
                ],
                "operationId": "rest-projects_ss-list",
                "summary": "Поисковые системы и регионы для домена",
                "description": "Шаг 1 создания проекта. Предлагает поисковые системы и регион по умолчанию — регион из настроек пользователя (для доменов .ua, .by, .kz — регион страны) — и отдаёт справочник систем с регионами, чтобы пользователь мог выбрать свои. Пары search_sestem.id + ключ региона идут в projects/add как search_engine и search_region.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "prepared_search_systems": [
                                            {
                                                "lbl": 1,
                                                "name": "Яндекс",
                                                "region": "Москва"
                                            },
                                            {
                                                "lbl": 3,
                                                "name": "Google",
                                                "region": "Москва"
                                            }
                                        ],
                                        "search_systems_with_regions": [
                                            {
                                                "search_sestem": {
                                                    "id": "1",
                                                    "name": "Яндекс",
                                                    "domain": "https://yandex.ru/",
                                                    "slug": "yandex",
                                                    "date": "2017-08-04 11:10:15"
                                                },
                                                "region": {
                                                    "213": "Москва",
                                                    "2": "Санкт-Петербург",
                                                    "54": "Екатеринбург"
                                                }
                                            }
                                        ]
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "domain": {
                                        "type": "string",
                                        "description": "Домен сайта без протокола."
                                    }
                                },
                                "required": [
                                    "domain"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/projects/get-words": {
            "post": {
                "tags": [
                    "rest-projects"
                ],
                "operationId": "rest-projects_get-words",
                "summary": "Подбор запросов для домена",
                "description": "Шаг 2 создания проекта. Запросы, по которым домен уже виден в органике Яндекса, — до 500 штук, самые частотные первыми. Берётся первый регион, где у домена набралось хотя бы 200 запросов; если такого нет, придёт пустой список — тогда запросы придётся задать самим.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": [
                                        "купить велосипед",
                                        "велосипед горный",
                                        "велосипеды москва"
                                    ],
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "domain": {
                                        "type": "string",
                                        "description": "Домен сайта без протокола."
                                    }
                                },
                                "required": [
                                    "domain"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/projects/add": {
            "post": {
                "tags": [
                    "rest-projects"
                ],
                "operationId": "rest-projects_add",
                "summary": "Создание проекта",
                "description": "Шаг 3. Создаёт проект с настройками быстрого старта: главное зеркало определяется по Яндексу (если не найдено — https://&lt;домен&gt;), домен проекта берётся из зеркала, запросы добавляются в группу «Общая». Проект принадлежит владельцу токена.Массивы передавайте массивами — JSON-телом или как search-systems[0][search_engine]=1 в форме. Строку с JSON внутри поля формы метод не разбирает: запросы превратятся в одну строку, а поисковые системы не добавятся.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Project successfully created",
                                    "code": 200,
                                    "data": {
                                        "project_id": 7105
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "domain": {
                                        "type": "string",
                                        "description": "Домен сайта без протокола."
                                    },
                                    "search-systems": {
                                        "type": "array",
                                        "description": "Поисковые системы проекта: массив объектов {\"search_engine\": ID системы, \"search_region\": ID региона} из projects/ss-list. Первая становится приоритетной. Без них — Яндекс и Google, Москва."
                                    },
                                    "key-words": {
                                        "type": "array",
                                        "description": "Запросы: массив строк (например, отредактированный ответ projects/get-words) или одна строка, где запросы разделены переводом строки. Без них проект создаётся пустым."
                                    },
                                    "debug": {
                                        "type": "integer",
                                        "enum": [
                                            1
                                        ],
                                        "description": "Проверка без создания: с 1 метод вернёт, как он понял входные данные, и проект не создаст."
                                    }
                                },
                                "required": [
                                    "domain"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/positions/get": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_positions",
                "summary": "Позиции запросов за период",
                "description": "Таблица позиций, как на вкладке «Позиции» проекта: запросы с частотой, релевантным URL и позициями в каждой поисковой системе, плюс видимость и апдейты Яндекса за период. Две формы: simple — первая и последняя проверка периода и разница, detail — позиция на каждую дату проверки.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "total_count": "1",
                                        "page": 1,
                                        "limit": 30,
                                        "table_type": "simple",
                                        "ss_id": "all",
                                        "from": "2026-09-28",
                                        "to": "2026-10-05",
                                        "order": "frequency",
                                        "order_type": 2,
                                        "group": false,
                                        "group_url": false,
                                        "access_type": "OWNER",
                                        "top": 10000,
                                        "change": "all",
                                        "data": {
                                            "yandex_updates": false,
                                            "visibility": {
                                                "last": 42.5,
                                                "prev": 40.1,
                                                "diff": 2.4
                                            },
                                            "queries": [
                                                {
                                                    "query_id": 8049495,
                                                    "query": "купить велосипед",
                                                    "group_id": 1,
                                                    "frequency": 1250,
                                                    "full_rel_url": "https://example.ru/catalog/bikes/",
                                                    "full_need_url": "https://example.ru/catalog/bikes/",
                                                    "search_engines": [
                                                        {
                                                            "position": 4,
                                                            "delta_position": 2,
                                                            "search_system_id": 1,
                                                            "detail": {
                                                                "date1": "2026-09-28",
                                                                "date2": "2026-10-05",
                                                                "position1": 6,
                                                                "position2": 4
                                                            },
                                                            "relevance_url": "https://example.ru/catalog/bikes/",
                                                            "engine_data": {
                                                                "id": 1,
                                                                "name": "Яндекс (Москва)",
                                                                "is_priority": 1,
                                                                "region": {
                                                                    "id": "213",
                                                                    "name": "Москва"
                                                                },
                                                                "engine": {
                                                                    "id": "1",
                                                                    "name": "Яндекс",
                                                                    "alias": "yandex"
                                                                }
                                                            }
                                                        }
                                                    ]
                                                }
                                            ]
                                        }
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта из projects/list."
                                    },
                                    "table_type": {
                                        "type": "string",
                                        "enum": [
                                            "simple",
                                            "detail"
                                        ],
                                        "description": "Форма ответа. По умолчанию — как выбрано в настройках проекта владельца."
                                    },
                                    "limit": {
                                        "type": "integer",
                                        "default": 30,
                                        "description": "Запросов на странице."
                                    },
                                    "page": {
                                        "type": "integer",
                                        "default": 1,
                                        "description": "Номер страницы."
                                    },
                                    "order": {
                                        "type": "string",
                                        "default": "frequency",
                                        "description": "Поле сортировки."
                                    },
                                    "order_type": {
                                        "type": "integer",
                                        "enum": [
                                            1,
                                            2
                                        ],
                                        "default": 2,
                                        "description": "Направление."
                                    },
                                    "change": {
                                        "type": "string",
                                        "enum": [
                                            "all",
                                            "up",
                                            "down"
                                        ],
                                        "default": "all",
                                        "description": "Только изменившиеся за период."
                                    },
                                    "position_details": {
                                        "type": "string",
                                        "default": "all",
                                        "description": "Вход в топ или выход из него за период: in_10 — вошли в ТОП-10, out_10 — вышли; число — граница топа."
                                    },
                                    "keyword": {
                                        "type": "string",
                                        "description": "Только запросы, содержащие эту подстроку."
                                    },
                                    "group": {
                                        "type": "integer",
                                        "description": "ID группы запросов из keyword-groups/get."
                                    },
                                    "group_url": {
                                        "type": "integer",
                                        "description": "ID группы URL из url-groups/get."
                                    },
                                    "ss_id": {
                                        "type": "integer",
                                        "default": "all",
                                        "description": "Одна поисковая система проекта из search-systems/get. Без него — все."
                                    },
                                    "top": {
                                        "type": "integer",
                                        "default": 10000,
                                        "description": "Только запросы не ниже этой позиции. 101 — только вне ТОП-100."
                                    },
                                    "from": {
                                        "type": "string",
                                        "description": "Начало периода, ГГГГ-ММ-ДД. Передаётся вместе с to."
                                    },
                                    "to": {
                                        "type": "string",
                                        "description": "Конец периода включительно."
                                    }
                                },
                                "required": [
                                    "project_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/positions/schedule": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_schedule",
                "summary": "Внеплановая проверка позиций",
                "description": "Ставит все запросы проекта в очередь на съём позиций, не дожидаясь расписания. Ход проверки виден в user/state/get — поле positions_yandex проекта. Новая проверка не запускается, пока не закончилась текущая.Проверка расходует лимиты владельца проекта — столько же, сколько плановый съём. Если их не хватает, придёт ошибка 497 с нужным количеством.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Все запросы проекта example.ru поставлены в очередь на проверку позиций.",
                                    "code": 200,
                                    "data": [],
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта из projects/list."
                                    }
                                },
                                "required": [
                                    "project_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/keyword-groups/get": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_keyword-groups",
                "summary": "Группы запросов",
                "description": "Группы запросов проекта вместе с общей системной группой «Общая», постранично.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "total_count": 2,
                                        "page": 1,
                                        "limit": 20,
                                        "groups": [
                                            {
                                                "id": 1,
                                                "name": "Общая",
                                                "user_id": -1,
                                                "project_id": -1,
                                                "group_order": 1,
                                                "group_type": 1,
                                                "dt_create": "0000-00-00 00:00:00",
                                                "dt_update": "2021-09-20 13:29:01"
                                            },
                                            {
                                                "id": 140601,
                                                "name": "Велосипеды",
                                                "user_id": 1001,
                                                "project_id": 7002,
                                                "group_order": 100,
                                                "group_type": 1,
                                                "dt_create": "2026-03-02 11:15:00",
                                                "dt_update": "2026-03-02 11:15:00"
                                            }
                                        ]
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта из projects/list."
                                    },
                                    "limit": {
                                        "type": "integer",
                                        "default": 20,
                                        "description": "Групп на странице."
                                    },
                                    "page": {
                                        "type": "integer",
                                        "default": 1,
                                        "description": "Номер страницы."
                                    }
                                },
                                "required": [
                                    "project_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/url-groups/get": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_url-groups",
                "summary": "Группы URL",
                "description": "Группы целевых URL проекта, постранично. Формат ответа — как у keyword-groups/get, group_type — 3.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "total_count": 1,
                                        "page": 1,
                                        "limit": 20,
                                        "groups": [
                                            {
                                                "id": 111290,
                                                "name": "example.ru/catalog",
                                                "user_id": 1001,
                                                "project_id": 7002,
                                                "group_order": 100,
                                                "group_type": 3,
                                                "dt_create": "2026-03-02 11:20:19",
                                                "dt_update": "2026-03-02 11:20:19"
                                            }
                                        ]
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта из projects/list."
                                    },
                                    "limit": {
                                        "type": "integer",
                                        "default": 20,
                                        "description": "Групп на странице."
                                    },
                                    "page": {
                                        "type": "integer",
                                        "default": 1,
                                        "description": "Номер страницы."
                                    }
                                },
                                "required": [
                                    "project_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/search-systems/get": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_search-systems",
                "summary": "Поисковые системы проекта",
                "description": "Поисковые системы и регионы, в которых проект снимает позиции. id отсюда передаётся как ss_id в фильтры позиций и сводки.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": [
                                        {
                                            "id": 1,
                                            "name": "Яндекс (Москва)",
                                            "is_priority": 1,
                                            "region": {
                                                "id": "213",
                                                "name": "Москва"
                                            },
                                            "engine": {
                                                "id": "1",
                                                "name": "Яндекс",
                                                "alias": "yandex"
                                            }
                                        },
                                        {
                                            "id": 3,
                                            "name": "Google (Москва)",
                                            "is_priority": 0,
                                            "region": {
                                                "id": "213",
                                                "name": "Москва"
                                            },
                                            "engine": {
                                                "id": "2",
                                                "name": "Google",
                                                "alias": "google"
                                            }
                                        }
                                    ],
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта из projects/list."
                                    }
                                },
                                "required": [
                                    "project_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/positions/summary/set/data": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_summary-set",
                "summary": "Сводка: запуск расчёта",
                "description": "Шаг 1 сводки по позициям — графики видимости, CTR×WS, доли запросов в ТОП-10 и ТОП-3, средней позиции и потенциала. Для каждого типа отвечает, готов ли он; неготовые ставит в фоновый расчёт. Повторяйте вызов раз в секунду-две с теми же фильтрами, пока тип не станет true, затем заберите его через summary/get/content.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "visibility": true,
                                        "ctrxws": false
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта из projects/list."
                                    },
                                    "type": {
                                        "type": "array",
                                        "enum": [
                                            "visibility",
                                            "ctrxws",
                                            "top",
                                            "top3",
                                            "positionavg",
                                            "potential"
                                        ],
                                        "description": "Какие графики нужны. Даже один тип передаётся массивом. Неизвестные типы пропускаются."
                                    },
                                    "keyword": {
                                        "type": "string",
                                        "description": "Только запросы, содержащие эту подстроку."
                                    },
                                    "group": {
                                        "type": "integer",
                                        "description": "ID группы запросов из keyword-groups/get."
                                    },
                                    "group_url": {
                                        "type": "integer",
                                        "description": "ID группы URL из url-groups/get."
                                    },
                                    "ss_id": {
                                        "type": "integer",
                                        "default": "all",
                                        "description": "Одна поисковая система проекта из search-systems/get. Без него — все."
                                    },
                                    "top": {
                                        "type": "integer",
                                        "default": 10000,
                                        "description": "Только запросы не ниже этой позиции. 101 — только вне ТОП-100."
                                    },
                                    "from": {
                                        "type": "string",
                                        "description": "Начало периода, ГГГГ-ММ-ДД. Передаётся вместе с to."
                                    },
                                    "to": {
                                        "type": "string",
                                        "description": "Конец периода включительно."
                                    }
                                },
                                "required": [
                                    "project_id",
                                    "type"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/positions/summary/get/content": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_summary-get",
                "summary": "Сводка: готовый график",
                "description": "Шаг 2: данные одного графика, для которого summary/set/data вернул true. Фильтры должны совпадать с теми, что были на шаге 1, — иначе расчёт для них не найдётся.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": [
                                        {
                                            "x": "28.09.2026",
                                            "y": 40.1
                                        },
                                        {
                                            "x": "05.10.2026",
                                            "y": 42.5
                                        }
                                    ],
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project_id": {
                                        "type": "integer",
                                        "description": "ID проекта из projects/list."
                                    },
                                    "content": {
                                        "type": "string",
                                        "enum": [
                                            "visibility",
                                            "ctrxws",
                                            "top",
                                            "top3",
                                            "positionavg",
                                            "potential"
                                        ],
                                        "description": "Один тип графика."
                                    },
                                    "keyword": {
                                        "type": "string",
                                        "description": "Только запросы, содержащие эту подстроку."
                                    },
                                    "group": {
                                        "type": "integer",
                                        "description": "ID группы запросов из keyword-groups/get."
                                    },
                                    "group_url": {
                                        "type": "integer",
                                        "description": "ID группы URL из url-groups/get."
                                    },
                                    "ss_id": {
                                        "type": "integer",
                                        "default": "all",
                                        "description": "Одна поисковая система проекта из search-systems/get. Без него — все."
                                    },
                                    "top": {
                                        "type": "integer",
                                        "default": 10000,
                                        "description": "Только запросы не ниже этой позиции. 101 — только вне ТОП-100."
                                    },
                                    "from": {
                                        "type": "string",
                                        "description": "Начало периода, ГГГГ-ММ-ДД. Передаётся вместе с to."
                                    },
                                    "to": {
                                        "type": "string",
                                        "description": "Конец периода включительно."
                                    }
                                },
                                "required": [
                                    "project_id",
                                    "content"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/limits/history": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_limits-history",
                "summary": "Расход лимитов по проектам",
                "description": "Сколько лимитов фактически ушло на каждый из переданных SEO-проектов за период: проверки позиций, частот, технические проверки — всё, что списывалось по проекту. Прогноз на 30 дней вперёд отдаёт project/limits-forecast.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "7002": {
                                            "name": "example.ru",
                                            "pid": "7002",
                                            "limits": "15210"
                                        },
                                        "7105": {
                                            "name": "shop.example.ru",
                                            "pid": "7105",
                                            "limits": 0
                                        }
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project": {
                                        "type": "array",
                                        "description": "ID проектов, не больше 100 за запрос."
                                    },
                                    "dateFrom": {
                                        "type": "string",
                                        "description": "Начало периода, ДД.ММ.ГГГГ. По умолчанию — за 7 дней до dateTo."
                                    },
                                    "dateTo": {
                                        "type": "string",
                                        "description": "Конец периода включительно, ДД.ММ.ГГГГ. По умолчанию — сегодня."
                                    }
                                },
                                "required": [
                                    "project"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/project/ai/limits/history": {
            "post": {
                "tags": [
                    "rest-project"
                ],
                "operationId": "rest-project_ai-limits-history",
                "summary": "Расход лимитов по GEO-проектам",
                "description": "То же для GEO-проектов ai.pixeltools.ru — мониторинга видимости в ИИ-ответах. ID здесь — ID GEO-проекта, а не SEO-проекта Пиксель Тулс.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "512": {
                                            "name": "Мой бренд",
                                            "pid": "512",
                                            "limits": "840"
                                        },
                                        "513": {
                                            "name": "GEO-проект",
                                            "pid": "513",
                                            "limits": 0
                                        }
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "project": {
                                        "type": "array",
                                        "description": "ID GEO-проектов, не больше 100 за запрос."
                                    },
                                    "dateFrom": {
                                        "type": "string",
                                        "description": "Начало периода, ДД.ММ.ГГГГ. По умолчанию — за 7 дней до dateTo."
                                    },
                                    "dateTo": {
                                        "type": "string",
                                        "description": "Конец периода, ДД.ММ.ГГГГ. По умолчанию — сегодня."
                                    }
                                },
                                "required": [
                                    "project"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/balance/add": {
            "post": {
                "tags": [
                    "rest-balance"
                ],
                "operationId": "rest-balance_add",
                "summary": "Счёт на пополнение",
                "description": "Заводит неоплаченный счёт на сумму в рублях и отдаёт его номер. Если за последние 50 минут уже есть неоплаченный счёт на ту же сумму, ещё не связанный с платежом, вернётся он — повторное нажатие «Оплатить» не плодит счета. Номер передаётся в метаданные платежа ЮKassa как balance_hid.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "payment_id": 110616
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "sum": {
                                        "type": "integer",
                                        "description": "Сумма пополнения, целые рубли, больше нуля."
                                    }
                                },
                                "required": [
                                    "sum"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/balance/update": {
            "post": {
                "tags": [
                    "rest-balance"
                ],
                "operationId": "rest-balance_update",
                "summary": "Привязка платежа ЮKassa к счёту",
                "description": "Записывает в счёт ID созданного платежа ЮKassa — с префиксом kassa_m_payment_. Привязать можно только свой неоплаченный счёт и только один раз.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": {
                                        "id": "110616",
                                        "ext_id": "kassa_m_payment_2e8a7f3c-000f-5000-9000-1b2c3d4e5f60",
                                        "user_id": "1001",
                                        "type": "1",
                                        "sum": "1000",
                                        "date": "2026-10-06 11:58:17",
                                        "status": "2",
                                        "dt_update": "2026-10-06 12:00:00"
                                    },
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "payment_id": {
                                        "type": "integer",
                                        "description": "Номер счёта из balance/add."
                                    },
                                    "external_id": {
                                        "type": "string",
                                        "description": "ID платежа в ЮKassa."
                                    }
                                },
                                "required": [
                                    "payment_id",
                                    "external_id"
                                ]
                            }
                        }
                    }
                }
            }
        },
        "/api-rest/balance/confirm": {
            "post": {
                "tags": [
                    "rest-balance"
                ],
                "operationId": "rest-balance_confirm",
                "summary": "Подтверждение оплаты",
                "description": "Вызывается после оплаты. Сервер сам запрашивает платёж в ЮKassa и зачисляет деньги, только если платёж в статусе succeeded, а счёт из его метаданных (balance_hid, user_id, sum) ещё не оплачен и совпадает по пользователю и сумме. Если пользователь согласился сохранить карту, она привязывается для автоплатежей.",
                "parameters": [
                    {
                        "name": "token",
                        "in": "header",
                        "required": true,
                        "description": "Access token из user/auth.",
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Ответ",
                        "content": {
                            "application/json": {
                                "example": {
                                    "status": "success",
                                    "message": "Request successful",
                                    "code": 200,
                                    "data": [],
                                    "dt": "2026-10-06 12:00:00"
                                }
                            }
                        }
                    }
                },
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "external_id": {
                                        "type": "string",
                                        "description": "ID платежа в ЮKassa — без префикса."
                                    },
                                    "source": {
                                        "type": "string",
                                        "enum": [
                                            "yookassa"
                                        ],
                                        "description": "Платёжная система."
                                    }
                                },
                                "required": [
                                    "external_id",
                                    "source"
                                ]
                            }
                        }
                    }
                }
            }
        }
    }
}