Индексация
API показывает посещения поисковых роботов, оценивает стоимость и отправляет страницы на ускоренную индексацию. Сценарии — в гайде.
API — https://onpress.pro/api/v2, SITE — id сайта, OP_TOKEN — токен op_XXXX. Пути на этой странице начинаются с $API/site/$SITE. Токен и права — в «Авторизации», общий формат — в «Общих правилах».
Эндпоинты
Профильные операции /data/… возвращают результат в items[0]; наружные name, origin: "system" и total: 1 описывают системные данные. Названия полей результата ниже относятся к items[0]. Неподдерживаемый метод дает 405 wrong_method_for_source, пробный прогон без поддержки — 400 dry_run_not_supported.
| Метод | Путь | Действие |
|---|---|---|
| GET | /data/bot_visits | Прочитать посещения роботов |
| GET | /data/seo.indexing.account | Прочитать условия отправки на индексацию |
| DELETE | /data/seo.indexing.account | Удалить привязку аккаунта индексации |
| GET | /data/seo.indexing.pages | Получить страницы для индексации |
| PUT | /data/seo.indexing.estimate | Оценить стоимость индексации |
| PUT | /data/seo.indexing.submit | Отправить страницы на индексацию |
| GET | /data/seo.indexing.submissions | Прочитать журнал индексации |
| PUT | /data/seo.indexing.submissions | Обновить журнал индексации |
Статус страницы в Google описывает /data/seo.index_status, отправку адресов в IndexNow — /data/seo.indexnow.
Прочитать посещения роботов
GET /data/bot_visits
Читает уже собранные посещения роботов. Сам запрос не запускает сбор и не отправляет страницы на индексацию.
curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/site/$SITE/data/bot_visits?files=1"
Параметры запроса
| Поле | Тип | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|
files | boolean | нет | false | Добавить служебные файлы: robots.txt, карты сайта, llms.txt. |
Ответ
Поля записи items[0]:
| Поле | Тип | Значение |
|---|---|---|
siteId | integer | Числовой идентификатор сайта в статистике. |
keep | integer | Сколько последних визитов сохраняется у адреса. |
bots | array | Имена распознаваемых ботов. |
scannedAt, windowFrom | string или null | Время последнего сбора и начало окна. |
site | object или null | Визиты всего сайта в формате цели ниже. |
pages | object | Цели по пути страницы. |
byPostId | object | Путь страницы по строковому id. |
files | array | При files=1: kind (robots, sitemap, llms), path, необязательные children у индекса карты. |
site, pages[path] | object | visits: массив {bot,agent,at,ip,status}; lastAt, lastBot, lastByBot, googleLastAt, yandexLastAt; postId у известной страницы. Время и последние значения могут быть null. |
{
"success": true,
"name": "bot_visits",
"origin": "system",
"total": 1,
"items": [
{
"siteId": 281,
"keep": 5,
"bots": [
"google",
"yandex",
"bing",
"openai"
],
"scannedAt": null,
"windowFrom": null,
"site": null,
"pages": {},
"byPostId": {},
"files": []
}
]
}
Ошибки
| Код | HTTP | Когда | Что делать |
|---|---|---|---|
statistics_not_available | 503 | Сервис статистики недоступен на сайте. | Повторите позже; если ошибка сохраняется, обратитесь в поддержку. |
internal_unavailable | 502 | Сайт не ответил сервису API. | Повторите позже. |
Общие ошибки доступа — в справочнике авторизации.
Прочитать условия отправки на индексацию
GET /data/seo.indexing.account
Платная отправка страниц в поиск: одна страница — 2 кредита, для всех пользователей одинаково. Подробнее в гайде.
curl -s "$API/site/$SITE/data/seo.indexing.account" -H "Authorization: Bearer $OP_TOKEN"
Параметров строки запроса и тела нет.
Ответ
Страница уходит в Google и Яндекс, а тем же вызовом — в IndexNow для Bing и других поисковиков. В консоли это кнопка «Отправить на индексацию» в строке раздела «Страницы», журнал — «Инструменты → Индексация». Кредиты списываются с того, кто отправляет, журнал общий для сайта. GET /data/seo.indexing.account отдает цену, баланс и суточные пределы.
{
"success": true,
"name": "seo.indexing.account",
"origin": "system",
"total": 1,
"items": [
{
"linked": false,
"bot_url": "https://t.me/Link_indexing_bot?start=…",
"platform": {
"enabled": true,
"price_per_page": 2,
"unit": "credits",
"credits": {
"balance": 20,
"held": 0,
"available": 20
},
"top_up_path": "/settings/credits",
"daily_limit": {
"user": 500,
"site": 1000
}
}
}
]
}
platform: enabled — отправка доступна, price_per_page, credits (balance, held — в резерве, available), top_up_path, daily_limit — страниц в сутки на владельца и на сайт. linked — привязан ли свой ключ сервиса; DELETE его отвязывает (removed).
Ошибки
Общие коды — на странице «Ошибки».
Удалить привязку аккаунта индексации
DELETE /data/seo.indexing.account
Удаляет привязку аккаунта внешнего сервиса. Подробнее в гайде.
curl -s -X DELETE "$API/site/$SITE/data/seo.indexing.account" -H "Authorization: Bearer $OP_TOKEN"
Дополнительных полей строки запроса нет.
Ответ
Отправку за кредиты эта операция не отключает.
{
"success": true,
"name": "seo.indexing.account",
"origin": "system",
"total": 1,
"items": [
{
"linked": false,
"bot_url": "https://t.me/Link_indexing_bot",
"removed": true
}
]
}
Ошибки
Общие коды — на странице «Ошибки».
Получить страницы для индексации
GET /data/seo.indexing.pages
Отдает опубликованные страницы, свежие правки сверху, и состояние их отправки. Подробнее в гайде.
curl -s "$API/site/$SITE/data/seo.indexing.pages?lang=ru&per_page=50" -H "Authorization: Bearer $OP_TOKEN"
Параметры запроса
| Поле | Тип | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|
lang | string | нет | все | язык |
search | string | нет | — | строка поиска по страницам |
page | int | нет | 1 | страница списка |
per_page | int | нет | 50 | до 100 |
Ответ
У страницы: id, title, url, lang, modified, noindex (закрыта от индексации или паролем), state — new (ни разу не отправлялась), changed (правилась после отправки), sent; engines — когда уходила в каждый поисковик; suggested — новая или измененная и открытая. Рядом total, page, per_page, total_pages.
Ошибки
Общие коды — на странице «Ошибки».
Оценить стоимость индексации
PUT /data/seo.indexing.estimate
Считает сумму и ничего не отправляет. Подробнее в гайде.
curl -s -X PUT "$API/site/$SITE/data/seo.indexing.estimate" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"urls": ["https://example.com/", "https://example.org/x/"]}'
Тело запроса
| Поле | Тип | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|
urls | array | да | — | полные адреса страниц сайта, до 2000, обязательно |
force | bool | нет | false | отправить и страницы, ушедшие за последние 7 дней |
engines | array | нет | ["google", "yandex"] | поисковики: google, yandex, bing; цена от их числа не зависит |
Ответ
{
"success": true,
"name": "seo.indexing.estimate",
"origin": "system",
"total": 1,
"items": [
{
"site_id": "x9HTLHECq",
"host": "example.com",
"mode": "platform",
"pages": 1,
"links": 1,
"estimated_cost": 2,
"unit": "credits",
"price_per_page": 2,
"already_sent": [],
"rejected": [
{
"url": "https://example.org/x/",
"reason": "foreign_host"
}
],
"credits_available": 20,
"enough": true,
"top_up_path": "/settings/credits"
}
]
}
Чужие адреса возвращаются в rejected с причиной (foreign_host, invalid_url, invalid_scheme, not_a_string). Страница, уже отправленная за 7 дней, попадает в already_sent (url, engine, at). estimated_cost — pages × price_per_page. Индексацию поисковики не гарантируют.
Ошибки
| Код | HTTP | Когда | Что делать |
|---|---|---|---|
urls_required | 400 | нет urls или пустой список | передайте адреса |
no_urls | 400 | ни одного адреса этого сайта; host, rejected | проверьте домен |
engines_required, invalid_engine | 400 | пустой или незнакомый engines | google, yandex, bing |
platform_only | 400 | передан mode, отличный от platform | уберите mode |
platform_normal_only, invalid_se_type | 400 | передан se_type или priority | уберите поля |
too_many_urls | 413 | больше 2000 адресов | разбейте на части |
credits_unavailable | 503 | кредиты недоступны | повторите позже |
Отправить страницы на индексацию
PUT /data/seo.indexing.submit
Отправляет страницы: тело как у оценки плюс confirm: true и expected_cost — сумма из оценки. Подробнее в гайде.
curl -s -X PUT "$API/site/$SITE/data/seo.indexing.submit" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
-d '{"urls": ["https://example.com/"], "confirm": true, "expected_cost": 2}'
Тело запроса
| Поле | Тип | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|
urls | string[] | да | — | Полные адреса страниц сайта, от 1 до 2000. |
force | boolean | нет | false | Повторить отправку уже отправленных страниц. |
engines | string[] | нет | ["google", "yandex"] | google, yandex, bing. |
confirm | bool | да | — | подтверждение платного действия, обязательно |
expected_cost | number | да | — | сумма из оценки в кредитах, обязательно |
idempotency_key | string | нет | — | защищает от двойной отправки при повторе запроса |
Ответ
Сервер считает сумму заново и отправляет, только если подтвержденная не меньше; сумма резервируется перед отправкой, а списывается только за страницы, которые ушли.
{
"success": true,
"name": "seo.indexing.submit",
"origin": "system",
"total": 1,
"items": [
{
"site_id": "x9HTLHECq",
"id": "8f0c…",
"mode": "platform",
"pages": 1,
"charged": 2,
"unit": "credits",
"already_sent": [],
"rejected": []
}
]
}
Ответ: id — номер отправки в журнале, pages — сколько страниц ушло, charged — сколько списано. Порядок проверок: подтверждение, сумма, суточный предел, баланс — при любом отказе ничего не отправлено и не списано, кроме send_failed.
Ошибки
| Код | HTTP | Когда | Что делать |
|---|---|---|---|
confirmation_required | 409 | нет confirm; в теле estimate | подтвердите сумму |
cost_changed | 409 | expected_cost меньше суммы; в теле estimate | подтвердите новую сумму |
nothing_to_send | 409 | все уже отправлено за 7 дней; already_sent | передайте force: true |
submit_in_progress | 409 | идет другая ваша отправка | дождитесь ее |
duplicate_submission | 409 | idempotency_key уже использован — ничего не отправлено | — |
insufficient_credits | 402 | не хватает кредитов; required, available, top_up_path, estimate | пополните баланс |
daily_limit | 429 | суточный предел; limit, used, left | отправьте завтра |
send_failed | 502 | отправка сорвалась на середине: ушедшие страницы списаны, pages и charged говорят сколько | повторите остальные |
platform_unavailable | 503 | отправка сейчас недоступна | повторите позже |
| отказы оценки | — | см. PUT /data/seo.indexing.estimate | — |
Прочитать журнал индексации
GET /data/seo.indexing.submissions
Отдает журнал отправок сайта, новые сверху; refresh=1 сначала обновляет незавершенные отправки. Подробнее в гайде.
curl -s "$API/site/$SITE/data/seo.indexing.submissions?refresh=1" -H "Authorization: Bearer $OP_TOKEN"
Параметры запроса
| Поле | Тип | Обязательное | По умолчанию | Описание |
|---|---|---|---|---|
page | int | нет | 1 | страница журнала |
per_page | int | нет | 50 | до 200 |
status | string | нет | — | sent (отправлено), active (в работе), done (готово), failed (ошибка) |
url | string | нет | — | отправки этой страницы |
search | string | нет | — | часть адреса |
refresh | 1 | нет | — | сначала обновить незавершенные отправки, итог — в refreshed |
Ответ
{
"success": true,
"name": "seo.indexing.submissions",
"origin": "system",
"total": 1,
"items": [
{
"site_id": "x9HTLHECq",
"total": 1,
"page": 1,
"per_page": 50,
"total_pages": 1,
"summary_30d": {
"sends": 1,
"pages": 1,
"done": 1,
"charged": 2
},
"items": [
{
"id": "8f0c…",
"url": "https://example.com/",
"pages": 1,
"status": "done",
"charged": 2,
"created_at": "2026-10-06T09:06:09Z",
"updated_at": "2026-10-06T12:00:00Z"
}
]
}
]
}
Строка: id, url (первая страница отправки), pages, status, charged (null — отправка не за кредиты), created_at, updated_at; summary_30d — за последние 30 дней.
Ошибки
| Код | HTTP | Когда | Что делать |
|---|---|---|---|
invalid_status | 400 | status вне списка | исправьте значение |
Обновить журнал индексации
PUT /data/seo.indexing.submissions
Обновляет состояние незавершенных отправок владельца токена. Подробнее в гайде.
curl -s -X PUT "$API/site/$SITE/data/seo.indexing.submissions" -H "Authorization: Bearer $OP_TOKEN"
Дополнительных полей строки запроса нет.
Ответ
{
"success": true,
"name": "seo.indexing.submissions",
"origin": "system",
"total": 1,
"items": [
{
"checked": 0,
"updated": 0
}
]
}
Ошибки
Общие коды — на странице «Ошибки».