Перейти к основному содержимому

Инвентарь REST → OpenAPI

Фаза 3: канонические YAML — полноценный контракт (requestBody / security / WpError / коды ответов), не только каталог path’ов. URL — {product}/{slug}/v1. Канон YAML — в плагине docs/openapi/*.yaml. Сайт копирует спеки (npm run sync:openapi) и генерирует MDX (npm run gen-api-docs). Сверка: npm run audit:openapi (path-coverage + глубина: тело или x-empty-body, security, ru/en коды). Исключения сканера: vendor, vendor-lib, tests, includes/analogwp-*. License регистрируется из wp2platform/plugin.php через контроллер wordpress-core — в аудит добавлен явно.

Колонка OpenAPI: контракт — операция описана в YAML с входом/выходом/ошибками.

WP_REST_Server::EDITABLE в PHP = POST|PUT|PATCH; в OpenAPI обычно документирован PATCH (этого достаточно для coverage). CREATABLE = POST, READABLE = GET, DELETABLE = DELETE.


wp2platform

Спека: docs/openapi/wp2platform-modules.yaml/docs/api/wp2platform. Auth по умолчанию: cookie / Application Password (DualRest), сеть.

Site Manager — wp2/site-manager/v1

Клиенты: админка Site Manager. blog_id в path.

METHODPathOpenAPI
GET/wp-json/wp2/site-manager/v1/sitesконтракт
POST…/sitesконтракт
GET…/sites/slug-availabilityконтракт
POST…/sites/bulkконтракт
GET…/sites/{blog_id}контракт
PATCH (EDITABLE)…/sites/{blog_id}контракт
DELETE…/sites/{blog_id}контракт
POST…/sites/{blog_id}/archiveконтракт
POST…/sites/{blog_id}/unarchiveконтракт
POST…/sites/{blog_id}/activateконтракт
POST…/sites/{blog_id}/deactivateконтракт
GET…/sites/{blog_id}/usersконтракт
POST…/sites/{blog_id}/usersконтракт
DELETE…/sites/{blog_id}/users/{user_id}контракт
GET/POST…/categoriesконтракт
PATCH/DELETE…/categories/{id}контракт
GET/POST…/statusesконтракт
PATCH/DELETE…/statuses/{id}контракт
GET…/jobsконтракт
GET…/jobs/{job_id}контракт
GET…/jobs/{job_id}/eventsконтракт

Site Duplicator — wp2/site-duplicator/v1

METHODPathOpenAPI
POST/wp-json/wp2/site-duplicator/v1/sites/{blog_id}/duplicateконтракт
GET…/jobs, …/jobs/{job_id}, …/jobs/{job_id}/eventsконтракт

Post Duplicator — wp2/post-duplicator/v1

METHODPathOpenAPI
POST/wp-json/wp2/post-duplicator/v1/posts/{post_id}/duplicateконтракт
POST…/posts/{post_id}/duplicate-batchконтракт

Multi Network — wp2/multi-network/v1

METHODPathOpenAPI
GET/POST/wp-json/wp2/multi-network/v1/networksконтракт
GET…/networks/{network_id}контракт

Media Converter — wp2/media-converter/v1

Клиенты: скиллы media-hls-encode, media-whisper-tracks (formats, attachments, artifacts/pack). Query blog_id на части ручек.

METHODPathOpenAPI
GET…/media-converter/v1/formatsконтракт
GET/PATCH…/settingsконтракт
POST…/media, …/encodeконтракт
GET…/attachments/{id}контракт
POST…/attachments/{id}/encodeконтракт
GET…/queue, …/queue/{key}контракт
POST…/queue/control, …/queue/clearконтракт
DELETE…/queue/{key}контракт
POST…/queue/{key}/formats/{format}/cancelконтракт
GET/POST/DELETE…/attachments/{id}/frame-miniaturesконтракт
GET/POST…/attachments/{id}/thumbnailsконтракт
PATCH/DELETE…/attachments/{id}/thumbnails/posterконтракт
GET…/attachments/{id}/artifactsконтракт
POST…/attachments/{id}/artifacts/packконтракт
PATCH/DELETE…/attachments/{id}/artifacts/{folder}контракт

Subtitles & Timecodes — wp2/media-subtitles-timecodes/v1

Клиент: скилл media-whisper-tracks.

METHODPathOpenAPI
GET/POST/PUT…/media-subtitles-timecodes/v1/attachments/{id}/tracksконтракт
POST…/tracks/uploadконтракт
PATCH/DELETE…/tracks/{index}контракт

Enable Media Replace — wp2/enable-media-replace/v1

METHODPathOpenAPI
GET…/enable-media-replace/v1/attachments/{id}/replace-infoконтракт
POST…/attachments/{id}/replaceконтракт

Ошибка: playback_artifacts_present (409), если к вложению привязаны артефакты playback.

Studio Sync — wp2/studio-sync/v1 (уже канон фазы 2)

Клиент: WP2Studio (STUDIO_SYNC_REST_BASE). Auth: public на POST /desktop/connect; дальше Bearer. PHP: src/Modules/StudioSync/. Не переделывать.

METHODPathAuthOpenAPI
POST/wp-json/wp2/studio-sync/v1/desktop/connectpublic (one-time token)контракт
GET…/desktop/statusBearerконтракт
POST…/desktop/disconnectBearerконтракт
GET…/sitesBearerконтракт
GET…/statusBearer (legacy)контракт
GET…/sync/itemsBearerконтракт
GET…/sync/posts/{post_id}Bearerконтракт
PATCH (EDITABLE)…/sync/posts/{post_id}Bearer, body base_hash+contentконтракт

Local Sync — wp2/local-sync/v1

Клиенты: скилл 09-local-sync, пайплайн page-builder (POST /validate). Capability: manage_network (MS) / edit_pages. Query blog_id.

METHODPathOpenAPI
GET/wp-json/wp2/local-sync/v1/projectsконтракт
POST…/syncконтракт
POST…/validateконтракт

Sections Folder — wp2/sections-folder/v1

Клиент: админка Gutenberg sidebar. manage_categories + edit_posts. Create/delete секций — core /wp/v2/{taxonomy}, не этот API.

METHODPathOpenAPI
GET/wp-json/wp2/sections-folder/v1/sidebarконтракт
PUT…/reorderконтракт
PUT…/assignконтракт
PATCH (EDITABLE)…/sections/{id}контракт

Passwordless — wp2/passwordless/v1 (public)

Клиент: WP2 App SPA (AuthContext).

METHODPathOpenAPI
POST/wp-json/wp2/passwordless/v1/requestконтракт
POST…/verifyконтракт

Клиент: WP2 App SPA.

METHODPathOpenAPI
POST/wp-json/wp2/magic-links/v1/consumeконтракт

Elementor Style Presets — wp2/elementor-style-presets/v1

Клиент: админка Elementor. edit_posts.

METHODPathOpenAPI
GET/POST/wp-json/wp2/elementor-style-presets/v1/presetsконтракт
GET…/presets/{id}контракт
PATCH (EDITABLE)…/presets/{id}контракт

Media Playback — wp2/media-playback/v1

Клиенты: плееры (Vidstack и др.). Query blog_id, lang.

METHODPathOpenAPI
GET/wp-json/wp2/media-playback/v1/attachments/{id}контракт

License — wp2/license/v1 (продукт platform)

Регистрация: plugin.phpLicenseRestController('wp2', 'license', $hub). Репо wp2-wordpress-core не документируется отдельно. Auth: manage_network_options / manage_options.

METHODPathOpenAPI
GET/wp-json/wp2/license/v1/productsконтракт
POST…/{product_id}/activateконтракт
POST…/{product_id}/deactivateконтракт
GET…/{product_id}/statusконтракт
GET…/{product_id}/dataконтракт

wp2lms

Спека: docs/openapi/wp2lms.yaml.

Static Builder — wp2lms/static-builder/v1

Клиенты: скилл 10-static-builder, CLI bin/static-builder/*. Auth: edit_pages / manage_network. Query blog_id.

WP_Error: wp2lms_static_builder_invalid_blog, blog_not_found, busy, not_found, no_pages, cannot_stop, invalid_id, invalid_api_type, invalid_version, invalid_export_mode, pages_required, invalid_page_ids, page_not_found, create_failed, configure_failed, update_failed, delete_failed, page_cache_rebuild.

METHODPathOpenAPI
GET/wp-json/wp2lms/static-builder/v1/pagesконтракт
GET/POST…/buildsконтракт
GET/PATCH/DELETE…/builds/{id}контракт
POST…/builds/{id}/runконтракт
POST…/builds/{id}/stopконтракт

Turbo — wp2lms/turbo/v1

Клиенты: Turbo frontend (Gutenberg/Twig), Gravity Forms bridge, xAPI session.

METHODPathAuthOpenAPI
POST/wp-json/wp2lms/turbo/v1/xapi-actor/sessioncookie (email)контракт
POST…/gravity-forms/submitcookieконтракт
POST…/dsh/expandcookieконтракт
GET…/static/{id}edit_postsконтракт

wp2lms-pro

Спека: docs/openapi/wp2lms-pro.yaml.

Embed Packages — wp2lms-pro/embed-packages/v1

Alias wp2platform/module/embed-packages/v1 снят. Auth: manage_network / edit_pages. Query blog_id.

WP_Error: embed_packages_not_found, delete_failed, page_not_found, invalid_blog, unknown_blog.

METHODPathOpenAPI
GET/POST/wp-json/wp2lms-pro/embed-packages/v1/packagesконтракт
GET/PATCH/DELETE…/packages/{id}контракт
POST…/packages/{id}/contentконтракт
POST…/packages/{id}/materialize-pagesконтракт
GET/PUT/DELETE…/pages/{page_id}/packageконтракт
POST…/batchконтракт

wp2tutor

Спека: docs/openapi/wp2tutor.yaml. Namespace разделены по модулям. Bot не в этой спеке (см. wp2tutor-bot).

METHODPathAuthOpenAPI
GET / POST/wp-json/wp2tutor/ai/v1/chatGET public; POST X-Ai-Chat-Secretконтракт
POST/wp-json/wp2tutor/embedding/v1/syncmanage_optionsконтракт
POST…/statusesmanage_optionsконтракт
POST…/diagnosticsmanage_optionsконтракт
GET/POST/wp-json/wp2tutor/rag/v1/datatablesadminконтракт
GET…/chunk/{id_chunk}adminконтракт

wp2tutor-forms

Спека: docs/openapi/wp2tutor-forms.yaml. Свои NS wp2tutor-forms/form/v1 и wp2tutor-forms/i18n/v1 (не общий wp2tutor/v1). Form: cookie (logged-in). i18n: public.

METHODPathOpenAPI
POST/wp-json/wp2tutor-forms/form/v1/updateDefinitionконтракт
POST…/updateShortcodeконтракт
POST…/updateStylesконтракт
POST…/updateL10nконтракт
POST…/updateRunnerконтракт
GET…/getRunnerDataконтракт
GET/wp-json/wp2tutor-forms/i18n/v1/localeконтракт
GET…/translationконтракт

wp2tutor-bot

Спека: docs/openapi/wp2tutor-bot.yaml. Публичные webhooks. При выкладке сменить URL в Telegram/VK.

METHODPathAuthOpenAPI
POST/wp-json/wp2tutor-bot/telegram/v1/webhook/{bot_id}publicконтракт
POST/wp-json/wp2tutor-bot/vk/v1/callback/{channel_id}publicконтракт
POST/wp-json/wp2tutor-bot/deepchat/v1/chat/{channel_id}public + X-Wp2tutor-Bot-Secretконтракт
OPTIONS…/chat/{channel_id}public CORSконтракт

Клиенты: Telegram/VK, Deep Chat UI; WP2 App проксирует Deep Chat через wp2app/ai-chat/v1/chat (секрет не в бандле).


wp2app

Спека: onepix/wp2app/docs/openapi/wp2app.yaml/docs/api/wp2app. Cookie + wp_rest nonce. Passwordless/magic-links — не здесь (platform).

WP_Error: wp2app_auth_missing, wp2app_passwordless, wp2app_auth_failed, wp2app_reserved, wp2app_ai_chat_config, wp2app_ai_chat_secret.

METHODPathAuthOpenAPI
GET/wp-json/wp2app/auth/v1/mepublic (user: null если гость)контракт
POST…/loginpublicконтракт
POST…/logoutlogged-inконтракт
GET…/noncepublicконтракт
POST…/lost-passwordpublicконтракт
POST…/reset-passwordpublicконтракт
GET/wp-json/wp2app/content/v1?path=logged-in / guests если Private Site offконтракт
GET…/{id}то жеконтракт
POST/wp-json/wp2app/ai-chat/v1/chatlogged-in (wp2app/ai_chat/can_chat)контракт
OPTIONS…/chatpublicконтракт

Вне scope (намеренно нет в YAML продуктов)

  • AJAX admin-ajax.php, WP-CLI.
  • Core /wp/v2/*, AnalogWP REST, Elementor/WPML чужие namespace.
  • Библиотека wp2-wordpress-core как отдельный API (License описан у platform).
  • Темы / skin-блоки, wp2app-starter, deprecated отдельные плагины.
  • WP2 Wrapper — JS API, не WordPress REST.