---
title: "Operation coverage"
description: "Generated REST, CLI, and MCP coverage, required permissions, and explicit surface-specific exceptions."
canonical: "https://atelier201.com/docs/api/surfaces"
updated: "2026-11-06"
---

# Operation coverage

This reference is generated from the route registry and its surface mappings.
It describes the API version in this documentation, not the permissions of your credential.
Call `get_account`, `atelier201 account`, or `GET /v1/account` to check those.

## Discover the contract

- REST: read [OpenAPI](/docs/openapi.json). Each operation includes `x-atelier201-surfaces`.
- CLI: run `atelier201 help files read --json` for a command, or `atelier201 help --operation readSiteFile --json` for its exact REST schemas. This is the contract bundled with your installed CLI.
- MCP: read `atelier201://operations` for a compact index, then `atelier201://operations/{operation_id}` for one full contract. The complete document is `atelier201://openapi`. Clients without resource support can use their tools' schemas or public OpenAPI.
- Code Mode: `search` returns the same operations and surface mappings; a filtered search includes the full schemas.

All surfaces use the same service permissions. A command or tool being listed does not grant access.
Local filesystem commands, anonymous guest uploads, and interactive MCP cards differ intentionally.
The table records exceptions instead of implying that each interface accepts the same transport or output format.

## Capabilities

| Operation                | REST                                                         | CLI                                 | MCP                                                                                                                                                                                     | Permission              |
| ------------------------ | ------------------------------------------------------------ | ----------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------- |
| `getAccount`             | `GET /v1/account`                                            | `atelier201 account`                | `get_account`                                                                                                                                                                           | `account:read`          |
| `submitFeedback`         | `POST /v1/feedback`                                          | `atelier201 feedback send`          | `send_feedback`                                                                                                                                                                         | Authenticated, no scope |
| `getCredits`             | `GET /v1/credits`                                            | `atelier201 credits`                | `get_credit_balance`                                                                                                                                                                    | `account:read`          |
| `getUsage`               | `GET /v1/usage`                                              | `atelier201 usage`                  | `get_usage`                                                                                                                                                                             | `usage:read`            |
| `listSites`              | `GET /v1/sites`                                              | `atelier201 sites list`             | `list_sites`                                                                                                                                                                            | `sites:read`            |
| `createSite`             | `POST /v1/sites`                                             | `atelier201 sites create`           | `create_site`                                                                                                                                                                           | `sites:write`           |
| `getSite`                | `GET /v1/sites/{site_id}`                                    | `atelier201 sites get`              | `get_site`                                                                                                                                                                              | `sites:read`            |
| `updateSite`             | `PATCH /v1/sites/{site_id}`                                  | `atelier201 sites rename`           | `rename_site`                                                                                                                                                                           | `sites:write`           |
| `deleteSite`             | `DELETE /v1/sites/{site_id}`                                 | `atelier201 sites delete`           | `delete_site` Requires `confirm_name`: Agents must type back the site's name or slug before deletion. REST also supports direct administrator calls without that confirmation field.    | `sites:publish`         |
| `applySitePlan`          | `POST /v1/sites/{site_id}/plan:apply`                        | `atelier201 sites apply`            | `apply_site_plan`                                                                                                                                                                       | `sites:write`           |
| `listSiteFiles`          | `GET /v1/sites/{site_id}/files`                              | `atelier201 files list`             | `list_files`                                                                                                                                                                            | `sites:read`            |
| `readSiteFile`           | `GET /v1/sites/{site_id}/files/content`                      | `atelier201 files read`             | `read_file`                                                                                                                                                                             | `sites:read`            |
| `readSiteFiles`          | `POST /v1/sites/{site_id}/files/read`                        | `atelier201 files read-many`        | `read_files`                                                                                                                                                                            | `sites:read`            |
| `searchSiteFiles`        | `GET /v1/sites/{site_id}/search`                             | `atelier201 files search`           | `search_files`                                                                                                                                                                          | `sites:read`            |
| `commitSiteFiles`        | `POST /v1/sites/{site_id}/commits`                           | `atelier201 files commit`           | `edit_files`                                                                                                                                                                            | `sites:write`           |
| `runSiteCommand`         | `POST /v1/sites/{site_id}/workspace:run`                     | `atelier201 workspace run`          | `bash`                                                                                                                                                                                  | `sites:write`           |
| `getSiteWorkspace`       | `GET /v1/sites/{site_id}/workspace`                          | `atelier201 workspace diff`         | `get_workspace`                                                                                                                                                                         | `sites:write`           |
| `commitSiteWorkspace`    | `POST /v1/sites/{site_id}/workspace:commit`                  | `atelier201 workspace commit`       | `commit_workspace`                                                                                                                                                                      | `sites:write`           |
| `discardSiteWorkspace`   | `POST /v1/sites/{site_id}/workspace:discard`                 | `atelier201 workspace discard`      | `discard_workspace`                                                                                                                                                                     | `sites:write`           |
| `listSiteRevisions`      | `GET /v1/sites/{site_id}/revisions`                          | `atelier201 history list`           | `list_history`                                                                                                                                                                          | `sites:read`            |
| `compareSiteRevisions`   | `GET /v1/sites/{site_id}/compare`                            | `atelier201 history compare`        | `compare_revisions`                                                                                                                                                                     | `sites:read`            |
| `restoreSiteRevision`    | `POST /v1/sites/{site_id}/revisions/{revision}/restore`      | `atelier201 history restore`        | `restore_revision`                                                                                                                                                                      | `sites:write`           |
| `openChangeset`          | `POST /v1/sites/{site_id}/changesets`                        | `atelier201 changesets open`        | `open_changeset`                                                                                                                                                                        | `sites:write`           |
| `patchChangeset`         | `POST /v1/sites/{site_id}/changesets/{changeset_id}/patch`   | `atelier201 changesets stage`       | `stage_changes`                                                                                                                                                                         | `sites:write`           |
| `commitChangeset`        | `POST /v1/sites/{site_id}/changesets/{changeset_id}/commit`  | `atelier201 changesets commit`      | `commit_changeset`                                                                                                                                                                      | `sites:write`           |
| `abandonChangeset`       | `POST /v1/sites/{site_id}/changesets/{changeset_id}/abandon` | `atelier201 changesets abandon`     | `abandon_changeset`                                                                                                                                                                     | `sites:write`           |
| `startSiteBuild`         | `POST /v1/sites/{site_id}/builds`                            | `atelier201 builds start`           | `build_site`                                                                                                                                                                            | `sites:write`           |
| `listSiteBuilds`         | `GET /v1/sites/{site_id}/builds`                             | `atelier201 builds list`            | `list_builds`                                                                                                                                                                           | `sites:read`            |
| `getSiteBuild`           | `GET /v1/sites/{site_id}/builds/{build_id}`                  | `atelier201 builds get`             | `get_build`                                                                                                                                                                             | `sites:read`            |
| `readSitePage`           | `GET /v1/sites/{site_id}/pages`                              | `atelier201 pages read`             | `read_page`                                                                                                                                                                             | `sites:read`            |
| `getSiteBuildLog`        | `GET /v1/sites/{site_id}/builds/{build_id}/log`              | `atelier201 builds log`             | `get_build_log`                                                                                                                                                                         | `sites:read`            |
| `createSitePreview`      | `POST /v1/sites/{site_id}/previews`                          | `atelier201 previews create`        | `share_preview`                                                                                                                                                                         | `sites:write`           |
| `listSitePreviews`       | `GET /v1/sites/{site_id}/previews`                           | `atelier201 previews list`          | `list_previews`                                                                                                                                                                         | `sites:read`            |
| `revokeSitePreview`      | `DELETE /v1/sites/{site_id}/previews/{preview_id}`           | `atelier201 previews revoke`        | `revoke_preview`                                                                                                                                                                        | `sites:write`           |
| `getSiteAnalytics`       | `GET /v1/sites/{site_id}/analytics`                          | `atelier201 analytics`              | `get_site_analytics`                                                                                                                                                                    | `sites:read`            |
| `reviewSitePublish`      | `GET /v1/sites/{site_id}/publish/review`                     | `atelier201 publish review`         | `review_publish`                                                                                                                                                                        | `sites:read`            |
| `publishSite`            | `POST /v1/sites/{site_id}/publish`                           | `atelier201 publish`                | `publish_site`                                                                                                                                                                          | `sites:publish`         |
| `rollbackSite`           | `POST /v1/sites/{site_id}/rollback`                          | `atelier201 publish rollback`       | `rollback_site`                                                                                                                                                                         | `sites:publish`         |
| `unpublishSite`          | `POST /v1/sites/{site_id}/unpublish`                         | `atelier201 publish unpublish`      | `unpublish_site`                                                                                                                                                                        | `sites:publish`         |
| `listSitePublications`   | `GET /v1/sites/{site_id}/publications`                       | `atelier201 publish history`        | `list_publications`                                                                                                                                                                     | `sites:read`            |
| `listSiteDomains`        | `GET /v1/sites/{site_id}/domains`                            | `atelier201 domains list`           | `list_domains`                                                                                                                                                                          | `sites:read`            |
| `addSiteDomain`          | `POST /v1/sites/{site_id}/domains`                           | `atelier201 domains add`            | `add_domain`                                                                                                                                                                            | `domains:write`         |
| `checkSiteDomain`        | `POST /v1/sites/{site_id}/domains/{domain_id}/check`         | `atelier201 domains check`          | `check_domain`                                                                                                                                                                          | `domains:write`         |
| `removeSiteDomain`       | `DELETE /v1/sites/{site_id}/domains/{domain_id}`             | `atelier201 domains remove`         | `remove_domain`                                                                                                                                                                         | `domains:write`         |
| `setSiteAddress`         | `POST /v1/sites/{site_id}/address`                           | `atelier201 domains address`        | `set_site_address`                                                                                                                                                                      | `domains:write`         |
| `setSiteCanonicalDomain` | `POST /v1/sites/{site_id}/domains/{domain_id}/canonical`     | `atelier201 domains main`           | `set_main_domain`                                                                                                                                                                       | `domains:write`         |
| `getContentModel`        | `GET /v1/sites/{site_id}/content`                            | `atelier201 content model`          | `get_content_model`                                                                                                                                                                     | `sites:read`            |
| `listContentEntries`     | `GET /v1/sites/{site_id}/content/{collection}`               | `atelier201 content list`           | `list_entries`                                                                                                                                                                          | `sites:read`            |
| `getContentEntry`        | `GET /v1/sites/{site_id}/content/{collection}/{slug}`        | `atelier201 content get`            | `get_entry`                                                                                                                                                                             | `sites:read`            |
| `saveContentEntry`       | `PUT /v1/sites/{site_id}/content/{collection}/{slug}`        | `atelier201 content save`           | `save_entry`                                                                                                                                                                            | `sites:write`           |
| `deleteContentEntry`     | `DELETE /v1/sites/{site_id}/content/{collection}/{slug}`     | `atelier201 content delete`         | `delete_entry`                                                                                                                                                                          | `sites:write`           |
| `saveContentEntries`     | `POST /v1/sites/{site_id}/content:batch`                     | `atelier201 content save-many`      | `save_entries`                                                                                                                                                                          | `sites:write`           |
| `getSingleton`           | `GET /v1/sites/{site_id}/singletons/{name}`                  | `atelier201 content singleton`      | `get_singleton`                                                                                                                                                                         | `sites:read`            |
| `saveSingleton`          | `PUT /v1/sites/{site_id}/singletons/{name}`                  | `atelier201 content save-singleton` | `save_singleton`                                                                                                                                                                        | `sites:write`           |
| `replaceSiteText`        | `POST /v1/sites/{site_id}/text:replace`                      | `atelier201 content replace`        | `edit_text`                                                                                                                                                                             | `sites:write`           |
| `setContentField`        | `POST /v1/sites/{site_id}/fields`                            | `atelier201 content set`            | `set_field`                                                                                                                                                                             | `sites:write`           |
| `listSiteMedia`          | `GET /v1/sites/{site_id}/media`                              | `atelier201 media list`             | `list_media`                                                                                                                                                                            | `sites:read`            |
| `uploadSiteMedia`        | `POST /v1/sites/{site_id}/media`                             | `atelier201 media upload`           | `upload_media`                                                                                                                                                                          | `sites:write`           |
| `deleteSiteMedia`        | `DELETE /v1/sites/{site_id}/media`                           | `atelier201 media delete`           | `delete_media`                                                                                                                                                                          | `sites:write`           |
| `searchStockMedia`       | `GET /v1/sites/{site_id}/media/stock`                        | `atelier201 media stock search`     | `search_stock_media`                                                                                                                                                                    | `sites:read`            |
| `importStockMedia`       | `POST /v1/sites/{site_id}/media/stock`                       | `atelier201 media stock import`     | `import_stock_media`                                                                                                                                                                    | `sites:write`           |
| `placeSiteImage`         | `POST /v1/sites/{site_id}/images:place`                      | `atelier201 media place`            | `place_image`                                                                                                                                                                           | `sites:write`           |
| `listMediaModels`        | `GET /v1/media/models`                                       | `atelier201 media models`           | `list_media_models`                                                                                                                                                                     | `sites:read`            |
| `generateSiteMedia`      | `POST /v1/sites/{site_id}/media/generations`                 | `atelier201 media generate`         | `generate_media`                                                                                                                                                                        | `media:generate`        |
| `getSiteMediaGeneration` | `GET /v1/sites/{site_id}/media/generations/{generation_id}`  | `atelier201 media generation`       | `get_media_generation`                                                                                                                                                                  | `sites:read`            |
| `importSiteArchive`      | `POST /v1/sites/{site_id}/import`                            | `atelier201 site push`              | A project archive is a binary stream of up to 50 MB; a model cannot produce one through a tool call. Agents change files with edit\_files or a changeset; the CLI pushes whole folders. | `sites:write`           |
| `exportSiteArchive`      | `GET /v1/sites/{site_id}/export`                             | `atelier201 site pull`              | Returns a binary tar archive, which a tool result cannot carry usefully. Agents read files with read\_file; the CLI pulls the whole project.                                            | `sites:read`            |
| `listSkills`             | `GET /v1/skills`                                             | `atelier201 skills list`            | `list_skills`                                                                                                                                                                           | Public                  |
| `getSkill`               | `GET /v1/skills/{skill_id}`                                  | `atelier201 skills get`             | `get_skill`                                                                                                                                                                             | Public                  |
| `prepareGuestSite`       | `POST /v1/guest/sites`                                       | `atelier201 site push --guest`      | Before sign-in there is no OAuth, and remote MCP needs it before any tool runs. Agents use this HTTP endpoint (or the CLI) and hand the person the claim link.                          | Public                  |
| `importGuestSite`        | `POST /v1/guest/sites/{site_id}/import`                      | `atelier201 site push --guest`      | Part of the pre-account HTTP flow (see prepareGuestSite).                                                                                                                               | Public                  |
| `buildGuestSite`         | `POST /v1/guest/sites/{site_id}/builds`                      | `atelier201 site push --guest`      | Part of the pre-account HTTP flow (see prepareGuestSite).                                                                                                                               | Public                  |
| `getGuestSite`           | `GET /v1/guest/sites/{site_id}`                              | `atelier201 site push --guest`      | Part of the pre-account HTTP flow (see prepareGuestSite).                                                                                                                               | Public                  |
