# Create Blueprint
Create a WordPress blueprint for the authenticated account.
Requires an active WordPress Toolkit add-on on the account (purchased via the ServerAvatar dashboard; not available through the API).
# Create WordPress Blueprint
# HTTP Request:
POST https://api.serveravatar.com/wordpress-blueprints
# Parameter:
| Parameter | Required | Type | Description |
|---|---|---|---|
| name | Yes | String | Unique blueprint name (max 80 characters) |
| selectedThemes | No | Array | Themes from WordPress.org (see below) |
| selectedPlugins | No | Array | Plugins from WordPress.org (see below) |
| customThemePlugin | No | Array | Custom theme/plugin ZIPs via URL or upload (see below) |
| removeHelloWorld | Yes | Boolean | Remove default Hello World post |
| removeSamplePage | Yes | Boolean | Remove default sample page |
| deleteAllThemes | Yes | Boolean | Remove bundled themes before install |
| deleteAllPlugins | Yes | Boolean | Remove bundled plugins before install |
| deleteUnneededCoreFile | Yes | Boolean | Remove unneeded core files |
| language | Yes | String | Site language locale. You can get available languages from the Language API. |
| timezone | Yes | String | Site timezone. You can get a list of timezones from the Timezone API. |
| dateFormat | Yes | String | WordPress date format |
| timeFormat | Yes | String | WordPress time format |
| SEIndexingDisable | Yes | Boolean | Discourage search engine indexing |
| organizeUploadFolders | Yes | Boolean | Organize uploads into year/month folders |
| permalink_structure | No | String | Permalink structure |
| debugMode | No | Boolean | Enable WP_DEBUG |
| debugLog | No | Boolean | Enable WP_DEBUG_LOG |
| debugError | No | Boolean | Enable WP_DEBUG_DISPLAY |
selectedThemes[] / selectedPlugins[] object:
| Field | Required | Type | Description |
|---|---|---|---|
| name | Yes | String | Display name |
| slug | Yes | String | WordPress.org slug |
| activate | Yes | Boolean | Activate after install |
| screenshot_url / icon_url | No | String | Optional image URL |
customThemePlugin[] object:
Each entry installs a custom theme or plugin from either an external ZIP URL or a file you uploaded to ServerAvatar. Provide one source per entry: link (URL) or file_path (upload reference), not both.
| Field | Required | Type | Description |
|---|---|---|---|
| label | Yes | String | Display label (max 150 chars) |
| link | Conditional | String | Public HTTP(S) URL to a theme/plugin ZIP. Required when not using an upload. |
| file_path | Conditional | String | Filename returned by Upload Custom Theme/Plugin ZIP (UUID .zip). Alternative to putting the same value in link. |
| type | Yes | String | custom-theme or custom-plugin |
| activate | Yes | Boolean | Activate after install |
Stored custom_theme_plugins[] object (responses):
After create or update, each saved entry includes link_source so clients know how link should be interpreted:
| Field | Type | Description |
|---|---|---|
| label | String | Display label |
| link | String | External ZIP URL when link_source is url; stored upload filename (UUID .zip) when link_source is upload |
| link_source | String | url — install from the external URL; upload — install from the private ZIP referenced by link |
| type | String | custom-theme or custom-plugin |
| activate | Boolean | Activate after install |
link_source is set by the API during normalization; do not send it in create or update requests.
# Upload Custom Theme/Plugin ZIP
Upload a theme or plugin ZIP before referencing it in customThemePlugin on Create Blueprint or Update Blueprint.
Requires an active WordPress Toolkit add-on on the account.
# HTTP Request:
POST https://api.serveravatar.com/wordpress-blueprints/custom-theme-plugin/upload
# Parameter:
| Parameter | Required | Type | Description |
|---|---|---|---|
| file | Yes | File | ZIP archive (max 100 MB) |
Send as multipart/form-data with field name file.
# Response:
# Successful Response
- 201 (Created)
{
"message": "Custom theme/plugin file uploaded successfully.",
"file_path": "a1b2c3d4-e5f6-7890-abcd-ef1234567890.zip"
}
Use file_path in customThemePlugin[].file_path when creating or updating a blueprint. The entry is persisted with link_source: "upload" and link set to that filename.
# Validation Error
- 422 (Unprocessable Entity)
# Curl Request Example (URL source):
curl --request POST \
--url "https://api.serveravatar.com/wordpress-blueprints" \
--header 'content-type: application/json' \
--header 'Authorization: <YOUR API TOKEN>' \
--data '{
"name": "My Agency Starter",
"selectedThemes": [{"name": "Twenty Twenty-Four", "slug": "twentytwentyfour", "activate": true}],
"selectedPlugins": [{"name": "Akismet", "slug": "akismet", "activate": true}],
"removeHelloWorld": true,
"removeSamplePage": true,
"deleteAllThemes": false,
"deleteAllPlugins": false,
"deleteUnneededCoreFile": false,
"language": "en_US",
"timezone": "UTC",
"dateFormat": "F j, Y",
"timeFormat": "g:i a",
"SEIndexingDisable": true,
"organizeUploadFolders": true
}'
# Curl Request Example (upload source):
# 1. Upload the ZIP
curl --request POST \
--url "https://api.serveravatar.com/wordpress-blueprints/custom-theme-plugin/upload" \
--header 'Authorization: <YOUR API TOKEN>' \
--form 'file=@/path/to/my-plugin.zip'
# 2. Create blueprint using file_path from the upload response
curl --request POST \
--url "https://api.serveravatar.com/wordpress-blueprints" \
--header 'content-type: application/json' \
--header 'Authorization: <YOUR API TOKEN>' \
--data '{
"name": "Agency Starter With Upload",
"selectedThemes": [{"name": "Twenty Twenty-Four", "slug": "twentytwentyfour", "activate": true}],
"selectedPlugins": [{"name": "Akismet", "slug": "akismet", "activate": true}],
"customThemePlugin": [
{
"label": "My Custom Plugin",
"file_path": "a1b2c3d4-e5f6-7890-abcd-ef1234567890.zip",
"type": "custom-plugin",
"activate": true
}
],
"removeHelloWorld": true,
"removeSamplePage": true,
"deleteAllThemes": false,
"deleteAllPlugins": false,
"deleteUnneededCoreFile": false,
"language": "en_US",
"timezone": "UTC",
"dateFormat": "F j, Y",
"timeFormat": "g:i a",
"SEIndexingDisable": true,
"organizeUploadFolders": true
}'
Saved custom_theme_plugins for the upload entry:
{
"label": "My Custom Plugin",
"link": "a1b2c3d4-e5f6-7890-abcd-ef1234567890.zip",
"link_source": "upload",
"type": "custom-plugin",
"activate": true
}
# Response:
# Successful Response
- 201 (Created)
{
"message": "WordPress blueprint created successfully."
}
# Validation Error
- 422 (Unprocessable Entity)
# Server Error
- 500 (Internal Server Error)