#Blueprints
In ServerAvatar a blueprint is a saved WordPress setup: plugins, themes, cleanup options, locale, permalinks, debug flags. It's applied to a WordPress site. It is not a server template. V7 only OSS API
#Storage (Central) V7 only
V7 table wordpress_blueprints (added 2026-05): user_id (or hosting_user_id), name, selected_plugins (json), selected_themes (json), custom_theme_plugins (json, uploaded zips), remove_hello_world, remove_sample_page, delete_all_themes, delete_all_plugins, delete_unneeded_core_file, language, timezone, date_format, time_format, se_indexing_disable, organize_upload_folders, permalink_structure, debug_mode, debug_log, debug_error.
| V7 endpoint | Purpose |
|---|---|
GET /wordpress-blueprints, GET /organizations/{org}/wordpress-blueprints | List |
POST /wordpress-blueprints | Create |
GET/PATCH/DELETE /wordpress-blueprints/{id} | Show / update / delete |
POST /wordpress-blueprints/custom-theme-plugin/upload | Upload a custom plugin/theme zip (served back through a signed URL) |
GET /wordpress-blueprints/themes, /plugins | Search the public WordPress.org directory |
#Deployment (OSS) OSS API
POST /central/addons/applications/{application}/wordpress/blueprint→ 202 with a run.- The body is the whole saved blueprint (Central stores blueprints, as V7 did):
selected_plugins/selected_themes([{slug, name?, activate?}]),custom_theme_plugins([{label?, link (https), type: custom-plugin|custom-theme, activate?}]), all flags above, and an optionalscript(≤ 64 KB, run as the site owner, never root, 10-minute limit). - Poll
GET /central/addons/runs/{run}:queued → running → succeeded|failed. - Result:
steps: [{step, status: ok|failed, message?}],completed,failed, scriptexit_code,output(last 64 KB),timed_out. A failed step doesn't stop the run: the run issucceededwithcompleted: false. The UI must show per-step results, not only the run status. - Requirements: the WP Toolkit add-on installed on the server (
404 addon_not_installed) and licensed (403 addon_licence_required). WordPress routes on a non-WordPress or not-yet-active site →404. - Errors:
422 addon_command_failed(add-on refused, details underaddon),502 addon_bad_output,504 addon_timed_out(30 min for queued runs). - These routes answer 404 to anyone but Central (even OSS administrators).
Example: a blueprint run (OSS Central-only add-on route)
POST https://api.<panel-host>/api/central/addons/applications/42/wordpress/blueprint
Authorization: Bearer sv_central_…
{"selected_plugins": [{"slug": "wordpress-seo", "activate": true}],
"selected_themes": [{"slug": "astra", "activate": true}],
"remove_hello_world": true, "permalink_structure": "/%postname%/",
"language": "de_DE", "timezone": "Europe/Berlin"}
202 {"data": {"id": 7, "application_id": 42, "addon": "wp-toolkit",
"status": "queued", …}}
GET https://api.<panel-host>/api/central/addons/runs/7
200 {"data": {"id": 7, "status": "succeeded", "http_status": 200,
"result": {"completed": false, "failed": 1,
"steps": [{"step": "plugins", "status": "ok"},
{"step": "theme", "status": "failed", "message": "…"}]}}}status: succeeded with completed: false means the run finished but a step failed. Show it as a partial success.
#Screens
| Screen | Content |
|---|---|
List (/blueprints) | Cards/table: name, plugins/themes count, last used, used on N sites Demo UI only (usage stats need Central to record runs Missing) |
| Create / edit | Name, theme picker + plugin picker (search WordPress.org via the backend), custom uploads, cleanup toggles, locale/timezone/date/time format, permalinks, debug flags, optional script (with a warning) |
| Deploy dialog | Server → WordPress site (from OSS GET /applications, filtered to WordPress) → confirm → progress |
| Run result | Per-step list ok/failed, script output (collapsible), retry |
Also: OSS's create-application flow for WordPress can't take a blueprint directly. Applying a blueprint at site creation means create site → wait active → run blueprint Assumption.