website.* endpoints manage those websites:
- website.status — inspect the current title, publish state, live URL, and visibility
- website.listCheckpoints — read the current title and browse version history
- website.publish — deploy the latest checkpoint and return the current title
- website.update — change website configuration without redeploying
To have an agent build a website, create a task with task.create. Once the session has a website attached, the endpoints on this page take over.To have an agent edit a website it built earlier, see Edit a website in a new task.
Quickstart: publish a site
After the agent has built something (the task’s session now has a website), deploy it with one call and poll for the live URL:website.publish returns immediately while the deploy runs in the background.
The response does not echo visibility. Read website.status.visibility after the publish request to confirm the effective value.
Other common flows
Ship an updated build. After the agent makes more changes (new checkpoints), callwebsite.publish again — it always deploys the latest checkpoint. There is no way to pin an older checkpoint via this API. Pass visibility again on every republish when the site is not public; omitting it resets the site to public.
Publish for the owner and invited collaborators only. Pass "visibility": "private" when publishing:
title for the website’s current display title. Match each data[].version_id against published_version_id in the same response to find which checkpoint is currently live. The title is website-level metadata and does not belong to an individual checkpoint.
Change metadata without redeploying.
Edit a website in a new task
To have an agent change an existing website, create a new task with the top-levelwebsite field next to your instruction. This works the same way as attaching the website in the Manus app: the new task opens the website and edits it.
website.id is the same ID the website.* endpoints call website_id — read it from website.status or website.publish. If you only know the task that built the website, call website.status with that task_id. Do not use the id from artifact.list: it identifies the Library item and is not always the website ID. When the task finishes, call website.publish with the website ID to deploy the edits, unless auto_publish is enabled for the website. If the site is not public, pass its visibility again; omitting it resets the site to public (see Ship an updated build above).
Rules for the website field:
- Include an instruction.
message.contentmust contain non-empty text that describes the change: a plain string or a non-emptytextpart. Ahiddentext part also counts (see Hidden application context). A request with a website but no instruction is rejected, because the agent would not know what to change. task.createonly. task.sendMessage has nowebsitefield. The task stays attached to the website, so follow-up messages only need the instruction.- One website, always edited.
websitetakes a single website, and there is no reference-only mode. - Not a content part. Do not put the website inside
message.content; a{"type": "website"}content part is rejected. - Web websites you own.
website.idmust be a web website owned by the authorized user. Mobile apps and games are not accepted here. A Standard OAuth client with only thecreate_taskscope can use only websites whose source task it created — the same boundary asmessage.task_references.
Reference
Anatomy of a website
Locating a website
All four endpoints accept eithertask_id or website_id — exactly one must be provided:
Website access
Website access is evaluated for the user represented by the API key or OAuth token. The website owner can read and write it. Other callers inherit access from the website’s source task: read access allowswebsite.status and website.listCheckpoints, while write access allows website.publish and website.update.
For website.*, OAuth client scopes and client identity do not further restrict which websites the authorized user can access. This differs from task.*: a standard client with only create_task can operate a website whose source task was not created by that client, provided the authorized user has the required website access.
A request returns 403 permission_denied when the authorized user lacks the required access.
Site URLs
When a site is published,website.status returns site_urls — an array of every hostname the site can be reached on, ordered from default to most specific:
- Space URL —
https://{space_id}.manus.space. Always present for a published site. - Sub-domain URL —
https://{sub_domain}.manus.space. Only when the owner has configured a sub-domain. - Custom domains —
https://{custom_domain}for each active custom domain bound by the owner.
site_urls[0] is enough — it’s always the space URL. The array is empty whenever publish_status is not published.
Publish states
Checkpoint status vs. publish state
A checkpoint’s ownstatus (pending / success / failed / unspecified) only says whether the snapshot was generated successfully — a success checkpoint is not automatically live. To find the live version, compare website.status.version_id (or website.listCheckpoints.published_version_id) against data[].version_id.
Visibility
Sites may additionally cap the maximum visibility they accept — for example, a team-only site cannot be set to
public. Requests that exceed the allowed visibility return 403 permission_denied.