/services/websites/v1/themes/install
Auth
POST /api/services/websites/v1/themes/install MODE 1 - MANUAL INSTALLATION: - Copies NOTHING during installation - Only creates project_themes pivot record (registers theme) - Layouts shown in popup when user creates layout: "From scratch" or "Get from theme" - Layouts copied on-demand only when user selects them MODE 2 - SAMPLE DATA INSTALLATION: - Copies user-selected pages + their associated layouts + content - Images replaced with placeholders using ThemeCloningService - Quick start approach
| Field | Type | Required | Description | Example |
|---|---|---|---|---|
theme_id |
integer | Yes | Root theme project ID (the parent theme family) | |
version_id |
integer | Yes | Specific theme version project ID to install | |
installation_mode |
string
manual, sample_data |
Yes | Installation mode: manual (register only) or sample_data (copy selected pages/layouts/content) | |
auto_import |
boolean|null | No | Auto-import all available data (for demo users with no existing theme installs) | |
selected_page_ids |
integer[] | No | Page IDs to copy during sample_data installation | |
selected_structure_ids |
array|null | No | Structure IDs to clone (cloned before pages so layout connection_id references are correct) | |
selected_settings |
array|null | No | Theme setting categories to copy (e.g. colors, fonts, buttons) | |
selected_webshop_items |
object | No | Webshop items to clone (products, categories, filters) |
| Header | Type | Description | Example |
|---|---|---|---|
X-RateLimit-Limit |
integer | Maximum number of requests allowed per minute | 60 |
X-RateLimit-Remaining |
integer | Number of requests remaining in the current window | 57 |
| Field | Type | Description |
|---|---|---|
error |
boolean | |
message |
string | |
data |
object | |
data.installation |
object |
| Header | Type | Description | Example |
|---|---|---|---|
X-RateLimit-Limit |
integer | Maximum number of requests allowed per minute | 60 |
X-RateLimit-Remaining |
integer | Number of requests remaining in the current window | 57 |
| Field | Type | Description |
|---|---|---|
error |
boolean | |
message |
string | |
data |
mixed[] |
| Field | Type | Description |
|---|---|---|
message |
string | Errors overview. |
errors |
object | A detailed description of each field that failed validation. |
| Header | Type | Description | Example |
|---|---|---|---|
X-RateLimit-Limit |
integer | Maximum number of requests allowed per minute | 60 |
X-RateLimit-Remaining |
integer | Number of requests remaining in the current window | 57 |
| Field | Type | Description |
|---|---|---|
error |
boolean | |
message |
string | |
data |
mixed[] |
| Header | Type | Description | Example |
|---|---|---|---|
X-RateLimit-Limit |
integer | Maximum number of requests allowed per minute | 60 |
X-RateLimit-Remaining |
integer | Number of requests remaining in the current window | 57 |
| Field | Type | Description |
|---|---|---|
error |
boolean | |
message |
string | |
data |
mixed[] |
| Header | Type | Description | Example |
|---|---|---|---|
X-RateLimit-Limit |
integer | Maximum number of requests allowed per minute | 60 |
X-RateLimit-Remaining |
integer | Number of requests remaining in the current window | 57 |
| Field | Type | Description |
|---|---|---|
error |
boolean | |
message |
string |
| Header | Type | Description | Example |
|---|---|---|---|
X-RateLimit-Limit |
integer | Maximum number of requests allowed per minute | 60 |
X-RateLimit-Remaining |
integer | Number of requests remaining in the current window | 57 |
| Field | Type | Description |
|---|---|---|
error |
boolean | |
message |
string |
| Header | Type | Description | Example |
|---|---|---|---|
X-RateLimit-Limit |
integer | Maximum number of requests allowed per minute | 60 |
X-RateLimit-Remaining |
integer | Number of requests remaining in the current window | 57 |
Retry-After |
integer | Seconds until the rate limit resets | 60 |
| Field | Type | Description |
|---|---|---|
error |
boolean | |
message |
string |
curl -X POST "https://api.wemasy.nl/api/services/websites/v1/themes/install" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"theme_id": 0,
"version_id": 0,
"installation_mode": "string",
"auto_import": "string",
"selected_page_ids": [],
"selected_structure_ids": "string",
"selected_settings": "string",
"selected_webshop_items": "string"
}'
fetch('https://api.wemasy.nl/api/services/websites/v1/themes/install', {
method: 'POST',
headers: {
'Authorization': 'Bearer YOUR_API_TOKEN',
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
"theme_id": 0,
"version_id": 0,
"installation_mode": "string",
"auto_import": "string",
"selected_page_ids": [],
"selected_structure_ids": "string",
"selected_settings": "string",
"selected_webshop_items": "string"
})})
.then(r => r.json())
.then(data => console.log(data));
$response = Http::withToken('YOUR_API_TOKEN')
->accept('application/json')
->post('https://api.wemasy.nl/api/services/websites/v1/themes/install', {
"theme_id": 0,
"version_id": 0,
"installation_mode": "string",
"auto_import": "string",
"selected_page_ids": [],
"selected_structure_ids": "string",
"selected_settings": "string",
"selected_webshop_items": "string"
});
$data = $response->json();
import requests
headers = {
"Authorization": "Bearer YOUR_API_TOKEN",
"Accept": "application/json"
}
data = {
"theme_id": 0,
"version_id": 0,
"installation_mode": "string",
"auto_import": "string",
"selected_page_ids": [],
"selected_structure_ids": "string",
"selected_settings": "string",
"selected_webshop_items": "string"
}
r = requests.post("https://api.wemasy.nl/api/services/websites/v1/themes/install", headers=headers, json=data)
print(r.json())
{
"error": false,
"message": "string",
"data": {
"installation": {
"id": 0,
"theme": {
"id": "string",
"title": "string",
"version": "string"
},
"mode": "string",
"structures_cloned": 0,
"settings_copied": "string",
"settings_categories": "string",
"webshop": {
"products_copied": "string",
"categories_copied": "string",
"filters_copied": "string",
"relationships_copied": "string"
},
"blocks_copied": "string"
}
}
}