ENRU
Открыть бота

Справочник API индексации в Google

Всё, что умеет бот, доступно по HTTP. Отправляйте адреса, как только страница вышла, опрашивайте задачу, смотрите, что принято и что отсеяно. Баланс и проверки те же, $0.01 за принятый адрес.

Быстрый старт

  1. Получите ключ. Откройте @IndexForgeBot и нажмите 🔑 API. Ключ показывается один раз, сохраните его.
  2. Отправьте адреса. POST /v1/submit с JSON-массивом до 10 000 адресов. Идентификатор задачи приходит сразу.
  3. Опрашивайте задачу. GET /v1/tasks/{id} примерно раз в 10 секунд, пока статус не станет done, partial или failed.
  4. Заберите результат. Принято, отсеяно с причинами, списано и возвращено, всё в одном объекте.
api.indexforge.help
$ curl -X POST https://api.indexforge.help/v1/submit \
  -H "Authorization: Bearer YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"urls": [
        "https://site.com/page-1",
        "https://site.com/page-2"]}'
202 Accepted · 184 ms # 202 · задача создана
{ "ok": true,
  "task": { "id": "3f9c2a7d1b6e4c80",
            "status": "queued", "urls": 2 } }

Базовый адрес и авторизация

Все запросы идут на https://api.indexforge.help. Тела запросов и ответы в JSON, кодировка UTF-8, в каждом ответе есть поле ok.

Ключ передаётся в одном из заголовков:

Authorization: Bearer YOUR_KEY
X-API-Key: YOUR_KEY
  • Ключ выдаёт бот по кнопке 🔑 API и показывает один раз. Храните его как пароль.
  • Новый ключ сразу отключает старый. Так и поступайте, если ключ утёк.
  • Баланс у API и бота общий: пополняете в боте, тратите где удобно.

POST /v1/submit

Создаёт задачу: проверяет адреса так, как их видит Googlebot, и отправляет прошедшие на индексацию.

ПолеТипОписание
urlsмассив, обязательноДо 10 000 адресов http(s). Дубли и строки не http отбрасываются.
checkbool, по умолчанию trueПроверять ли адреса. При false проверки нет, и списание идёт за все адреса.
{ "urls": ["https://site.com/page-1", "https://site.com/page-2"], "check": true }

Ответ 202 Accepted с новой задачей:

{ "ok": true,
  "task": { "id": "3f9c2a7d1b6e4c80", "status": "queued",
            "created": 1760263200, "urls": 2 } }
Как здесь работают кредиты

При check: true для старта нужен хотя бы 1 кредит. После проверки кредиты резервируются только под прошедшие адреса. Принятые списываются, остальные возвращаются автоматически. При check: false баланс должен покрывать все адреса запроса. Тело запроса ограничено 5 МБ.

GET /v1/tasks/{id}

Статус и счётчики одной задачи. Задачу видит только владелец ключа.

ПолеОписание
idИдентификатор задачи
statusqueued, checking, submitting, done, partial или failed
created · finishedВремя в формате Unix. finished появляется, когда задача завершена
urlsАдресов в задаче после удаления дублей
checkedСколько адресов проверено
rejectedСколько отсеяно проверкой
rejected_urlsОтсеянные адреса по причинам, до 200 на причину
acceptedСколько принято на индексацию
charged · refundedСколько кредитов списано и возвращено
errorКороткий код, если что-то пошло не так, см. статусы
{ "ok": true, "task": {
  "id": "3f9c2a7d1b6e4c80", "status": "done",
  "created": 1760263200, "finished": 1760263295,
  "urls": 3, "checked": 3, "rejected": 1,
  "rejected_urls": { "404": ["https://site.com/old"] },
  "accepted": 2, "charged": 2, "refunded": 0 } }

Причины в rejected_urls:

КлючЧто значит
404Страница отдала 404 или 410
4xxДругая ошибка клиента, например 401 или 403
5xxОшибка сервера
redirectАдрес перенаправляет. Отправляйте конечный адрес
noindexnoindex в meta robots, meta googlebot или в заголовке X-Robots-Tag
robotsЗакрыт для Googlebot в robots.txt
canonicalCanonical указывает на другой адрес
errorСтраница не открылась: таймаут, ошибка DNS или соединения, некорректный адрес

GET /v1/tasks

Последние задачи, от новых к старым. Необязательный limit от 1 до 100, по умолчанию 20.

GET /v1/tasks?limit=20

{ "ok": true, "tasks": [ { "id": "3f9c2a7d1b6e4c80", "status": "done", … }, … ] }

GET /v1/balance

Остаток кредитов и текущая цена.

ПолеОписание
balanceКредитов на счёте. Один кредит = один адрес
unlimitedtrue для аккаунтов без ограничения баланса, тогда balance равен null
price_per_url_usdЦена одного адреса в долларах США
{ "ok": true, "balance": 1250, "unlimited": false, "price_per_url_usd": 0.01 }

Статусы задачи

queuedСоздана, ждёт очереди.
checkingКаждый адрес открывается как Googlebot и фильтруется.
submittingПрошедшие адреса отправляются.
doneВсё прошедшее проверку принято.

Завершённая задача получает один из трёх статусов:

  • done: принято всё, что прошло проверку. Если не прошло ничего, задача тоже done с accepted: 0 и без списаний.
  • partial: принята часть, кредиты за остальное возвращены.
  • failed: ничего не отправлено, зарезервированные кредиты возвращены.

Поле error объясняет результат partial или failed:

errorЧто значит
insufficient_creditsНе хватило кредитов на адреса, прошедшие проверку
service_unavailableОтправка временно не удалась. Кредиты за непринятое возвращены, попробуйте позже
restartedЗадачу прервал перезапуск сервиса. Зарезервированные кредиты возвращаются
internal_errorНепредвиденная ошибка на нашей стороне

Ошибки

Ошибки приходят с HTTP-кодом и JSON-телом, чтобы ваш код отличал кривой запрос от пустого баланса:

{ "ok": false, "error": "insufficient_credits", "message": "Balance is 0. Top up in the bot." }
HTTPerrorКогда
400bad_jsonТело запроса не является корректным JSON
400no_urlsПоля urls нет, оно пустое или в нём нет корректных адресов http(s)
400too_many_urlsБольше 10 000 адресов в одном запросе
401unauthorizedКлюча нет, он неверный или заменён новым
402insufficient_creditsБаланс 0 или при check: false он не покрывает все адреса
403forbiddenДоступ к API для этого аккаунта закрыт
404not_foundНеизвестный метод или задача, которой нет или она не ваша
413too_largeТело запроса больше 5 МБ
429rate_limitedБольше 60 запросов в минуту
429too_many_tasksУже идут 3 ваши задачи
500internal_errorНепредвиденная ошибка на нашей стороне. Повторите чуть позже

Лимиты

60запросов в минуту
3задачи одновременно
10 000адресов в запросе
5 МБтело запроса

Индексация обычно занимает 1–3 дня после завершения задачи. Цена: $0.01 за принятый адрес, как и в боте.

Вопросы про API

Это официальный Google Indexing API?

Нет. Это наш собственный API, который делает ту же проверку и отправку, что и бот, для страниц любого типа. Официальный Indexing API от Google формально предназначен для страниц вакансий и трансляций. Подробнее в гайде Indexing API или сервисы индексации.

Нужен отдельный баланс для API?

Нет. Баланс у API и бота общий. Пополняете в боте, тратите где удобно.

Платить ли за отсеянные адреса?

Нет. Они перечислены в rejected_urls по причинам и не списываются, если только вы не отправили задачу с check: false.

Как часто опрашивать задачу?

Раза в 10 секунд достаточно. Большие задачи проверяются дольше, а частые запросы только съедают лимит в 60 запросов в минуту.

Потерял ключ. Что делать?

Нажмите 🔑 API в боте и выпустите новый ключ. Старый в тот же момент перестанет работать.