Website Builder API

Create your site without code

Base URL: https://api.wemasy.nl/api
ⓘ The token stays in this browser tab only (sessionStorage) and is sent to the WEMASY API only. Don't use production tokens on shared computers.

Blocks

Create Block

POST /services/websites/v1/blocks/create Auth

List Blocks

POST /services/websites/v1/blocks/all Auth

Get Block

POST /services/websites/v1/blocks/get Auth

Edit Block

POST /services/websites/v1/blocks/edit Auth

Delete Block

POST /services/websites/v1/blocks/delete Auth

Set Block Content

POST /services/websites/v1/blocks/set-content Auth

ComponentVersions

POST /services/websites/v1/versions/list Auth
POST /services/websites/v1/versions/get Auth
POST /services/websites/v1/versions/revert Auth
POST /services/websites/v1/versions/delete Auth
POST /services/websites/v1/versions/latest Auth

Components

Create Component

POST /services/websites/v1/components/create Auth

Note: This endpoint is not used anywhere currently.

Add Component to Block

POST /services/websites/v1/components/add-to Auth

Change Component Type

POST /services/websites/v1/components/change-to Auth

Delete Component

POST /services/websites/v1/components/delete Auth

Set Component Content

POST /services/websites/v1/components/set-content Auth

Update Component Order

POST /services/websites/v1/components/update-order Auth

Duplicate Component

POST /services/websites/v1/components/duplicate Auth

Unlink Component

POST /services/websites/v1/components/unlink Auth

When a component is linked to a template (has partial_partial meta), this endpoint will: 1. Copy all template content (custom fields config, code) to the component 2. Remove the template link (partial_partial meta) 3. Component becomes independent with its own copy of data

Convert to Template

POST /services/websites/v1/components/convert-to-template Auth

This is the inverse of the Unlink operation: 1. Creates a new Partial (reusable template) with custom='custom_template' 2. Copies the component's data (code, meta, custom_fields) into a PartialsComponents child 3. Updates the original component to become a templatePartial linked to the new template

Paste Component

POST /services/websites/v1/components/paste Auth

Export Component

POST /services/websites/v1/components/export Auth

Import Component

POST /services/websites/v1/components/import Auth

Update Custom Fields

POST /services/websites/v1/components/update-custom-fields Auth

Deployment

Deploy Website

POST /services/websites/v1/websites/deploy Auth

Publish Modes

POST /services/websites/v1/websites/publish-modes Auth

The generator of the current website and the publish modes it can use: static, dynamic (only when the render server serves the website) and preview (a build into the demo address).

Get Deployment Status

POST /services/websites/v1/websites/deployment/status Auth

Get Domain Status

POST /services/websites/v1/websites/deployment/domain/status Auth

Update Deployment Domain

POST /services/websites/v1/websites/deployment/domain/update Auth

Check Domain DNS

POST /services/websites/v1/websites/deployment/domain/dns-check Auth

Own domain: status

POST /services/websites/v1/websites/own-domain/status Auth

The name (pending or connected), the DNS records to set, whether they point at us now, and what the owner can do next: none | waiting_dns | dns_found (no plan yet) | ready (plan, not connected) | connected.

Own domain: save

POST /services/websites/v1/websites/own-domain/save Auth

Remember the name (always allowed, also before paying). With connect=true and the plan that includes own domains, connect it to the project the same way the domain step after payment does.

Reset Deployment

POST /services/websites/v1/websites/reset-deployment Auth

Cancel Deployment

POST /services/websites/v1/websites/cancel-deployment Auth

Get Auto-Publish Schedule

POST /services/websites/v1/websites/schedule/get Auth

Returns the current auto-publish schedule configuration and the outcome of the most recent scheduled run for the current project's website.

Update Auto-Publish Schedule

POST /services/websites/v1/websites/schedule/update Auth

Saves the auto-publish schedule configuration for the current project's website. Set schedule_enabled=false to pause the schedule without losing the config.

Own change status

POST /services/websites/v1/websites/own-change/status Auth

Whether the first publish should first ask for a business name, phone number or logo, which own signals exist, and the values to prefill.

Save own change

POST /services/websites/v1/websites/own-change/save Auth

Saves the phone number given on the publish screen (into the contact details of the site) and records that the owner made the site theirs.

Get Publish Data

POST /services/websites/v1/websites/get-publish-data Auth

Returns all data needed for the publish popup: - Domain information (wemasy/custom/none) - Versions list with current version (from database) - Deployment status and logs (from Redis + database) - Current action type (generate/generate-deploy) PERFORMANCE: Database-only queries, no filesystem reads

POST /services/websites/v1/websites/generator/use-new Auth

Rollback Website to Previous Version

POST /services/websites/v1/websites/rollback Auth

ARCHITECTURE: - Local environment: Direct filesystem access via WebsiteVersionManager - Production: Remote symlink update via SSH on Generator server Rolls back the website to a specific version by updating the symlink and recording the deployment time in the database.

Setup Wemasy Domain

POST /services/websites/v1/websites/setup-wemasy-domain Auth

Saves wemasy domain to projects table and optionally switches to it

Switch Domain Type

POST /services/websites/v1/websites/switch-domain-type Auth

Switches active domain between custom and wemasy

Check DNS Propagation (API Endpoint)

POST /services/websites/v1/websites/check-domain-propagation Auth

Checks immediately and dispatches background job for automatic checking if not verified

Confirm DNS Records Added

POST /services/websites/v1/websites/confirm-dns-records Auth

Called when user clicks "I've added the DNS records" in the publish popup. Sets dns_records_added_at = now() so the DNS setup screen is hidden and the user can proceed with deployment. Also dispatches a background job to check DNS propagation automatically. When propagation is confirmed, dns_verified will be set to '1'.

Get DNS Settings

POST /services/websites/v1/websites/dns-settings Auth

Returns the DNS records needed for the custom domain, along with the current DNS verification status.

POST /services/websites/v1/websites/domain-unlock/release Auth

DeploymentSettings

POST /services/websites/v1/deployment-settings/get Auth
POST /services/websites/v1/deployment-settings/update Auth

Domain forward

The project's forward (null when none), its DNS records and redirect counts

POST /services/websites/v1/domain-forward/get Auth

Create or update the forward. A new forward on a normal project needs convert_project

POST /services/websites/v1/domain-forward/save Auth

Check DNS now; when it points to us, (re)write the vhost and certificate in the background

POST /services/websites/v1/domain-forward/check Auth

Remove the forward. The project becomes a normal (free) project again

POST /services/websites/v1/domain-forward/delete Auth

File Uploads

Get Large File Upload Signed URL

POST /services/websites/v1/files/get/signed-url Auth

Get Large Uploaded Files

POST /services/websites/v1/files/get Auth

Delete Large Uploaded File

POST /services/websites/v1/files/delete Auth

Forms

Where a form is embedded (pages, templates/layouts, partials)

POST /services/websites/v1/forms/usage Auth

Forms (cross-project)

Clone a form from one project to another

POST /services/websites/v1/forms/clone Auth

Deep-copies the form post + `code` JSON (modern) or form_items (legacy). Idempotent by `base_post_id`.

Layouts

Create Layout

POST /services/websites/v1/layouts/create Auth

Create Layout from Theme

POST /services/websites/v1/layouts/create-from-theme Auth

POST /api/services/websites/v1/layouts/create-from-theme

List Layouts

POST /services/websites/v1/layouts/all Auth

Edit Layout

POST /services/websites/v1/layouts/edit Auth

Get Layout

POST /services/websites/v1/layouts/get Auth

Update Layout Templates

POST /services/websites/v1/layouts/update-templates Auth

Archive Layout

POST /services/websites/v1/layouts/archive Auth

List Archived Layouts

POST /services/websites/v1/layouts/archived Auth

Soft-deleted layouts (archived_at IS NOT NULL) for the management sidebar archive toggle.

Unarchive Layout

POST /services/websites/v1/layouts/unarchive Auth

Restores a soft-deleted layout and the header/footer/content components (+ component meta) that LayoutsDeleteController cascaded.

Delete Layout

POST /services/websites/v1/layouts/delete Auth

Layouts (cross-project)

Clone a layout from one project to another

POST /services/websites/v1/layouts/clone Auth

Deep-copies the layout + all child templates (header/footer/content) + their components + meta + S3 thumbnails. Idempotent by `base_post_id` — re-running returns the existing clone unless `force_new=true`.

MediaDelete

POST /services/websites/v1/media/delete Auth

MediaFile

POST /services/websites/v1/media/file Auth

MediaGet

POST /services/websites/v1/media/get Auth

MediaList

POST /services/websites/v1/media/list Auth

MediaPermanentDelete

POST /services/websites/v1/media/permanent-delete Auth

MediaRegister

POST /services/websites/v1/media/register Auth

MediaRemoveBackground

POST /services/websites/v1/media/remove-background Auth

MediaUpdate

POST /services/websites/v1/media/update Auth

MediaUpload

POST /services/websites/v1/media/upload Auth

MediaUsage

POST /services/websites/v1/media/usage Auth

Menus

List Menus

POST /services/websites/v1/menus/all Auth

Menus Get

POST /services/websites/v1/menus/get Auth

Edit Menu

POST /services/websites/v1/menus/edit Auth

Create Menu

POST /services/websites/v1/menus/create Auth

Delete Menu

POST /services/websites/v1/menus/delete Auth

Where a menu is assigned (header/footer slots) or embedded on pages ([wemasy-menu] / MenuNav blocks), plus layouts/templates/partials

POST /services/websites/v1/menus/usage Auth

Menus (cross-project)

Clone a menu from one project to another

POST /services/websites/v1/menus/clone Auth

Deep-copies the menu post + its `code` JSON. Idempotent by `base_post_id`: re-running returns the existing clone with refreshed `code` instead of duplicating.

MenusFixDeadLinks

POST /services/websites/v1/menus/fix-dead-links Auth

Page Not Found

List Page Not Found Records

POST /services/websites/v1/page-not-found/all Auth

Returns paginated 404 records for the current website, sorted by hit count (high impact first).

Delete Page Not Found Record

POST /services/websites/v1/page-not-found/delete Auth

Soft-deletes a 404 monitoring record.

Pages

List Pages

POST /services/websites/v1/pages/all Auth

Get Page Sections Summary

POST /services/websites/v1/pages/sections-summary Auth

Returns a lightweight summary of all sections (components) on a page. Each section includes its ID, position order, type, and a label. Labels are resolved from: template_title meta, partial name (for templatePartial), first heading in content, or fallback to "Section N".

Get Section Blocks Summary

POST /services/websites/v1/pages/section-blocks-summary Auth

Returns a lightweight summary of top-level blocks inside a section component. Only shows the first level of blocks — nested blocks inside columns, sliders, or accordions are not included. For nested editing, use the visual designer.

Create Page

POST /services/websites/v1/pages/create Auth

Create Page from Source (Theme or Infrastructure)

POST /services/websites/v1/pages/create-from-source Auth

POST /api/services/websites/v1/pages/create-from-source

Get Page

POST /services/websites/v1/pages/get Auth

Edit Page

POST /services/websites/v1/pages/edit Auth

Update Page Template

POST /services/websites/v1/pages/update-template Auth

Archive Page

POST /services/websites/v1/pages/archive Auth

List Archived Pages

POST /services/websites/v1/pages/archived Auth

Soft-deleted pages (archived_at IS NOT NULL). Used by the management sidebar archive toggle so merchants can review and restore pages.

Unarchive Page

POST /services/websites/v1/pages/unarchive Auth

Restores a soft-deleted page and the component rows / component meta that PagesDeleteController cascaded. Same project-wide URL uniqueness rules as PagesCreateController. On collision, returns url_conflict + suggested_url WITHOUT restoring, until the client re-calls with confirm_rename=true (and the chosen url).

Delete Page

POST /services/websites/v1/pages/delete Auth

Duplicate Page

POST /services/websites/v1/pages/duplicate Auth

Export Page

POST /services/websites/v1/pages/export Auth

Import Page

POST /services/websites/v1/pages/import Auth

Pages (cross-project)

Clone a page from one project to another (with its layout)

POST /services/websites/v1/pages/clone Auth

Deep-copies the page + components + meta + S3 thumbnails. When `clone_layout=true` (default) the source page's layout is cloned to the target FIRST, then the new page's parent_id is wired to the cloned layout's id.

Preview Designer Data

Get Secured Page Designer

POST /services/websites/v1/secured/page-designer/get Public

Get Page Designer Data

POST /services/websites/v1/page-designer/get Auth

Project Duplicate

Duplicate Project

POST /services/websites/v1/projects/duplicate Auth

POST /api/services/websites/v1/projects/duplicate Creates a complete duplicate of the source project with all related data. Only accessible by super administrators.

Projects (cross-project)

Bulk-upsert project metas (filtered safe-keys)

POST /services/websites/v1/projects/meta-apply Auth

Applies a `metas` map to a target project. Filters out billing, integration tokens, deployment state, and other per-project keys by default — see `DEFAULT_BLOCKED_PREFIXES`. Additive: keys not in the payload are untouched on the target.

Public

Search Content

POST /services/websites/v1/search Public

Settings

Get Product Pricing List

POST /services/websites/auth/v1/pricing Auth

Get All Available Pages

POST /services/websites/v1/pages/available-indexed Auth

Returns all indexable content (pages, structures, webshop items) where no_index is 0 or null

List Forms

POST /services/websites/v1/forms/all Auth

Get all available Google Fonts

POST /services/websites/v1/fonts/all Auth

Manually trigger thumbnail regeneration for a page, template, or layout

POST /services/websites/v1/thumbnails/regenerate Auth

Runs after the HTTP response is sent (no queue worker required). Rate limit: 5 requests per project per 10 minutes. POST /api/services/websites/v1/thumbnails/regenerate

Get count of scheduled structure items

POST /services/websites/v1/scheduled/count Auth

Site versions The owner's own repository for a folder project (GIT-HOSTING-PLAN.md step 4). POST /websites/v1/site-repo/{action} get | set { url

POST /services/websites/v1/site-repo/{action} Auth

SiteVersions

POST /services/websites/v1/site-versions/{action} Auth

Structures

Create Structure

POST /services/websites/v1/structures/create Auth

List Structures

POST /services/websites/v1/structures/all Auth

Get Structure

POST /services/websites/v1/structures/get Auth

Edit Structure

POST /services/websites/v1/structures/edit Auth

Delete Structure

POST /services/websites/v1/structures/delete Auth

Structures (cross-project)

Clone a structure (definition + posts + categories) across projects

POST /services/websites/v1/structures/clone Auth

Deep-copies the full content tree of a structure type. Idempotent by (website_id, identifier). Posts match on `unique_identifier`/`url`; categories match on `url`/`title`.

Structures - Categories

Batch Create/Update Structure Categories

POST /services/websites/v1/structures/{type}/categories/batch Auth

Sync batch support: if sync_batch is provided, all categories for this website+type get sync_batch=NULL first, then each synced category gets the batch value. Post-sync cleanup archives categories with NULL sync_batch.

Sync Cleanup — Archive categories not touched in the current sync batch

POST /services/websites/v1/structures/{type}/categories/sync-cleanup Auth

Create Structure Category

POST /services/websites/v1/structures/{type}/categories/create Auth

List Structure Categories

POST /services/websites/v1/structures/{type}/categories/all Auth

Get Structure Category

POST /services/websites/v1/structures/{type}/categories/get Auth

Edit Structure Category

POST /services/websites/v1/structures/{type}/categories/edit Auth

Delete Structure Category

POST /services/websites/v1/structures/{type}/categories/delete Auth

List Archived Structure Categories

POST /services/websites/v1/structures/{type}/categories/archived Auth

Flat list (no hierarchy) of soft-deleted categories for the archive UI.

Unarchive Structure Category

POST /services/websites/v1/structures/{type}/categories/unarchive Auth

Restores the soft-deleted category and its pivot rows. Same project-wide URL uniqueness as create — conflict returns suggested_url without restoring until confirm_rename=true.

Structures - Dynamic

Batch Create/Update Dynamic Structures

POST /services/websites/v1/structures/{type}/batch Auth

Accepts an array of items. Each item with 'id' is updated, items without 'id' are created. Runs in a single transaction for performance (~50x faster than individual calls). Security: validates every item's fields, scopes all queries to the authenticated project, and validates URL uniqueness.

Sync Cleanup — Archive items not touched in the current sync batch

POST /services/websites/v1/structures/{type}/sync-cleanup Auth

After a sync, call this with the sync_batch timestamp. Items where sync_batch IS NULL (not touched) get archived.

Create Dynamic Structure

POST /services/websites/v1/structures/{type}/create Auth

List Dynamic Structures

POST /services/websites/v1/structures/{type}/all Auth

List Archived Dynamic Structures

POST /services/websites/v1/structures/{type}/archived Auth

Unarchive Dynamic Structure

POST /services/websites/v1/structures/{type}/unarchive Auth

Restores the soft-deleted post and its category pivot rows. Same project-wide URL uniqueness as create — conflict returns suggested_url without restoring until confirm_rename=true.

Get Dynamic Structure

POST /services/websites/v1/structures/{type}/get Auth

Edit Dynamic Structure

POST /services/websites/v1/structures/{type}/edit Auth

Delete Dynamic Structure

POST /services/websites/v1/structures/{type}/delete Auth

Templates

Create Template

POST /services/websites/v1/templates/create Auth

List Templates

POST /services/websites/v1/templates/all Auth

List Archived Templates

POST /services/websites/v1/templates/archived Auth

Soft-deleted content partials (archived_at IS NOT NULL) for the template panel archive toggle.

Unarchive Template

POST /services/websites/v1/templates/unarchive Auth

Restores a soft-deleted partial and the components / component meta that TemplatesDeleteController cascaded.

Edit Template

POST /services/websites/v1/templates/edit Auth

Get Template

POST /services/websites/v1/templates/get Auth

Archive Template

POST /services/websites/v1/templates/archive Auth

Delete Template

POST /services/websites/v1/templates/delete Auth

Templates (cross-project)

Clone a template/partial from one project to another

POST /services/websites/v1/templates/clone Auth

Themes

Get Template Library - Theme templates for Plus button

POST /services/websites/v1/themes/templates/library Auth

GET /api/v1/templates/library Returns theme templates for the Plus button modal in page builder. Shows templates from installed themes (grouped by theme). Infrastructure templates are now loaded from /templates/all endpoint. Decision 14: Template Library Integration

POST /services/websites/v1/themes/templates/content Auth

Get Theme Marketplace - Browse available themes

POST /services/websites/v1/themes/marketplace Auth

Returns one theme per family with latest version details

Get Pages Library - Theme and infrastructure pages for creation

POST /services/websites/v1/pages/library Auth

POST /api/services/websites/v1/pages/library

Preview Theme Installation Data (Pages and Structures)

POST /services/websites/v1/themes/installation-preview Auth

POST /api/services/websites/v1/themes/installation-preview

Get Theme Layouts for Creation

POST /services/websites/v1/themes/layouts-for-creation Auth

POST /api/services/websites/v1/themes/layouts-for-creation

Themes Theme Uninstallation

Uninstall Theme - Remove theme installation from project

POST /services/websites/v1/themes/uninstall Auth

POST /api/services/websites/v1/themes/uninstall Handles two installation modes differently: - MANUAL: Simply deletes the project_themes record - SAMPLE_DATA: Returns error (TODO: Future implementation will handle page/layout cleanup)

Themes - User

Install Theme

POST /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

List Installed Themes

POST /services/websites/v1/themes/installed Auth

POST /api/v1/themes/installed Returns all themes installed in the current project with their metadata, version information, and installation details. Supports minimal flag for lightweight responses: - minimal=true: Returns only theme name, version number, image, theme_id, version_id, is_active - minimal=false (default): Returns full theme data with stats and metadata

Themes - Versions

Get Version History for Theme (Marketplace)

POST /services/websites/v1/themes/versions Auth

POST /api/services/websites/v1/themes/versions Returns approved, production-ready versions for marketplace display. Filters out dev versions, draft versions, and rejected versions. Each version is a separate project linked by parent_project_id.

Get Single Version Detail

POST /services/websites/v1/themes/version/detail Auth

POST /api/services/websites/v1/themes/version/detail Returns details for a specific theme version by version_id. Used for installation modals where only one version's info is needed.

Get Version History for Theme Owner/Publisher

POST /services/websites/v1/themes/versions/manage Auth

POST /api/services/websites/v1/themes/versions/manage Returns ALL versions for a theme (including dev, draft, pending, rejected). This is specifically for the theme owner to manage their versions. Unlike the marketplace API, this shows everything.

Update Selected Theme Version

POST /services/websites/v1/themes/versions/updated-selected Auth

POST /api/services/websites/v1/themes/versions/select Stores the user's selected theme version in user meta. When no version is selected, the system will use the first version (ordered desc).

Create New Theme Version - Full Project Duplication with Dev Mode

POST /services/websites/v1/themes/versions/create Auth

POST /api/services/websites/v1/themes/versions/create Creates a new version by duplicating the entire source project. Each version is an independent project with complete isolation. Dev Mode (Optional - 5% of advanced users): - When is_dev=true, only 'status' and 'theme_id' required - Dev versions NOT shown in marketplace - Only ONE dev version allowed per theme lineage - Only updates: theme_status, is_dev (inherits other fields from source) Production Version: - When is_dev=false or not provided, ALL marketplace fields required - Requires: version_name, description, theme_description, category, main_image, screenshots - Updates all marketplace metadata - Status 'draft' = work in progress, 'publish' = submit for admin approval

Resubmit Rejected Theme Version

POST /services/websites/v1/themes/versions/resubmit Auth

POST /api/services/websites/v1/themes/versions/resubmit Updates a rejected or draft theme version and resubmits for approval. Cannot change: source_project_id, version Can update: status, theme_short_description, theme_description, release_notes, category, tags, main_image, screenshots

Edit Draft Theme Version

POST /services/websites/v1/themes/versions/edit Auth

POST /api/services/websites/v1/themes/versions/edit Updates a draft theme version's marketplace metadata without changing approval status. Cannot change: source_project_id, version Can update: theme_short_description, theme_description, release_notes, category, tags, main_image, screenshots

Cancel Theme Version Submission

POST /services/websites/v1/themes/versions/cancel-submission Auth

POST /api/services/websites/v1/themes/versions/cancel-submission Cancels a pending submission by reverting the theme version back to draft status. Sets theme_status = 'draft' and approval_status = NULL.

Delete Theme Version

POST /services/websites/v1/themes/versions/delete Auth

POST /api/services/websites/v1/themes/versions/delete Deletes a theme version by soft-deleting the project. Only draft versions can be deleted. Cannot delete versions that are installed by any project or have child versions.

Deprecate Theme Version

POST /services/websites/v1/themes/versions/deprecate Auth

POST /api/services/websites/v1/themes/versions/deprecate Marks a published theme version as deprecated by setting theme_status = 'deprecated'. Only versions with approval_status = 'approved' can be deprecated.

Website Redirections

List All Redirections

POST /services/websites/v1/redirects/all Auth

Returns paginated redirections for the current website with search and sorting.

Get Redirection

POST /services/websites/v1/redirects/get Auth

Returns a single redirection by ID for the current website.

Create Redirection

POST /services/websites/v1/redirects/create Auth

Creates a new URL redirection for the current website.

Edit Redirection

POST /services/websites/v1/redirects/edit Auth

Updates an existing URL redirection for the current website.

Delete Redirection

POST /services/websites/v1/redirects/delete Auth

Soft-deletes a URL redirection for the current website.

Websites

Get Website

POST /services/websites/v1/websites/get Auth

Update Website Customization

POST /services/websites/v1/websites/update/customization Auth

Get Reuseable Customization

POST /services/websites/v1/websites/get/reuseable-customization Auth