• Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
      • Markdown
      • Аналитика страниц
    • Фреймы
      • Блоки
      • Бинды data-op-bind
      • Повторитель onpress/repeat
      • Сборка и копии
      • Фреймы в Markdown
      • Фреймы с данными
      • Готовые фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
  • КЕЙСЫ
    • Создание сайтов
    • Работа с контентом
    • Фреймы и данные
    • Настройка сайта
    • Перевод страницы
  • ПРИЛОЖЕНИЯ
    • Приложения
      • Закрытый доступ
      • Данные приложения
      • Внешние данные
      • Демо
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
    • Фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
    • Редиректы
    • Кредиты и автоматизация
    • Входящие
    • Кросспостинг
OnPress OnPress
  • Документация
  • Контакты
Войти
Обзор Справочник API
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
      • Markdown
      • Аналитика страниц
    • Фреймы
      • Блоки
      • Бинды data-op-bind
      • Повторитель onpress/repeat
      • Сборка и копии
      • Фреймы в Markdown
      • Фреймы с данными
      • Готовые фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
  • КЕЙСЫ
    • Создание сайтов
    • Работа с контентом
    • Фреймы и данные
    • Настройка сайта
    • Перевод страницы
  • ПРИЛОЖЕНИЯ
    • Приложения
      • Закрытый доступ
      • Данные приложения
      • Внешние данные
      • Демо
    • Быстрый старт
    • Доступ и токен
  • СУЩНОСТИ
    • Страницы
    • Фреймы
    • Данные
    • Медиа
  • УСТРОЙСТВО САЙТА
    • Сайты
    • Настройки сайта
    • Меню
    • Языки и переводы
    • Стили и оформление
  • УПРАВЛЕНИЕ
    • Домены
    • Соцсети и контакты
    • SEO
    • Аналитика
    • Кэш
    • Дашборд и вход
    • Пользователи и профиль
    • Сайдбар документации
    • Ошибки и проблемы
    • Редиректы
    • Кредиты и автоматизация
    • Входящие
    • Кросспостинг
Управление
Markdown
Открыть в ИИ
  • Открыть в ChatGPT
  • Открыть в Claude
  • Открыть в Gemini
  • Открыть в Perplexity
  • Открыть в Grok
  • Открыть в DeepSeek

Справочник: кредиты и автоматизация

Здесь все эндпоинты платных действий платформы и того, что их запускает, — кредиты, промпты и задачи ИИ, релизы GitHub в чейнджлог и автоматические новости — с параметрами, ответами и отказами; в консоли это раздел «Автоматизация», а кредиты — «Настройки → Кредиты».

info

Во всех примерах API — https://onpress.pro/api/v2, SITE — id сайта (SITE_ID), OP_TOKEN — токен op_XXXX. Кредиты — эндпоинты /me/credits… без /site/$SITE: баланс ваш, а не сайта. Остальные пишутся от /site/$SITE и доступны администратору сайта. Как получить токен и в какой форме приходят отказы — на странице «Доступ и токен».

Кредиты

1 кредит = 1 ₽. Баланс принадлежит пользователю, а не сайту: один баланс тратится на все сайты, где вы администратор, и в каждом списании записан сайт. Новый пользователь начинает с нулевого баланса. Ничего платного не уходит без подтверждения цены там, где её заранее не видно: публикация релизов GitHub через ИИ просит confirm и expected_cost, новость стоит ровно столько, сколько показывает GET /news/auto.

Резерв, потом списание. Перед работой действие резервирует свою цену. Не хватает доступного остатка — отказ сразу, до всякой работы: 402 insufficient_credits с required (сколько нужно), available (сколько свободно), action и quantity. После успеха резерв списывается, при сбое снимается целиком. Доступный остаток — баланс минус открытые резервы.

Прайс

ДействиеКлючКредитов
Запись чейнджлога через ИИgithub_ai5
Новость без картинкиnews5
Новость с картинкой 16:9news_image20
Съём одной позиции в выдачеserp_position1
Отправка одной страницы на индексациюindex_submit2

Позиции и отправка на индексацию описаны в справочнике SEO, здесь только их цена.

GET /me/credits

Отдаёт баланс, прайс, пределы пополнения и последние 10 движений. Например:

curl -s "$API/me/credits" -H "Authorization: Bearer $OP_TOKEN"
{
  "success": true,
  "balance": 20,
  "held": 0,
  "available": 20,
  "prices": { "github_ai": 5, "news": 5, "news_image": 20, "serp_position": 1, "index_submit": 2 },
  "transactions": [ { "id": 31, "type": "spend", "delta": -20, "balance_after": 5, "action": "news_image", "site_id": "x9HTLHECq", "site_domain": "example.com", "job_id": 15, "note": "news_image", "created_at": "2026-10-02T11:42:04Z" } ],
  "packages": [
    { "id": "pack_100", "credits": 100, "price_rub": 100, "title": "100 кредитов" },
    { "id": "pack_500", "credits": 500, "price_rub": 500, "title": "500 кредитов", "popular": true },
    { "id": "pack_1000", "credits": 1000, "price_rub": 1000, "title": "1000 кредитов" },
    { "id": "pack_5000", "credits": 5000, "price_rub": 5000, "title": "5000 кредитов" }
  ],
  "topup": { "min": 100, "max": 100000, "rub_per_credit": 1, "suggested": [100, 500, 1000, 5000] }
}
ПолеОписание
balanceвсё начисленное минус списанное
heldоткрытые резервы
availableсколько можно потратить сейчас
pricesпрайс
topupпределы пополнения: min и max в кредитах, rub_per_credit — рублей за кредит, suggested — суммы для быстрого выбора
packagesфиксированные пакеты кредитов; popular: true — пакет, который консоль выделяет

GET /me/credits/transactions

Отдаёт историю движений, свежие сверху. Например, только списания:

curl -s "$API/me/credits/transactions?limit=2&direction=out" -H "Authorization: Bearer $OP_TOKEN"
ПараметрТипПо умолчаниюОписание
limitint50от 1 до 200
beforeint—следующая порция: next из прошлого ответа
directionstringallin — только начисления, out — только списания, all — всё; со следующей порцией передавайте тот же
{
  "success": true,
  "transactions": [
    { "id": 31, "type": "spend", "delta": -20, "balance_after": 5, "action": "news_image", "site_id": "x9HTLHECq", "site_domain": "example.com", "job_id": 15, "note": "news_image", "created_at": "2026-10-02T11:42:04Z" }
  ],
  "next": 31
}
ПолеОписание
typebonus — бонус платформы, topup — оплата пополнения, grant и adjust — начисление и коррекция поддержкой, spend — списание за действие, refund — возврат
deltaизменение баланса: начисление больше нуля, списание меньше
balance_afterбаланс сразу после записи, без учёта резервов, открытых в тот момент
actionключ действия из прайса; у начислений null
site_id, site_domainсайт, за который списано; у начислений null
job_idзадача ИИ, если списание за задачу
nextid для следующей порции; null — дальше пусто
КодСтатусКогдаЧто делать
invalid_direction400direction не all, in и не outисправьте параметр

POST /me/credits/topup

Создаёт заказ на пополнение; деньги по этому вызову не двигаются. К оплате amount × rub_per_credit рублей. Кредиты зачисляются, когда платёжный сервис подтвердил платёж, повторное уведомление о том же платеже ничего не удваивает; ждать зачисления — опросом GET /me/credits/topups/{id}. Способ оплаты задаёт flow: widget — окно CloudPayments поверх своей страницы, без перехода; link — ссылка на страницу оплаты CloudPayments в payment_url. Например, 500 кредитов виджетом:

curl -s -X POST "$API/me/credits/topup" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"amount": 500, "flow": "widget"}'
ПолеТипПо умолчаниюОписание
amountint—кредитов, от topup.min до topup.max из GET /me/credits, сейчас от 100 до 100 000
packagestring—id пакета из packages; если переданы оба поля, берётся amount
flowstringlinkwidget или link
return_pathstring/settings/creditsдля link: путь консоли без хоста, куда человек вернётся после оплаты с ?topup=ID, после неуспешной — ещё и с topup_failed=1
{
  "success": true, "topup_id": 41, "invoice_id": "cr_41", "credits": 500, "price_rub": 500,
  "widget": {
    "public_id": "pk_XXXX", "invoice_id": "cr_41", "amount": 500, "currency": "RUB",
    "description": "OnPress: 500 кредитов", "account_id": "user@example.com", "email": "user@example.com",
    "data": { "kind": "credits", "topup_id": 41, "package": "custom" }
  }
}

widget — всё, что нужно передать виджету cp.CloudPayments().pay('charge', …): public_id в publicId, invoice_id в invoiceId, amount, currency, description, account_id в accountId, email, data. Номер счёта менять нельзя: по нему платёж находит заказ. Со "flow": "link" вместо widget приходит payment_url.

КодСтатусКогдаЧто делать
invalid_amount400amount не целое или вне пределов; пределы в min и maxисправьте сумму
unknown_package400нет amount, а пакета нет в списке; допустимые — в packagesпередайте amount
payment_link_failed502платёжный сервис не выдал ссылку (только link)повторите позже
payments_not_configured503оплата на сервере не подключенанапишите в поддержку

GET /me/credits/topups/{id}

Отдаёт состояние своего заказа на пополнение. Опрашивайте раз в 2–3 секунды; обычно зачисление занимает несколько секунд. Например:

curl -s "$API/me/credits/topups/41?verify=1" -H "Authorization: Bearer $OP_TOKEN"
ПараметрТипПо умолчаниюОписание
verifystring—1 — неоплаченный заказ младше 48 часов сверяется с платёжным сервисом напрямую, не дожидаясь его уведомления; прошедший платёж зачисляется тут же. Не чаще раза в 4 секунды на заказ, чаще — ответ без provider
{ "success": true, "topup_id": 41, "invoice_id": "cr_41", "status": "new", "credits": 500, "price_rub": 500,
  "created_at": "2026-10-06T09:22:05.000Z", "paid_at": null,
  "provider": { "status": "Declined", "reason": "InsufficientFunds", "message": "Недостаточно средств на карте", "credited": 0 } }
ПолеОписание
statusnew — не оплачен или подтверждение ещё не пришло, paid — кредиты зачислены, failed — ссылку создать не удалось
paid_atкогда зачислено
providerтолько с verify=1: что платёжный сервис знает о последней попытке — status (Completed, Declined, NotFound и другие статусы CloudPayments), reason, message — причина отказа банка для человека, credited
КодСтатусКогдаЧто делать
topup_not_found404заказа нет или он чужойпроверьте {id}
payment_mismatch409сумма или счёт оплаты не совпали с заказом, зачисления нетнапишите в поддержку

Промпты

Промпт — шаблон текста, по которому ИИ пишет для сайта, и модель, которая его исполняет. У каждого сайта свой текст; пока его не меняли, действует умолчание платформы. Плейсхолдер {{имя}} подставляется один раз, неизвестное имя становится пустой строкой. {{format}} в news_article служебный: в него приходят требования к форме ответа и причины, по которым прошлый ответ отклонён, — без него новости начнут отклоняться проверкой. Модели по умолчанию: текст — google/gemini-2.5-flash, картинка — google/gemini-3.1-flash-image.

КлючДля чегоПлейсхолдеры
github_changelogзапись чейнджлога из релиза{{site_name}} {{repo}} {{tag}} {{date}} {{commits}} {{lang}}
news_articleтекст новости{{site_name}} {{site_description}} {{lang}} {{topic}} {{category}} {{recent_titles}} {{tone}} {{format}}
news_imageкартинка к новости{{site_name}} {{title}} {{excerpt}} {{category}} {{topic}} {{lang}}

GET /ai/prompts

Отдаёт все промпты сайта списком prompts в форме одного промпта. Например:

curl -s "$API/site/$SITE/ai/prompts" -H "Authorization: Bearer $OP_TOKEN"

GET /ai/prompts/{key}

Отдаёт один промпт. Например:

curl -s "$API/site/$SITE/ai/prompts/github_changelog" -H "Authorization: Bearer $OP_TOKEN"
{
  "success": true,
  "prompt": {
    "key": "github_changelog",
    "title": "GitHub → changelog",
    "description": "Превращает коммиты и релиз в запись changelog в markdown.",
    "kind": "text",
    "variables": [ { "name": "site_name", "description": "Название сайта" }, { "name": "repo", "description": "Репозиторий, owner/name" } ],
    "model": "google/gemini-2.5-pro",
    "default_model": "google/gemini-2.5-flash",
    "text": "Write a release note in {{lang}} for {{repo}}:\n{{commits}}",
    "default_text": "You write release notes for the product …",
    "custom": true,
    "updated_at": "2026-10-02T16:55:27Z"
  }
}
ПолеОписание
kindtext или image
variablesплейсхолдеры с описанием
model, textдействующие модель и текст
default_model, default_textумолчание платформы
customtrue — у сайта свой текст или модель
КодСтатусКогдаЧто делать
prompt_not_found404нет такого ключа, известные — в messageвозьмите ключ из таблицы

PUT /ai/prompts/{key}

Сохраняет свой текст промпта и, если нужно, модель. Текст и модель, совпавшие с умолчанием, снимают настройку сайта (custom: false). Новый текст действует со следующей задачи, ответ — промпт в той же форме. Например:

curl -s -X PUT "$API/site/$SITE/ai/prompts/github_changelog" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"text": "Write a release note in {{lang}} for {{repo}}:\n{{commits}}", "model": "google/gemini-2.5-pro"}'
ПолеТипПо умолчаниюОписание
textstring—непустой текст, до 20 000 символов
modelstringмодель по умолчаниюидентификатор модели OpenRouter вида провайдер/имя; пусто — модель по умолчанию
КодСтатусКогдаЧто делать
invalid_prompt400пустой текстпередайте text
prompt_too_long400текст длиннее 20 000 символовсократите
invalid_model400модель не похожа на провайдер/имяисправьте model
prompt_not_found404нет такого ключавозьмите ключ из таблицы

DELETE /ai/prompts/{key}

Удаляет текст и модель сайта, ответ — промпт с custom: false. Повторный сброс безопасен. Например:

curl -s -X DELETE "$API/site/$SITE/ai/prompts/github_changelog" -H "Authorization: Bearer $OP_TOKEN"

Задачи ИИ

Всё, что ИИ делает для сайта, — задача: запись чейнджлога, новость, картинка. Задачи идут в очереди по две одновременно. Статусы: queued — ждёт, running — выполняется, done — готово и оплачено, failed — сбой, кредиты не списаны, cancelled — снята из очереди. Задача, которую оборвал перезапуск сервиса, закрывается как failed с возвратом резерва. Код сбоя приходит в error задачи: ai_provider_error — модель не ответила, ai_empty_response — пустой ответ, ai_no_image — нет картинки, ai_not_configured — генерация на сервере не подключена.

GET /ai/jobs

Отдаёт задачи сайта, свежие сверху. Например, готовые:

curl -s "$API/site/$SITE/ai/jobs?status=done&limit=20" -H "Authorization: Bearer $OP_TOKEN"
ПараметрТипПо умолчаниюОписание
limitint50от 1 до 200
beforeint—следующая порция: next из прошлого ответа
statusstringвсеqueued, running, done, failed, cancelled
{
  "success": true,
  "jobs": [
    { "id": 15, "action": "news_image", "status": "done", "credits": 20, "error": null, "result_url": "https://example.com/news/…/", "model": "google/gemini-2.5-flash", "cost_usd": 0.0731, "created_at": "2026-10-02T11:40:12Z", "started_at": "2026-10-02T11:40:12Z", "finished_at": "2026-10-02T11:42:04Z" }
  ],
  "next": null
}
ПолеОписание
creditsцена задачи
result_urlчто получилось: страница или черновик
cost_usdсебестоимость вызовов модели

GET /ai/jobs/{id}

Отдаёт задачу в форме строки списка плюс input — с чем запущена, output — что вернула (у картинок только mime и размер в байтах, без данных), и steps — каждый вызов модели: шаг, модель, токены, время. Например:

curl -s "$API/site/$SITE/ai/jobs/15" -H "Authorization: Bearer $OP_TOKEN"
КодСтатусКогдаЧто делать
job_not_found404на этом сайте такой задачи нетпроверьте {id}

POST /ai/jobs

Ставит задачу в очередь и сразу резервирует кредиты; ответ приходит, не дожидаясь результата: {job, hold_id, reused}, дальше задачу смотрят по id. Эндпоинт только генерирует текст или картинку и кладёт результат в output, ничего не публикуя; чейнджлог и новости с публикацией запускают свои эндпоинты — GitHub и автоновости. Например:

curl -s -X POST "$API/site/$SITE/ai/jobs" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"action": "news", "vars": {"topic": "Как поставить задачу ассистенту"}, "idempotency_key": "news-2026-10-27"}'
ПолеТипПо умолчаниюОписание
actionstring—github_ai, news или news_image
varsobject{}значения плейсхолдеров промпта
idempotency_keystring—повтор с тем же ключом вернёт уже созданную задачу (reused: true) и не возьмёт кредиты второй раз
КодСтатусКогдаЧто делать
unknown_action400нет такого действия, известные — в messageвозьмите action из таблицы
insufficient_credits402не хватает кредитов, задача не созданапополните баланс

POST /ai/jobs/{id}/cancel

Снимает из очереди задачу в queued; резерв возвращается, ответ — задача со статусом cancelled. Например:

curl -s -X POST "$API/site/$SITE/ai/jobs/15/cancel" -H "Authorization: Bearer $OP_TOKEN"
КодСтатусКогдаЧто делать
job_not_found404на этом сайте такой задачи нетпроверьте {id}
job_not_cancellable409задача уже выполняется или закончена—

GitHub → чейнджлог

Релизы репозитория становятся записями чейнджлога сайта: страница /changelog/<слаг>/ на фрейме changelog__post и строка набора changelog в ленте с пагинацией; кэш обеих страниц сбрасывается сразу. Слаг — тег релиза (v15.5.4 → v15-5-4). Чтобы лента что-то показывала, на сайте нужна страница /changelog/.

Два режима. asis — «как есть»: текст релиза публикуется без переписывания, заголовок — имя релиза или тег, дата — дата релиза, метка (Feature, Fix или Improvement) подбирается по тексту; бесплатно. ai — «через ИИ», 5 кредитов за релиз: модель получает текст релиза, влитые pull request’ы и коммиты с прошлого релиза и пишет запись для пользователей по промпту github_changelog. Кредиты списываются только после публикации страницы. Платит тот, кто запустил, а при публикации по расписанию — тот, кто подключил репозиторий.

Доступ. Публичный репозиторий подключается без токена, приватный — с fine-grained токеном GitHub с правами только на чтение Contents и Metadata. Токен хранится зашифрованным и наружу не отдаётся, только маска ••••abcd. Токен полезен и для публичного репозитория: без него GitHub даёт 60 запросов в час на адрес сервера, с ним — 5000.

Один релиз — одна запись. Релиз узнаётся по своему id на GitHub: повторная публикация опубликованного релиза ничего не трогает и ничего не стоит (skipped: "already_published"), релиз в процессе отвечает skipped: "in_progress". Неудачную попытку можно повторить.

GET /integrations/github

Отдаёт состояние подключения. Без подключения — {"success": true, "providers": ["token", "app"], "ai_price": 5, "connected": false}. Например:

curl -s "$API/site/$SITE/integrations/github" -H "Authorization: Bearer $OP_TOKEN"
{
  "success": true,
  "providers": ["token", "app"],
  "ai_price": 5,
  "connected": true,
  "provider": "token",
  "repo": "vercel/next.js",
  "private": false,
  "token": null,
  "mode": "asis",
  "auto": false,
  "ai_limit": 0,
  "ai_spent_month": 0,
  "prereleases": false,
  "lang": null,
  "site_lang": "en",
  "auto_since": "2026-10-02T16:55:40Z",
  "last_sync": null,
  "counts": { "published": 0, "failed": 0, "pending": 0 },
  "cron": { "interval": "hourly", "contour": "production" }
}
ПолеОписание
tokenмаска токена ••••abcd; null — без токена
ai_spent_monthпотрачено по расписанию в этом месяце
auto_sinceпо расписанию берутся только релизы новее этого момента — подключения или включения auto
countsрелизов в журнале по статусам
cronрасписание: раз в час на боевом сервере

PUT /integrations/github

Подключает репозиторий или меняет подключение; перед сохранением репозиторий проверяется на GitHub. Ответ — как у GET /integrations/github. По расписанию старые релизы разом не публикуются, а релиз, который не влезает в месячный лимит, пропускается без списания. Например, подключить репозиторий без расписания:

curl -s -X PUT "$API/site/$SITE/integrations/github" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"repo": "https://github.com/vercel/next.js", "mode": "asis", "auto": false}'
ПолеТипПо умолчаниюОписание
repostring—owner/name или адрес на github.com; обязателен при первом подключении
tokenstringсохранённыйfine-grained токен; не передан — для того же репозитория остаётся сохранённый, "" — снять токен
modestringasisasis или ai
autobooltrueпубликовать новые релизы раз в час
ai_limitint0потолок кредитов в календарный месяц на публикацию по расписанию через ИИ
prereleasesboolfalseбрать пре-релизы
langstringязык сайта по умолчаниюязык записей
confirmboolfalseподтверждение трат для mode: "ai" с auto: true

mode: "ai" вместе с auto: true требует ai_limit больше нуля и confirm: true, иначе ответ — цена и лимит:

{ "success": false, "error": "confirmation_required", "message": "automatic publishing through AI spends credits (5 per release, up to 50 per month); repeat the request with \"confirm\": true", "price": 5, "ai_limit": 50 }

Отказы — в общей таблице GitHub.

DELETE /integrations/github

Снимает подключение и токен; опубликованные записи и журнал остаются. Ответ — {"success": true, "connected": false, "removed": true}. Например:

curl -s -X DELETE "$API/site/$SITE/integrations/github" -H "Authorization: Bearer $OP_TOKEN"

GET /integrations/github/releases

Отдаёт последние 100 релизов репозитория, без черновиков; список кэшируется на минуту. Например:

curl -s "$API/site/$SITE/integrations/github/releases?per_page=20&refresh=1" -H "Authorization: Bearer $OP_TOKEN"
ПараметрТипПо умолчаниюОписание
pageint1номер страницы
per_pageint20до 100
refreshstring—1 — свежий список с GitHub
allstring—1 — с пре-релизами, даже если они выключены в подключении
{
  "success": true,
  "repo": "vercel/next.js",
  "page": 1,
  "per_page": 1,
  "more": true,
  "total": 14,
  "releases": [
    { "id": 399923971, "tag": "v16.3.8", "name": "v16.3.8", "published_at": "2026-09-30T16:13:46Z", "prerelease": false, "url": "https://github.com/vercel/next.js/releases/tag/v16.3.8", "author": "…", "excerpt": "This release contains security fixes…", "published": null, "failed": null }
  ]
}

published у опубликованного релиза — {status, mode, url, label, credits}, failed у неудачного — {error, attempts}.

POST /integrations/github/releases/publish

Публикует выбранные релизы. Через ИИ без confirm: true ответ — цена за ещё не опубликованные релизы, так её можно узнать, ничего не потратив. На нехватке кредитов публикация останавливается, сделанное остаётся. Например, один релиз через ИИ:

curl -s -X POST "$API/site/$SITE/integrations/github/releases/publish" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"release_ids": [399923971], "mode": "ai", "confirm": true, "expected_cost": 5}'
ПолеТипПо умолчаниюОписание
release_idsarray—id из списка релизов: до 30 за раз «как есть», до 5 через ИИ
modestringрежим подключенияasis или ai
confirmboolfalseподтверждение трат для ai
expected_costint—цена, которую вы готовы заплатить; ниже реальной — 409 expected_cost_too_low
{ "success": false, "error": "confirmation_required", "message": "publishing through AI spends credits: 5 for 1 release(s); repeat with \"confirm\": true and \"expected_cost\": 5", "cost": 5, "price": 5, "releases": 1 }

Ответ — {success, mode, results, balance}: по строке на релиз (release_id, tag, status, skipped, mode, credits, url, slug, label, job_id, у сбоя — error) и остаток кредитов.

POST /integrations/github/sync

Делает то же, что расписание, но сразу: публикует новые релизы после auto_since в режиме подключения. Через ИИ при найденных релизах нужен confirm: true, иначе 409 confirmation_required с ценой. В skipped причина — monthly_limit, already_published или in_progress. Например:

curl -s -X POST "$API/site/$SITE/integrations/github/sync" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"confirm": true}'
{ "success": true, "repo": "vercel/next.js", "mode": "asis", "found": 0, "published": [], "skipped": [], "failed": [], "balance": { "available": 20, "balance": 20, "held": 0 } }

GET /integrations/github/history

Отдаёт журнал: каждый релиз, который проходил через интеграцию, — release_id, tag, title, status (published, pending, failed), mode, trigger (manual — вручную, auto — по расписанию), credits, job_id, url, label, error, attempts и даты. more: true — есть следующая страница. Например:

curl -s "$API/site/$SITE/integrations/github/history?page=1&per_page=20" -H "Authorization: Bearer $OP_TOKEN"

DELETE /integrations/github/releases/{releaseId}

Убирает страницу записи, её строку из ленты и отметку о публикации — релиз можно опубликовать заново. Кредиты не возвращаются. Например, снять только отметку, оставив страницу:

curl -s -X DELETE "$API/site/$SITE/integrations/github/releases/399923971?remove_page=0" -H "Authorization: Bearer $OP_TOKEN"
ПараметрТипПо умолчаниюОписание
remove_pagestring10 — снять только отметку, страницу и строку ленты оставить

Отказы GitHub

КодСтатусКогдаЧто делать
invalid_repo, invalid_token, invalid_mode, invalid_ai_limit, invalid_lang400неверное поле подключенияисправьте поле
repo_required, release_ids_required400нет репозитория или списка релизовпередайте поле
too_many_releases400список длиннее допустимого, предел в maxразбейте на части
ai_limit_required400mode: "ai" с auto: true без ai_limitпередайте ai_limit больше нуля
github_token_invalid401GitHub отверг токенвыпустите новый токен
insufficient_credits402не хватает кредитов на режим ИИпополните баланс
github_forbidden403GitHub не дал доступапроверьте права токена
github_not_connected404репозиторий не подключёнподключите через PUT
github_repo_not_found404GitHub не видит репозиторийпроверьте имя и токен
release_not_found404релиза нет среди последних 100—
release_record_not_found404релиз не публиковался через интеграцию—
confirmation_required, expected_cost_too_low409трата не подтверждена или подтверждена не той суммойповторите с confirm и ценой из ответа
release_in_progress, publish_busy409релиз или чейнджлог сайта сейчас пишетсяповторите позже
github_rate_limited429исчерпан лимит GitHub, reset_at — когда восстановитсяподождите или подключите токен
github_token_unreadable500сохранённый токен не расшифровалсяпередайте токен заново
provider_not_supported501провайдер app (приложение GitHub)подключайтесь токеном
github_unreachable, github_error, ai_job_failed, ai_empty502GitHub или модель не ответили как надо; кредиты не списаныповторите позже
github_not_configured503интеграция на сервере не подключенанапишите в поддержку

Автоновости

ИИ пишет новость по теме сайта и кладёт её в раздел /news/: страница на фрейме news__post, дочерняя к странице раздела, с рубрикой. Цена — news, 5 кредитов, или news_image, 20 кредитов с картинкой 16:9; кредиты списываются только когда страница создана, любой сбой возвращает резерв.

Что делает задача. Читает сайт — название, описание, раздел новостей, рубрики, заголовки последних новостей, — пишет новость по промпту news_article и проверяет её: длина заголовка, лида и текста (150–750 слов, от трёх абзацев), язык, нет H1, ссылок, картинок, таблиц, цитат, процентов, выдуманных фактов о продукте. Не прошло — модель получает причины и пишет заново, до трёх попыток; после третьей задача падает с news_format_rejected без списания. С картинкой задача генерирует её по промпту news_image, кладёт в медиатеку с заголовком в alt и ставит превью страницы. Слаг уникален внутри раздела.

Публикация. mode: "publish" публикует страницу и пересобирает ленту из живых новостей раздела: список новостей, три свежих на главной, рубрики со счётчиками, пагинацию, «ещё новости». Страницы, которые показывают эти наборы, сразу собираются заново со сбросом кэша, и новость видна в /news/, в рубрике и на главной. mode: "draft" сохраняет черновик со ссылкой на предпросмотр, лента не меняется; кредиты списываются за генерацию, публикация черновика потом бесплатна.

GET /news/auto

Отдаёт настройки, варианты, цены, баланс и состояние расписания. Например:

curl -s "$API/site/$SITE/news/auto" -H "Authorization: Bearer $OP_TOKEN"
{
  "success": true,
  "settings": { "enabled": false, "per_week": 2, "categories": [], "with_image": true, "tone": "neutral", "lang": "en", "monthly_limit": 100, "auto_publish": true, "topics": "" },
  "saved": false,
  "owner_id": null,
  "options": { "languages": [ { "slug": "en", "name": "English" }, { "slug": "ru", "name": "Русский" } ], "default_lang": "en", "lang": "en", "ready": false, "section": null, "categories": [], "tones": ["neutral", "friendly", "expert", "concise"] },
  "prices": { "news": 5, "news_image": 20 },
  "credits": { "available": 20, "balance": 20, "topup_path": "/settings/credits" },
  "schedule": { "week_count": 0, "month_spent": 0, "month_limit": 100, "blocked": "disabled", "next_run_at": null, "interval_hours": 84, "last_run_at": null, "last_error": "" }
}
ПолеОписание
saved, owner_idсохранялись ли настройки и кто их сохранил — он платит за расписание
options.readyесть ли у сайта раздел /news/ на этом языке
options.categoriesрубрики раздела: slug, title, url
schedule.blockedпочему расписание сейчас не запустится: disabled — выключено, week_quota — недельная норма сделана, monthly_limit — месячный лимит исчерпан, backoff — пауза 6 часов после сбоя, null — ничего не мешает
schedule.next_run_atближайший запуск

PUT /news/auto

Сохраняет настройки; меняются только переданные поля. Платит тот, кто сохранил настройки, и он должен оставаться администратором сайта. Расписание работает на боевом сервере раз в час с 05:00 до 18:00 UTC: сайт в очереди, когда за 7 дней сделано меньше per_week новостей по расписанию и с прошлой прошло не меньше 90% интервала 7 дней / per_week. Ручные запуски в недельную норму и месячный лимит не входят. Ответ — как у GET /news/auto. Например:

curl -s -X PUT "$API/site/$SITE/news/auto" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"enabled": true, "per_week": 3, "categories": ["guides"], "with_image": true, "monthly_limit": 300}'
ПолеТипПо умолчаниюОписание
enabledboolfalseрасписание включено
per_weekint2новостей в неделю, от 1 до 14
categoriesarray[]слаги рубрик; [] — все по очереди: берётся рубрика, где за 28 дней меньше всего новостей
with_imagebooltrueс картинкой
tonestringneutralneutral, friendly, expert или concise
langstringязык сайта по умолчаниюязык новостей
monthly_limitint100потолок кредитов в календарный месяц на новости по расписанию, от 0 до 100 000; 0 — расписание ничего не запустит
auto_publishbooltrueпубликовать сразу; false — складывать в черновики
topicsstring""темы, которые ИИ предпочитает, до 400 символов

Отказы — в общей таблице автоновостей; включить расписание без раздела /news/ на языке нельзя — 409 news_section_missing.

POST /news/auto/run

Ставит одну новость в очередь и сразу резервирует кредиты. Ответ — {job, reused, with_image, mode, category}; ход задачи — в задачах ИИ и в списке новостей. Например, черновик на заданную тему без картинки:

curl -s -X POST "$API/site/$SITE/news/auto/run" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"topic": "How to brief an assistant", "category": "guides", "with_image": false, "mode": "draft"}'
ПолеТипПо умолчаниюОписание
topicstring—тема до 300 символов; без неё ИИ выбирает сам по теме сайта и topics
categorystringнаименее заполненная из рубрик расписанияслаг рубрики; "none" — без рубрики
lang, tone, with_image—из настроеккак в настройках
modestringdraftdraft или publish
idempotency_keystring—повтор с тем же ключом не запустит вторую новость

Отказы до всякой траты: 400 invalid_topic, 402 insufficient_credits, 409 news_section_missing, 409 news_category_missing.

GET /news/auto/items

Отдаёт сделанные новости, свежие сверху. Например:

curl -s "$API/site/$SITE/news/auto/items?limit=20" -H "Authorization: Bearer $OP_TOKEN"
ПараметрТипПо умолчаниюОписание
limitint50до 200
beforeint—следующая порция: next из прошлого ответа

У записи: id, job_id, status (queued, running, draft, published, failed), trigger (manual или cron), with_image, lang, category, title, url, preview_url у черновика, credits, error у сбоя, created_at, published_at.

POST /news/auto/items/{id}/publish

Публикует черновик с текущей датой и пересобирает ленту, бесплатно: кредиты взяты при генерации. Ответ — {item, link}. Например:

curl -s -X POST "$API/site/$SITE/news/auto/items/12/publish" -H "Authorization: Bearer $OP_TOKEN"

DELETE /news/auto/items/{id}

Удаляет черновик вместе со страницей или запись о сбое из списка; ответ — {id}. Опубликованная новость убирается как страница — через DELETE /pages/{ref}, здесь она отвечает 409 news_item_published. Например:

curl -s -X DELETE "$API/site/$SITE/news/auto/items/12" -H "Authorization: Bearer $OP_TOKEN"

POST /news/auto/feed

Собирает наборы ленты заново из живых страниц раздела — после того как новость удалили или поправили вручную; бесплатно. Ответ — {lang, section, posts, categories, written, rebaked}: сколько новостей и рубрик в ленте, какие наборы записаны и какие страницы собраны заново. Например:

curl -s -X POST "$API/site/$SITE/news/auto/feed" \
  -H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' \
  -d '{"lang": "en"}'
ПолеТипПо умолчаниюОписание
langstringязык из настроек автоновостейлента какого языка

Отказы автоновостей

КодСтатусКогдаЧто делать
invalid_per_week, invalid_monthly_limit, invalid_tone, invalid_lang, invalid_categories, invalid_topic400неверное полеисправьте поле
invalid_item400{id} не целое числовозьмите id из списка новостей
insufficient_credits402не хватает кредитов; required, availableпополните баланс
news_item_not_found404нет такой записипроверьте {id}
news_section_missing409нет раздела /news/ на языкесоздайте раздел
news_category_missing409рубрики нет в разделевозьмите слаг из options.categories
news_dataset_missing409у сайта нет набора ленты новостей—
news_already_published, news_not_a_draft, news_draft_empty409запись не черновик или черновик пуст—
news_item_published409удаление опубликованной новостиудалите страницу через DELETE /pages/{ref}
news_format_rejected422в задаче: три ответа модели не прошли проверку, кредиты не списанызапустите снова или поправьте промпт
news_media_failed, news_write_failed502в задаче: картинка или страница не записались, кредиты не списанызапустите снова
arrow_backНазад
Справочник: сайты
Далееarrow_forward
Авторизация
На этой странице
  • Кредиты
    • Прайс
      • GET /me/credits
        • GET /me/credits/transactions
          • POST /me/credits/topup
            • GET /me/credits/topups/{id}
          • Промпты
            • GET /ai/prompts
              • GET /ai/prompts/{key}
                • PUT /ai/prompts/{key}
                  • DELETE /ai/prompts/{key}
                • Задачи ИИ
                  • GET /ai/jobs
                    • GET /ai/jobs/{id}
                      • POST /ai/jobs
                        • POST /ai/jobs/{id}/cancel
                      • GitHub → чейнджлог
                        • GET /integrations/github
                          • PUT /integrations/github
                            • DELETE /integrations/github
                              • GET /integrations/github/releases
                                • POST /integrations/github/releases/publish
                                  • POST /integrations/github/sync
                                    • GET /integrations/github/history
                                      • DELETE /integrations/github/releases/{releaseId}
                                        • Отказы GitHub
                                      • Автоновости
                                        • GET /news/auto
                                          • PUT /news/auto
                                            • POST /news/auto/run
                                              • GET /news/auto/items
                                                • POST /news/auto/items/{id}/publish
                                                  • DELETE /news/auto/items/{id}
                                                    • POST /news/auto/feed
                                                      • Отказы автоновостей
                                                    1. Главная
                                                    2. Docs
                                                    3. Документация OnPress v2
                                                    4. Справочник API
                                                    5. Справочник: кредиты и автоматизация
                                                    OnPress
                                                    OnPress
                                                    ИП Зуев И.В. ИНН: 360408359441
                                                    info@onpress.pro
                                                    © 2026
                                                    политика конфиденциальности публичная оферта
                                                    • visa
                                                    • mastercard
                                                    • sber
                                                    • tpay