API

Публичный API Ранкли работает через единый адрес JSON-RPC `/api`. API-ключи формата `rnk_...` создаются в личном кабинете, в разделе `API-ключи`.

Базовые настройки

JSON-RPC: https://server.ranklyai.ru/api
Authorization: Bearer rnk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Если ключ невалиден, отозван или просрочен, API вернёт HTTP 401.

Формат JSON-RPC запроса: { type, id, method, args }. В `method` используйте путь со слешами, например `public/summaries/fromUrl`.

Как читать JSON-RPC-пакет

`type` показывает тип сообщения. `call` означает запрос на вызов метода, `callback` означает ответ сервера, `event` означает серверное событие.

`id` в корне запроса вы задаёте сами. Это идентификатор запроса, чтобы потом понять, на какой именно вызов пришёл ответ.

Не путайте его с `result.id` в ответе метода. `id` в корне пакета — это идентификатор запроса. `result.id` — это идентификатор созданной задачи или аудита в системе.

`method` — это имя вызываемого метода, например `public/summaries/fromUrl`.

`args` — это данные, которые вы передаёте в метод. Например URL страницы, текст или `id` уже созданной задачи.

WebSocket (/ws): как подключиться

Для обновлений в реальном времени используйте адрес `wss://server.ranklyai.ru/ws`. В браузере соединение обычно открывают из уже авторизованной сессии, поэтому WebSocket использует cookie. Если подключение делает сервер или внешний клиент, можно передать Bearer API-ключ.

const ws = new WebSocket('wss://server.ranklyai.ru/ws');

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  console.log(msg);
};

Формат вызова методов тот же, что и в `/api`. Можно отправлять JSON-RPC пакеты вида `{ type: 'call', id, method, args }` и получать обычные ответы в этом же сокете.

{
  "type": "call",
  "id": "request-1",
  "method": "public/summaries/get",
  "args": [{ "id": 9123 }]
}

Серверные события приходят как { type: 'event', name, data }. Основные события: summary/completed, seo/audit.ready, subscription/updated.

API заметок

Работа с заметками обычно выглядит так: сначала создаётся задача по ссылке или тексту, затем по `id` проверяется статус и забирается результат, а через `list` можно строить историю и интерфейсы.

Создать заметку по ссылке

Техническое имя метода: `public/summaries/fromUrl`.

Создаёт заметку по ссылке. Этот метод нужен, когда материал уже лежит в сети и достаточно передать URL страницы.

В ответе вы получите `success`, `id` задачи и стартовый `status`. Сам итоговый текст заметки появится позже, когда задача завершится.

curl -X POST 'https://server.ranklyai.ru/api' \
  -H 'Authorization: Bearer rnk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "call",
    "id": "request-1",
    "method": "public/summaries/fromUrl",
    "args": [{ "url": "https://example.com/article" }]
  }'
{
  "type": "callback",
  "id": "request-1",
  "result": {
    "success": true,
    "id": 9123,
    "status": "PROCESSING"
  }
}

Создать заметку из текста

Техническое имя метода: `public/summaries/fromText`.

Создаёт заметку из переданного текста. Полезно для черновиков, документов, писем и любого контента без публичного URL.

Логика ответа такая же: сначала приходит подтверждение создания задачи, потом результат читается через `get`.

curl -X POST 'https://server.ranklyai.ru/api' \
  -H 'Authorization: Bearer rnk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "call",
    "id": "request-2",
    "method": "public/summaries/fromText",
    "args": [{ "text": "Большой текст статьи или документа" }]
  }'

Получить результат заметки

Техническое имя метода: `public/summaries/get`.

Возвращает состояние задачи и итоговую заметку по `id`. Пока задача ещё в работе, здесь будет промежуточный статус. Когда обработка завершится, здесь появится готовый результат.

Именно этот метод обычно вызывается после `fromUrl` или `fromText`, чтобы понять, завершилась задача или ещё нет.

curl -X POST 'https://server.ranklyai.ru/api' \
  -H 'Authorization: Bearer rnk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "call",
    "id": "request-3",
    "method": "public/summaries/get",
    "args": [{ "id": 9123 }]
  }'

Получить список заметок

Техническое имя метода: `public/summaries/list`.

Возвращает список уже созданных заметок с метаданными. Этот метод нужен для истории, таблиц в интерфейсе, поиска по библиотеке и повторного открытия прошлых материалов.

curl -X POST 'https://server.ranklyai.ru/api' \
  -H 'Authorization: Bearer rnk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "call",
    "id": "request-4",
    "method": "public/summaries/list",
    "args": [{}]
  }'

Безопасный сценарий интеграции: вызвать `fromUrl` или `fromText`, сохранить `result.id`, затем запрашивать `get` сначала чуть чаще, потом реже, пока статус не станет `COMPLETED` или `FAILED`. Для долгих задач лучше подключать `/ws`, а `list` использовать для истории.

SEO API

Работа с SEO обычно выглядит так: сначала клиент получает список типов страниц, затем запускает аудит, после этого читает результат по `id`, а `list` использует для истории и интерфейсов.

Для SEO тоже работают обновления в реальном времени через `/ws`: после запуска `public/seo/audit` дождитесь события `seo/audit.ready` и затем заберите итог через `public/seo/get` по `auditId`.

Получить типы страниц

Техническое имя метода: `public/seo/pageTypes`.

Возвращает доступные типы страниц для аудита. Обычно именно с этого метода начинает интерфейс, чтобы показать пользователю понятные варианты вроде карточки товара, категории, блога или лендинга.

curl -X POST 'https://server.ranklyai.ru/api' \
  -H 'Authorization: Bearer rnk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "call",
    "id": "request-5",
    "method": "public/seo/pageTypes",
    "args": [{}]
  }'

Запустить SEO-аудит

Техническое имя метода: `public/seo/audit`.

Запускает SEO-аудит страницы. На вход обычно передаются URL, целевые запросы и тип страницы. В ответе приходит подтверждение запуска и `id` аудита.

Сам итоговый отчёт появляется не сразу, а после обработки. Поэтому после этого метода обычно вызывают `public/seo/get` или ждут событие в `/ws`.

curl -X POST 'https://server.ranklyai.ru/api' \
  -H 'Authorization: Bearer rnk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "call",
    "id": "request-6",
    "method": "public/seo/audit",
    "args": [{ "url": "https://example.com", "targetQueries": ["купить носки"], "pageType": "ecommerce" }]
  }'

Получить результат аудита

Техническое имя метода: `public/seo/get`.

Возвращает состояние аудита и итоговый отчёт по `id`. Пока задача в работе, здесь будет промежуточный статус. После завершения в ответе появляется готовый результат.

curl -X POST 'https://server.ranklyai.ru/api' \
  -H 'Authorization: Bearer rnk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "call",
    "id": "request-7",
    "method": "public/seo/get",
    "args": [{ "id": "2311" }]
  }'

Получить список аудитов

Техническое имя метода: `public/seo/list`.

Возвращает список прошлых SEO-аудитов. Этот метод полезен для таблиц, истории проверок, повторного открытия отчётов и административных интерфейсов.

curl -X POST 'https://server.ranklyai.ru/api' \
  -H 'Authorization: Bearer rnk_your_api_key' \
  -H 'Content-Type: application/json' \
  -d '{
    "type": "call",
    "id": "request-8",
    "method": "public/seo/list",
    "args": [{}]
  }'

Получить сигнал о готовности аудита

Техническое имя события: `seo/audit.ready`.

Это событие приходит в WebSocket, когда аудит завершён и результат уже можно забирать через `public/seo/get`.

{
  "type": "event",
  "name": "seo/audit.ready",
  "data": { "auditId": 2311 }
}

Жизненный цикл задач и статусы

Для заметок и SEO используется один асинхронный цикл: `create` → `processing/pending` → `completed` или `failed`. Сначала вы получаете `id` задачи, затем читаете итог через `get` и при необходимости через `list`.

  • CREATE — задача принята, возвращаются success и id.
  • PROCESSING / PENDING — задача в очереди или в работе; проверяйте result.status.
  • COMPLETED — результат готов и доступен в get.
  • FAILED — задача завершилась ошибкой; проверяйте error/message и перезапускайте при необходимости.

Рекомендуемый polling: после create/audit запрашивайте get каждые 2-5 секунд до финального статуса COMPLETED или FAILED. Для долгих задач лучше комбинировать polling с подпиской на /ws.

Для обновлений в реальном времени, например статусов задач, используйте WebSocket-адрес `/ws`. Контракт методов остается тем же, что и для `/api`.

Ошибки, права и совместимость

  • 401 UNAUTHORIZED — отсутствует/неверный/отозванный API-ключ.
  • 403 PERMISSION_DENIED — у ключа нет нужного permission (например seo:audit).
  • 404 NOT_FOUND — аудит или ресурс не найден.
  • 429 RATE_LIMIT — превышен лимит запросов.
  • 400 INVALID_JSON / INVALID_PARAMS — невалидный JSON или обязательные поля не переданы.
  • 500 INTERNAL_ERROR — внутренняя ошибка сервиса.
  • Что может API-ключ — ключ даёт доступ только к тем операциям, которые для него разрешены. Например, если у ключа нет права на SEO-аудит, запросы к SEO-методам вернут 403 PERMISSION_DENIED.
  • Как у нас меняется API — мы не делаем отдельные REST-версии вроде v1/v2. Если контракт меняется, это происходит на уровне самих методов: появляются новые методы или новые ветки методов, а старые продолжают работать, пока мы явно их не выведем из использования.
  • Где получить ключ — в личном кабинете, в разделе `API-ключи`. После создания ключ показывается один раз, поэтому его нужно сохранить сразу.