Atelier201 websiteJoin the waitlist
WorkspaceRun a command in the workspace
sites

Run a command in the workspace

A bash command in the project's root, on a working copy of the draft in the site's own container: rg, grep, sed, find, cat, node. A build of the project is refused (400): workspace:commit sends the files through the same checks as every change and starts the real build, whose errors getSiteBuild reports. No network, at most 300 s. Files it changes stay uncommitted (listed in uncommitted) until workspace:commit. The workspace follows the draft: another change carries your uncommitted edits over.

POST/v1/sites/{site_id}/workspace:run

Requires sites:write. Costs no credits. The path ends in /workspace:run.

The workspace is a shell on a working copy of the site’s draft, in the site’s own container, offline. Use it for what a shell does well: rg, grep, find, cat, sed -i, node, and npx astro build to try a build in seconds. The command runs in the project’s root as an unprivileged user, and there is no network.

What the command changes stays uncommitted. The response lists those changes in uncommitted, one per line in the style of git status (M src/pages/index.astro). Nothing reaches the history until you commit the workspace, and visitors see nothing until you publish.

command is at most 8000 characters. timeout_ms is between 1000 and 300000 and defaults to 60000: a command still running at that point is stopped and timed_out is true. A command that fails is not an API error: the call succeeds and exit_code is not 0. output holds stdout and stderr together; past 8 KB it keeps the start and the end and truncated is true.

The workspace follows the draft. When another change has moved the draft since your last command, your uncommitted edits are carried over and note says so, the same when the workspace had to be rebuilt.

A site that is still being created answers result_not_ready, and a suspended or deleting site answers conflict.

Authorizations

Authorizationbearerin headerrequired

Path parameters

site_idstringrequired

The site's id, or its slug (the address before .atelier201.page).

Body

application/jsonrequired
commandstringrequiredlength: 1–8000 chars

A bash command, run in the project's root on a working copy of the draft: rg, grep, sed, find, cat, node... No network. Files it changes stay uncommitted until workspace:commit, which builds them and reports any build error. A build of the project here is refused: it took 30 s and duplicated that build.

timeout_msintegerrange: 1000–300000

Default 60000. The command is stopped past it.

Response

application/json

Run a shell command on the site's workspace

dataobjectrequired
request_idstringrequired

Use these docs with your AI tools

An AI agent can read this documentation directly. You do not need an account or an API key. Everything here is public and read-only.

Query these docs via MCP

Recommended

Add this server to Claude, Claude Code, Cursor, Mistral, or any tool that supports MCP. Your agent can then search Atelier201 Docs documentation and read it in full, instead of answering from memory.

https://atelier201.com/docs/mcp
  • searchFind the passages that answer a question.
  • fetchRead one page in full, as Markdown.
  • list_pagesSee every page in this documentation.

Query these docs over HTTP

The same tools also work as plain web requests. Use this for scripts, or for any tool that does not support MCP. There is one endpoint per tool. Arguments go in the query string, and the answer comes back as JSON.

https://atelier201.com/docs/api/docs/search?query=custom+domain

Read the OpenAPI description. It is built from the same definitions as the tools, so it always matches what the endpoints do.

Read these docs as Markdown

Add .md to any page URL to get its Markdown source. You can also send the headerAccept: text/markdown to the page URL itself.

To read the whole documentation in one file, open llms-full.txt. For a short index of every page, open llms.txt.