API
Публичный API Ранкли работает через единый адрес JSON-RPC `/api`. API-ключи формата `rnk_...` создаются в личном кабинете, в разделе `API-ключи`.
Базовые настройки
JSON-RPC: https://server.ranklyai.ru/apiAuthorization: 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-ключи`. После создания ключ показывается один раз, поэтому его нужно сохранить сразу.