Platform Management API

Manage authentication, users, billing and platform-wide settings

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.

MCP Tokens

Create

POST /services/platforms/v1/mcp-tokens/create Auth

Create a USER-LEVEL, MCP-ONLY API token for the external MCP server (POST /api/mcp/wemasy). Two deliberate properties: - project_id stays NULL -> NOT locked to one project, so the agent can target ANY of the user's projects per call (multi-project). A project-scoped token would be hard-locked by AddProjectToRequestMiddleware and cannot switch. - abilities = ['mcp'] -> rejected on the rest of the API by AddProjectToRequestMiddleware (mcp ability but not '*'), so a leaked MCP token is useless outside the MCP endpoint. Least privilege. Gated by the per-user `mcp_enabled` flag (User::canUseMcp). The plaintext token is returned ONCE.

List

POST /services/platforms/v1/mcp-tokens/list Auth

List the current user's MCP tokens (user-level, `mcp` ability). NOT gated by canUseMcp so a user can still see + revoke existing tokens after the flag is turned off. Project-scoped tokens and full-access (`*`) tokens are excluded.

Revoke

POST /services/platforms/v1/mcp-tokens/revoke Auth

Revoke one of the current user's MCP tokens. Scoped to the user + verified to be an MCP token (user-level + `mcp` ability) so it can't touch other tokens.

API Tokens

Create API Token

POST /services/platforms/v1/api-tokens/create Auth

List API Tokens

POST /services/platforms/v1/api-tokens/list Auth

Revoke API Token

POST /services/platforms/v1/api-tokens/revoke Auth

Active Sessions

List Sessions This includes browser sessions, API tokens, etc

POST /services/platforms/v1/active-sessions/list Auth

Revoke Session

POST /services/platforms/v1/active-sessions/revoke Auth

Revoke All Sessions This will log out the user from all devices and revoke all API tokens

POST /services/platforms/v1/active-sessions/revoke-all Auth

Audit Logs

List Audit Logs

POST /services/platforms/v1/audit-logs/list Auth

Authentication

Login

POST /v1/login Public

Authenticate Login

POST /v1/authenticate Public

Create Account

POST /v1/create-account Public

Verify Email OTP

POST /v1/verify-email-otp Public

Rate limit: 5 attempts per email address and 10 attempts per IP address per 30 minutes.

Resend Email OTP

POST /v1/resend-email-otp Public

Rate limit: 5 requests per 30 minutes.

Send Verification Email

POST /v1/send-verification-email Public

Rate limit: 5 requests per 30 minutes.

Confirm Email

POST /v1/confirm-email Public

Forgot Password

POST /v1/forgot-password Public

Reset Password

POST /v1/reset-password Public

Setup Password (admin-invited account first login)

POST /v1/setup-password Public

Email me a login link

POST /v1/login-link/request Public

Always answers "if the address exists, a link is on its way", whether the account exists or not.

Send me a new link

POST /v1/login-link/renew Public

From the page of an expired or used link: a new link to the account of that link (never another address). Same answer as `request`.

Open a login link

POST /v1/login-link/open Public

New email code

POST /v1/login-link/resend-code Public

Verify the security step and log in

POST /v1/login-link/verify Public

Get Policy

POST /v1/get-policy Public

Logout

POST /v1/logout Auth

Send Verification Email

POST /services/platforms/v1/send-verification-email Auth

Rate limit: 5 requests per 30 minutes.

Authentication (Two Factor)

Create Security Email Code

POST /services/platforms/v1/user/get-security-email-code Auth

Validate Two Factor Auth

POST /services/platforms/v1/user/security-two-factor-validate-auth Auth

Security Verification

POST /services/platforms/v1/user/security-verification Auth

Verify Two Factor Code

POST /services/platforms/v1/user/verify-two-factor-code Auth

Update Security Authenticator

POST /services/platforms/v1/user/security-authenticator-update Auth

Generate Recovery Codes

POST /services/platforms/v1/user/regenerate-new-recovery-codes Auth

Save Recovery Codes

POST /services/platforms/v1/user/save-new-recovery-codes Auth

Billing

Get Billing Summary

POST /services/platforms/v1/billing/summary Auth

Get billing summary for projects owned by the authenticated user Returns aggregated data and only expired/near-expired/failed subscriptions

Calculate Checkout Tax

POST /services/platforms/v1/checkout/calculate-tax Auth

Calculate VAT for the current checkout state. Validates ONLY the inputs the tax calculation actually consumes (country, contact_type, vat_number, subtotal) plus the VIES VAT check when a company supplies a number. Other contact fields (name, address, phone, etc.) are intentionally NOT validated here — they don't influence the tax rate, and validating them mid-edit blocks the tax line from rendering while the user is still filling the form. Full field validation runs at the final `/domain-upgrade/checkout` POST.

List Invoices

POST /services/platforms/v1/invoices/all Auth

CheckoutVerify

Send the code to the account email

POST /services/platforms/v1/user/checkout-verify/send Auth

Check the code; on success the account email is verified

POST /services/platforms/v1/user/checkout-verify/confirm Auth

Community

Community Usage

POST /services/platforms/v1/community/usage Auth

Posts this month, published listings and members, each with the plan's limit (and extra packs).

Visitor Accounts Status

POST /services/platforms/v1/community/accounts/status Auth

Whether visitors of this project's site can sign up and log in.

Community Members

POST /services/platforms/v1/community/members/all Auth

The site's visitor accounts with their community roles, and the role requests that wait.

Approve A Role Request

POST /services/platforms/v1/community/members/approve Auth

Reject A Role Request

POST /services/platforms/v1/community/members/reject Auth

Give A Community Role

POST /services/platforms/v1/community/members/grant Auth

The owner makes a verified visitor account a moderator, business or organisation.

Take A Community Role Away

POST /services/platforms/v1/community/members/revoke Auth

Turn On Visitor Accounts

POST /services/platforms/v1/community/accounts/enable Auth

Visitors of the site can sign up (with email verification first) and log in: the account pages are added, nothing of the shop. No mail goes out from this.

Designer "Edit with AI" version history for one text field: list the drafts and applied texts

POST /services/platforms/v1/designer/paragraph/versions/list Auth
POST /services/platforms/v1/designer/paragraph/versions/save Auth

Designer Inline paragraph rewrite for the designer toolbar. Draft-then-apply; streams as server-sent events (status → thinking → text → done).

POST /services/platforms/v1/designer/paragraph/rewrite Auth

Feedback

Store Feedback Delegates to the unified support ticket system using the "feedback" channel

POST /services/platforms/v1/feedback/store Auth

Rate limit: 20 requests per user per 5 minutes.

List Feedbacks Backward-compatible endpoint — queries support_tickets filtered by the "feedback" channel and maps the response to match the original PlatformFeedback shape

POST /services/platforms/v1/feedback/list Auth

Feedback pop-up settings Whether the reward line is on (the promotion switch) and whether this account already got a reward

POST /services/platforms/v1/feedback/wall/config Auth

Send feedback One answer of the one-screen pop-up: the owner's own words. The ticket uses the logged-in account. Rate limit: 5 per user per hour

POST /services/platforms/v1/feedback/wall/store Auth

Geo

List Countries

GET /services/platforms/v1/geo/countries Public

List States

GET /services/platforms/v1/geo/countries/{iso2}/states Public

GrowthEventStore

POST /services/platforms/v1/events Auth

MCP OAuth

Check an authorization request for the consent screen

POST /services/platforms/v1/mcp-oauth/prepare Auth

Returns what the owner is asked to approve: the app name, where it will be sent back to, the owner's projects with the scopes each allows, and a signed consent token that binds the later approval to exactly these checked parameters.

Approve: one project, one scope

POST /services/platforms/v1/mcp-oauth/approve Auth

Returns the redirect_to URL (the registered redirect URI plus a one-time code).

Deny: sends the client back with error=access_denied

POST /services/platforms/v1/mcp-oauth/deny Auth

The AI apps this account has connected (OAuth), for the settings screen

POST /services/platforms/v1/mcp-oauth/grants Auth
POST /services/platforms/v1/mcp-oauth/grant-revoke Auth

NicheFix

POST /services/platforms/v1/onboarding/niche-fix/state Auth
POST /services/platforms/v1/onboarding/niche-fix/apply Auth
POST /services/platforms/v1/onboarding/niche-fix/keep Auth

Notifications

List Notifications

POST /services/platforms/v1/notifications/all Auth

Get Notification

POST /services/platforms/v1/notifications/get Auth

Mark Notifications as Read

POST /services/platforms/v1/notifications/mark-as-read Auth

Mark Notification as Unread

POST /services/platforms/v1/notifications/mark-as-unread Auth

Archive Notifications

POST /services/platforms/v1/notifications/archive Auth

Delete Notifications

POST /services/platforms/v1/notifications/delete Auth

List Archived Notifications

POST /services/platforms/v1/notifications/archived Auth

Unarchive Notifications

POST /services/platforms/v1/notifications/unarchive Auth

Onboarding Inline-AI "Generate with AI" for onboarding content steps (simple flow). Credits-gated via the existing AI ledger; SSE stream mirrors the outbox / ticket inline streams (status → thinking → text → done). The full AI session is NOT reachable here — this endpoint only fills a step's fields.

POST /services/platforms/v1/onboarding/content/generate Auth

OnboardingPreviewCopy

POST /services/platforms/v1/onboarding/preview-copy Auth

OutboxPreferencesGet

GET /services/platforms/v1/outbox/preferences Auth
POST /services/platforms/v1/outbox/preferences/get Auth

OutboxPreferencesUpdate

PATCH /services/platforms/v1/outbox/preferences Auth
POST /services/platforms/v1/outbox/preferences Auth

Partners Become a WEMASY partner (brain company/products/partners.md section 7

Apply as a partner (or see the existing application)

POST /services/platforms/v1/partners/apply Auth

The signed-in account's own partner record, or null

POST /services/platforms/v1/partners/me Auth

The partner dashboard (a first page in slice 1; clients and earnings follow)

POST /services/platforms/v1/partners/dashboard Auth

Platforms

Platform info

POST /services/platforms/v1/platforms/info Public

ProjectModules

POST /services/platforms/v1/project-modules/get Auth
POST /services/platforms/v1/project-modules/save Auth

The QR codes for the tables (print sheet). Only with the QR menu module on

POST /services/platforms/v1/project-modules/qr-codes Auth

Projects

Validate Invitation

POST /v1/validate-invitation Public

Join Invitation

POST /v1/join-invitation Public

Check Project Tool Access

POST /services/platforms/v1/project-tools-access Public

Get all projects

POST /services/platforms/v1/projects/all Auth

Search projects (project switcher)

POST /services/platforms/v1/projects/search Auth

Small, fast list for the project switcher (Cmd/Ctrl+K): the projects the signed-in user may open, filtered by title, domain or id. Same access rule as projects/all, but at most `limit` rows and only the fields the switcher shows, so it stays fast for an account with thousands of projects. Without a query it returns `recent_ids` first (the projects this browser opened last), then the most recently changed ones.

Update User Permission

POST /services/platforms/v1/user/project/update-user-permission Auth

Invite User to Project

POST /services/platforms/v1/user/project/invite Auth

Resend Project Invitation

POST /services/platforms/v1/user/project/invite/resend Auth

Delete Project Invitation

POST /services/platforms/v1/user/project/invite/delete Auth

Get Project Users

POST /services/platforms/v1/user/project/get-users Auth

Remove Project User

POST /services/platforms/v1/user/project/remove-project-user Auth

Permissions

GET /services/platforms/v1/user/project/permissions Auth

Get mail server settings

POST /services/platforms/v1/user/project/mail-settings/get Auth

The password is never returned, only whether one is stored.

Send a test email through an SMTP server

POST /services/platforms/v1/user/project/mail-settings/test Auth

Sends a short test email to `test_to` through the given settings. Leave `password` empty to use the stored password (only for the same host and username). On success these exact settings can be saved for 30 minutes.

Save mail server settings

POST /services/platforms/v1/user/project/mail-settings/save Auth

`mode=wemasy` goes back to WEMASY's mail server and removes the stored settings. `mode=custom` saves the project's own server; it must have passed a test with exactly these settings, unless only `use_forms` or `use_newsletter` changed.

MCP status of the project

POST /services/platforms/v1/user/project/mcp/status Auth

Whether MCP is on, whether this account may switch it on (owner on a paid plan for write), the project's MCP tokens and the limits every call has.

Switch MCP on or off for the project

POST /services/platforms/v1/user/project/mcp/update Auth

On needs the project owner (any plan). Off stops every token of the project at once and revokes them.

Create an MCP token for the project

POST /services/platforms/v1/user/project/mcp/token-create Auth

Returns the token once. `scope` read: only tools that read; write: every tool, changes still ask for a confirm round.

Revoke an MCP token of the project

POST /services/platforms/v1/user/project/mcp/token-revoke Auth

Get the email style

POST /services/platforms/v1/user/project/email-style/get Auth

`saved`: whether the project's mails use it. `values`: what the form edits (the site's logo and colour as a start when nothing is saved).

Save the email style

POST /services/platforms/v1/user/project/email-style/save Auth

From now on every mail of the project uses it. Empty fields fall back: the brand colour to the site's, the button to the brand colour.

Remove the email style: the project's mails get the standard look again

POST /services/platforms/v1/user/project/email-style/reset Auth

Preview a style

POST /services/platforms/v1/user/project/email-style/preview Auth

A sample mail (as a booking confirmation looks) and a sample newsletter with these values, not saved. HTML documents for an iframe.

Send a test mail

POST /services/platforms/v1/user/project/email-style/test Auth

A sample mail in the saved style to the signed-in owner, through the same frame as the project's other mails.

Get Project

POST /services/platforms/v1/projects/get Auth

Create a new project

POST /services/platforms/v1/projects/create Auth

Builds the Stripe session on the SPA handoff page for the project that create already made (after the billing contact is filled in)

POST /services/platforms/v1/projects/paid-checkout Auth

Update Project

POST /services/platforms/v1/projects/update Auth

Remember Last Visited Project

POST /services/platforms/v1/projects/update-selected Auth

Persists the user's last visited project so fresh logins and legacy un-prefixed URLs resolve to a sensible default. NOT the source of truth for the active project — the URL path is.

Transfer Project Ownership

POST /services/platforms/v1/projects/transfer Auth

Update Theme Status

POST /services/platforms/v1/projects/update-theme-status Auth

Update Website Availability Status

POST /services/platforms/v1/projects/update-website-status Auth

POST /api/services/platforms/v1/projects/update-website-status Sets a project's public availability to live / maintenance / offline. Stored in projects_meta (`website_disabled`, `maintenance_mode`); the generator reads these on the next deploy to serve a blank page (offline) or a maintenance page instead of the real site. The states are mutually exclusive, and it's fully reversible — set back to `live` and re-deploy to restore the normal site. This only persists the flag; the SPA triggers a redeploy afterwards so the change goes live.

POST /services/platforms/v1/project-usage/get Auth

Stripe checkout for one usage add-on (task 0045 part 3). Called when the owner clicks confirm in the add-on popup; nothing is charged before that and nothing counts before the payment confirms (webhook)

POST /services/platforms/v1/project-usage/addon/checkout Auth
POST /services/platforms/v1/project-mail-held/get Auth

"Send later": queued, sent by mail:release-held while today's room allows

POST /services/platforms/v1/project-mail-held/release Auth
POST /services/platforms/v1/project-mail-held/delete Auth

Ask for a higher daily limit: the number and why; WEMASY reviews the request

POST /services/platforms/v1/project-mail-held/request-increase Auth

Projects Every outside account of the project (Google

List the project's connections

POST /services/platforms/v1/user/project/connections/list Auth

`summary.attention`: accounts that need the owner (expiring, expired, failing, or a page or location still to choose). `tools`: where the owner can connect more accounts.

Projects The outside websites where this project's tracking snippet may run

Get the outside websites of the project

POST /services/platforms/v1/user/project/snippet-domains/get Auth

Save the outside websites of the project

POST /services/platforms/v1/user/project/snippet-domains/save Auth

Projects The project's business profile: the company's facts for the website

Get the business profile

POST /services/platforms/v1/user/project/business-profile/get Auth

`saved`: whether the project has the file. Until then `profile` is a first version from the facts the project had (`from_existing` says where each came from; `hints` holds what could not be filled in).

Save the business profile

POST /services/platforms/v1/user/project/business-profile/save Auth

Writes business/profile.json (one commit, none when nothing changed). The website shows it after the next publish; the AI uses it at once.

Preview what changes where

POST /services/platforms/v1/user/project/business-profile/preview Auth

For the profile in the form (not saved): the facts that change on the website, its JSON-LD organization node, what each connected Google Business Profile location has now and what a push would do per field, and the AI's view of the facts. `problems`: what is not valid yet.

Send the profile to Google Business Profile

POST /services/platforms/v1/user/project/business-profile/push Auth

The saved profile to one connected location: `fields` (name, phone, description, hours, special_hours), default every field that differs. Never an empty value.

Send the logo and cover photo to Google Business Profile

POST /services/platforms/v1/user/project/business-profile/photos/push Auth

The saved profile's media.logo and media.cover (https pictures) to one connected location through Google's media API: `kinds` (logo, cover), default every one that differs. A picture is checked first (JPG or PNG, 10 KB to 5 MB, a minimum size) and the location's media is read back to confirm it arrived. Never an empty picture; an unchanged one is skipped.

Send the description and banner to the YouTube channel

POST /services/platforms/v1/user/project/business-profile/youtube/push Auth

The saved profile's description (at most 1000 characters) and cover picture (the banner: JPG or PNG, 16:9, at least 2048x1152, at most 6 MB) to one connected channel: `fields` (description, banner), default each that differs; a description changed on YouTube is not overwritten unless asked for. Editing a channel needs the youtube.force-ssl permission: an account that has not given it answers 409 `scope_missing` (reconnect). The channel is read back to confirm (`verified`).

Send the about text, description and cover to the Facebook Page

POST /services/platforms/v1/user/project/business-profile/facebook/push Auth

The saved profile's short text (About, at most 255 characters), long text (Description) and cover picture (JPG or PNG, at least 400x150) to one connected Page: `fields` (about, description, cover), default each that differs; a text changed on Facebook is not overwritten unless asked for. Editing a Page needs pages_manage_metadata (Meta App Review): a Page that has not given it answers 409 `scope_missing` (reconnect). The Page is read back to confirm (`verified`). The Page's profile picture cannot be changed through the API.

SignupHandoff

POST /v1/signup-handoff/redeem Public

The setup page found no token and could not get one (31 Oct, users 4206 and 4268: the signup page reported goto_setup and nothing followed), or the visitor left / hid the tab / waited more than 8 s before the setup page started (user 4370; sent by the signup page with navigator.sendBeacon). Public, because without a token nothing else can speak. With a code the journey of the user it was issued to gets signup.setup_bounced (the code is left alone: a redeem that never reached us is still valid). Without a code there is nobody to name, so it is a log line and a daily counter

POST /v1/signup-handoff/report Public
POST /services/platforms/v1/signup-handoff/issue Auth

Smart Filters

Save Smart Filter

POST /services/platforms/v1/smart-filter/save Auth

Get Smart Filter

POST /services/platforms/v1/smart-filter/get Auth

Delete Smart Filter

POST /services/platforms/v1/smart-filter/delete Auth

Subscriptions

List Subscriptions

POST /services/platforms/v1/subscriptions/all Auth

Verify Subscription

POST /services/platforms/v1/subscriptions/verify Auth

POST /api/services/platforms/v1/subscriptions/verify

Cancel Subscription

POST /services/platforms/v1/subscriptions/cancel Auth

Upgrade Trial

POST /services/platforms/v1/subscriptions/upgrade-trial Auth

Used when: - User on active trial wants to pay early - Trial expired and user wants to reactivate with payment

Resume Subscription

POST /services/platforms/v1/subscriptions/resume-cancelled Auth

Subscribe to Tool

POST /services/platforms/v1/subscriptions/subscribe-tool Auth

Subscribe to a new tool for existing project. Supports BOTH trial and paid flows: - trial=true: Create trial subscription immediately (if eligible) - trial=false: Create paid subscription with Stripe checkout

POST /services/platforms/v1/subscriptions/checkout-gateways Auth

Request a refund

POST /services/platforms/v1/subscriptions/refund/request Auth

Rate limit: 5 requests per user per 10 minutes — prevents accidental double-submits from impatient button-clickers and rules out abuse loops.

List my refund requests

POST /services/platforms/v1/subscriptions/refund/list Auth

Cancel my refund request

POST /services/platforms/v1/subscriptions/refund/cancel Auth

Domain Upgrade Checkout

POST /services/platforms/v1/domain-upgrade/checkout Auth

Support

List Support Channels

POST /services/platforms/v1/support/channels Auth

Create Support Ticket

POST /services/platforms/v1/support/tickets/store Auth

Rate limit: 10 requests per user per 5 minutes.

List Support Tickets

POST /services/platforms/v1/support/tickets/list Auth

List My Support Tickets

POST /services/platforms/v1/support/tickets/my-list Auth

Get Support Ticket Detail

POST /services/platforms/v1/support/tickets/detail Auth

Reply to Support Ticket

POST /services/platforms/v1/support/tickets/reply Auth

Download a ticket attachment (the ticket's owner or WEMASY support)

POST /services/platforms/v1/support/tickets/attachments/download Auth

Update Support Ticket

POST /services/platforms/v1/support/tickets/update Auth

ThemePreviewRedirect

GET /v1/themes/preview/{slug}/{layout} Public

User

Get User

POST /services/platforms/v1/user/get Auth

Accept Policy

POST /services/platforms/v1/user/policy-acceptance Auth

Update User Details

POST /services/platforms/v1/user/update-details Auth

Send Update Email Token

POST /services/platforms/v1/user/update-email-sendtoken Auth

Rate limit: 5 attempts per email address and 5 attempts per IP address per 60 minutes.

Verify Update Email

POST /services/platforms/v1/user/update-email-via-token Auth

Update Password

POST /services/platforms/v1/user/update-password Auth

Update Language

POST /services/platforms/v1/user/update-language Auth

Update Timezone

POST /services/platforms/v1/user/update-timezone Auth

Update Editor Settings

POST /services/platforms/v1/user/update-editor-settings Auth

Update Editor Mode

POST /services/platforms/v1/user/update-editor-mode Auth

Saves the user's editor mode preference to user metadata

Update Sidebar Layout Mode

POST /services/platforms/v1/user/update-sidebar-layout-mode Auth

Saves the user's sidebar layout mode preference to user metadata

Update Designer Workspace Mode

POST /services/platforms/v1/user/update-designer-workspace-mode Auth

Saves whether the sitebuilder shell shows Manual designer tools or the inline AI workspace. Same user-meta pattern as sidebar_layout_mode / editor_mode so refresh and new tabs restore the last choice.

Dismiss Widget Teaser

POST /services/platforms/v1/user/dismiss-widget-teaser Auth

WhatsApp follow-up consent: read

POST /services/platforms/v1/user/whatsapp-optin/get Auth

Whether the signed-in user agreed to get their website link and tips on WhatsApp, on which number, and which consent text version they saw.

WhatsApp follow-up consent: give or withdraw

POST /services/platforms/v1/user/whatsapp-optin Auth

`opt_in: true` needs the user's own WhatsApp number (country code first). `opt_in: false` withdraws. Every change is kept as a consent record.

Hide or show a product hero

POST /services/platforms/v1/user/update-hero-dismissed Auth

Remembers, per user and on every device, which product pages show their hero small (title and buttons only). Same user-meta pattern as sidebar_layout_mode; user/get returns the list as `dismissed_heroes`.

UserDeviceTokenRegister

Register a mobile push device token for the authenticated user

POST /services/platforms/v1/user/device-token Auth

Prefer auto-registration via PushDeviceTokenMiddleware (cookie or X-Wemasy-Device-* headers). This endpoint is the explicit fallback used by the native shells after APNs/FCM token is available.

VerifyEmailRequest

POST /services/platforms/v1/user/verify-email/request Auth

Workspaces

List Workspaces

POST /services/platforms/v1/workspaces/all Auth

Returns all workspaces the authenticated user owns within the current platform, with a project count per workspace.

Create Workspace

POST /services/platforms/v1/workspaces/create Auth

Update Workspace

POST /services/platforms/v1/workspaces/update Auth

Delete Workspace

POST /services/platforms/v1/workspaces/delete Auth

Soft-deletes the workspace and unassigns all its projects (sets projects.workspace_id = NULL). Projects are NEVER deleted.

Assign Projects to Workspace

POST /services/platforms/v1/workspaces/assign-projects Auth

Bulk-move projects into a workspace, or unassign them by passing workspace_id = null.

Enqueue Workspace Publish

POST /services/platforms/v1/workspaces/publish-queue/enqueue Auth

Add projects to the durable workspace publish queue. Processing continues on the server (max 2 concurrent per workspace) even if the browser closes.

Workspace Publish Queue Status

POST /services/platforms/v1/workspaces/publish-queue/status Auth

Returns durable queue rows for a workspace (pending / running / recent terminal). Safe to poll after refresh — the queue is not browser-local.

Cancel Workspace Publish Queue Item

POST /services/platforms/v1/workspaces/publish-queue/cancel Auth

Removes a pending site from the queue, or cancels an in-flight deploy that this queue started.