Skip to main content
Questions or issues? Contact us at api-support@manus.ai. Manus agents can build web apps — see the Webapp feature for what the product can do. When an agent builds a site inside a task, it produces a website with its own version history and a hosted URL once published. The website.* endpoints manage those websites:
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.

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:
Deployment is asynchronous — website.publish returns immediately while the deploy runs in the background.

Other common flows

Ship an updated build. After the agent makes more changes (new checkpoints), call website.publish again — it always deploys the latest checkpoint. There is no way to pin an older checkpoint via this API. Browse version history.
Match each data[].version_id against published_version_id in the same response to find which checkpoint is currently live. Change metadata without redeploying.
Pass any combination of title and visibility — omitted fields are left unchanged. This does not trigger a new deployment, only a metadata update and a CDN refresh; it works even before the site has ever been published. Take a site offline. There is no public unpublish endpoint at this time. If you need to take a site down, contact api-support@manus.ai.

Reference

Anatomy of a website

Locating a website

All four endpoints accept either task_id or website_id — exactly one must be provided:
Passing both task_id and website_id — or neither — returns 400 invalid_argument. A session is expected to contain exactly one website; if more exist, the first is used.

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:
  1. Space URLhttps://{space_id}.manus.space. Always present for a published site.
  2. Sub-domain URLhttps://{sub_domain}.manus.space. Only when the owner has configured a sub-domain.
  3. Custom domainshttps://{custom_domain} for each active custom domain bound by the owner.
For a simple “open the site” flow, 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 own status (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.

website.publish vs. website.update

Errors