Website Builder API
Create your site without code
Blocks
Create Block
/services/websites/v1/blocks/create
Auth
List Blocks
/services/websites/v1/blocks/all
Auth
Get Block
/services/websites/v1/blocks/get
Auth
Edit Block
/services/websites/v1/blocks/edit
Auth
Delete Block
/services/websites/v1/blocks/delete
Auth
Set Block Content
/services/websites/v1/blocks/set-content
Auth
ComponentVersions
/services/websites/v1/versions/list
Auth
/services/websites/v1/versions/get
Auth
/services/websites/v1/versions/revert
Auth
/services/websites/v1/versions/delete
Auth
/services/websites/v1/versions/latest
Auth
Components
Create Component
/services/websites/v1/components/create
Auth
Note: This endpoint is not used anywhere currently.
Add Component to Block
/services/websites/v1/components/add-to
Auth
Change Component Type
/services/websites/v1/components/change-to
Auth
Delete Component
/services/websites/v1/components/delete
Auth
Set Component Content
/services/websites/v1/components/set-content
Auth
Update Component Order
/services/websites/v1/components/update-order
Auth
Duplicate Component
/services/websites/v1/components/duplicate
Auth
Unlink Component
/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
/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
/services/websites/v1/components/paste
Auth
Export Component
/services/websites/v1/components/export
Auth
Import Component
/services/websites/v1/components/import
Auth
Update Custom Fields
/services/websites/v1/components/update-custom-fields
Auth
Deployment
Deploy Website
/services/websites/v1/websites/deploy
Auth
Publish Modes
/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
/services/websites/v1/websites/deployment/status
Auth
Get Domain Status
/services/websites/v1/websites/deployment/domain/status
Auth
Update Deployment Domain
/services/websites/v1/websites/deployment/domain/update
Auth
Check Domain DNS
/services/websites/v1/websites/deployment/domain/dns-check
Auth
Own domain: status
/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
/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
/services/websites/v1/websites/reset-deployment
Auth
Cancel Deployment
/services/websites/v1/websites/cancel-deployment
Auth
Get Auto-Publish Schedule
/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
/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
/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
/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
/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
/services/websites/v1/websites/generator/use-new
Auth
Rollback Website to Previous Version
/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
/services/websites/v1/websites/setup-wemasy-domain
Auth
Saves wemasy domain to projects table and optionally switches to it
Switch Domain Type
/services/websites/v1/websites/switch-domain-type
Auth
Switches active domain between custom and wemasy
Check DNS Propagation (API Endpoint)
/services/websites/v1/websites/check-domain-propagation
Auth
Checks immediately and dispatches background job for automatic checking if not verified
Confirm DNS Records Added
/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
/services/websites/v1/websites/dns-settings
Auth
Returns the DNS records needed for the custom domain, along with the current DNS verification status.
/services/websites/v1/websites/domain-unlock/release
Auth
DeploymentSettings
/services/websites/v1/deployment-settings/get
Auth
/services/websites/v1/deployment-settings/update
Auth
Domain forward
The project's forward (null when none), its DNS records and redirect counts
/services/websites/v1/domain-forward/get
Auth
Create or update the forward. A new forward on a normal project needs convert_project
/services/websites/v1/domain-forward/save
Auth
Check DNS now; when it points to us, (re)write the vhost and certificate in the background
/services/websites/v1/domain-forward/check
Auth
Remove the forward. The project becomes a normal (free) project again
/services/websites/v1/domain-forward/delete
Auth
File Uploads
Get Large File Upload Signed URL
/services/websites/v1/files/get/signed-url
Auth
Get Large Uploaded Files
/services/websites/v1/files/get
Auth
Delete Large Uploaded File
/services/websites/v1/files/delete
Auth
Forms
Where a form is embedded (pages, templates/layouts, partials)
/services/websites/v1/forms/usage
Auth
Forms (cross-project)
Clone a form from one project to another
/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
/services/websites/v1/layouts/create
Auth
Create Layout from Theme
/services/websites/v1/layouts/create-from-theme
Auth
POST /api/services/websites/v1/layouts/create-from-theme
List Layouts
/services/websites/v1/layouts/all
Auth
Edit Layout
/services/websites/v1/layouts/edit
Auth
Get Layout
/services/websites/v1/layouts/get
Auth
Update Layout Templates
/services/websites/v1/layouts/update-templates
Auth
Archive Layout
/services/websites/v1/layouts/archive
Auth
List Archived Layouts
/services/websites/v1/layouts/archived
Auth
Soft-deleted layouts (archived_at IS NOT NULL) for the management sidebar archive toggle.
Unarchive Layout
/services/websites/v1/layouts/unarchive
Auth
Restores a soft-deleted layout and the header/footer/content components (+ component meta) that LayoutsDeleteController cascaded.
Delete Layout
/services/websites/v1/layouts/delete
Auth
Layouts (cross-project)
Clone a layout from one project to another
/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
/services/websites/v1/media/delete
Auth
MediaFile
/services/websites/v1/media/file
Auth
MediaGet
/services/websites/v1/media/get
Auth
MediaList
/services/websites/v1/media/list
Auth
MediaPermanentDelete
/services/websites/v1/media/permanent-delete
Auth
MediaRegister
/services/websites/v1/media/register
Auth
MediaRemoveBackground
/services/websites/v1/media/remove-background
Auth
MediaUpdate
/services/websites/v1/media/update
Auth
MediaUpload
/services/websites/v1/media/upload
Auth
MediaUsage
/services/websites/v1/media/usage
Auth
Menus
List Menus
/services/websites/v1/menus/all
Auth
Menus Get
/services/websites/v1/menus/get
Auth
Edit Menu
/services/websites/v1/menus/edit
Auth
Create Menu
/services/websites/v1/menus/create
Auth
Delete Menu
/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
/services/websites/v1/menus/usage
Auth
Menus (cross-project)
Clone a menu from one project to another
/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
/services/websites/v1/menus/fix-dead-links
Auth
Page Not Found
List Page Not Found Records
/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
/services/websites/v1/page-not-found/delete
Auth
Soft-deletes a 404 monitoring record.
Pages
List Pages
/services/websites/v1/pages/all
Auth
Get Page Sections Summary
/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
/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
/services/websites/v1/pages/create
Auth
Create Page from Source (Theme or Infrastructure)
/services/websites/v1/pages/create-from-source
Auth
POST /api/services/websites/v1/pages/create-from-source
Get Page
/services/websites/v1/pages/get
Auth
Edit Page
/services/websites/v1/pages/edit
Auth
Update Page Template
/services/websites/v1/pages/update-template
Auth
Archive Page
/services/websites/v1/pages/archive
Auth
List Archived Pages
/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
/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
/services/websites/v1/pages/delete
Auth
Duplicate Page
/services/websites/v1/pages/duplicate
Auth
Export Page
/services/websites/v1/pages/export
Auth
Import Page
/services/websites/v1/pages/import
Auth
Pages (cross-project)
Clone a page from one project to another (with its layout)
/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
/services/websites/v1/secured/page-designer/get
Public
Get Page Designer Data
/services/websites/v1/page-designer/get
Auth
Project Duplicate
Duplicate Project
/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)
/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
/services/websites/v1/search
Public
Settings
Get Product Pricing List
/services/websites/auth/v1/pricing
Auth
Get All Available Pages
/services/websites/v1/pages/available-indexed
Auth
Returns all indexable content (pages, structures, webshop items) where no_index is 0 or null
List Forms
/services/websites/v1/forms/all
Auth
Get all available Google Fonts
/services/websites/v1/fonts/all
Auth
Manually trigger thumbnail regeneration for a page, template, or layout
/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
/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
/services/websites/v1/site-repo/{action}
Auth
SiteVersions
/services/websites/v1/site-versions/{action}
Auth
Structures
Create Structure
/services/websites/v1/structures/create
Auth
List Structures
/services/websites/v1/structures/all
Auth
Get Structure
/services/websites/v1/structures/get
Auth
Edit Structure
/services/websites/v1/structures/edit
Auth
Delete Structure
/services/websites/v1/structures/delete
Auth
Structures (cross-project)
Clone a structure (definition + posts + categories) across projects
/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
/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
/services/websites/v1/structures/{type}/categories/sync-cleanup
Auth
Create Structure Category
/services/websites/v1/structures/{type}/categories/create
Auth
List Structure Categories
/services/websites/v1/structures/{type}/categories/all
Auth
Get Structure Category
/services/websites/v1/structures/{type}/categories/get
Auth
Edit Structure Category
/services/websites/v1/structures/{type}/categories/edit
Auth
Delete Structure Category
/services/websites/v1/structures/{type}/categories/delete
Auth
List Archived Structure Categories
/services/websites/v1/structures/{type}/categories/archived
Auth
Flat list (no hierarchy) of soft-deleted categories for the archive UI.
Unarchive Structure Category
/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
/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
/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
/services/websites/v1/structures/{type}/create
Auth
List Dynamic Structures
/services/websites/v1/structures/{type}/all
Auth
List Archived Dynamic Structures
/services/websites/v1/structures/{type}/archived
Auth
Unarchive Dynamic Structure
/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
/services/websites/v1/structures/{type}/get
Auth
Edit Dynamic Structure
/services/websites/v1/structures/{type}/edit
Auth
Delete Dynamic Structure
/services/websites/v1/structures/{type}/delete
Auth
Templates
Create Template
/services/websites/v1/templates/create
Auth
List Templates
/services/websites/v1/templates/all
Auth
List Archived Templates
/services/websites/v1/templates/archived
Auth
Soft-deleted content partials (archived_at IS NOT NULL) for the template panel archive toggle.
Unarchive Template
/services/websites/v1/templates/unarchive
Auth
Restores a soft-deleted partial and the components / component meta that TemplatesDeleteController cascaded.
Edit Template
/services/websites/v1/templates/edit
Auth
Get Template
/services/websites/v1/templates/get
Auth
Archive Template
/services/websites/v1/templates/archive
Auth
Delete Template
/services/websites/v1/templates/delete
Auth
Templates (cross-project)
Clone a template/partial from one project to another
/services/websites/v1/templates/clone
Auth
Themes
Get Template Library - Theme templates for Plus button
/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
/services/websites/v1/themes/templates/content
Auth
Get Theme Marketplace - Browse available themes
/services/websites/v1/themes/marketplace
Auth
Returns one theme per family with latest version details
Get Pages Library - Theme and infrastructure pages for creation
/services/websites/v1/pages/library
Auth
POST /api/services/websites/v1/pages/library
Preview Theme Installation Data (Pages and Structures)
/services/websites/v1/themes/installation-preview
Auth
POST /api/services/websites/v1/themes/installation-preview
Get Theme Layouts for Creation
/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
/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
/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
/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)
/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
/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
/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
/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
/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
/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
/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
/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
/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
/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
/services/websites/v1/redirects/all
Auth
Returns paginated redirections for the current website with search and sorting.
Get Redirection
/services/websites/v1/redirects/get
Auth
Returns a single redirection by ID for the current website.
Create Redirection
/services/websites/v1/redirects/create
Auth
Creates a new URL redirection for the current website.
Edit Redirection
/services/websites/v1/redirects/edit
Auth
Updates an existing URL redirection for the current website.
Delete Redirection
/services/websites/v1/redirects/delete
Auth
Soft-deletes a URL redirection for the current website.
Websites
Get Website
/services/websites/v1/websites/get
Auth
Update Website Customization
/services/websites/v1/websites/update/customization
Auth
Get Reuseable Customization
/services/websites/v1/websites/get/reuseable-customization
Auth