Справочник: сайты
Ручки сети: $API/sites… — без префикса сайта. {id} — site_id или номер блога. blog_id, X-OnPress-Blog-Id и domain запроса не читаются. Все, кроме карточки, — только суперадмин сети (403 insufficient_role, network super admin required). Подробно — сайты и домены.
GET /sites/{id}
Администратору сайта и суперадмину; остальным — 404 site_not_found (как и несуществующему).
curl -s -H "Authorization: Bearer $OP_TOKEN" "$API/sites/233"
{
"success": true,
"site_id": "x9HTLHECq",
"blog_id": 233,
"is_super_admin": true,
"realm": "prod",
"instance_realm": "prod",
"domain": "test.onpress.pro",
"path": "/",
"public": 1,
"blog_public": 1,
"archived": 0,
"deleted": 0,
"registered": "2026-09-12T17:37:06.000Z",
"last_updated": "2026-09-25T07:32:55.000Z",
"blogname": "Test",
"blogdescription": "Multipress website",
"home": "https://test.onpress.pro",
"theme": { "template": "onpress-v2", "stylesheet": "onpress-v2", "current_theme": "onpress-v2" },
"show_on_front": "page",
"page_on_front": 5776,
"site_icon": 4827,
"languages": { "default": "en", "list": ["en", "ru"] },
"counts": { "post_types": { "page": 101, "attachment": 39, "nav_menu_item": 80, "…": "…" }, "pages": 101, "menus": 14, "frames": 23, "datasets": 4 }
}
realm — чей это блог, instance_realm — какой экземпляр API ответил; при расхождении записи в этот сайт отсюда отклоняются 409 wrong_realm.
POST /sites
| Поле | Смысл |
|---|---|
name | поддомен: [a-z0-9-], до 50 символов, не зарезервированный |
title | название; по умолчанию name |
donor | номер блога-донора |
empty | очистить содержимое клона |
keep_frames | массив слагов или id фреймов, сохраняемых при empty |
copy_files | копировать загрузки донора (по умолчанию true) |
public | видимость для поисковиков; по умолчанию — как у донора |
Ответ 201: site_id, blog_id, domain, realm, donor, public, files, purged (pages, menus, datasets, frames, apps, transients, posts_total, post_types, translation_groups, frames_kept, frames_missing, yoast_tables). Клон идёт синхронно, до 300 с.
Отказы: 400 invalid_name, 400 invalid_donor, 400 invalid_keep_frames, 404 donor_not_found, 409 site_exists (blog_id), 500 purge_failed, 403 insufficient_role.
POST /sites/{id}/domain
| Поле | По умолчанию | Смысл |
|---|---|---|
domain | — | имя хоста |
swap_with | — | второй сайт обмена |
dry_run | false | план без изменений |
stale_report | true | посчитать строки со старым хостом |
flush | true | сбросить кэши обоих сайтов |
rebake | true | пересобрать фреймы обоих сайтов |
curl -s -X POST "$API/sites/233/domain" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' -d '{"domain": "test.onpress.pro", "dry_run": true}'
{ "success": true, "dry_run": true, "mode": "assign", "changed": false, "plan": [], "domain_option": [], "sites": [ { "blog_id": 233, "domain": "test.onpress.pro", "home": "https://test.onpress.pro", "siteurl": "https://test.onpress.pro" } ] }
Настоящий вызов: mode (assign, swap), changed, sites[] (domain, home, siteurl до и после, polylang, supercache, stale), adopt, cache, rebake (по blog_id), domain_option, warnings. Отказы: 400 invalid_domain, 400 invalid_swap_with, 400 unknown_field, 404 site_not_found, 409 site_deleted, 409 main_site_locked, 409 domain_taken, 409 swap_domain_mismatch, 409 domain_busy, 409 domain_changed_meanwhile, 409 wrong_realm, 500 domain_move_failed, 502 internal_unavailable.
DELETE /sites/{id}
| Поле | По умолчанию | Смысл |
|---|---|---|
mode | archive | archive — снять с эфира; purge — удалить всё |
dry_run | false | план |
confirm | — | домен сайта — для purge непустого сайта |
drop_orphan_users | false | при purge удалить учётки, состоящие только в этом сайте |
curl -s -X DELETE "$API/sites/233" \
-H "Authorization: Bearer $OP_TOKEN" -H 'Content-Type: application/json' -d '{"dry_run": true}' \
| jq '{dry_run, mode, plan: .plan | {exists, domain, hosts, prefix, tables_count, empty, confirm_required, confirm_with}}'
План (plan): exists, domain, hosts, hosts_shared, prefix, like, tables, tables_count, tables_bytes, tables_rejected, neighbours, dirs, files, content, users (members, orphans), network_rows, network_kept, empty, confirm_required, confirm_with. archive отвечает {mode, blog_id, domain, before, removed, plan}; purge — план плюс core, tables, dirs, users, verify.
Отказы: 400 invalid_mode, 400 unknown_field, 400 invalid_drop_orphan_users, 404 site_not_found, 409 main_site_protected, 409 site_already_gone, 409 wrong_realm, 428 confirmation_required (confirm_with, plan), 500 unsafe_table, 502 internal_unavailable.
POST /sites/{id}/restore
Вернуть из архива. Тело не читается. Ответ: blog_id, domain, archived, deleted, public, blog_public, restored_from, static_rebake_needed, rebake, warnings. Отказы: 404 site_not_found (после purge), 409 main_site_protected, 409 wrong_realm.