# Cancel API Box Snapshot build Source: https://docs.continuouslabs.ai/api-reference/apibox-snapshots/cancel-api-box-snapshot-build /openapi/public.yaml post /v1/apibox-snapshots/{id}/cancel Requests cancellation of a pending or active build and returns the Snapshot without waiting for the build to stop. Get the Snapshot until its status leaves pending or building. The build can finish before cancellation takes effect. A Snapshot whose build has settled is returned unchanged. # Clone API Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/apibox-snapshots/clone-api-box-snapshot /openapi/public.yaml post /v1/apibox-snapshots/{id}/clone Creates a ready copy of a ready API Box Snapshot in another workspace, without a build. The clone has a new ID and the source's artifact, documents and saved state; the source is unchanged. The clone records no credentials, since they belong to the source workspace, and no parent or source Snapshot. The source is the caller's workspace: an API key's own workspace, or X-Workspace-Id for a session. An API key may clone into any other workspace of its organization. # Create API Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/apibox-snapshots/create-api-box-snapshot /openapi/public.yaml post /v1/apibox-snapshots Starts an asynchronous build and returns the API Box Snapshot with status pending. Get the Snapshot until its status is ready, failed or canceled; API Boxes start from a ready one. The build is a Simulator build in api mode, run in real time: the built service has no simulated clock, and its scheduled work runs at the first request at or after its time. Builds queue with Simulator builds and count toward the same quotas. Send multipart/form-data with a JSON part named request, a file part named spec with the OpenAPI, WSDL or GraphQL document, and optional file parts named document with vendor documentation. To build on a ready Snapshot, set parent_id; the spec part is then optional. # Delete API Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/apibox-snapshots/delete-api-box-snapshot /openapi/public.yaml delete /v1/apibox-snapshots/{id} Deletes an API Box Snapshot. A build that is still pending or building is canceled first. A Snapshot that API Boxes started from or MCP Box Snapshots were built against returns 409 apibox_snapshot_in_use; delete those first. While a build that names it as parent_id is pending or building, it returns 409 apibox_snapshot_parent_in_use; retry after the build finishes. Catalog Snapshots cannot be deleted. # Get API Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/apibox-snapshots/get-api-box-snapshot /openapi/public.yaml get /v1/apibox-snapshots/{id} Returns an API Box Snapshot of the workspace or the catalog, and its build status. # List API Box Snapshots Source: https://docs.continuouslabs.ai/api-reference/apibox-snapshots/list-api-box-snapshots /openapi/public.yaml get /v1/apibox-snapshots Returns the workspace's API Box Snapshots and the catalog's, newest first. Results can be filtered by source and status, and by the API Box a Snapshot was saved from. # Resume API Box Snapshot build Source: https://docs.continuouslabs.ai/api-reference/apibox-snapshots/resume-api-box-snapshot-build /openapi/public.yaml post /v1/apibox-snapshots/{id}/resume Resumes a build that waits, as build.waiting reports: at QA because its live credentials were rejected, or for more time after it used its time limit. For a credential wait, refresh each credential it names with PATCH /v1/credentials/{id} first: QA then runs again with their current values, and the build goes on to finalize. For a wait for more time, send add_seconds: the build continues where it stopped, with that much time from the resume. Returns the Snapshot, still building. A wait does not count toward the build's time limit: a build resumed from a credential wait has the time it had left when it began waiting. A build that is not waiting returns 409 apibox_snapshot_not_waiting. # Update API Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/apibox-snapshots/update-api-box-snapshot /openapi/public.yaml patch /v1/apibox-snapshots/{id} Renames an API Box Snapshot or replaces its metadata. Omitted fields keep their current values. The built service does not change. Catalog Snapshots cannot be updated. # Create API Box Source: https://docs.continuouslabs.ai/api-reference/apibox/create-api-box /openapi/public.yaml post /v1/apibox Creates an API Box from a ready API Box Snapshot and starts it. It returns at once with status starting and the API Box's token; get the API Box until it is running. Send the token in X-Continuous-Token on each request to the API Box's endpoint. The token lasts as long as the API Box, and its get returns it again. Each API Box has its own state, and runs in real time. # Delete API Box Source: https://docs.continuouslabs.ai/api-reference/apibox/delete-api-box /openapi/public.yaml delete /v1/apibox/{id} Deletes an API Box, running or stopped, with its state. Its runtime is released after the response. An API Box that MCP Boxes front returns 409 apibox_in_use; delete them first. # Get API Box Source: https://docs.continuouslabs.ai/api-reference/apibox/get-api-box /openapi/public.yaml get /v1/apibox/{id} Returns an API Box, its status and its connection: its endpoint and token, whether it is running or stopped. Requests reach it only while it is running. # List API Box steps Source: https://docs.continuouslabs.ai/api-reference/apibox/list-api-box-steps /openapi/public.yaml get /v1/apibox/{id}/steps Lists the API Box's steps in order. Each request that changed state is one step; a request that only reads registers none. An API Box that is not running returns 409 apibox_stopped. # List API Boxes Source: https://docs.continuouslabs.ai/api-reference/apibox/list-api-boxes /openapi/public.yaml get /v1/apibox Returns the workspace's API Boxes, newest first. Results can be filtered by status and Snapshot. # Start API Box Source: https://docs.continuouslabs.ai/api-reference/apibox/start-api-box /openapi/public.yaml post /v1/apibox/{id}/start Starts a stopped API Box from the state its stop saved, and returns at once with status starting; get the API Box until it is running. Its token stays the same; its get returns it. A running, starting or stopping API Box returns 409 apibox_not_stopped. # Stop API Box Source: https://docs.continuouslabs.ai/api-reference/apibox/stop-api-box /openapi/public.yaml post /v1/apibox/{id}/stop Stops a running API Box: it saves its state, and releases its runtime; its token stays for the next start. It returns at once with status stopping; get the API Box until it is stopped. A stopped API Box is returned unchanged; a starting one returns 409 apibox_starting. # Update API Box Source: https://docs.continuouslabs.ai/api-reference/apibox/update-api-box /openapi/public.yaml patch /v1/apibox/{id} Renames an API Box or replaces its metadata. Omitted fields keep their current values. # Authentication Source: https://docs.continuouslabs.ai/api-reference/authentication Send an API key as a Bearer token to /v1 routes, and a Box or Simulation token to that Box or Simulation's endpoint. ## API keys Send a Continuous API key on every `/v1` operation: ```text theme={null} Authorization: Bearer ``` There is one security scheme and no scopes or roles. A key resolves to exactly one workspace, so no workspace header is needed. Lists and reads return that workspace's resources plus the Continuous catalog's Simulators and API Box and Web Box Snapshots; catalog resources cannot be changed or deleted (`403 auth_forbidden`). The clone operations reach beyond the key's workspace: `POST /v1/simulators/{id}/clone` and `POST /v1/{apibox,webbox,mcpbox}-snapshots/{id}/clone` copy a Simulator or Box Snapshot from the key's workspace into the `target_workspace_id` their body names, which must belong to the key's organization. A workspace of another organization answers `403 auth_forbidden`. Create API keys in [the app](https://app.continuouslabs.ai) under **Settings**, then **API keys**. Key management has no public API. See [Errors](/api-reference/errors) for authentication failures and recovery. ## Box tokens Send an API Box's or MCP Box's token to its `endpoint` in `X-Continuous-Token`. Create returns the token, and the Box's get returns it again in its `connection`. It lasts until the Box is deleted and never authenticates a `/v1` route. A Web Box has no token: anyone with its URL can open it. ## Simulation tokens Send a Simulation token to the Simulation's data-plane `endpoint`: ```text theme={null} X-Continuous-Simulation-Token: ``` The token never authenticates a `/v1` route. Each Simulation has one token. Create and start return it; ordinary reads omit it. It does not expire, and stop and restart keep it. `GET /v1/simulations/{id}/token` returns it, even while the Simulation is stopped. `POST /v1/simulations/{id}/token/regenerate` replaces it, and deleting the Simulation ends it. See [Credentials](/concepts/simulations#credentials). A missing or rejected token, including one that regeneration replaced, answers `401 auth_invalid` with the response header `X-Continuous-Simulation-Token-Rejected: true`. A stopped Simulation answers `409 simulation_stopped` before the token is checked. See [Send requests to a Simulation](/concepts/data-plane) for the other data-plane responses. # Create credential Source: https://docs.continuouslabs.ai/api-reference/credentials/create-credential /openapi/public.yaml post /v1/credentials Stores a connection to a real system: an API base URL and the header that carries the credential, with either the header value or an OAuth 2.0 client whose access token the API gets and renews; or a Web App login with its sign-in URL, which a person then signs in to by hand in the console. Returns the credential without its value. # Delete credential Source: https://docs.continuouslabs.ai/api-reference/credentials/delete-credential /openapi/public.yaml delete /v1/credentials/{id} Deletes a credential and its stored value. # Get credential Source: https://docs.continuouslabs.ai/api-reference/credentials/get-credential /openapi/public.yaml get /v1/credentials/{id} Returns a credential without its value. # List credentials Source: https://docs.continuouslabs.ai/api-reference/credentials/list-credentials /openapi/public.yaml get /v1/credentials Returns the workspace's credentials, newest first. Credential values are never returned. # Update credential Source: https://docs.continuouslabs.ai/api-reference/credentials/update-credential /openapi/public.yaml patch /v1/credentials/{id} Renames a credential, changes its base URL and header or its login, or replaces its value or its OAuth 2.0 client. An API credential can move between a value and an OAuth client; a login stays a login. Omitted fields keep their current values. # Errors Source: https://docs.continuouslabs.ai/api-reference/errors Every error is an application/problem+json body with a stable code and a human-readable detail. Control-plane request failures use `application/problem+json`. The generated error schema owns the exact shape. For example: ```json theme={null} { "code": "simulation_stopped", "detail": "The Simulation is stopped.", "validation": null } ``` The nullable `validation` field carries safe specification diagnostics when a build request is rejected. Use the stable `code` in programs. Show `detail` to people. The endpoint examples show the detail for each stated failure. IDs, quota counts, and other request values can change. ## Resource errors A successful HTTP read can return a Simulator or Box Snapshot whose build has failed, a Box whose last run stopped without a stop request, or a Simulation Snapshot whose save has failed. Its `error` field describes that resource outcome, separately from an HTTP request failure. Use the generated resource schema for the supported codes and fields. A Box's error code names its Box: `_start_failed` when its runtime did not start, `_runtime_lost` when its runtime was lost, and `mcpbox_apibox_gone` or `mcpbox_apibox_unissued` when an MCP Box's API Box was deleted or has no stored token. Simulator diagnostics can include a bounded `reason`, a plain-text `agent_message`, and structured `validation` issues. A `specification_validation_failed` result needs corrected input before another build, unless its issue has code `derive_processing` (kind `unknown`): that is a platform error, not a defect in the specification, so build again later and, if it repeats, contact support with the Simulator ID. Specification defects that a build tolerates do not fail it; the Simulator lists them in `build.warnings`. A canceled Simulator uses status `canceled` and error code `build_canceled`. A build that waited at QA for rejected live credentials and was not resumed within 7 days fails with error code `live_credential_rejected`, and its detail names the credentials. ## Codes | Status | `code` | When | | - | - | - | | `400` | `bad_request` | The `cursor` or `status` filter is invalid, a JSON body is malformed, or a data-plane body could not be read. | | `400` | `simulator_unknown` | A `simulator_id`, `parent_id`, `simulators[]` entry, or list filter does not resolve in this workspace or the catalog. | | `401` | `auth_invalid` | The API key is missing or invalid. | | `403` | `auth_forbidden` | The resource belongs to another workspace, the request deletes a catalog Simulator or changes a catalog Box Snapshot, the request cancels a build that another workspace owns, or a clone names a workspace outside the API key's organization. | | `400` | `invalid_actor_header` | Data plane only: `X-Continuous-Actor` must contain one printable actor id of at most 256 characters, without commas. | | `400` | `unavailable_actor` | Data plane only: `X-Continuous-Actor` names no actor available in this Simulation or Box, such as a sample-only actor without sample data. | | `404` | `simulation_not_found`, `simulator_not_found`, `snapshot_not_found` | The ID in the path or in a create request's `snapshot_id` is unknown, or a clone source is not in the caller's workspace. On the data plane, `simulation_not_found` also answers any path under `_sim`. | | `404` | `apibox_not_found`, `webbox_not_found`, `mcpbox_not_found`, `apibox_snapshot_not_found`, `webbox_snapshot_not_found`, `mcpbox_snapshot_not_found` | The Box or Box Snapshot ID in the path or in a create request is unknown. | | `404` | `workspace_not_found` | A clone names a target workspace that does not exist. | | `404` | `image_unavailable` | The Simulator image to clone is missing from the registry. | | `404` | `not_found` | The route is unknown. | | `404` | `clock_advance_not_found` | The requested clock operation does not exist for this resource. | | `405` | `method_not_allowed` | The route exists but not for this method. | | `408` | `request_timeout` | Reading the request body timed out. Any operation with a body can answer it. | | `409` | `simulator_not_ready` | Create a Simulation, clone, or start an incremental build from a Simulator that is not `ready`. | | `409` | `simulation_stopped` | List steps, save a Snapshot, or send a data-plane request to a stopped Simulation. | | `409` | `simulation_starting` | Stop, advance, save a Snapshot of, or read the steps or advances of a Simulation that is still starting. Read it until it is running, then retry. | | `409` | `simulation_stopping` | Start a Simulation that is still stopping. Read it until it is stopped, then retry. | | `409` | `idempotency_conflict` | A create or clock advance reuses an `Idempotency-Key` with a different request. | | `409` | `snapshot_not_ready` | Create a Simulation from a Snapshot that is not `ready`, or delete a `creating` Snapshot. | | `409` | `snapshot_in_use` | Delete a Snapshot while a Simulation is starting from it. Retry after it starts. | | `409` | `apibox_starting`, `webbox_starting`, `mcpbox_starting` | Stop, save, or read the steps of a Box that is still starting, or save an MCP Box whose API Box is. Read it until it is running, then retry. | | `409` | `apibox_stopped`, `webbox_stopped`, `mcpbox_stopped` | Save or read the steps of a Box that is not running, save an MCP Box whose API Box is not, or send a data-plane request to a stopped Box. | | `409` | `apibox_rebuild_required`, `webbox_rebuild_required` | Save a Box whose runtime cannot save its state. Rebuild its Snapshot, then save a Box created from the new one. | | `409` | `mcpbox_rebuild_required` | Save an MCP Box whose API Box's runtime cannot save its state. Rebuild the API Box Snapshot and an MCP Box Snapshot against the new one, then save an MCP Box created from them. | | `409` | `apibox_not_stopped`, `webbox_not_stopped`, `mcpbox_not_stopped` | Start a Box that is not stopped. | | `409` | `apibox_snapshot_not_ready`, `webbox_snapshot_not_ready`, `mcpbox_snapshot_not_ready` | Create a Box from a Snapshot that is not `ready`, or build an MCP Box Snapshot from an API Box Snapshot that is not `ready`. | | `409` | `apibox_snapshot_in_use`, `webbox_snapshot_in_use`, `mcpbox_snapshot_in_use` | Delete a Box Snapshot that Boxes or other Snapshots use. Delete them first. | | `409` | `apibox_snapshot_parent_in_use`, `webbox_snapshot_parent_in_use`, `mcpbox_snapshot_parent_in_use` | Delete a Box Snapshot while a build with it as `parent_id` is pending or building. Retry after the build finishes. | | `409` | `apibox_in_use` | Delete an API Box that MCP Boxes front. Delete them first. | | `409` | `mcpbox_apibox_gone` | Start or save an MCP Box whose API Box was deleted. Create a new MCP Box in front of another API Box. | | `409` | `simulator_not_waiting`, `apibox_snapshot_not_waiting`, `webbox_snapshot_not_waiting`, `mcpbox_snapshot_not_waiting` | Resume a Simulator or Box Snapshot build that is not waiting at QA for its live credentials. | | `409` | `simulator_in_use` | Delete a Simulator that has dependent Simulations, child Simulators, or Simulation Snapshots. The `dependents` field lists their IDs. | | `409` | `clock_conflict` | A clock operation or conflicting lifecycle operation is already active. | | `409` | `simulation_token_regeneration_superseded` | A token regeneration is retried with an `Idempotency-Key` whose token a later regeneration has already replaced. Retrieve the current token instead. | | `413` | `payload_too_large` | The request exceeds a [transport limit](/api-reference/quotas#size-limits). | | `415` | `unsupported_media_type` | A JSON operation received a non-JSON body, or `POST /v1/simulators` received a body that is not `multipart/form-data`. | | `422` | `validation` | The request violates the schema: for example a name is blank or the multipart part set is invalid. | | `422` | `artifact_invalid` | The Simulator image to clone is invalid. | | `429` | `simulation_quota_exceeded` | A Simulation create or start finds the workspace at its limit of running Simulations, API Boxes, Web Boxes and MCP Boxes, which share one limit. | | `429` | `box_quota_exceeded` | A Box create or start finds the workspace at that same limit. | | `429` | `build_rate_exceeded` | The workspace has used its Simulator and Box Snapshot builds for the current UTC day. | | `429` | `simulation_capacity` | Continuous has no free Simulation capacity. Retry after a short delay. | | `500` | `internal` | The server failed unexpectedly. | | `500` | `simulation_template_missing` | The Simulation runtime template is unavailable. | | `503` | `simulation_provider_unavailable` | The Simulation runtime provider is unavailable. Retry after a short delay. | | `503` | `simulation_environment_offline` | The Simulation's runtime environment is offline, or did not confirm a new token. Retry once it reconnects; retry a token regeneration with the same `Idempotency-Key`. | | `503` | `internal_unavailable` | A dependency of the API is unavailable. Retry the request. | | `503` | `auth_provider_unavailable` | The authentication provider is unavailable. Retry the request. | | `503` | `registry_unavailable` | The Simulator registry is unavailable during a clone. Retry later. | | `503` | `simulation_unreachable` | Data plane only: the runtime is waking, cannot be reached, or returned an unusable error. | | `503` | `apibox_unreachable`, `webbox_unreachable`, `mcpbox_unreachable` | Data plane only: the Box's runtime is waking, cannot be reached, or returned an unusable error. | | `504` | `simulation_timeout` | The Simulation runtime did not start in time. Retry the request. | The endpoint pages show examples for `internal_unavailable` and `auth_provider_unavailable`; either can appear on any operation. `Retry-After` gives a delay in seconds. It accompanies `build_rate_exceeded` until the UTC day ends, build storage failures and operation timeouts on `POST /v1/simulators`, and retryable data-plane `simulation_unreachable` and `_unreachable` responses. Other `internal_unavailable` and authentication failures can omit it. Simulator and Box Snapshot builds above the concurrent build limit return `202` with status `pending`. They start when a slot is free in the queue. See [Quotas and limits](/api-reference/quotas) for the `429` and `413` limits. # Clone MCP Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/mcpbox-snapshots/clone-mcp-box-snapshot /openapi/public.yaml post /v1/mcpbox-snapshots/{id}/clone Creates a ready copy of a ready MCP Box Snapshot in another workspace, without a build. The clone has a new ID and the source's artifact, documents and saved state; the source is unchanged. The clone records no credentials, since they belong to the source workspace, and no parent or source Snapshot. An API Box Snapshot of the source workspace that the MCP Box Snapshot was built against is cloned with it, and the clone is built against the copy; a catalog one is kept. The source is the caller's workspace: an API key's own workspace, or X-Workspace-Id for a session. An API key may clone into any other workspace of its organization. # Delete MCP Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/mcpbox-snapshots/delete-mcp-box-snapshot /openapi/public.yaml delete /v1/mcpbox-snapshots/{id} Deletes an MCP Box Snapshot. A build that is still pending or building is canceled first. The API Box Snapshot it was built against stays. A Snapshot that MCP Boxes serve returns 409 mcpbox_snapshot_in_use; delete those MCP Boxes first. While a build that names it as parent_id is pending or building, it returns 409 mcpbox_snapshot_parent_in_use; retry after the build finishes. # Get MCP Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/mcpbox-snapshots/get-mcp-box-snapshot /openapi/public.yaml get /v1/mcpbox-snapshots/{id} Returns an MCP Box Snapshot of the workspace or the catalog, and its build status. # List MCP Box Snapshots Source: https://docs.continuouslabs.ai/api-reference/mcpbox-snapshots/list-mcp-box-snapshots /openapi/public.yaml get /v1/mcpbox-snapshots Returns the workspace's MCP Box Snapshots and the catalog's, newest first. Results can be filtered by status and source, and by the MCP Box a Snapshot was saved from. # Update MCP Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/mcpbox-snapshots/update-mcp-box-snapshot /openapi/public.yaml patch /v1/mcpbox-snapshots/{id} Renames an MCP Box Snapshot or replaces its metadata. Omitted fields keep their current values. Its tools do not change. Catalog Snapshots cannot be updated. # Create MCP Box Source: https://docs.continuouslabs.ai/api-reference/mcpbox/create-mcp-box /openapi/public.yaml post /v1/mcpbox Creates an MCP Box that serves an MCP Box Snapshot's tools over MCP in front of an API Box, and starts it. The API Box must be in the workspace and started from the API Box Snapshot the MCP Box Snapshot was built against. It returns at once with status starting and the MCP Box's token; get the MCP Box until it is running. Send MCP requests to its endpoint followed by /mcp, with the token in X-Continuous-Token. The MCP Box keeps no state: its tools read and change the API Box, and a tool call while the API Box is stopped returns the API Box's refusal as a tool error. # Delete MCP Box Source: https://docs.continuouslabs.ai/api-reference/mcpbox/delete-mcp-box /openapi/public.yaml delete /v1/mcpbox/{id} Deletes an MCP Box, running or stopped. Its API Box stays. Its runtime is released after the response. # Get MCP Box Source: https://docs.continuouslabs.ai/api-reference/mcpbox/get-mcp-box /openapi/public.yaml get /v1/mcpbox/{id} Returns an MCP Box, its status and its connection: its endpoint and token, whether it is running or stopped. Requests reach it only while it is running. # List MCP Boxes Source: https://docs.continuouslabs.ai/api-reference/mcpbox/list-mcp-boxes /openapi/public.yaml get /v1/mcpbox Returns the workspace's MCP Boxes, newest first. Results can be filtered by status and Snapshot. # Start MCP Box Source: https://docs.continuouslabs.ai/api-reference/mcpbox/start-mcp-box /openapi/public.yaml post /v1/mcpbox/{id}/start Starts a stopped MCP Box in front of its API Box, and returns at once with status starting; get the MCP Box until it is running. Its token stays the same; its get returns it. A running, starting or stopping MCP Box returns 409 mcpbox_not_stopped, and one whose API Box was deleted 409 mcpbox_apibox_gone. # Stop MCP Box Source: https://docs.continuouslabs.ai/api-reference/mcpbox/stop-mcp-box /openapi/public.yaml post /v1/mcpbox/{id}/stop Stops a running MCP Box and releases its runtime; its API Box keeps running, and its token stays for the next start. It returns at once with status stopping; get the MCP Box until it is stopped. A stopped MCP Box is returned unchanged; a starting one returns 409 mcpbox_starting. # Update MCP Box Source: https://docs.continuouslabs.ai/api-reference/mcpbox/update-mcp-box /openapi/public.yaml patch /v1/mcpbox/{id} Renames an MCP Box or replaces its metadata. Omitted fields keep their current values. # API reference Source: https://docs.continuouslabs.ai/api-reference/overview The v1 HTTP API at https://api.continuouslabs.ai for Boxes, Simulators, Simulations, and credentials. Base URL: `https://api.continuouslabs.ai`. Every route is under `/v1`. Use the credential for the surface you call; [Authentication](/api-reference/authentication) owns the API-key and Box- and Simulation-token rules. Each endpoint page lists the operation's request fields, response fields, and errors. See [Authentication](/api-reference/authentication), [Errors](/api-reference/errors), [Pagination](/api-reference/pagination), and [Quotas and limits](/api-reference/quotas). ## IDs Every ID is a prefix plus 26 Crockford base32 characters: `abx_` for an API Box, `wbx_` for a Web Box, `mbx_` for an MCP Box, `abs_`, `wbs_` and `mbs_` for their Snapshots, `smr_` for a Simulator, `sim_` for a Simulation, `crd_` for a credential. Names are labels; they can repeat and never identify a resource. Response schemas declare no additional properties, so the field set on each endpoint page is the full response. ## Retries Every create accepts an optional `Idempotency-Key` header of up to 256 bytes: API Box, Web Box, MCP Box and their Snapshots, Simulator build and clone, Simulation, and Simulation Snapshot. A retry with the same key and request returns the resource as it is now, with the create's original status code, and starts no second build, Box or Simulation. The same key with a different request returns `409 idempotency_conflict`. Without a key, each request creates a new resource. Keys are scoped to the workspace and the kind of create. If the resource a key created was deleted, or its create failed, a retry with the key creates a new one. ## Resources The sidebar lists every operation by resource. These pages explain each resource: | Resource | Concept page | | - | - | | API Boxes | [API Box](/concepts/api-box) | | Web Boxes | [Web Box](/concepts/web-box) | | MCP Boxes | [MCP Box](/concepts/mcp-box) | | Simulators | [Simulators](/concepts/simulators) | | Simulations | [Simulations](/concepts/simulations) and [Send requests to a Simulation](/concepts/data-plane) | | Credentials | [Let the build call a live system](/concepts/simulators#let-the-build-call-a-live-system) | # Pagination Source: https://docs.continuouslabs.ai/api-reference/pagination List operations page with limit and an opaque cursor. Collection endpoints return `next_cursor` when another page is available. This includes API Boxes, Web Boxes, MCP Boxes, their Snapshots and steps, Simulators, Simulations, Simulation steps, and clock-advance events. Each generated endpoint lists its pagination parameters. * `limit` is the page size. It defaults to 50. Values below 1 use 50; values above 200 use 200. * `cursor` is the `next_cursor` value from the previous page. The cursor is opaque. * `next_cursor` in the response is `null` on the last page. An unusable cursor answers `400 bad_request`. Step pages come from a running Box or Simulation; a stopped one answers `409 _stopped` or `409 simulation_stopped`. ## Example Set `CONTINUOUS_API_KEY` to your API key, then read the first page: ```bash theme={null} curl "https://api.continuouslabs.ai/v1/apibox?limit=50" \ -H "Authorization: Bearer $CONTINUOUS_API_KEY" ``` If `next_cursor` is not `null`, replace `` with that value to read the next page: ```bash theme={null} curl --get "https://api.continuouslabs.ai/v1/apibox" \ -H "Authorization: Bearer $CONTINUOUS_API_KEY" \ --data-urlencode "limit=50" \ --data-urlencode "cursor=" ``` Repeat with each new `next_cursor`. Stop when it is `null`. # Quotas and limits Source: https://docs.continuouslabs.ai/api-reference/quotas Workspace and organization quotas, platform capacity, and request-size limits. Most quotas are set per workspace. The error `detail` names your limit and current usage. ## Workspace quotas | `code` | Status | Applies to | What to do | | - | - | - | - | | `simulation_quota_exceeded`, `box_quota_exceeded` | `429` | Running Simulations, API Boxes, Web Boxes and MCP Boxes, which share one limit: create and start. Simulations answer `simulation_quota_exceeded` and Boxes `box_quota_exceeded`. | Stop or delete one, or wait for a delete to finish. Stopped ones do not use a slot. | | `build_rate_exceeded` | `429` | Simulator, API Box Snapshot, Web Box Snapshot and MCP Box Snapshot builds per UTC day. | Wait for the reset at 00:00 UTC. The response carries `Retry-After` in seconds. | Simulator, API Box Snapshot, Web Box Snapshot and MCP Box Snapshot builds share a queue in each workspace. The queue allows 10 concurrent builds by default. Further requests return `202` with status `pending` and start in creation order when a slot is free. You can cancel pending builds. The quota ledger reports the running builds as `concurrent_builds`; pending builds do not use these slots. Each accepted build uses one daily build allowance. Queue promotion and retries do not charge the allowance again. Simulation Snapshots have no quota. ## Organization limits An organization can have 2 workspaces, including its default workspace. Creating another answers `409 workspace_limit`. Contact Continuous to raise the limit. ## Platform capacity `429 simulation_capacity` means Continuous has no free Simulation capacity. It is not a workspace quota. Retry after a short delay. ## Size limits These answer `413 payload_too_large`: | Limit | Applies to | | - | - | | 64 MiB | The `spec` file part of `POST /v1/simulators`. | | 1 MiB | The JSON `request` part of `POST /v1/simulators`. | | 96 MiB | The whole multipart body of `POST /v1/simulators`, which the `spec` and every `document` part share. | | 1 MiB | The JSON body of `POST /v1/simulations` and `POST /v1/simulation-snapshots`. | | 64 MiB | An ordinary request body on the Simulation or API Box data plane, or on a Web Box's own host. | | 256 MiB | A `multipart/form-data` request on a Simulation or API Box endpoint, or on a Web Box's own host. | | 256 MiB | A `text/xml` or `application/soap+xml` request on a Simulation or API Box endpoint, or on a Web Box's own host. | | 10 MiB | A request body on the MCP Box data plane. | These are encoded wire-body caps. Vendor file limits and decoded attachment limits can be smaller. Per-field limits, including names, instructions, filters, and token lifetimes, belong to each generated endpoint schema. A request outside those constraints answers `422 validation`. ## Build budgets Simulator builds use an eight-hour budget by default. `timeout_seconds` can select a different budget; the generated build schemas own its accepted range and default. The budget starts when a build leaves its queue. Provider work and validation share the original deadline across retries and recovery. Publication, preparation, and cleanup have separate limits after acceptance. Existing builds keep their recorded deadlines. Temporary failures can retry within that deadline. A retry does not restart the budget or consume another daily build allowance. A build can still fail before its deadline when its input is invalid or its work cannot continue. # Create Simulation Snapshot Source: https://docs.continuouslabs.ai/api-reference/simulation-snapshots/create-simulation-snapshot /openapi/public.yaml post /v1/simulation-snapshots Starts saving a running Simulation's current state and returns the Snapshot with status creating. Poll it until it is ready, or failed with an error. Saving closes the Simulation's open event streams and WebSockets and does not change its state; while it saves, an advance returns 409 clock_conflict, and a stop waits for it. Create Simulations from a ready Snapshot with snapshot_id; it outlives its Simulation. A stopped Simulation returns 409 simulation_stopped. Reuse the Idempotency-Key to retry safely. Deprecated. Use API Box for APIs and Web Box for web apps. # Delete Simulation Snapshot Source: https://docs.continuouslabs.ai/api-reference/simulation-snapshots/delete-simulation-snapshot /openapi/public.yaml delete /v1/simulation-snapshots/{id} Deletes a Snapshot and its saved state. Simulations created from it keep running, and their snapshot_id becomes null. While it is creating, the response is 409 snapshot_not_ready; while a Simulation is starting from it, 409 snapshot_in_use. Deprecated. Use API Box for APIs and Web Box for web apps. # Get Simulation Snapshot Source: https://docs.continuouslabs.ai/api-reference/simulation-snapshots/get-simulation-snapshot /openapi/public.yaml get /v1/simulation-snapshots/{id} Returns a Snapshot. Deprecated. Use API Box for APIs and Web Box for web apps. # List Simulation Snapshots Source: https://docs.continuouslabs.ai/api-reference/simulation-snapshots/list-simulation-snapshots /openapi/public.yaml get /v1/simulation-snapshots Returns the workspace's Snapshots, newest first. Filter by simulation_id for the Snapshots of one Simulation. Deprecated. Use API Box for APIs and Web Box for web apps. # Update Simulation Snapshot Source: https://docs.continuouslabs.ai/api-reference/simulation-snapshots/update-simulation-snapshot /openapi/public.yaml patch /v1/simulation-snapshots/{id} Renames a Snapshot. Omitted fields keep their current values. Deprecated. Use API Box for APIs and Web Box for web apps. # Advance Simulation Time Source: https://docs.continuouslabs.ai/api-reference/simulations/advance-simulation-time /openapi/public.yaml post /v1/simulations/{id}/advances Schedules an absolute clock advance. An advance commits due local events in ordered batches, one step each; a failure keeps the batches already committed. Poll the returned operation until it completes. Deprecated. Use API Box for APIs and Web Box for web apps. # Create Simulation Source: https://docs.continuouslabs.ai/api-reference/simulations/create-simulation /openapi/public.yaml post /v1/simulations Creates a Simulation from a ready Simulator, or from a Snapshot with its saved state, and starts it. The response returns once the Simulation is admitted, with status starting; read it until it is running. The response includes the endpoint and the Simulation's token, which does not expire. If its runtime cannot start, the Simulation is deleted. Deprecated. Use API Box for APIs and Web Box for web apps. # Delete Simulation Source: https://docs.continuouslabs.ai/api-reference/simulations/delete-simulation /openapi/public.yaml delete /v1/simulations/{id} Deletes a Simulation and its saved runtime state, and cancels an active advance. Deprecated. Use API Box for APIs and Web Box for web apps. # Get Current Simulation Token Source: https://docs.continuouslabs.ai/api-reference/simulations/get-current-simulation-token /openapi/public.yaml get /v1/simulations/{id}/token Returns the Simulation's current token without rotating it, including while the Simulation is stopped. Deprecated. Use API Box for APIs and Web Box for web apps. # Get Simulation Source: https://docs.continuouslabs.ai/api-reference/simulations/get-simulation /openapi/public.yaml get /v1/simulations/{id} Returns a Simulation, its current status, and the actors a request can act as. The response does not include tokens. Deprecated. Use API Box for APIs and Web Box for web apps. # Get Simulation Clock Advance Source: https://docs.continuouslabs.ai/api-reference/simulations/get-simulation-clock-advance /openapi/public.yaml get /v1/simulations/{id}/advances/{advance_id} Returns durable clock progress, the event count, and the committed step or failure. Deprecated. Use API Box for APIs and Web Box for web apps. # List Clock Advance Events Source: https://docs.continuouslabs.ai/api-reference/simulations/list-clock-advance-events /openapi/public.yaml get /v1/simulations/{id}/advances/{advance_id}/events Returns the ordered event trace for a committed advance. The Simulation must be running. A Simulation created from a Snapshot keeps the traces in the state it started from. Deprecated. Use API Box for APIs and Web Box for web apps. # List Simulation Steps Source: https://docs.continuouslabs.ai/api-reference/simulations/list-simulation-steps /openapi/public.yaml get /v1/simulations/{id}/steps Lists the Simulation's steps in order. Each request that changed state is one step; a request that only reads registers none. A stopped Simulation returns 409 simulation_stopped; start it first. Deprecated. Use API Box for APIs and Web Box for web apps. # List Simulations Source: https://docs.continuouslabs.ai/api-reference/simulations/list-simulations /openapi/public.yaml get /v1/simulations Returns all Simulations that the API key can access. Results can be filtered by status, Simulator ID, pinned Simulator digest, or the Snapshot they started from. Deprecated. Use API Box for APIs and Web Box for web apps. # Regenerate Simulation Token Source: https://docs.continuouslabs.ai/api-reference/simulations/regenerate-simulation-token /openapi/public.yaml post /v1/simulations/{id}/token/regenerate Replaces the Simulation's token, including while the Simulation is stopped. When the replacement commits, requests with the previous token return 401 auth_invalid with X-Continuous-Simulation-Token-Rejected: true. Reuse the Idempotency-Key to retry safely. Deprecated. Use API Box for APIs and Web Box for web apps. # Start Simulation Source: https://docs.continuouslabs.ai/api-reference/simulations/start-simulation /openapi/public.yaml post /v1/simulations/{id}/start Starts a stopped Simulation from its saved state. The response returns once the start is admitted, with status starting; read the Simulation until it is running. If its runtime cannot start, it returns to stopped. Stop and start do not change its token; read it with GET /v1/simulations/{id}/token. A running or starting Simulation is returned unchanged. Deprecated. Use API Box for APIs and Web Box for web apps. # Stop Simulation Source: https://docs.continuouslabs.ai/api-reference/simulations/stop-simulation /openapi/public.yaml post /v1/simulations/{id}/stop Stops a Simulation and saves its state. The response returns once the stop is accepted, with status stopping; read the Simulation until it is stopped. Requests to its endpoint are refused while it stops, and return 409 simulation_stopped once it is stopped, until you start it again. A stopped or stopping Simulation is returned unchanged. Deprecated. Use API Box for APIs and Web Box for web apps. # Update Simulation Source: https://docs.continuouslabs.ai/api-reference/simulations/update-simulation /openapi/public.yaml patch /v1/simulations/{id} Renames a Simulation or replaces its metadata. Omitted fields keep their current values. Deprecated. Use API Box for APIs and Web Box for web apps. # Build Simulator Source: https://docs.continuouslabs.ai/api-reference/simulators/build-simulator /openapi/public.yaml post /v1/simulators Starts an asynchronous Simulator build and returns the Simulator with status pending. Builds start in queue order when workspace capacity is available. Send multipart/form-data with a JSON part named request. To build from a document, add a file part named spec with the OpenAPI, WSDL or GraphQL document. For an incremental build, omit spec and set parent_id and instructions. Add file parts named document to give the builder and reviewer vendor documentation. Deprecated. Use API Box for APIs and Web Box for web apps. # Cancel Simulator Build Source: https://docs.continuouslabs.ai/api-reference/simulators/cancel-simulator-build /openapi/public.yaml post /v1/simulators/{id}/cancel Requests cancellation of a pending or active Simulator build and returns the Simulator without waiting for the build to stop. Get the Simulator until its status leaves pending or building. The build can finish before cancellation takes effect. A Simulator whose build has settled is returned unchanged. Deprecated. Use API Box for APIs and Web Box for web apps. # Clone Simulator Source: https://docs.continuouslabs.ai/api-reference/simulators/clone-simulator /openapi/public.yaml post /v1/simulators/{id}/clone Creates a ready copy of a ready Simulator in another workspace. The clone has a new ID and the source's image digest; the source is unchanged. The source is the caller's workspace: an API key's own workspace, or X-Workspace-Id for a session. An API key may clone into any other workspace of its organization. Deprecated. Use API Box for APIs and Web Box for web apps. # Delete Simulator Source: https://docs.continuouslabs.ai/api-reference/simulators/delete-simulator /openapi/public.yaml delete /v1/simulators/{id} Deletes a Simulator that has no dependent Simulations, child Simulators, or Simulation Snapshots. Deprecated. Use API Box for APIs and Web Box for web apps. # Get Simulator Source: https://docs.continuouslabs.ai/api-reference/simulators/get-simulator /openapi/public.yaml get /v1/simulators/{id} Returns a Simulator and its current build status. Deprecated. Use API Box for APIs and Web Box for web apps. # List Simulators Source: https://docs.continuouslabs.ai/api-reference/simulators/list-simulators /openapi/public.yaml get /v1/simulators Returns all Simulators that the API key can access. Results can be filtered by status. Deprecated. Use API Box for APIs and Web Box for web apps. # Resume Simulator Build Source: https://docs.continuouslabs.ai/api-reference/simulators/resume-simulator-build /openapi/public.yaml post /v1/simulators/{id}/resume Resumes a build that waits, as build.waiting reports: at QA because its live credentials were rejected, or for more time after it used its time limit. For a credential wait, refresh each credential it names with PATCH /v1/credentials/{id} first: QA then runs again with their current values, and the build goes on to finalize. For a wait for more time, send add_seconds: the build continues where it stopped, with that much time from the resume. Returns the Simulator, still building. A wait does not count toward the build's time limit: a build resumed from a credential wait has the time it had left when it began waiting. A build that is not waiting returns 409 simulator_not_waiting. Deprecated. Use API Box for APIs and Web Box for web apps. # Update Simulator Source: https://docs.continuouslabs.ai/api-reference/simulators/update-simulator /openapi/public.yaml patch /v1/simulators/{id} Renames a Simulator. Omitted fields keep their current values. Continuous catalog Simulators cannot be changed. Deprecated. Use API Box for APIs and Web Box for web apps. # Cancel Web Box Snapshot build Source: https://docs.continuouslabs.ai/api-reference/webbox-snapshots/cancel-web-box-snapshot-build /openapi/public.yaml post /v1/webbox-snapshots/{id}/cancel Requests cancellation of a pending or active build and returns the Snapshot without waiting for the build to stop. Get the Snapshot until its status leaves pending or building. The build can finish before cancellation takes effect. A Snapshot whose build has settled is returned unchanged. # Clone Web Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/webbox-snapshots/clone-web-box-snapshot /openapi/public.yaml post /v1/webbox-snapshots/{id}/clone Creates a ready copy of a ready Web Box Snapshot in another workspace, without a build. The clone has a new ID and the source's artifact, documents and saved state; the source is unchanged. The clone records no credentials, since they belong to the source workspace, and no parent or source Snapshot. The source is the caller's workspace: an API key's own workspace, or X-Workspace-Id for a session. An API key may clone into any other workspace of its organization. # Create Web Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/webbox-snapshots/create-web-box-snapshot /openapi/public.yaml post /v1/webbox-snapshots Starts an asynchronous build and returns the Web Box Snapshot with status pending. Get the Snapshot until its status is ready, failed or canceled; Web Boxes start from a ready one. The build runs in real time: the builder and QA use the vendor's live web app through its login credential, and the built app has no simulated clock. Builds queue with Simulator builds and count toward the same quotas. Send multipart/form-data with a JSON part named request and optional file parts named document with vendor documentation. To build on a ready Snapshot, set parent_id. # Delete Web Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/webbox-snapshots/delete-web-box-snapshot /openapi/public.yaml delete /v1/webbox-snapshots/{id} Deletes a Web Box Snapshot. A build that is still pending or building is canceled first. A Snapshot that Web Boxes started from returns 409 webbox_snapshot_in_use; delete those Web Boxes first. While a build that names it as parent_id is pending or building, it returns 409 webbox_snapshot_parent_in_use; retry after the build finishes. Catalog Snapshots cannot be deleted. # Get Web Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/webbox-snapshots/get-web-box-snapshot /openapi/public.yaml get /v1/webbox-snapshots/{id} Returns a Web Box Snapshot of the workspace or the catalog, and its build status. # List Web Box Snapshots Source: https://docs.continuouslabs.ai/api-reference/webbox-snapshots/list-web-box-snapshots /openapi/public.yaml get /v1/webbox-snapshots Returns the workspace's Web Box Snapshots and the catalog's, newest first. Results can be filtered by source and status, and by the Web Box a Snapshot was saved from. # Resume Web Box Snapshot build Source: https://docs.continuouslabs.ai/api-reference/webbox-snapshots/resume-web-box-snapshot-build /openapi/public.yaml post /v1/webbox-snapshots/{id}/resume Resumes a build that waits, as build.waiting reports: at QA because its live credentials were rejected, or for more time after it used its time limit. For a credential wait, refresh each credential it names with PATCH /v1/credentials/{id} first: QA then runs again with their current values, and the build goes on to finalize. For a wait for more time, send add_seconds: the build continues where it stopped, with that much time from the resume. Returns the Snapshot, still building. A wait does not count toward the build's time limit: a build resumed from a credential wait has the time it had left when it began waiting. A build that is not waiting returns 409 webbox_snapshot_not_waiting. # Update Web Box Snapshot Source: https://docs.continuouslabs.ai/api-reference/webbox-snapshots/update-web-box-snapshot /openapi/public.yaml patch /v1/webbox-snapshots/{id} Renames a Web Box Snapshot or replaces its metadata. Omitted fields keep their current values. The built app does not change. Catalog Snapshots cannot be updated. # Create Web Box Source: https://docs.continuouslabs.ai/api-reference/webbox/create-web-box /openapi/public.yaml post /v1/webbox Creates a Web Box from a ready Web Box Snapshot and starts it. It returns at once with status starting; get the Web Box until it is running. Open its url in a browser: the app is served at a host of its own, open to anyone with the URL. Each Web Box has its own state, and runs in real time. # Delete Web Box Source: https://docs.continuouslabs.ai/api-reference/webbox/delete-web-box /openapi/public.yaml delete /v1/webbox/{id} Deletes a Web Box, running or stopped, with its state. Its runtime is released after the response. # Get Web Box Source: https://docs.continuouslabs.ai/api-reference/webbox/get-web-box /openapi/public.yaml get /v1/webbox/{id} Returns a Web Box, its status and its connection: the URL that opens its app, whether it is running or stopped. The app answers only while the Web Box is running. # List Web Box steps Source: https://docs.continuouslabs.ai/api-reference/webbox/list-web-box-steps /openapi/public.yaml get /v1/webbox/{id}/steps Lists the Web Box's steps in order. Each request that changed state is one step; a request that only reads registers none. A Web Box that is not running returns 409 webbox_stopped. # List Web Boxes Source: https://docs.continuouslabs.ai/api-reference/webbox/list-web-boxes /openapi/public.yaml get /v1/webbox Returns the workspace's Web Boxes, newest first. Results can be filtered by status and Snapshot. # Start Web Box Source: https://docs.continuouslabs.ai/api-reference/webbox/start-web-box /openapi/public.yaml post /v1/webbox/{id}/start Starts a stopped Web Box from the state its stop saved, and returns at once with status starting. A running, starting or stopping Web Box returns 409 webbox_not_stopped. # Stop Web Box Source: https://docs.continuouslabs.ai/api-reference/webbox/stop-web-box /openapi/public.yaml post /v1/webbox/{id}/stop Stops a running Web Box: it saves its state, and releases its runtime. It returns at once with status stopping; get the Web Box until it is stopped. A stopped Web Box is returned unchanged; a starting one returns 409 webbox_starting. # Update Web Box Source: https://docs.continuouslabs.ai/api-reference/webbox/update-web-box /openapi/public.yaml patch /v1/webbox/{id} Renames a Web Box or replaces its metadata. Omitted fields keep their current values. # Authenticate the CLI Source: https://docs.continuouslabs.ai/cli/authentication Give the CLI an API key from a flag, an environment variable, or stored credentials. Every API command sends a Continuous API key as a Bearer token. Create one in [the app](https://app.continuouslabs.ai) under **Settings**, then **API keys**. | Source | How | Use it for | | - | - | - | | Flag | `--api-key-auth ` | One command | | Environment variable | `CONTINUOUS_API_KEY_AUTH` | CI and scripts | | Stored credential | `continuous auth login` | Your workstation | When more than one is set, the CLI uses the first match in this order: flag, environment variable, OS keychain, config file. The CLI adds the `Bearer ` prefix. A value that already starts with `Bearer ` is sent unchanged. The CLI does not read `CONTINUOUS_API_KEY`. The quickstart uses that name as a plain shell variable for `curl`. ## Store a key on your workstation ```bash theme={null} continuous auth login ``` The prompt hides the key. The CLI stores it in the OS keychain under the service name `continuous`. When no keychain is available, it writes the key to `~/.config/continuous/config.yaml` (file mode `0600`, directory `0700`). The command does not open a browser. In a script, pass the key instead of answering a prompt: ```bash theme={null} continuous auth login --no-interactive --api-key-auth "$CONTINUOUS_KEY" ``` In [agent mode](/cli/scripting#agent-mode), `auth login` exits with the error `auth_login_blocked`. Use the environment variable there. ## Check which credential is active ```bash theme={null} continuous auth whoami ``` ```text theme={null} Configuration ============= Config file: /Users/you/.config/continuous/config.yaml Environment prefix: CONTINUOUS_ Credentials: --api-key-auth [env ] sk******90 ``` The source is one of `flag`, `env`, `keyring`, `config`, or `unset`. The value is masked. This command does not contact the API; to confirm the key works, run a read-only command such as `continuous apibox list-apiboxes --output-format json`. `continuous whoami` prints the same report. ## Remove stored credentials ```bash theme={null} continuous auth logout ``` This deletes the keychain entry and clears the key in the config file. A key in `CONTINUOUS_API_KEY_AUTH` or on the command line still works after logout. ## Errors An invalid or missing key returns `auth_invalid`. See [Errors and exit codes](/cli/scripting#errors-and-exit-codes) for stderr formats and exit status. ## Other stored settings `continuous configure` stores the same key and can also set a default output format. Settings live in `~/.config/continuous/config.yaml` under `security.api_key_auth`, `output_format`, and `timeout`. # Global flags Source: https://docs.continuouslabs.ai/cli/global-flags Flags that every continuous command accepts, with their environment and config equivalents. All flags below apply to every command. Some of them also read an environment variable or a key in `~/.config/continuous/config.yaml`; [Authentication](/cli/authentication) gives the order in which those sources win. ## Authentication | Flag | Environment | Config key | What it does | | - | - | - | - | | `--api-key-auth ` | `CONTINUOUS_API_KEY_AUTH` | `security.api_key_auth` | API key sent as a Bearer token. See [Authentication](/cli/authentication). | ## Output | Flag | Environment | Config key | What it does | | - | - | - | - | | `-o, --output-format ` | `CONTINUOUS_OUTPUT_FORMAT` | `output_format` | `pretty`, `json`, `yaml`, `table`, or `toon`. See [Output](/cli/output). | | `-q, --jq ` | | | Filter the response with a jq expression. See [Filter with jq](/cli/output#filter-with-jq). | | `--include-headers` | | | Add the HTTP response headers to the output. See [Include response headers](/cli/output#include-response-headers). | | `--color ` | | | `auto`, `always`, or `never`. See [Color](/cli/output#color). | | `--no-interactive` | | | Never prompt, open the explorer, or show forms. See [Turn off prompts](/cli/scripting#turn-off-prompts). | ## Server and network | Flag | Environment | Config key | What it does | | - | - | - | - | | `--server-url ` | | | Send requests to another base URL instead of `https://api.continuouslabs.ai`. | | `--server ` | | | Pick a server from the contract's server list. The list has one entry, so only `0` is valid. | | `-H, --header "Key: Value"` | | | Add a request header. Repeat the flag for more headers. | | `--timeout ` | `CONTINUOUS_TIMEOUT` | `timeout` | Request timeout as a Go duration, for example `30s` or `5m`. | | `--no-retries` | `CONTINUOUS_NO_RETRIES` | `no_retries` | Turn off retries. Overrides the other retry flags. | | `--retry-max-elapsed-time ` | `CONTINUOUS_RETRY_MAX_ELAPSED_TIME` | `retry_max_elapsed_time` | Stop retrying after this total time, as a Go duration. | | `--retry-connection-errors` | `CONTINUOUS_RETRY_CONNECTION_ERRORS` | `retry_connection_errors` | Retry on connection errors, such as a reset connection. | | `--retry-config ` | `CONTINUOUS_RETRY_CONFIG` | `retry_config` | The full retry configuration as JSON, with times in milliseconds, for example `{"strategy":"backoff","backoff":{"initialInterval":500,"maxInterval":10000,"exponent":1.5,"maxElapsedTime":30000},"retryConnectionErrors":false}`. Overrides `--retry-max-elapsed-time` and `--retry-connection-errors`. | Without a retry setting, each request retries with exponential backoff for up to 60 seconds, including on connection errors. Setting `--retry-max-elapsed-time` or `--retry-connection-errors`, or its environment variable or config key, replaces that policy. Retries then stop after 30 seconds unless `--retry-max-elapsed-time` sets another time, and connection errors are retried only with `--retry-connection-errors`. ## Diagnostics | Flag | What it does | | - | - | | `--dry-run` | Print the request to stderr and skip the network call. See [Preview a request](/cli/scripting#preview-a-request). | | `-d, --debug` | Log request and response details to stderr. Ignored when `--dry-run` is set. | | `--usage` | Print the command's usage schema in KDL and exit. | | `--agent-mode` | Toggle agent mode. See [Known issues](/cli/scripting#known-issues) before you rely on it. | `-h, --help` prints help for any command. [Scripting](/cli/scripting#agent-mode) describes agent mode and how the CLI detects it. # Install the CLI Source: https://docs.continuouslabs.ai/cli/install Install the continuous command with Homebrew, a release archive, or the installer script. `continuous` calls the Continuous API from your terminal. This guide and the generated reference use v0.4.8. It runs on macOS, Linux, and Windows on x86\_64 and arm64. > [tab] Homebrew > > Works on macOS and Linux. > > ```bash theme={null} > brew install continuous-labs-ai/tap/continuous > continuous version > ``` > > The formula installs the binary. Run `brew upgrade continuous-labs-ai/tap/continuous` for later releases. > [tab] Release archive > > Releases after 0.1.1 ship `checksums.txt` and `checksums.txt.sig`, a detached signature made with the project's GPG key; earlier releases have no signature. The signature proves that the manifest came from the project, and the checksum proves that the archive matches the manifest. These steps need `gpg`; on macOS, install it with `brew install gnupg`. > > First import the signing key. It is [`release-signing-key.asc`](https://github.com/continuous-labs-ai/cli/blob/main/release-signing-key.asc) in the CLI repository, with fingerprint `3F97 24EA E595 A2F9 F3E8 EDA1 AF88 CF5D 4448 F191`. Check that the printed fingerprint matches before you import. > > ```bash theme={null} > curl -fsSL https://raw.githubusercontent.com/continuous-labs-ai/cli/main/release-signing-key.asc \ > -o release-signing-key.asc > gpg --show-keys --with-fingerprint release-signing-key.asc > gpg --import release-signing-key.asc > ``` > > Then download and verify the archive for your platform from the [v0.4.8 release](https://github.com/continuous-labs-ai/cli/releases/tag/v0.4.8). On Linux or macOS: > > ```bash theme={null} > set -euo pipefail > version=v0.4.8 > platform=$(uname -s) # Linux or Darwin > architecture=$(uname -m) # x86_64 or arm64 > if [ "$architecture" = aarch64 ]; then > architecture=arm64 > fi > archive="continuous_${platform}_${architecture}.tar.gz" > release_url="https://github.com/continuous-labs-ai/cli/releases/download/$version" > cd "$(mktemp -d)" > curl -fsSL "$release_url/checksums.txt" -o checksums.txt > curl -fsSL "$release_url/checksums.txt.sig" -o checksums.txt.sig > gpg --verify checksums.txt.sig checksums.txt > curl -fsSL "$release_url/$archive" -o "$archive" > grep " $archive\$" checksums.txt | sha256sum -c - > tar -xzf "$archive" > mkdir -p "$HOME/.local/bin" > install -m 755 continuous "$HOME/.local/bin/continuous" > ``` > > `gpg --verify` reports `Good signature from "Continuous CLI Release"`; its warning that the key is not certified means only that you have not signed the key yourself. > > Add `$HOME/.local/bin` to your `PATH`. On macOS use `shasum -a 256 -c -` in place of `sha256sum -c -`. > > On Windows, download `continuous_Windows_x86_64.zip` or `continuous_Windows_arm64.zip`, compare `Get-FileHash` against `checksums.txt`, extract the files to a folder, and add that folder to your user `PATH`. > > Each archive contains the binary, `README.md`, and `LICENSE`. > [tab] Installer script > > The installer verifies the archive against `checksums.txt` before it extracts anything. > > ```bash theme={null} > curl -fsSL https://raw.githubusercontent.com/continuous-labs-ai/cli/main/scripts/install.sh \ > -o install.sh > CONTINUOUS_VERSION=v0.4.8 \ > CONTINUOUS_INSTALL_DIR="$HOME/.local/bin" bash install.sh > ``` > > Omit `CONTINUOUS_VERSION` to install the latest published release. Omit `CONTINUOUS_INSTALL_DIR` to install to `/usr/local/bin`, or to `~/.local/bin` when `/usr/local/bin` is not writable. > > On Windows, download `scripts/install.ps1` from the same location and run it in PowerShell. It reads the same `$env:CONTINUOUS_VERSION` and `$env:CONTINUOUS_INSTALL_DIR` variables, installs to `$env:LOCALAPPDATA\Programs\continuous` by default, and adds that directory to your user `PATH`. > [!NOTE] > > Only the release archive steps for Linux and macOS verify the signature. Homebrew, the Windows archive steps, and the installer scripts check the archive checksum but not the signature. Check the install: ```bash theme={null} continuous version ``` Confirm that the printed version matches the release you installed. ## Shell completion Run `continuous completion bash --help` (or `zsh`, `fish`, `powershell`) and follow the printed steps. ## Next step [Authenticate the CLI](/cli/authentication). # Output formats Source: https://docs.continuouslabs.ai/cli/output Choose how the CLI renders responses and filter them with jq. Responses print to stdout. Errors print to stderr and the CLI exits with code 1. ## Formats Set `--output-format` (`-o`), or a default with `CONTINUOUS_OUTPUT_FORMAT` or `output_format` in `~/.config/continuous/config.yaml`. The flag, the variable, and the file resolve in the order given in [Authentication](/cli/authentication). | Format | Use it for | | - | - | | `pretty` | Reading in a terminal. Default outside [agent mode](/cli/scripting#agent-mode). | | `json` | Scripts. The CLI prints the response body as the API returned it. | | `yaml` | Reading nested objects. See [Known issues](/cli/scripting#known-issues) before you parse it in a script. | | `table` | One object at a time. Scalar fields become rows; nested objects, timestamps, and lists of objects are left out, so a list response shows only `next_cursor`. | | `toon` | TOON (Token-Oriented Object Notation), a compact text format for coding agents. Default in agent mode. | ```bash theme={null} continuous apibox-snapshots list --output-format json ``` ## Filter with jq `--jq` (`-q`) runs a jq expression on the response and prints each result as JSON. It overrides `--output-format`. ```bash theme={null} continuous apibox-snapshots list --status ready --jq '.snapshots[] | {id, name}' ``` ## Include response headers `--include-headers` adds the HTTP response headers to the output. In `json`, `yaml`, `toon`, and `--jq` modes they appear under a `_response_headers` key. In `pretty` mode they print after the body. ## Color `--color auto` (default) colors output only when stdout is a terminal; under `auto`, `NO_COLOR` turns color off and `FORCE_COLOR` turns it on. `--color always` and `--color never` override both. Agent mode never colors output. # apibox-snapshots cancel Source: https://docs.continuouslabs.ai/cli/reference/apibox-snapshots/cancel Cancel API Box Snapshot build Requests cancellation of a pending or active build and returns the Snapshot without waiting for the build to stop. Get the Snapshot until its status leaves pending or building. The build can finish before cancellation takes effect. A Snapshot whose build has settled is returned unchanged. ```bash theme={null} continuous apibox-snapshots cancel [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox-snapshots cancel --id ``` ## Flags **--id, -i** `string` *required* API Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox-snapshots create Source: https://docs.continuouslabs.ai/cli/reference/apibox-snapshots/create Create API Box Snapshot Starts an asynchronous build and returns the API Box Snapshot with status pending. Get the Snapshot until its status is ready, failed or canceled; API Boxes start from a ready one. The build is a Simulator build in api mode, run in real time: the built service has no simulated clock, and its scheduled work runs at the first request at or after its time. Builds queue with Simulator builds and count toward the same quotas. Send multipart/form-data with a JSON part named request, a file part named spec with the OpenAPI, WSDL or GraphQL document, and optional file parts named document with vendor documentation. ```bash theme={null} continuous apibox-snapshots create [flags] ``` ## Examples ```bash theme={null} continuous apibox-snapshots create ``` ## Flags **--document** `string` Vendor documentation the builder and reviewer read before they start, as repeated file parts: UTF-8 text (.md, .txt, .html, .json, .yaml, .xml, .csv) or PDF (.pdf). The documents share the request body limit with the spec. **--idempotency-key, -i** `string` Optional key for retrying this create safely. A retry with the same key and request returns the original result with its status; the same key with a different request returns 409 idempotency\_conflict. Without a key, each request creates a new resource. The key is recorded before the build starts, so a retry never starts a second build. **--request, -r** `string` *required* Request as JSON **--spec, -s** `string` OpenAPI, WSDL or GraphQL document, UTF-8 encoded, at most 64 MiB. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox-snapshots delete Source: https://docs.continuouslabs.ai/cli/reference/apibox-snapshots/delete Delete API Box Snapshot Deletes an API Box Snapshot. A build that is still pending or building is canceled first. A Snapshot that API Boxes started from or MCP Box Snapshots were built against returns 409 apibox\_snapshot\_in\_use; delete those first. Catalog Snapshots cannot be deleted. ```bash theme={null} continuous apibox-snapshots delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox-snapshots delete --id ``` ## Flags **--id, -i** `string` *required* API Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox-snapshots get Source: https://docs.continuouslabs.ai/cli/reference/apibox-snapshots/get Get API Box Snapshot Returns an API Box Snapshot of the workspace or the catalog, and its build status. ```bash theme={null} continuous apibox-snapshots get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox-snapshots get --id ``` ## Flags **--id, -i** `string` *required* API Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox-snapshots list Source: https://docs.continuouslabs.ai/cli/reference/apibox-snapshots/list List API Box Snapshots Returns the workspace's API Box Snapshots and the catalog's, newest first. Results can be filtered by source and status. ```bash theme={null} continuous apibox-snapshots list [flags] ``` ## Examples ```bash theme={null} continuous apibox-snapshots list ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--source** `string` Optional source filter. (options: catalog, build, box) **--status** `string` Optional build status filter. (options: pending, building, ready, failed, canceled) Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox-snapshots resume Source: https://docs.continuouslabs.ai/cli/reference/apibox-snapshots/resume Resume API Box Snapshot build Resumes a build that waits, as build.waiting reports: at QA because its live credentials were rejected, or for more time after it used its time limit. For a credential wait, refresh each credential it names with PATCH /v1/credentials/\{id} first: QA then runs again with their current values, and the build goes on to finalize. For a wait for more time, send add\_seconds: the build continues where it stopped, with that much time from the resume. Returns the Snapshot, still building. A wait does not count toward the build's time limit: a build resumed from a credential wait has the time it had left when it began waiting. A build that is not waiting returns 409 apibox\_snapshot\_not\_waiting. ```bash theme={null} continuous apibox-snapshots resume [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox-snapshots resume --id ``` ## Flags **--add-seconds, -a** `int` Seconds to add to a build that waits for more time, from 1 to the largest timeout\_seconds a build request accepts. Required for a build whose build.waiting.type is time\_limit, and refused for one waiting for live credentials. The build's time limit with every addition is at most 259200 seconds (72 hours). **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox-snapshots update Source: https://docs.continuouslabs.ai/cli/reference/apibox-snapshots/update Update API Box Snapshot Renames an API Box Snapshot or replaces its metadata. Omitted fields keep their current values. The built service does not change. Catalog Snapshots cannot be updated. ```bash theme={null} continuous apibox-snapshots update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox-snapshots update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* API Box Snapshot ID. **--metadata, -m** `string` Replacement customer JSON metadata, up to 16 KiB and 64 nesting levels, or null to clear it. **--name, -n** `string` New Snapshot name. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox create Source: https://docs.continuouslabs.ai/cli/reference/apibox/create Create API Box Creates an API Box from a ready API Box Snapshot and starts it. It returns at once with status starting and the API Box's token; get the API Box until it is running. Send the token in X-Continuous-Token on each request to the API Box's endpoint. The token lasts as long as the API Box, and its get returns it again. Each API Box has its own state, and runs in real time. ```bash theme={null} continuous apibox create [flags] ``` ## Examples ```bash theme={null} continuous apibox create --snapshot-id abs_01J8Z5X4K70000000000000002 ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--idempotency-key** `string` Optional key for retrying this create safely. A retry with the same key and request returns the same API Box and token. The same key with a different request returns 409 idempotency\_conflict. **--include-sample-data** Start with the Snapshot's sample data: a realistic account loaded on top of its seed before the first request. Defaults to false, a brand-new workspace. Requires a Snapshot that carries sample data; see its composition. **--metadata, -m** `string` Customer JSON metadata, up to 16 KiB and 64 nesting levels. **--name, -n** `string` Name for the API Box. Omission generates a name. **--snapshot-id, -s** `string` *required* A ready API Box Snapshot of the workspace or the catalog. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox delete Source: https://docs.continuouslabs.ai/cli/reference/apibox/delete Delete API Box Deletes an API Box, running or stopped, with its state. Its runtime is released after the response. An API Box that MCP Boxes front returns 409 apibox\_in\_use; delete them first. ```bash theme={null} continuous apibox delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox delete --id ``` ## Flags **--id, -i** `string` *required* API Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox get Source: https://docs.continuouslabs.ai/cli/reference/apibox/get Get API Box Returns an API Box, its status and its connection: its endpoint and token, whether it is running or stopped. Requests reach it only while it is running. ```bash theme={null} continuous apibox get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox get --id ``` ## Flags **--id, -i** `string` *required* API Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox list-apibox-steps Source: https://docs.continuouslabs.ai/cli/reference/apibox/list-apibox-steps List API Box steps Lists the API Box's steps in order. Each request that changed state is one step; a request that only reads registers none. An API Box that is not running returns 409 apibox\_stopped. ```bash theme={null} continuous apibox list-apibox-steps [flags] ``` Alias: `las` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox list-apibox-steps --id ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--id, -i** `string` *required* API Box ID. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox list-apiboxes Source: https://docs.continuouslabs.ai/cli/reference/apibox/list-apiboxes List API Boxes Returns the workspace's API Boxes, newest first. Results can be filtered by status and Snapshot. ```bash theme={null} continuous apibox list-apiboxes [flags] ``` Alias: `la` ## Examples ```bash theme={null} continuous apibox list-apiboxes ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--snapshot-id** `string` Only API Boxes started from this Snapshot. **--status** `string` Only API Boxes with this status. (options: starting, running, stopping, stopped) Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox save-apibox-snapshot Source: https://docs.continuouslabs.ai/cli/reference/apibox/save-apibox-snapshot Save API Box as Snapshot Saves a running API Box's service and current state as an API Box Snapshot, ready when the response returns. The API Box keeps running, and a paused one is woken. API Boxes created from the Snapshot start with the saved state instead of a new workspace, so they refuse include\_sample\_data. The Snapshot outlives the API Box. A starting API Box returns 409 apibox\_starting; a stopping or stopped one returns 409 apibox\_stopped; one whose runtime cannot save its state returns 409 apibox\_rebuild\_required. ```bash theme={null} continuous apibox save-apibox-snapshot [flags] ``` Alias: `sas` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox save-apibox-snapshot --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id** `string` *required* ID of the Box to save. **--idempotency-key** `string` Optional key for retrying this save safely. A retry with the same key and request returns the Snapshot the first save created. The same key with a different request returns 409 idempotency\_conflict. **--metadata, -m** `string` Customer JSON metadata, up to 16 KiB and 64 nesting levels. **--name, -n** `string` Name for the Snapshot. Omission generates a name. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox start Source: https://docs.continuouslabs.ai/cli/reference/apibox/start Start API Box Starts a stopped API Box from the state its stop saved, and returns at once with status starting; get the API Box until it is running. Its token stays the same; its get returns it. A running, starting or stopping API Box returns 409 apibox\_not\_stopped. ```bash theme={null} continuous apibox start [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox start --id ``` ## Flags **--id, -i** `string` *required* API Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox stop Source: https://docs.continuouslabs.ai/cli/reference/apibox/stop Stop API Box Stops a running API Box: it saves its state, and releases its runtime; its token stays for the next start. It returns at once with status stopping; get the API Box until it is stopped. A stopped API Box is returned unchanged; a starting one returns 409 apibox\_starting. ```bash theme={null} continuous apibox stop [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox stop --id ``` ## Flags **--id, -i** `string` *required* API Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # apibox update Source: https://docs.continuouslabs.ai/cli/reference/apibox/update Update API Box Renames an API Box or replaces its metadata. Omitted fields keep their current values. ```bash theme={null} continuous apibox update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous apibox update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* API Box ID. **--metadata, -m** `string` Replacement customer JSON metadata, up to 16 KiB and 64 nesting levels, or null to clear it. **--name, -n** `string` New name. Global flags apply to every command. See [Global flags](/cli/global-flags). # auth login Source: https://docs.continuouslabs.ai/cli/reference/auth/login Interactively configure authentication credentials Interactively configure authentication credentials for continuous. Secret credentials are stored in the OS keychain when available, with a config file fallback. All fields are optional — press Enter to skip any field you don't need. Use the configure command for both authentication and global parameters. ```bash theme={null} continuous auth login [flags] ``` Global flags apply to every command. See [Global flags](/cli/global-flags). # auth logout Source: https://docs.continuouslabs.ai/cli/reference/auth/logout Clear all stored authentication credentials Clear all stored authentication credentials from both the OS keychain and config file. This removes all credentials previously set via auth login or configure. ```bash theme={null} continuous auth logout [flags] ``` Global flags apply to every command. See [Global flags](/cli/global-flags). # auth whoami Source: https://docs.continuouslabs.ai/cli/reference/auth/whoami Display current authentication configuration Display the currently configured settings and their sources. Sources are shown as: \[flag] - Set via command line flag \[env] - Set via environment variable (CONTINUOUS\_\*) \[keyring] - Set via OS keychain (stored by login/configure command) \[config] - Set via config file (\~/.config/continuous/config.yaml) \[unset] - Not configured Credential values are masked for security. ```bash theme={null} continuous auth whoami [flags] ``` Global flags apply to every command. See [Global flags](/cli/global-flags). # configure Source: https://docs.continuouslabs.ai/cli/reference/configure Configure authentication credentials and preferences Settings, the environment variable name, and precedence are described in [Authentication](/cli/authentication). ```bash theme={null} continuous configure [flags] ``` Global flags apply to every command. See [Global flags](/cli/global-flags). # credentials create Source: https://docs.continuouslabs.ai/cli/reference/credentials/create Create credential Stores a connection to a real system: an API base URL and the header that carries the credential, with either the header value or an OAuth 2.0 client whose access token the API gets and renews; or a Web App login with its sign-in URL, which a person then signs in to by hand in the console. Returns the credential without its value. ```bash theme={null} continuous credentials create [flags] ``` ## Examples ```bash theme={null} continuous credentials create --name stripe-test ``` ## Flags **--base-url, -b** `string` The https URL of the real system. Requests go to paths under it. Send exactly one of base\_url and login. **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--header** `string` The HTTP header that carries the value. Defaults to Authorization. Not allowed with login. **--login, -l** `string` JSON object **--name, -n** `string` *required* Credential name. **--oauth** `string` JSON object **--value, -v** `string` The full header value, for example Bearer followed by a token. Required with base\_url unless oauth is sent; not allowed with login, which a person signs in to by hand after the credential exists. The API never returns it. Global flags apply to every command. See [Global flags](/cli/global-flags). # credentials delete Source: https://docs.continuouslabs.ai/cli/reference/credentials/delete Delete credential Deletes a credential and its stored value. ```bash theme={null} continuous credentials delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous credentials delete --id ``` ## Flags **--id, -i** `string` *required* Credential ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # credentials get Source: https://docs.continuouslabs.ai/cli/reference/credentials/get Get credential Returns a credential without its value. ```bash theme={null} continuous credentials get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous credentials get --id ``` ## Flags **--id, -i** `string` *required* Credential ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # credentials list Source: https://docs.continuouslabs.ai/cli/reference/credentials/list List credentials Returns the workspace's credentials, newest first. Credential values are never returned. ```bash theme={null} continuous credentials list [flags] ``` ## Examples ```bash theme={null} continuous credentials list ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) Global flags apply to every command. See [Global flags](/cli/global-flags). # credentials update Source: https://docs.continuouslabs.ai/cli/reference/credentials/update Update credential Renames a credential, changes its base URL and header or its login, or replaces its value or its OAuth 2.0 client. An API credential can move between a value and an OAuth client; a login stays a login. Omitted fields keep their current values. ```bash theme={null} continuous credentials update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous credentials update --id ``` ## Flags **--base-url, -b** `string` New https URL of the real system. **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--header** `string` New HTTP header that carries the value. **--id, -i** `string` *required* Credential ID. **--login, -l** `string` JSON object **--name, -n** `string` New credential name. **--oauth** `string` JSON object **--value, -v** `string` New full header value, in place of any OAuth client. Value or oauth is required when base\_url or header changes; not allowed for a login credential. Builds that start an agent after the change use it. The API never returns it. Global flags apply to every command. See [Global flags](/cli/global-flags). # explore Source: https://docs.continuouslabs.ai/cli/reference/explore Interactively browse and run commands Launch an interactive command explorer to browse available commands, view their descriptions and flags, and execute them. ```bash theme={null} continuous explore [flags] ``` Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox-snapshots cancel Source: https://docs.continuouslabs.ai/cli/reference/mcpbox-snapshots/cancel Cancel MCP Box Snapshot build Requests cancellation of a pending or active build and returns the Snapshot without waiting for the build to stop. Get the Snapshot until its status leaves pending or building. The build can finish before cancellation takes effect. A Snapshot whose build has settled is returned unchanged. ```bash theme={null} continuous mcpbox-snapshots cancel [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox-snapshots cancel --id ``` ## Flags **--id, -i** `string` *required* MCP Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox-snapshots create Source: https://docs.continuouslabs.ai/cli/reference/mcpbox-snapshots/create Create MCP Box Snapshot Starts an asynchronous build and returns the MCP Box Snapshot with status pending. Get the Snapshot until its status is ready, failed or canceled; MCP Boxes serve a ready one. The build makes an MCP server that answers from the API Box Snapshot it names, run in real time: with a credential, it copies the live MCP server at the credential's base\_url; without one, the server its instructions or research name. Builds queue with Simulator builds and count toward the same quotas. Send multipart/form-data with a JSON part named request and optional file parts named document with vendor documentation. ```bash theme={null} continuous mcpbox-snapshots create [flags] ``` ## Examples ```bash theme={null} continuous mcpbox-snapshots create ``` ## Flags **--document** `string` Vendor documentation the builder and reviewer read before they start, as repeated file parts: UTF-8 text (.md, .txt, .html, .json, .yaml, .xml, .csv) or PDF (.pdf). The documents share the request body limit. **--idempotency-key, -i** `string` Optional key for retrying this create safely. A retry with the same key and request returns the original result with its status; the same key with a different request returns 409 idempotency\_conflict. Without a key, each request creates a new resource. The key is recorded before the build starts, so a retry never starts a second build. **--request, -r** `string` *required* Request as JSON Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox-snapshots delete Source: https://docs.continuouslabs.ai/cli/reference/mcpbox-snapshots/delete Delete MCP Box Snapshot Deletes an MCP Box Snapshot. A build that is still pending or building is canceled first. The API Box Snapshot it was built against stays. A Snapshot that MCP Boxes serve returns 409 mcpbox\_snapshot\_in\_use; delete those MCP Boxes first. ```bash theme={null} continuous mcpbox-snapshots delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox-snapshots delete --id ``` ## Flags **--id, -i** `string` *required* MCP Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox-snapshots get Source: https://docs.continuouslabs.ai/cli/reference/mcpbox-snapshots/get Get MCP Box Snapshot Returns an MCP Box Snapshot of the workspace or the catalog, and its build status. ```bash theme={null} continuous mcpbox-snapshots get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox-snapshots get --id ``` ## Flags **--id, -i** `string` *required* MCP Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox-snapshots list Source: https://docs.continuouslabs.ai/cli/reference/mcpbox-snapshots/list List MCP Box Snapshots Returns the workspace's MCP Box Snapshots and the catalog's, newest first. Results can be filtered by status and source. ```bash theme={null} continuous mcpbox-snapshots list [flags] ``` ## Examples ```bash theme={null} continuous mcpbox-snapshots list ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--source** `string` Optional source filter. (options: catalog, build, box) **--status** `string` Optional build status filter. (options: pending, building, ready, failed, canceled) Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox-snapshots resume Source: https://docs.continuouslabs.ai/cli/reference/mcpbox-snapshots/resume Resume MCP Box Snapshot build Resumes a build that waits, as build.waiting reports: at QA because its live credential was rejected, or for more time after it used its time limit. For a credential wait, refresh the credential it names with PATCH /v1/credentials/\{id} first: QA then runs again with its current value, and the build goes on to finalize. For a wait for more time, send add\_seconds: the build continues where it stopped, with that much time from the resume. Returns the Snapshot, still building. A wait does not count toward the build's time limit: a build resumed from a credential wait has the time it had left when it began waiting. A build that is not waiting returns 409 mcpbox\_snapshot\_not\_waiting. ```bash theme={null} continuous mcpbox-snapshots resume [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox-snapshots resume --id ``` ## Flags **--add-seconds, -a** `int` Seconds to add to a build that waits for more time, from 1 to the largest timeout\_seconds a build request accepts. Required for a build whose build.waiting.type is time\_limit, and refused for one waiting for live credentials. The build's time limit with every addition is at most 259200 seconds (72 hours). **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox-snapshots update Source: https://docs.continuouslabs.ai/cli/reference/mcpbox-snapshots/update Update MCP Box Snapshot Renames an MCP Box Snapshot or replaces its metadata. Omitted fields keep their current values. Its tools do not change. Catalog Snapshots cannot be updated. ```bash theme={null} continuous mcpbox-snapshots update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox-snapshots update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* MCP Box Snapshot ID. **--metadata, -m** `string` Replacement customer JSON metadata, up to 16 KiB and 64 nesting levels, or null to clear it. **--name, -n** `string` New Snapshot name. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox create Source: https://docs.continuouslabs.ai/cli/reference/mcpbox/create Create MCP Box Creates an MCP Box that serves an MCP Box Snapshot's tools over MCP in front of an API Box, and starts it. The API Box must be in the workspace and started from the API Box Snapshot the MCP Box Snapshot was built against. It returns at once with status starting and the MCP Box's token; get the MCP Box until it is running. Send MCP requests to its endpoint followed by /mcp, with the token in X-Continuous-Token. The MCP Box keeps no state: its tools read and change the API Box, and a tool call while the API Box is stopped returns the API Box's refusal as a tool error. ```bash theme={null} continuous mcpbox create [flags] ``` ## Examples ```bash theme={null} continuous mcpbox create --apibox-id abx_01J8Z5X4K70000000000000001 --snapshot-id mbs_01J8Z5X4K70000000000000007 ``` ## Flags **--apibox-id, -a** `string` *required* An API Box of the workspace, started from the API Box Snapshot the MCP Box Snapshot was built against. **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--idempotency-key, -i** `string` Optional key for retrying this create safely. A retry with the same key and request returns the same MCP Box and token. The same key with a different request returns 409 idempotency\_conflict. **--metadata, -m** `string` Customer JSON metadata, up to 16 KiB and 64 nesting levels. **--name, -n** `string` Name for the MCP Box. Omission generates a name. **--snapshot-id, -s** `string` *required* A ready MCP Box Snapshot of the workspace or the catalog. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox delete Source: https://docs.continuouslabs.ai/cli/reference/mcpbox/delete Delete MCP Box Deletes an MCP Box, running or stopped. Its API Box stays. Its runtime is released after the response. ```bash theme={null} continuous mcpbox delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox delete --id ``` ## Flags **--id, -i** `string` *required* MCP Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox get Source: https://docs.continuouslabs.ai/cli/reference/mcpbox/get Get MCP Box Returns an MCP Box, its status and its connection: its endpoint and token, whether it is running or stopped. Requests reach it only while it is running. ```bash theme={null} continuous mcpbox get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox get --id ``` ## Flags **--id, -i** `string` *required* MCP Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox list-mcpboxes Source: https://docs.continuouslabs.ai/cli/reference/mcpbox/list-mcpboxes List MCP Boxes Returns the workspace's MCP Boxes, newest first. Results can be filtered by status and Snapshot. ```bash theme={null} continuous mcpbox list-mcpboxes [flags] ``` Alias: `lm` ## Examples ```bash theme={null} continuous mcpbox list-mcpboxes ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--snapshot-id** `string` Only MCP Boxes that serve this Snapshot. **--status** `string` Only MCP Boxes with this status. (options: starting, running, stopping, stopped) Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox save-mcpbox-snapshot Source: https://docs.continuouslabs.ai/cli/reference/mcpbox/save-mcpbox-snapshot Save MCP Box as Snapshot Saves an MCP Box and the API Box it fronts as a new MCP Box Snapshot and a new API Box Snapshot, both ready when the response returns, or neither. The API Box must be running; a paused one is woken, and it keeps running. The MCP Box Snapshot serves the MCP Box's tools and is built against the API Box Snapshot, which holds the API Box's service and current state. Create an API Box from apibox\_snapshot\_id, then an MCP Box from the MCP Box Snapshot in front of it. Both Snapshots outlive the Boxes. An MCP Box whose API Box was deleted returns 409 mcpbox\_apibox\_gone; a starting API Box returns 409 apibox\_starting; a stopping or stopped one returns 409 apibox\_stopped; one whose runtime cannot save its state returns 409 mcpbox\_rebuild\_required. ```bash theme={null} continuous mcpbox save-mcpbox-snapshot [flags] ``` Alias: `sms` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox save-mcpbox-snapshot --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id** `string` *required* ID of the Box to save. **--idempotency-key** `string` Optional key for retrying this save safely. A retry with the same key and request returns the Snapshot the first save created. The same key with a different request returns 409 idempotency\_conflict. **--metadata, -m** `string` Customer JSON metadata, up to 16 KiB and 64 nesting levels. **--name, -n** `string` Name for the Snapshot. Omission generates a name. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox start Source: https://docs.continuouslabs.ai/cli/reference/mcpbox/start Start MCP Box Starts a stopped MCP Box in front of its API Box, and returns at once with status starting; get the MCP Box until it is running. Its token stays the same; its get returns it. A running, starting or stopping MCP Box returns 409 mcpbox\_not\_stopped, and one whose API Box was deleted 409 mcpbox\_apibox\_gone. ```bash theme={null} continuous mcpbox start [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox start --id ``` ## Flags **--id, -i** `string` *required* MCP Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox stop Source: https://docs.continuouslabs.ai/cli/reference/mcpbox/stop Stop MCP Box Stops a running MCP Box and releases its runtime; its API Box keeps running, and its token stays for the next start. It returns at once with status stopping; get the MCP Box until it is stopped. A stopped MCP Box is returned unchanged; a starting one returns 409 mcpbox\_starting. ```bash theme={null} continuous mcpbox stop [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox stop --id ``` ## Flags **--id, -i** `string` *required* MCP Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # mcpbox update Source: https://docs.continuouslabs.ai/cli/reference/mcpbox/update Update MCP Box Renames an MCP Box or replaces its metadata. Omitted fields keep their current values. ```bash theme={null} continuous mcpbox update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous mcpbox update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* MCP Box ID. **--metadata, -m** `string` Replacement customer JSON metadata, up to 16 KiB and 64 nesting levels, or null to clear it. **--name, -n** `string` New name. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulation-snapshots create Source: https://docs.continuouslabs.ai/cli/reference/simulation-snapshots/create Create Simulation Snapshot DEPRECATED: Use API Box for APIs and Web Box for web apps Starts saving a running Simulation's current state and returns the Snapshot with status creating. Poll it until it is ready, or failed with an error. Saving closes the Simulation's open event streams and WebSockets and does not change its state; while it saves, an advance returns 409 clock\_conflict, and a stop waits for it. Create Simulations from a ready Snapshot with snapshot\_id; it outlives its Simulation. A stopped Simulation returns 409 simulation\_stopped. Reuse the Idempotency-Key to retry safely. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulation-snapshots create [flags] ``` ## Examples ```bash theme={null} continuous simulation-snapshots create --name before-refund --simulation-id sim_01J8Z5X4K7M2N9P0Q1R2S3T4V6 ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--idempotency-key, -i** `string` Optional key for retrying this create safely. A retry with the same key and request returns the original result with its status; the same key with a different request returns 409 idempotency\_conflict. Without a key, each request creates a new resource. **--name, -n** `string` *required* Snapshot name. **--simulation-id, -s** `string` *required* ID of the running Simulation to save. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulation-snapshots delete Source: https://docs.continuouslabs.ai/cli/reference/simulation-snapshots/delete Delete Simulation Snapshot DEPRECATED: Use API Box for APIs and Web Box for web apps Deletes a Snapshot and its saved state. Simulations created from it keep running, and their snapshot\_id becomes null. While it is creating, the response is 409 snapshot\_not\_ready; while a Simulation is starting from it, 409 snapshot\_in\_use. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulation-snapshots delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulation-snapshots delete --id ``` ## Flags **--id, -i** `string` *required* Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulation-snapshots get Source: https://docs.continuouslabs.ai/cli/reference/simulation-snapshots/get Get Simulation Snapshot DEPRECATED: Use API Box for APIs and Web Box for web apps Returns a Snapshot. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulation-snapshots get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulation-snapshots get --id ``` ## Flags **--id, -i** `string` *required* Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulation-snapshots list Source: https://docs.continuouslabs.ai/cli/reference/simulation-snapshots/list List Simulation Snapshots DEPRECATED: Use API Box for APIs and Web Box for web apps Returns the workspace's Snapshots, newest first. Filter by simulation\_id for the Snapshots of one Simulation. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulation-snapshots list [flags] ``` ## Examples ```bash theme={null} continuous simulation-snapshots list ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--simulation-id, -s** `string` Optional filter for the Snapshots saved from this Simulation. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulation-snapshots update Source: https://docs.continuouslabs.ai/cli/reference/simulation-snapshots/update Update Simulation Snapshot DEPRECATED: Use API Box for APIs and Web Box for web apps Renames a Snapshot. Omitted fields keep their current values. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulation-snapshots update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulation-snapshots update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Snapshot ID. **--name, -n** `string` New Snapshot name. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations create Source: https://docs.continuouslabs.ai/cli/reference/simulations/create Create Simulation DEPRECATED: Use API Box for APIs and Web Box for web apps Creates a Simulation from a ready Simulator, or from a Snapshot with its saved state, and starts it. The response returns once the Simulation is admitted, with status starting; read it until it is running. The response includes the endpoint and the Simulation's token, which does not expire. If its runtime cannot start, the Simulation is deleted. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations create [flags] ``` ## Examples ```bash theme={null} continuous simulations create ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--idempotency-key** `string` Optional key for retrying this create safely. A retry with the same key and request returns the original result with its status; the same key with a different request returns 409 idempotency\_conflict. Without a key, each request creates a new resource. **--include-sample-data** Start with the Simulator's sample data: a realistic account loaded on top of its seed before the first request. Defaults to false, a brand-new workspace. Requires a Simulator that carries sample data; see its composition. Not allowed with snapshot\_id. **--metadata, -m** `string` Customer JSON metadata, up to 16 KiB and 64 nesting levels. Returned by create, get, and list. Omission uses null. **--name, -n** `string` Name for the Simulation. Omission generates a name. The ID stays its identity, and names need not be unique. **--simulator-id** `string` ID of the ready Simulator. Set exactly one of simulator\_id and snapshot\_id. **--snapshot-id** `string` ID of the Snapshot to start from. The Simulation takes its state, clock, Simulator digest and runtime placement. Set exactly one of simulator\_id and snapshot\_id. **--start-time** `string` Initial simulated time in RFC 3339 format. Omission uses 2024-01-01T00:00:00Z. Precision is milliseconds. Not allowed with snapshot\_id. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations create-simulation-advance Source: https://docs.continuouslabs.ai/cli/reference/simulations/create-simulation-advance Advance Simulation Time DEPRECATED: Use API Box for APIs and Web Box for web apps Schedules an absolute clock advance. An advance commits due local events in ordered batches, one step each; a failure keeps the batches already committed. Poll the returned operation until it completes. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations create-simulation-advance [flags] ``` Alias: `csa` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations create-simulation-advance --id --idempotency-key --to 2026-07-12T00:40:22.318Z ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id** `string` *required* Simulation ID. **--idempotency-key** `string` *required* Stable key for this request. Reuse with the same target returns the same operation; reuse with a different target returns 409 idempotency\_conflict. **--to, -t** `string` *required* Absolute target time in RFC 3339, with at most millisecond precision. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations delete Source: https://docs.continuouslabs.ai/cli/reference/simulations/delete Delete Simulation DEPRECATED: Use API Box for APIs and Web Box for web apps Deletes a Simulation and its saved runtime state, and cancels an active advance. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations delete --id ``` ## Flags **--id, -i** `string` *required* Simulation ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations get Source: https://docs.continuouslabs.ai/cli/reference/simulations/get Get Simulation DEPRECATED: Use API Box for APIs and Web Box for web apps Returns a Simulation, its current status, and the actors a request can act as. The response does not include tokens. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations get --id ``` ## Flags **--id, -i** `string` *required* Simulation ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations get-simulation-advance Source: https://docs.continuouslabs.ai/cli/reference/simulations/get-simulation-advance Get Simulation Clock Advance DEPRECATED: Use API Box for APIs and Web Box for web apps Returns durable clock progress, the event count, and the committed step or failure. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations get-simulation-advance [flags] ``` Alias: `gsa` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations get-simulation-advance --id --advance-id ``` ## Flags **--advance-id, -a** `string` *required* Clock advance operation ID. **--id, -i** `string` *required* Simulation ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations get-simulation-token Source: https://docs.continuouslabs.ai/cli/reference/simulations/get-simulation-token Get Current Simulation Token DEPRECATED: Use API Box for APIs and Web Box for web apps Returns the Simulation's current token without rotating it, including while the Simulation is stopped. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations get-simulation-token [flags] ``` Alias: `gst` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations get-simulation-token --id ``` ## Flags **--id, -i** `string` *required* Simulation ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations list Source: https://docs.continuouslabs.ai/cli/reference/simulations/list List Simulations DEPRECATED: Use API Box for APIs and Web Box for web apps Returns all Simulations that the API key can access. Results can be filtered by status, Simulator ID, pinned Simulator digest, or the Snapshot they started from. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations list [flags] ``` ## Examples ```bash theme={null} continuous simulations list ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--id, -i** `stringArray` Optional Simulation ID filter; repeat it to list up to 200 Simulations by ID. Absent lists every Simulation. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--simulator-digest** `string` Optional exact pinned OCI manifest digest filter. **--simulator-id** `string` Optional Simulator ID filter. **--snapshot-id** `string` Optional filter for the Simulations started from this Snapshot. **--status** `string` Optional status filter. (options: running, stopped) Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations list-simulation-advance-events Source: https://docs.continuouslabs.ai/cli/reference/simulations/list-simulation-advance-events List Clock Advance Events DEPRECATED: Use API Box for APIs and Web Box for web apps Returns the ordered event trace for a committed advance. The Simulation must be running. A Simulation created from a Snapshot keeps the traces in the state it started from. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations list-simulation-advance-events [flags] ``` Alias: `lsae` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations list-simulation-advance-events --id --advance-id ``` ## Flags **--advance-id** `string` *required* Advance ID. A Simulation created from a Snapshot can read the runtime receipts in the state it started from. **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--id, -i** `string` *required* Simulation ID. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations list-simulation-steps Source: https://docs.continuouslabs.ai/cli/reference/simulations/list-simulation-steps List Simulation Steps DEPRECATED: Use API Box for APIs and Web Box for web apps Lists the Simulation's steps in order. Each request that changed state is one step; a request that only reads registers none. A stopped Simulation returns 409 simulation\_stopped; start it first. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations list-simulation-steps [flags] ``` Alias: `lss` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations list-simulation-steps --id ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--id, -i** `string` *required* Simulation ID. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations regenerate-simulation-token Source: https://docs.continuouslabs.ai/cli/reference/simulations/regenerate-simulation-token Regenerate Simulation Token DEPRECATED: Use API Box for APIs and Web Box for web apps Replaces the Simulation's token, including while the Simulation is stopped. When the replacement commits, requests with the previous token return 401 auth\_invalid with X-Continuous-Simulation-Token-Rejected: true. Reuse the Idempotency-Key to retry safely. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations regenerate-simulation-token [flags] ``` Alias: `rst` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations regenerate-simulation-token --id --idempotency-key ``` ## Flags **--id** `string` *required* Simulation ID. **--idempotency-key** `string` *required* Stable key for this regeneration request. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations start Source: https://docs.continuouslabs.ai/cli/reference/simulations/start Start Simulation DEPRECATED: Use API Box for APIs and Web Box for web apps Starts a stopped Simulation from its saved state. The response returns once the start is admitted, with status starting; read the Simulation until it is running. If its runtime cannot start, it returns to stopped. Stop and start do not change its token; read it with GET /v1/simulations/\{id}/token. A running or starting Simulation is returned unchanged. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations start [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations start --id ``` ## Flags **--id, -i** `string` *required* Simulation ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations stop Source: https://docs.continuouslabs.ai/cli/reference/simulations/stop Stop Simulation DEPRECATED: Use API Box for APIs and Web Box for web apps Stops a Simulation and saves its state. The response returns once the stop is accepted, with status stopping; read the Simulation until it is stopped. Requests to its endpoint are refused while it stops, and return 409 simulation\_stopped once it is stopped, until you start it again. A stopped or stopping Simulation is returned unchanged. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations stop [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations stop --id ``` ## Flags **--id, -i** `string` *required* Simulation ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulations update Source: https://docs.continuouslabs.ai/cli/reference/simulations/update Update Simulation DEPRECATED: Use API Box for APIs and Web Box for web apps Renames a Simulation or replaces its metadata. Omitted fields keep their current values. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulations update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulations update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Simulation ID. **--metadata, -m** `string` Replacement customer JSON metadata, up to 16 KiB and 64 nesting levels, or null to clear it. **--name, -n** `string` New Simulation name. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulators build Source: https://docs.continuouslabs.ai/cli/reference/simulators/build Build Simulator DEPRECATED: Use API Box for APIs and Web Box for web apps Starts an asynchronous Simulator build and returns the Simulator with status pending. Builds start in queue order when workspace capacity is available. Send multipart/form-data with a JSON part named request. To build from a document, add a file part named spec with the OpenAPI, WSDL or GraphQL document. For an incremental build, omit spec and set parent\_id and instructions. Add file parts named document to give the builder and reviewer vendor documentation. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulators build [flags] ``` ## Examples ```bash theme={null} continuous simulators build ``` ## Flags **--document** `string` Vendor documentation the builder and reviewer read before they start, as repeated file parts: UTF-8 text (.md, .txt, .html, .json, .yaml, .xml, .csv) or PDF (.pdf). The documents share the request body limit with the spec. An incremental build inherits its parent's documents; a document sent with the same name replaces the parent's. **--idempotency-key, -i** `string` Optional key for retrying this create safely. A retry with the same key and request returns the original result with its status; the same key with a different request returns 409 idempotency\_conflict. Without a key, each request creates a new resource. The key is recorded before the build starts, so a retry never starts a second build. **--request, -r** `string` *required* Request as JSON **--spec, -s** `string` OpenAPI, WSDL or GraphQL document, UTF-8 encoded, at most 64 MiB. Required unless the request is an incremental build (parent\_id and instructions, no spec). Global flags apply to every command. See [Global flags](/cli/global-flags). # simulators cancel Source: https://docs.continuouslabs.ai/cli/reference/simulators/cancel Cancel Simulator Build DEPRECATED: Use API Box for APIs and Web Box for web apps Requests cancellation of a pending or active Simulator build and returns the Simulator without waiting for the build to stop. Get the Simulator until its status leaves pending or building. The build can finish before cancellation takes effect. A Simulator whose build has settled is returned unchanged. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulators cancel [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulators cancel --id ``` ## Flags **--id, -i** `string` *required* Simulator ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulators clone Source: https://docs.continuouslabs.ai/cli/reference/simulators/clone Clone Simulator DEPRECATED: Use API Box for APIs and Web Box for web apps Creates a ready copy of a ready Simulator in another workspace. The clone has a new ID and the source's image digest; the source is unchanged. The source is the caller's workspace: an API key's own workspace, or X-Workspace-Id for a session. An API key may clone into any other workspace of its organization. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulators clone [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulators clone --id --target-workspace-id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id** `string` *required* Source Simulator ID. **--idempotency-key** `string` Optional key for retrying this create safely. A retry with the same key and request returns the original result with its status; the same key with a different request returns 409 idempotency\_conflict. Without a key, each request creates a new resource. Keys are scoped to the target workspace. **--name, -n** `string` Display name for the clone. Defaults to the source Simulator's name. **--target-workspace-id, -t** `string` *required* Workspace that receives the clone. It must differ from the source workspace. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulators delete Source: https://docs.continuouslabs.ai/cli/reference/simulators/delete Delete Simulator DEPRECATED: Use API Box for APIs and Web Box for web apps Deletes a Simulator that has no dependent Simulations, child Simulators, or Simulation Snapshots. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulators delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulators delete --id ``` ## Flags **--id, -i** `string` *required* Simulator ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulators get Source: https://docs.continuouslabs.ai/cli/reference/simulators/get Get Simulator DEPRECATED: Use API Box for APIs and Web Box for web apps Returns a Simulator and its current build status. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulators get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulators get --id ``` ## Flags **--id, -i** `string` *required* Simulator ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulators list Source: https://docs.continuouslabs.ai/cli/reference/simulators/list List Simulators DEPRECATED: Use API Box for APIs and Web Box for web apps Returns all Simulators that the API key can access. Results can be filtered by status. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulators list [flags] ``` ## Examples ```bash theme={null} continuous simulators list ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--status, -s** `string` Optional build status filter. (options: pending, building, ready, failed, canceled) Global flags apply to every command. See [Global flags](/cli/global-flags). # simulators resume Source: https://docs.continuouslabs.ai/cli/reference/simulators/resume Resume Simulator Build DEPRECATED: Use API Box for APIs and Web Box for web apps Resumes a build that waits, as build.waiting reports: at QA because its live credentials were rejected, or for more time after it used its time limit. For a credential wait, refresh each credential it names with PATCH /v1/credentials/\{id} first: QA then runs again with their current values, and the build goes on to finalize. For a wait for more time, send add\_seconds: the build continues where it stopped, with that much time from the resume. Returns the Simulator, still building. A wait does not count toward the build's time limit: a build resumed from a credential wait has the time it had left when it began waiting. A build that is not waiting returns 409 simulator\_not\_waiting. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulators resume [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulators resume --id ``` ## Flags **--add-seconds, -a** `int` Seconds to add to a build that waits for more time, from 1 to the largest timeout\_seconds a build request accepts. Required for a build whose build.waiting.type is time\_limit, and refused for one waiting for live credentials. The build's time limit with every addition is at most 259200 seconds (72 hours). **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Simulator ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # simulators update Source: https://docs.continuouslabs.ai/cli/reference/simulators/update Update Simulator DEPRECATED: Use API Box for APIs and Web Box for web apps Renames a Simulator. Omitted fields keep their current values. Continuous catalog Simulators cannot be changed. Deprecated. Use API Box for APIs and Web Box for web apps. ```bash theme={null} continuous simulators update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous simulators update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Simulator ID. **--name, -n** `string` New Simulator name. Global flags apply to every command. See [Global flags](/cli/global-flags). # version Source: https://docs.continuouslabs.ai/cli/reference/version Print the CLI version Print the current version of the continuous CLI. The version defaults to the SDK version set during generation, but can be overridden at build time using Go linker flags: go build -ldflags "-X main.version=x.y.z -X main.buildTime=\$(date -u +%Y-%m-%dT%H:%M:%SZ)" ./cmd/continuous ```bash theme={null} continuous version [flags] ``` Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox-snapshots cancel Source: https://docs.continuouslabs.ai/cli/reference/webbox-snapshots/cancel Cancel Web Box Snapshot build Requests cancellation of a pending or active build and returns the Snapshot without waiting for the build to stop. Get the Snapshot until its status leaves pending or building. The build can finish before cancellation takes effect. A Snapshot whose build has settled is returned unchanged. ```bash theme={null} continuous webbox-snapshots cancel [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox-snapshots cancel --id ``` ## Flags **--id, -i** `string` *required* Web Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox-snapshots create Source: https://docs.continuouslabs.ai/cli/reference/webbox-snapshots/create Create Web Box Snapshot Starts an asynchronous build and returns the Web Box Snapshot with status pending. Get the Snapshot until its status is ready, failed or canceled; Web Boxes start from a ready one. The build runs in real time: the builder and QA use the vendor's live web app through its login credential, and the built app has no simulated clock. Builds queue with Simulator builds and count toward the same quotas. Send multipart/form-data with a JSON part named request and optional file parts named document with vendor documentation. ```bash theme={null} continuous webbox-snapshots create [flags] ``` ## Examples ```bash theme={null} continuous webbox-snapshots create ``` ## Flags **--document** `string` Vendor documentation the builder and reviewer read before they start, as repeated file parts: UTF-8 text (.md, .txt, .html, .json, .yaml, .xml, .csv) or PDF (.pdf). The documents share the request body limit. **--idempotency-key, -i** `string` Optional key for retrying this create safely. A retry with the same key and request returns the original result with its status; the same key with a different request returns 409 idempotency\_conflict. Without a key, each request creates a new resource. The key is recorded before the build starts, so a retry never starts a second build. **--request, -r** `string` *required* Request as JSON Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox-snapshots delete Source: https://docs.continuouslabs.ai/cli/reference/webbox-snapshots/delete Delete Web Box Snapshot Deletes a Web Box Snapshot. A build that is still pending or building is canceled first. A Snapshot that Web Boxes started from returns 409 webbox\_snapshot\_in\_use; delete those Web Boxes first. Catalog Snapshots cannot be deleted. ```bash theme={null} continuous webbox-snapshots delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox-snapshots delete --id ``` ## Flags **--id, -i** `string` *required* Web Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox-snapshots get Source: https://docs.continuouslabs.ai/cli/reference/webbox-snapshots/get Get Web Box Snapshot Returns a Web Box Snapshot of the workspace or the catalog, and its build status. ```bash theme={null} continuous webbox-snapshots get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox-snapshots get --id ``` ## Flags **--id, -i** `string` *required* Web Box Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox-snapshots list Source: https://docs.continuouslabs.ai/cli/reference/webbox-snapshots/list List Web Box Snapshots Returns the workspace's Web Box Snapshots and the catalog's, newest first. Results can be filtered by source and status. ```bash theme={null} continuous webbox-snapshots list [flags] ``` ## Examples ```bash theme={null} continuous webbox-snapshots list ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--source** `string` Optional source filter. (options: catalog, build, box) **--status** `string` Optional build status filter. (options: pending, building, ready, failed, canceled) Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox-snapshots resume Source: https://docs.continuouslabs.ai/cli/reference/webbox-snapshots/resume Resume Web Box Snapshot build Resumes a build that waits, as build.waiting reports: at QA because its live credentials were rejected, or for more time after it used its time limit. For a credential wait, refresh each credential it names with PATCH /v1/credentials/\{id} first: QA then runs again with their current values, and the build goes on to finalize. For a wait for more time, send add\_seconds: the build continues where it stopped, with that much time from the resume. Returns the Snapshot, still building. A wait does not count toward the build's time limit: a build resumed from a credential wait has the time it had left when it began waiting. A build that is not waiting returns 409 webbox\_snapshot\_not\_waiting. ```bash theme={null} continuous webbox-snapshots resume [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox-snapshots resume --id ``` ## Flags **--add-seconds, -a** `int` Seconds to add to a build that waits for more time, from 1 to the largest timeout\_seconds a build request accepts. Required for a build whose build.waiting.type is time\_limit, and refused for one waiting for live credentials. The build's time limit with every addition is at most 259200 seconds (72 hours). **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Snapshot ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox-snapshots update Source: https://docs.continuouslabs.ai/cli/reference/webbox-snapshots/update Update Web Box Snapshot Renames a Web Box Snapshot or replaces its metadata. Omitted fields keep their current values. The built app does not change. Catalog Snapshots cannot be updated. ```bash theme={null} continuous webbox-snapshots update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox-snapshots update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Web Box Snapshot ID. **--metadata, -m** `string` Replacement customer JSON metadata, up to 16 KiB and 64 nesting levels, or null to clear it. **--name, -n** `string` New Snapshot name. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox create Source: https://docs.continuouslabs.ai/cli/reference/webbox/create Create Web Box Creates a Web Box from a ready Web Box Snapshot and starts it. It returns at once with status starting; get the Web Box until it is running. Open its url in a browser: the app is served at a host of its own, open to anyone with the URL. Each Web Box has its own state, and runs in real time. ```bash theme={null} continuous webbox create [flags] ``` ## Examples ```bash theme={null} continuous webbox create --snapshot-id wbs_01J8Z5X4K70000000000000005 ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--idempotency-key** `string` Optional key for retrying this create safely. A retry with the same key and request returns the same Web Box. The same key with a different request returns 409 idempotency\_conflict. **--include-sample-data** Start with the Snapshot's sample data: a realistic account loaded on top of its seed before the first request. Defaults to false, a brand-new workspace. Requires a Snapshot that carries sample data; see its composition. **--metadata, -m** `string` Customer JSON metadata, up to 16 KiB and 64 nesting levels. **--name, -n** `string` Name for the Web Box. Omission generates a name. **--snapshot-id, -s** `string` *required* A ready Web Box Snapshot of the workspace or the catalog. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox delete Source: https://docs.continuouslabs.ai/cli/reference/webbox/delete Delete Web Box Deletes a Web Box, running or stopped, with its state. Its runtime is released after the response. ```bash theme={null} continuous webbox delete [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox delete --id ``` ## Flags **--id, -i** `string` *required* Web Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox get Source: https://docs.continuouslabs.ai/cli/reference/webbox/get Get Web Box Returns a Web Box, its status and its connection: the URL that opens its app, whether it is running or stopped. The app answers only while the Web Box is running. ```bash theme={null} continuous webbox get [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox get --id ``` ## Flags **--id, -i** `string` *required* Web Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox list-webbox-steps Source: https://docs.continuouslabs.ai/cli/reference/webbox/list-webbox-steps List Web Box steps Lists the Web Box's steps in order. Each request that changed state is one step; a request that only reads registers none. A Web Box that is not running returns 409 webbox\_stopped. ```bash theme={null} continuous webbox list-webbox-steps [flags] ``` Alias: `lws` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox list-webbox-steps --id ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--id, -i** `string` *required* Web Box ID. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox list-webboxes Source: https://docs.continuouslabs.ai/cli/reference/webbox/list-webboxes List Web Boxes Returns the workspace's Web Boxes, newest first. Results can be filtered by status and Snapshot. ```bash theme={null} continuous webbox list-webboxes [flags] ``` Alias: `lw` ## Examples ```bash theme={null} continuous webbox list-webboxes ``` ## Flags **--all, -a** Automatically paginate and fetch all results (streams NDJSON for JSON output) **--cursor, -c** `string` Opaque next\_cursor value from a previous page. **--limit, -l** `int` (default: 50) Page size. Values below 1 use 50. Values above 200 use 200. **--max-pages** `int` Maximum number of pages to fetch when using --all (0 = no limit) **--snapshot-id** `string` Only Web Boxes started from this Snapshot. **--status** `string` Only Web Boxes with this status. (options: starting, running, stopping, stopped) Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox save-webbox-snapshot Source: https://docs.continuouslabs.ai/cli/reference/webbox/save-webbox-snapshot Save Web Box as Snapshot Saves a running Web Box's app and current state as a Web Box Snapshot, ready when the response returns. The Web Box keeps running, and a paused one is woken. Web Boxes created from the Snapshot start with the saved state instead of a new workspace, so they refuse include\_sample\_data. The Snapshot outlives the Web Box. A starting Web Box returns 409 webbox\_starting; a stopping or stopped one returns 409 webbox\_stopped; one whose runtime cannot save its state returns 409 webbox\_rebuild\_required. ```bash theme={null} continuous webbox save-webbox-snapshot [flags] ``` Alias: `sws` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox save-webbox-snapshot --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id** `string` *required* ID of the Box to save. **--idempotency-key** `string` Optional key for retrying this save safely. A retry with the same key and request returns the Snapshot the first save created. The same key with a different request returns 409 idempotency\_conflict. **--metadata, -m** `string` Customer JSON metadata, up to 16 KiB and 64 nesting levels. **--name, -n** `string` Name for the Snapshot. Omission generates a name. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox start Source: https://docs.continuouslabs.ai/cli/reference/webbox/start Start Web Box Starts a stopped Web Box from the state its stop saved, and returns at once with status starting. A running, starting or stopping Web Box returns 409 webbox\_not\_stopped. ```bash theme={null} continuous webbox start [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox start --id ``` ## Flags **--id, -i** `string` *required* Web Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox stop Source: https://docs.continuouslabs.ai/cli/reference/webbox/stop Stop Web Box Stops a running Web Box: it saves its state, and releases its runtime. It returns at once with status stopping; get the Web Box until it is stopped. A stopped Web Box is returned unchanged; a starting one returns 409 webbox\_starting. ```bash theme={null} continuous webbox stop [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox stop --id ``` ## Flags **--id, -i** `string` *required* Web Box ID. Global flags apply to every command. See [Global flags](/cli/global-flags). # webbox update Source: https://docs.continuouslabs.ai/cli/reference/webbox/update Update Web Box Renames a Web Box or replaces its metadata. Omitted fields keep their current values. ```bash theme={null} continuous webbox update [flags] ``` ## Examples Replace `` with the resource ID from your response before you run the command. ```bash theme={null} continuous webbox update --id ``` ## Flags **--body** `string` Request body as JSON (alternative to individual flags). Can also be provided via stdin. **--id, -i** `string` *required* Web Box ID. **--metadata, -m** `string` Replacement customer JSON metadata, up to 16 KiB and 64 nesting levels, or null to clear it. **--name, -n** `string` New name. Global flags apply to every command. See [Global flags](/cli/global-flags). # whoami Source: https://docs.continuouslabs.ai/cli/reference/whoami Display current authentication configuration Display the currently configured settings and their sources. Sources are shown as: \[flag] - Set via command line flag \[env] - Set via environment variable (CONTINUOUS\_\*) \[keyring] - Set via OS keychain (stored by configure command) \[config] - Set via config file (\~/.config/continuous/config.yaml) \[unset] - Not configured Credential values are masked for security. ```bash theme={null} continuous whoami [flags] ``` Global flags apply to every command. See [Global flags](/cli/global-flags). # Scripts and agents Source: https://docs.continuouslabs.ai/cli/scripting Run the CLI without prompts, preview requests, and read errors from scripts and coding agents. ## Turn off prompts When stdin and stdout are a terminal, the CLI prompts for missing required flags and opens an explorer when you run `continuous` with no command. Pass `--no-interactive` in scripts so the CLI never prompts, even from a terminal: ```bash theme={null} continuous apibox list-apiboxes --no-interactive --output-format json ``` Without a terminal the CLI never prompts. `continuous explore` then exits with an error, and `continuous` with no command prints help. ## Read values in a script `jq` is optional. Use it when a script needs raw values from a JSON response. For example, print one API Box ID per line: ```bash theme={null} continuous apibox list-apiboxes -o json | jq -r '.apiboxes[].id' ``` For curl scripts, `-fsS` hides the progress meter and reports failed HTTP requests. These flags are optional when you run a request by hand. ## Send a request body Commands with a JSON body, such as create and update commands, take individual flags, a `--body` JSON string, or JSON on stdin. Flags override values from `--body` or stdin. `--body` wins over stdin. API commands read stdin to end-of-file whenever stdin is not a terminal, even when the flags already supply everything. In a pipeline or a job that leaves stdin open, the command waits until stdin closes. Redirect from `/dev/null`, or pass `--body` to a command with a JSON body, when nothing is meant to arrive on stdin: ```bash theme={null} continuous apibox create \ --snapshot-id abs_01J8Z5X4K70000000000000002 \ --no-interactive &2; exit 1 ;; esac sleep 60 done box_id=$(continuous apibox create --snapshot-id "$snapshot_id" -o json &2; exit 1 ;; esac sleep 2 done endpoint=$(jq -r '.connection.endpoint' <<<"$box") token=$(jq -r '.connection.token' <<<"$box") curl -fsS "$endpoint/" -H "X-Continuous-Token: $token" ``` Snapshot IDs start with `abs_` and API Box IDs with `abx_`. Replace `` with a route of your API. `continuous apibox stop --id "$box_id"` saves the API Box's state, and `continuous apibox start --id "$box_id"` resumes it with the same token. ## Preview a request `--dry-run` prints the method, URL, headers, and body to stderr and skips the network call. The `Authorization` header is redacted. ```bash theme={null} continuous apibox create \ --snapshot-id abs_01J8Z5X4K70000000000000002 --dry-run ``` The token lasts as long as the API Box. `GET /v1/apibox/{id}` returns the endpoint and token again in its `connection`. Do not send your API key to the endpoint. Each API Box runs in real time and has its own state. Two API Boxes from the same Snapshot do not share data. ## Act as a caller A Snapshot lists the callers its build names in `actors`. Send an actor's `id` in this header to act as that caller: ```text theme={null} X-Continuous-Actor: ``` Without the header, a request acts as the default actor. A value outside printable ASCII, longer than 256 characters, repeated, or containing a comma returns `400` with code `invalid_actor_header`. An id that names no actor in the API Box returns `400` with code `unavailable_actor`. An actor that only the sample data holds is available only in an API Box created with `include_sample_data`. ## Stop, start and delete `POST /v1/apibox/{id}/stop` saves the state and releases the runtime. `POST /v1/apibox/{id}/start` restores it, with the same token. A stopped API Box keeps its saved state, with no time limit, until you delete it. `DELETE /v1/apibox/{id}` removes the API Box and its state; the Snapshot stays. ## Save as a Snapshot `POST /v1/apibox/{id}/snapshot` saves a running API Box's current state as a new API Box Snapshot, with `source` `box`, ready when the response returns. Its `source_box_id` and `source_snapshot_id` name the API Box and the Snapshot it started from. The API Box keeps running. API Boxes created from the Snapshot start with that state, so they cannot use `include_sample_data`. The Snapshot stays when you delete the API Box, and you cannot delete the Snapshot while API Boxes use it. ## Clone a Snapshot into another workspace `POST /v1/apibox-snapshots/{id}/clone` copies a ready API Box Snapshot from your workspace into another workspace of your organization, with the same rules as a [Simulator clone](/concepts/simulators#clone-a-simulator-into-another-workspace). The clone is a new `ready` Snapshot with its own `abs_` ID. It has the source's artifact, documents and saved state, and the source's name unless you set `name`, so no build runs. It has no credentials, `parent_id` or `source_snapshot_id`; a clone of a saved Snapshot keeps its `source_box_id`. Deleting the source does not change the clone. Catalog Snapshots cannot be cloned. ## Steps Each request that changes state is one step, and so is each time the API Box handles async events the app scheduled, labelled `Handle async events`. `GET /v1/apibox/{id}/steps` lists them in order while the API Box runs. Running API Boxes, Web Boxes, MCP Boxes and Simulations share one workspace limit. See [Quotas and limits](/api-reference/quotas). # Send requests to a Simulation Source: https://docs.continuouslabs.ai/concepts/data-plane Send the simulated API's own requests to the Simulation endpoint with a Simulation token. > [!WARNING] > > Simulations are deprecated. Use an [API Box](/concepts/api-box) for an API and a [Web Box](/concepts/web-box) for a web app. Existing Simulations keep working. Send the simulated API's own requests to `{endpoint}/{path}` with the `X-Continuous-Simulation-Token` header. `endpoint` comes from the create, get, and list responses. The Simulation serves the Simulator's full API, so an existing client of that API can address the Simulation without speaking the Continuous control-plane API. Replace only the vendor's host with `endpoint`, and keep the vendor's base path. An OpenAPI Simulator serves each operation under the path of the spec's first server URL; for `https://api.vendor.com/v2`, send `{endpoint}/v2/articles`. A WSDL Simulator serves at the path of `soap:address`. A GraphQL Simulator answers a POST on any path. Replace `` and `` with the endpoint and token from the [quickstart](/quickstart#create-a-simulation): ```bash theme={null} curl "/v1/customers" \ -H "X-Continuous-Simulation-Token: " \ --data-urlencode "name=Ada Lovelace" \ --data-urlencode "email=ada@example.com" ``` The same Simulation returns the same response bytes for the same requests from the same state. Each request marks the Simulation active. `Cookie`, `Proxy-Authorization`, and the token header are removed before the request reaches the Simulation. ## Act as a caller A Simulator whose build names callers lists them as `actors` in its composition. Each Simulation lists the actors the seed holds, plus actors only the sample holds when the Simulation includes sample data. Send an actor's `id` in `X-Continuous-Actor` to act as that caller; without the header, a request acts as the default actor. The header works on every operation and is not an operation input. A value outside printable ASCII, longer than 256 characters, repeated, or containing a comma returns `400` with code `invalid_actor_header`. An id that names no actor available in the Simulation returns `400` with code `unavailable_actor`. Simulators built without actors do not act on it. ```bash theme={null} curl "/v1/customers" \ -H "X-Continuous-Simulation-Token: " \ -H "X-Continuous-Actor: " ``` ## Errors Platform refusals use the [error envelope](/api-reference/errors). A rejected Simulation token, including one that [regeneration](/concepts/simulations#credentials) replaced, carries `X-Continuous-Simulation-Token-Rejected: true`. A stopped Simulation must be started before it accepts requests. The simulated API also returns its own responses. [Quotas and limits](/api-reference/quotas#size-limits) owns the transport caps for ordinary, multipart, and SOAP requests. > [card] [Simulations](/concepts/simulations) > > Lifecycle, credentials, steps, and Snapshots. > [card] [Authentication](/api-reference/authentication) > > API keys for `/v1` routes and Simulation tokens for the data plane. # MCP Box Source: https://docs.continuouslabs.ai/concepts/mcp-box An MCP server that serves a Snapshot's tools in front of an API Box. An MCP Box serves MCP tools to your agent. Each tool reads or changes an [API Box](/concepts/api-box), so the agent works on the same state as calls to that API Box. ## Snapshots An MCP Box Snapshot holds the tools of one MCP server and names the API Box Snapshot it was built against. `GET /v1/mcpbox-snapshots` lists the Continuous catalog's Snapshots and your workspace's. A catalog MCP Box Snapshot, with `source` `catalog`, is built against a catalog API Box Snapshot, so you start an API Box from that API Box Snapshot first, then the MCP Box in front of it. To build your own, send `POST /v1/mcpbox-snapshots` the ID of a ready API Box Snapshot built from an OpenAPI or GraphQL spec, with instructions that name the MCP server to copy, such as its repository or package, and optional documents. The build researches the server, copies its tools, and writes and tests a handler for each against an API Box that it starts from that Snapshot and deletes when it ends. It runs the same way as an [API Box Snapshot build](/concepts/api-box#snapshots): it starts in `pending`, runs in `building`, and ends in `ready`, `failed`, or `canceled`. With a credential whose `base_url` is the source MCP server, the build captures the server's tools, and QA compares the MCP Box with the live server, calling only the tools it marks read-only. ## Build on a Snapshot To change a ready Snapshot, yours or the catalog's, send `POST /v1/mcpbox-snapshots` with its ID in `parent_id`, and your changes in optional `instructions`. The build starts from the parent's handlers, tests and documents, and its review and QA tests. What you do not send comes from the parent: its API Box Snapshot, documents, model, review rounds, and its credential if your workspace still has it. Name another `apibox_snapshot_id` to build against that one. A document you upload with the same name as one of the parent's replaces it. Otherwise it runs as a new build: research and the capture run again, and the builder and research can read the parent's capture and replaced documents. `timeout_seconds` is not inherited. The new Snapshot's `parent_id` names the parent until the parent is deleted. ## Create and connect `POST /v1/mcpbox` takes a `snapshot_id` and an `apibox_id`. The API Box must have started from the API Box Snapshot that the MCP Box Snapshot was built against. The response returns the MCP Box in `starting`, with its `endpoint` and `token`. Read it until it is `running`. Send MCP requests over Streamable HTTP to the endpoint followed by `/mcp`, with the token in this header: ```text theme={null} X-Continuous-Token: ``` `GET /v1/mcpbox/{id}` returns the endpoint and token again in its `connection`. The MCP Box keeps no state of its own. While its API Box is stopped, each tool call returns the API Box's refusal as a tool error. ## Act as a caller Tool calls act through the API Box, so an MCP Box Snapshot's `actors` are those of its API Box Snapshot. To act as one, send its `id` in `X-Continuous-Actor` on each MCP HTTP request. The MCP Box sends it with every API Box call that the request's tool makes. Without the header, tool calls act as the default actor. The API Box refuses an id that names no actor in it with `unavailable_actor`, and a malformed value with `invalid_actor_header`. ## Stop, start and delete `POST /v1/mcpbox/{id}/stop` releases the MCP Box's runtime; its API Box keeps running. `POST /v1/mcpbox/{id}/start` starts it again with the same token. A stopped MCP Box stays, with no time limit, until you delete it. `DELETE /v1/mcpbox/{id}` removes it; its API Box stays. ## Save as a Snapshot `POST /v1/mcpbox/{id}/snapshot` saves the MCP Box and the current state of its running API Box as a new MCP Box Snapshot and a new API Box Snapshot, with `source` `box`, both ready when the response returns; a failed save creates neither. The new MCP Box Snapshot serves the same tools and is built against the new API Box Snapshot, which its `apibox_snapshot_id` names. Each new Snapshot's `source_box_id` and `source_snapshot_id` name the box it was saved from and the Snapshot that box started from. Create an API Box from that Snapshot, then an MCP Box from the new MCP Box Snapshot in front of it. Both Snapshots stay when you delete the Boxes. ## Clone a Snapshot into another workspace `POST /v1/mcpbox-snapshots/{id}/clone` copies a ready MCP Box Snapshot into another workspace of your organization, as an [API Box Snapshot clone](/concepts/api-box#clone-a-snapshot-into-another-workspace) does. When the API Box Snapshot it was built against is your workspace's, that Snapshot is cloned with it, and the clone's `apibox_snapshot_id` names the copy; a catalog one is kept. The clone records no source credential. # Simulations Source: https://docs.continuouslabs.ai/concepts/simulations Run one Simulator with isolated state. > [!WARNING] > > Simulations are deprecated. Use an [API Box](/concepts/api-box) for an API and a [Web Box](/concepts/web-box) for a web app. Existing Simulations keep working. A Simulation is a runtime instance of one ready Simulator. It has its own state and a data-plane endpoint at `https://api.continuouslabs.ai/sim/{id}` that serves the Simulator's API. Its clock stays fixed between explicit advances. Given the same requests and time advances from the same initial state, a Simulation returns the same responses and ends in the same visible state. ## When to use one Start a Simulation whenever an agent needs a system to act on. Start several from one Simulator to run scenarios in parallel; each keeps its own state. ## Lifecycle Statuses are `starting`, `running`, `stopping` and `stopped`. Create and start return `202` with `starting`, and stop returns `202` with `stopping`; read the Simulation until its status is `running` or `stopped`. A stop sent while the Simulation starts answers `409 simulation_starting`, and a start sent while it stops answers `409 simulation_stopping`. A running Simulation serves requests. After a period without requests, its first request can take longer while it resumes. Inactivity never stops it. Stop saves the Simulation's state. Its endpoint refuses requests while it stops; once it is stopped, its endpoint, its steps, and Snapshot saves answer `409 simulation_stopped` until you start it again. A stop that cannot save the state returns the Simulation to its earlier status. Stopping a stopped or stopping Simulation returns it unchanged. A stopped Simulation does not count toward the workspace's active Simulation limit. Start restores a stopped Simulation from its saved state and needs a free Simulation slot. If its runtime cannot start, it returns to `stopped`; if a new Simulation's runtime cannot start, the Simulation is deleted and reads answer `404`. Stop and start do not change the Simulation's token. Starting a running or starting Simulation returns it unchanged. Nothing deletes a Simulation automatically; delete removes it and its saved state. `name` is a label; its field constraints are in the generated create endpoint. Omit it for a generated name. Names need not be unique; the `sim_` ID is the identity. `PATCH /v1/simulations/{id}` renames a Simulation or replaces its `metadata`; omitted fields keep their values. ## Credentials Each Simulation has one token. Create returns it; other Simulation responses omit credentials. Send it in `X-Continuous-Simulation-Token`. The token does not expire. Stop and restart keep it; a stopped Simulation's endpoint answers `409 simulation_stopped` until start. `GET /v1/simulations/{id}/token` returns the token, even while the Simulation is stopped. Token responses also include the deprecated `expires_at` field, which is always null. To rotate the token, send `POST /v1/simulations/{id}/token/regenerate` with an `Idempotency-Key` header. It works in any status and returns the new token. Once it commits, the previous token answers `401 auth_invalid` with `X-Continuous-Simulation-Token-Rejected: true`, so every client that holds it must retrieve the new one. A repeated key returns the same token while it is current; after a later regeneration, it answers `409 simulation_token_regeneration_superseded`. Deleting the Simulation ends its token. See the [quickstart](/quickstart) for a complete sequence that creates a Simulation, sends requests, retrieves and regenerates its token, and deletes it. ## Advance time Set optional `start_time` when you create a Simulation. Omit it to use January 1, 2024, at 00:00 UTC. Times use RFC 3339 with up to millisecond precision. Reads expose the initial and current clock and any active advance. Send `POST /v1/simulations/{id}/advances` with an `Idempotency-Key` header and an absolute `to` timestamp. The response is a durable operation that you can poll. Repeating the same key and target returns the same operation. Time can only move forward; save a [Snapshot](#snapshots) of an earlier step to return to earlier state. An advance runs scheduled events through the target time. Each event sees its own due time. For example, an advance across three billing periods can produce three renewal invoices. Equal-time events run in the order they were scheduled. The clock reaches the target after all due events finish. An advance commits due events in ordered batches. A failed handler rolls back its own batch and ends the advance; earlier batches stay committed. Stop and restart preserve the clock and pending events. Simulation time does not affect the Simulation token or platform runtime timeouts. While an advance is active, conflicting lifecycle calls return `409 clock_conflict`. Deleting the Simulation cancels the advance instead. A handler failure ends the advance and releases that reservation. Poll `GET /v1/simulations/{id}/advances/{advance_id}` for durable clock progress. Read the committed trace with `GET /v1/simulations/{id}/advances/{advance_id}/events`; it uses [cursor pagination](/api-reference/pagination). ## Steps and Snapshots A step is one committed state change. A writing request creates one step; a request that only reads creates none. A time advance creates one step for each batch of events it commits, with the clock that batch reached. A clock-only change also creates a step. An advance that changes nothing creates none. Events scheduled for the current time run before the next request, in an `advance` step of their own that no advance identifies. Step metadata identifies the action and clock bounds. Request labels use the HTTP method and path without the query string, for example `POST /v1/widgets`. An advance identifies its operation and ordered event trace. `GET /v1/simulations/{id}/steps` lists steps for a running Simulation, paginated. ### Snapshots A Snapshot is a saved copy of a Simulation's state that new Simulations start from. Save one with `POST /v1/simulation-snapshots`, the source's `simulation_id` and a `name`; it saves the source's current state. The response is `202` with the Snapshot `creating`; poll `GET /v1/simulation-snapshots/{id}` until it is `ready` or `failed`. Send an `Idempotency-Key` header to [retry safely](/api-reference/overview#retries). The source must be running; a stopped or stopping source answers `409 simulation_stopped`, and a starting one `409 simulation_starting`. Saving closes the source's open event streams and WebSockets; clients reconnect to continue. It does not change the source's state. Snapshot IDs start with `sns_`. A Snapshot's `status` is `creating` while its state is saved, then `ready`, or `failed` with an `error` and no state. While it saves, an advance of the source answers `409 clock_conflict`, a stop waits for the save, and deleting the source fails it with `simulation_deleted`. A Simulator built before Snapshots streamed their state fails the save with `simulator_rebuild_required`; rebuild it to save its Simulations. Create a Simulation from a Snapshot with `POST /v1/simulations` and `snapshot_id` in place of `simulator_id`. The Snapshot must be `ready`; any other answers `409 snapshot_not_ready`. It takes the Snapshot's state, clock, pending events and Simulator, at the digest its source pinned, or at the newer digest when Continuous has since upgraded that Simulator's runtime; `start_time` and `include_sample_data` are not allowed with it. It starts as a new Simulation with its own endpoint and token, `snapshot_id` set to the Snapshot and `parent_id` to the Simulation the Snapshot saved. You can create any number of Simulations from one Snapshot, and each counts toward the active Simulation limit. A Simulation created from a Snapshot keeps its own Simulation-ID RNG seed, so Simulations from one Snapshot can produce different random outcomes. Its later events and state changes are independent of the source. Save before or after an advance; use smaller advances when you need finer save points. Stop and restart retain the recorded steps and their historical state. A Snapshot outlives its source and the Simulations created from it. Its `simulation_id` becomes null once the source is deleted. `GET /v1/simulations?snapshot_id=` lists the Simulations created from it. Deleting a Snapshot keeps every Simulation running and sets their `snapshot_id` to null. A `creating` Snapshot cannot be deleted (`409 snapshot_not_ready`), nor one a Simulation is starting from (`409 snapshot_in_use`); retry after it starts. Creating from a Snapshot whose Simulator is no longer ready fails as creating from that Simulator does. ## Operations * **Create** `POST /v1/simulations` with `simulator_id`, optional `name`, and optional `start_time`, or with `snapshot_id`. * **Get** `GET /v1/simulations/{id}`. * **List** `GET /v1/simulations` with `status`, `simulator_id` and `snapshot_id` filters. * **Update** `PATCH /v1/simulations/{id}` with `name` or `metadata`. * **Stop** `POST /v1/simulations/{id}/stop`. * **Start** `POST /v1/simulations/{id}/start`. * **Advance time** `POST /v1/simulations/{id}/advances`. * **Steps** `GET /v1/simulations/{id}/steps`. * **Save Snapshot** `POST /v1/simulation-snapshots`. * **List, get, rename and delete Snapshots** `GET /v1/simulation-snapshots` with a `simulation_id` filter, `GET /v1/simulation-snapshots/{id}`, `PATCH /v1/simulation-snapshots/{id}`, and `DELETE /v1/simulation-snapshots/{id}`. * **Current token** `GET /v1/simulations/{id}/token`. * **Regenerate token** `POST /v1/simulations/{id}/token/regenerate`. * **Delete** `DELETE /v1/simulations/{id}`. > [card] [Send requests to a Simulation](/concepts/data-plane) > > Request rules, errors, and headers on the Simulation endpoint. > [card] [Simulators](/concepts/simulators) > > A Simulation runs one ready Simulator. # Simulators Source: https://docs.continuouslabs.ai/concepts/simulators An immutable implementation of one API, built from an OpenAPI, WSDL or GraphQL document. > [!WARNING] > > Simulators are deprecated. Use an [API Box](/concepts/api-box) for an API and a [Web Box](/concepts/web-box) for a web app. Existing Simulators keep working. A Simulator is an immutable implementation of one API, built from an OpenAPI, WSDL or GraphQL document. Every Simulation runs one Simulator. ## When to use one Use a catalog Simulator when the Continuous catalog already serves the API you need. Build your own when it does not, or when you need a filtered set of operations or your own build instructions. ## Lifecycle A build starts in `pending`, becomes `building` when a slot is free, and ends in `ready`, `failed`, or `canceled`. Only a `ready` Simulator can start a Simulation or serve as the base of an incremental build. Every build has an immutable `smr_` ID from the moment `POST /v1/simulators` accepts it; the `202` response carries the Simulator in `pending`. A ready Simulator's behavior never changes; a behavior change is a new build with a new ID. A name is a label. It need not be unique, it never identifies a Simulator, and no operation looks a Simulator up by name. A build that names `parent_id` creates a new Simulator with its own ID; its `parent_id` points at the Simulator it was built from. A failed or canceled build carries diagnostics in `error`. See [resource errors](/api-reference/errors#resource-errors) for recovery guidance and the generated Simulator schema for its fields. ## Build a Simulator Send an OpenAPI, WSDL or GraphQL document with build instructions. An OpenAPI document can be Swagger 2.0, OpenAPI 3.0, or OpenAPI 3.1. The build converts Swagger 2.0 to OpenAPI 3.0 and keeps the converted document as the Simulator's spec. A GraphQL document is SDL, sent with `spec_kind` `graphql`, or an introspection result that includes deprecated input fields and arguments, which the build converts to SDL. The generated build endpoint owns the multipart shape, model choices, field constraints, and defaults. [Quotas and limits](/api-reference/quotas) owns queue behavior, request-size limits, and the build budget. ### Correct the specification A vendor document can omit behavior that the vendor documents elsewhere or that its SDKs rely on. The builder follows the document, so omitted behavior cannot be built. To correct it, add a top-level `x-continuous-corrections` list to the OpenAPI document. Each entry names one `operation` by its `operationId` (a `widenResponse` of a component schema names none), makes exactly one change, and cites `evidence` with an http(s) `source` URL and a `quote` from that source: * `addMethods` also serves the operation under the listed methods: `get`, `post`, `put`, `patch`, or `delete`. A request on an added method can send the operation's query arguments in a form or JSON body. It applies only to an operation without a request body, and the path must not already declare the method. * `widenInput` makes the input `name` also accept `schema`. A `name` that starts with `/` is a JSON pointer to a nested body property, such as `/profile/email`, and can pass through `$ref`. Values the document already accepts stay valid. * `addInput` declares an optional input the document omits: `name`, `schema`, and `in`, which is `body` (the default), `query`, or `header`. The input must not already exist. * `serializeInput` sets how the array query input `name` is encoded: `style` is `form`, and `explode` is `false` for one comma-separated value, such as `ids=1,2`, or `true` for the input repeated. * `widenResponse` widens the component schema `schema`, wherever the document references it, or, with `operation`, that operation's inline response schemas. An optional `field` names a property inside it by a dot-separated path that steps through arrays; the path cannot pass through a `$ref`, so widen a referenced schema by name. It can add a `pattern`, which the value may match instead of the declared one; add `enum` values; or set `nullable` to `true`. The schema must already declare the pattern or enum it widens. Values the document already accepts stay valid, and nothing is removed. * `addResponse` declares a `status` the vendor documents for the operation and the document omits, such as `412`. An optional `schema` names the component schema its JSON body meets; without it, the response has no body. The operation must not already declare the status, and the evidence quote becomes the response's description. ```json theme={null} "x-continuous-corrections": [ { "operation": "conversations_history", "addMethods": ["post"], "evidence": { "source": "https://docs.slack.dev/apis/web-api/", "quote": "Pass arguments as: GET querystring parameters, POST parameters presented as application/x-www-form-urlencoded, or a mix of both GET and POST parameters" } } ] ``` The build applies the corrections when it accepts the request and keeps the corrected document as the Simulator's spec. Each corrected operation records its corrections, which the build model lists; a widened schema records its own. Everything else keeps the document's validation. The build answers `422` with the `correction` issue code when an entry names no operation in the document, sets zero or several changes, lacks evidence, or cannot apply as described. It also answers `422` when an operation or schema already carries `x-continuous-corrections`; declare every correction in the top-level list. For an incremental build, omit `spec` and send `parent_id` and `instructions`. `filter` and `spec_kind` are not allowed. The parent must be `ready`; otherwise the build answers `409 simulator_not_ready`. The build runs asynchronously. Read the Simulator with `GET /v1/simulators/{id}` until its status is terminal. Set `CONTINUOUS_API_KEY` to your API key, or run `continuous auth login` for the CLI. Save your API document as `openapi.yaml`, then run: ```bash curl theme={null} curl "https://api.continuouslabs.ai/v1/simulators" \ -H "Authorization: Bearer $CONTINUOUS_API_KEY" \ --form 'request={"name": "billing-api"};type=application/json' \ --form "spec=@openapi.yaml" ``` ```bash CLI theme={null} continuous simulators build \ --request '{"name": "billing-api"}' \ --spec openapi.yaml ``` ### Let the build call a live system When you have a tenant on the real system, such as a sandbox or test-mode account, the builder and QA can call it to see how it really behaves. Create a credential with `POST /v1/credentials`: a `base_url`, the `header` that carries the credential (default `Authorization`), and the header `value`, such as `Bearer sk_test_…`. The API never returns the value. For a system that issues short-lived OAuth 2.0 access tokens, such as NetSuite, send an `oauth` client in place of the `value`: its `token_url`, `client_id`, optional `scope`, and either a `client_secret` or a PEM `private_key` (with its `key_id` and `algorithm`, default `PS256`) that signs a JWT assertion. The API gets a token with the client credentials grant before it stores the credential, and gets a new one whenever a build agent starts with less than 15 minutes, or half its lifetime, left on the current one. Then list up to 5 credential IDs in the build's `credential_ids`. A credential can instead hold a `login` for the vendor's web app: its sign-in `url` alone, with no `value`. Sign in to it by hand in the console, under Settings → Credentials, in a hosted browser, however the app asks; builds start from that sign-in. Only a Web App build uses a login credential, and only once it has been signed in. The pinned spec still defines the operations. What the agents observe on the live system ranks above public documentation as evidence of how they behave. The builder sends only `GET`, `HEAD`, and `OPTIONS` requests to a system with a header credential, the reviewer never calls it, and QA also writes to it and deletes what it creates; none of this is enforced, so use a test tenant. The value is available inside the build sandbox and to the model provider. Exchanges the builder relies on are saved with the value removed, and a build refuses to publish a Simulator whose files contain it. QA first checks that each header credential still authenticates. When every one is rejected, such as by an expired token, QA stops, and the Simulator stays `building` in phase `qa` with `build.waiting` naming the credentials and the wait's `deadline`, 7 days after it began. Update each one with `PATCH /v1/credentials/{id}`, keeping its ID, then call `POST /v1/simulators/{id}/resume`: QA runs again with the new values, and the build finalizes without repeating research, build, or review. The wait does not count toward the build's time limit: a resume at any point in the wait leaves the build the time it had when QA stopped. A resume of a build that is not waiting returns `409` `simulator_not_waiting`. A build not resumed by the wait's `deadline` fails with error code `live_credential_rejected`. Cancel still works while it waits. ### Build the vendor's web app A build with `mode` `web_app` simulates the vendor's logged-in web app and the private API behind it, instead of its public API. It takes no spec, `spec_kind` or `filter`, and needs exactly one Web App login credential in `credential_ids`. The builder and QA use the live app through that credential's sign-in, and may create, edit, upload, and delete records in it through its screens, each named with the build's prefix, and delete through the app what they create, so use a test account. The builder builds the app and its private API from what it sees on the vendor's app. The Simulator serves no sign-in page: every visitor acts as the login's account. A Web App Simulator reports `spec_kind` `recorded` and lists no operations. With `parent_id` and `instructions`, a Web App build starts from a ready Web App Simulator; an incremental build always has its parent's mode. A Web App build runs on a Claude model or `combined`. A Web App Simulation serves the app and its private API at a host of its own, `{simulation}.continuouslabs.app`, a domain apart from the console's, with live's paths and cookies. The host is open to anyone with its URL, with no sign-in; the console's Open app button opens it. Its endpoint under `/sim/{id}/` refuses it. ### Give the build documentation When you hold the vendor's documentation, including pages behind a sign-in, attach it to the build as repeated `document` file parts. The builder and every reviewer read it before they start and can cite it as evidence; they still research the vendor's public pages. It ranks below a live system and above public documentation. The build endpoint's reference lists the accepted formats; the documents share the request body limit in [Quotas and limits](/api-reference/quotas) with the spec. Each document gets a safe, unique file name. The documents are available inside the build sandbox and to the model provider. An incremental build inherits its parent's documents and index; a document you attach with the same name replaces the parent's, and research extends the index. ## Catalog Simulators `source` is `workspace` for a Simulator your workspace built and `catalog` for a read-only Simulator that Continuous publishes. Catalog Simulators are readable from every workspace. You can use one as `simulator_id` and as `parent_id`. To find a catalog Simulator, list ready Simulators and read the `id` of the entry whose `source` is `catalog`. Every reference uses the `smr_` ID. A catalog Simulator cannot be renamed or deleted (`403 auth_forbidden`), and only the owning workspace can cancel a build. ## Manage a Simulator `PATCH /v1/simulators/{id}` renames a Simulator. Cancel requests cancellation of a pending or active build and returns `202` with the Simulator's current status; get the Simulator until it leaves `pending` or `building`. A build can finish before cancellation takes effect; canceling a settled build returns its current state. Delete succeeds only when no Simulations, child Simulators, or Simulation Snapshots depend on it. Use the [API reference](/api-reference/overview) for routes, filters, and response schemas. ## Clone a Simulator into another workspace `POST /v1/simulators/{id}/clone` copies a ready Simulator from your workspace into another workspace, such as from development to staging. The source is the API key's workspace, or `X-Workspace-Id` for a browser session, and the body names the target. The clone is a new `ready` Simulator with its own `smr_` ID, the source's image digest, and the source's name and instructions unless you set `name`. It has no parent, and the source and its Simulations are unchanged. An `Idempotency-Key` header makes a retry safe, as on every [create](/api-reference/overview#retries); its key is scoped to the target workspace. An API key can clone into any other workspace of its organization. Cloning into another organization's workspace is refused. Catalog Simulators cannot be cloned. > [card] [Simulations](/concepts/simulations) > > Run a ready Simulator with isolated state. # Web Box Source: https://docs.continuouslabs.ai/concepts/web-box A running copy of one web app, with its own state, at a host of its own. A Web Box serves a copy of a vendor's web app in the browser, with its own state. Use it when your agent works through a web app instead of an API. ## Snapshots A Web Box starts from a ready Web Box Snapshot. `GET /v1/webbox-snapshots` lists the Continuous catalog's Snapshots and your workspace's. To build your own, create a credential with a `login` for the vendor's web app, and sign in to it in [the app](https://app.continuouslabs.ai) under **Settings**, then **Credentials**. Then send `POST /v1/webbox-snapshots` with that credential in `credential_ids`. The build uses the live app through that sign-in, so use a test account. It runs the same way as an [API Box Snapshot build](/concepts/api-box#snapshots): it starts in `pending`, runs in `building`, and ends in `ready`, `failed`, or `canceled`. A ready Snapshot never changes. ## Build on a Snapshot To change a ready Snapshot, yours or the catalog's, send `POST /v1/webbox-snapshots` with its ID in `parent_id`, and your changes in optional `instructions`. The build starts from the parent's source, documents and tests. What you do not send comes from the parent: its documents, model, review rounds, and those of its credentials your workspace still has. Without `credential_ids`, the parent's login must be one of them; otherwise send a login. A document you upload with the same name as one of the parent's replaces it. `timeout_seconds` is not inherited. The new Snapshot's `parent_id` names the parent until the parent is deleted. ## Create and open `POST /v1/webbox` with a ready `snapshot_id` returns the Web Box in `starting`. Read it until it is `running`, then open its `url` in a browser. The app has a host of its own. Anyone with the URL can open it, so share it only with the people and agents that need it. Each Web Box runs in real time and has its own state. Two Web Boxes from the same Snapshot do not share data. ## Act as a caller A Web Box serves every page as the account of the login it was built with. Its Snapshot's `actors` list that account as its one actor. ## Stop, start and delete `POST /v1/webbox/{id}/stop` saves the state and releases the runtime. `POST /v1/webbox/{id}/start` restores it. A stopped Web Box keeps its saved state, with no time limit, until you delete it. `DELETE /v1/webbox/{id}` removes the Web Box and its state; the Snapshot stays. ## Save as a Snapshot `POST /v1/webbox/{id}/snapshot` saves a running Web Box's current state as a new Web Box Snapshot, with `source` `box`, ready when the response returns. Its `source_box_id` and `source_snapshot_id` name the Web Box and the Snapshot it started from. The Web Box keeps running. Web Boxes created from the Snapshot start with that state, so they cannot use `include_sample_data`. The Snapshot stays when you delete the Web Box, and you cannot delete the Snapshot while Web Boxes use it. ## Clone a Snapshot into another workspace `POST /v1/webbox-snapshots/{id}/clone` copies a ready Web Box Snapshot into another workspace of your organization, as an [API Box Snapshot clone](/concepts/api-box#clone-a-snapshot-into-another-workspace) does. ## Steps Each request that changes state is one step. `GET /v1/webbox/{id}/steps` lists them in order while the Web Box runs. Running API Boxes, Web Boxes, MCP Boxes and Simulations share one workspace limit. See [Quotas and limits](/api-reference/quotas). # Continuous API Source: https://docs.continuouslabs.ai/index Give your agent copies of the APIs, web apps and MCP servers it works with, each with its own state, through the v1 API, the continuous CLI, and the Python and TypeScript SDKs. Continuous gives your agent stateful copies of the systems it works with. Your agent calls a copy as it would call the real system, and nothing reaches the real one. Every operation lives under `https://api.continuouslabs.ai/v1` and takes a Continuous API key as a Bearer token. The `continuous` CLI and the [Python](/sdks/python) and [TypeScript](/sdks/typescript) SDKs send the same requests. ## Boxes Each Box starts from a Snapshot: one from the Continuous catalog, or one you build. Each Box has its own state, and you can stop, start and delete it. > [card] [API Box](/concepts/api-box) > > A copy of one API at its own endpoint. Build its Snapshot from an OpenAPI, WSDL or GraphQL document. IDs start with `abx_`. > [card] [Web Box](/concepts/web-box) > > A copy of one web app that opens in the browser at a host of its own. IDs start with `wbx_`. > [card] [MCP Box](/concepts/mcp-box) > > An MCP server whose tools read and change an API Box. IDs start with `mbx_`. ## Simulators and Simulations [Simulators](/concepts/simulators) and [Simulations](/concepts/simulations) are deprecated. Use an API Box for an API and a Web Box for a web app. Existing Simulators and Simulations keep working. ## Next steps > [card] [Quickstart](/quickstart) > > Create an API Box from a catalog Snapshot, call it, and delete it. > [card] [API reference](/api-reference/overview) > > Request and response schemas, error codes, and authentication for every operation. > [card] [CLI](/cli/install) > > Install `continuous`, sign in, and call operations from a shell. # Quickstart Source: https://docs.continuouslabs.ai/quickstart Create an API Box from a catalog Snapshot, get its connection, send it a request, and delete it. In this guide you create an API Box from a Continuous catalog Snapshot, get its endpoint and token, send it requests, and delete it. No request reaches the real API. ## Before you start You need a Continuous workspace and curl 7.82 or later. Replace placeholders such as ``, ``, ``, and `` with values from your responses before you run each command. **1. Create an API key** Open [the app](https://app.continuouslabs.ai). Open the workspace menu and choose **Settings**, then **API keys**. Enter an optional name and select **Mint API key**. Copy the key now; the app shows it once. Replace `` and set: ```bash theme={null} export CONTINUOUS_API_KEY="" ``` **2. Choose a Snapshot** List the ready catalog Snapshots: ```bash theme={null} curl "https://api.continuouslabs.ai/v1/apibox-snapshots?source=catalog&status=ready" \ -H "Authorization: Bearer $CONTINUOUS_API_KEY" ``` Choose the API you want, and copy its `id`, which starts with `abs_`. Use it in place of `` in the next step. Names are labels, so the ID is the only reference. **3. Create an API Box** ```bash theme={null} curl "https://api.continuouslabs.ai/v1/apibox" \ -H "Authorization: Bearer $CONTINUOUS_API_KEY" \ --json '{"snapshot_id": ""}' ``` The response returns while the API Box starts, with `status` set to `starting`. Copy the API Box `id` from `apibox.id`, which starts with `abx_`. Use it for `` below. Read the API Box until its `status` is `running`, which usually takes a few seconds: ```bash theme={null} curl "https://api.continuouslabs.ai/v1/apibox/" \ -H "Authorization: Bearer $CONTINUOUS_API_KEY" ``` > [!NOTE] > > A `409` means the Snapshot is not `ready`. A `429` with `box_quota_exceeded` means the workspace is at its limit of running Boxes and Simulations; stop or delete one and retry. The [Create API Box](/api-reference/apibox/create-api-box) reference lists every response. **4. Get the connection** From the running API Box, copy `connection.endpoint` and `connection.token`. Keep the token private. Your API key never authenticates the endpoint, and the token never authenticates `/v1` routes. **5. Send a request** Call any route of the API under the endpoint, with the token in `X-Continuous-Token`. For example, with a Stripe Snapshot, create a customer and list customers: ```bash theme={null} curl "/v1/customers" \ -H "X-Continuous-Token: " \ --data-urlencode "name=Ada Lovelace" ``` ```bash theme={null} curl "/v1/customers?limit=1" \ -H "X-Continuous-Token: " ``` The customer exists only in this API Box. Another API Box from the same Snapshot starts without it. ## Clean up ```bash theme={null} curl -X DELETE "https://api.continuouslabs.ai/v1/apibox/" \ -H "Authorization: Bearer $CONTINUOUS_API_KEY" ``` A successful delete returns `204 No Content`. This removes the API Box and its state. The Snapshot stays available for the next API Box. > [card] [Understand API Boxes](/concepts/api-box) > > Stop and start an API Box, list its steps, and build your own Snapshot. # Python SDK Source: https://docs.continuouslabs.ai/sdks/python Install the continuous-labs package, construct the Continuous client, and list API Box Snapshots. `continuous-labs` is the Python SDK for the Continuous API. Speakeasy generates it from the public OpenAPI contract, and it lives in the [continuous-labs-ai/continuous-python](https://github.com/continuous-labs-ai/continuous-python) repository. The package is published on PyPI. It requires Python 3.10 or later. The SDK is in beta: a release may include breaking changes without a major version update, so pin the package to a specific version. ## Install ```bash theme={null} pip install continuous-labs ``` `uv add continuous-labs` and `poetry add continuous-labs` work too. ## Send a request Set `CONTINUOUS_API_KEY_AUTH` to your API key, then list API Box Snapshots: ```bash theme={null} export CONTINUOUS_API_KEY_AUTH="" ``` ```python theme={null} import os from continuous import Continuous with Continuous(api_key_auth=os.environ["CONTINUOUS_API_KEY_AUTH"]) as client: page = client.apibox_snapshots.list_apibox_snapshots() while page is not None: for snapshot in page.result.snapshots: print(snapshot.id, snapshot.name, snapshot.status) page = page.next() ``` Pass the key through `api_key_auth`. List methods return pages; `next()` fetches the next page and returns `None` after the last one. The `with` block closes the client's HTTP connections when it ends. Every method has an `_async` variant, for example `list_apibox_snapshots_async`, for use with `async with Continuous(...)`. HTTP errors raise `continuous.errors.ContinuousError`. A `continuous.errors.Error` carries the API's problem body in `data.code` and `data.detail`; see [Errors](/api-reference/errors) for the codes. ## Reference The repository documents every operation with its parameters, response type, and errors: [API Box](https://github.com/continuous-labs-ai/continuous-python/blob/main/docs/sdks/apiboxsdk/README.md), [API Box Snapshots](https://github.com/continuous-labs-ai/continuous-python/blob/main/docs/sdks/apiboxsnapshots/README.md), [Web Box](https://github.com/continuous-labs-ai/continuous-python/blob/main/docs/sdks/webboxsdk/README.md), [Web Box Snapshots](https://github.com/continuous-labs-ai/continuous-python/blob/main/docs/sdks/webboxsnapshots/README.md), [MCP Box](https://github.com/continuous-labs-ai/continuous-python/blob/main/docs/sdks/mcpboxsdk/README.md), and [MCP Box Snapshots](https://github.com/continuous-labs-ai/continuous-python/blob/main/docs/sdks/mcpboxsnapshots/README.md). The Simulators, Simulations, and Simulation Snapshots methods are deprecated. Its README also covers retries, a custom HTTP client, server selection, and debug logging. Report SDK and API problems in [continuous-labs-ai/continuous-python](https://github.com/continuous-labs-ai/continuous-python/issues). # TypeScript SDK Source: https://docs.continuouslabs.ai/sdks/typescript Install the @continuous-labs/sdk package, construct the Continuous client, and list API Box Snapshots. `@continuous-labs/sdk` is the TypeScript SDK for the Continuous API. Speakeasy generates it from the public OpenAPI contract, and it lives in the [continuous-labs-ai/continuous-typescript](https://github.com/continuous-labs-ai/continuous-typescript) repository. The package is published on npm. The package is an ES module only; from CommonJS, load it with `await import("@continuous-labs/sdk")`. The repository's `RUNTIMES.md` lists the supported JavaScript runtimes. The SDK is in beta: a release may include breaking changes without a major version update, so pin the package to a specific version. ## Install ```bash theme={null} npm add @continuous-labs/sdk ``` `pnpm add @continuous-labs/sdk`, `bun add @continuous-labs/sdk`, and `yarn add @continuous-labs/sdk` work too. ## Send a request Set `CONTINUOUS_API_KEY_AUTH` to your API key, then list API Box Snapshots: ```bash theme={null} export CONTINUOUS_API_KEY_AUTH="" ``` ```typescript theme={null} import { Continuous } from "@continuous-labs/sdk"; const continuous = new Continuous({ apiKeyAuth: process.env.CONTINUOUS_API_KEY_AUTH, }); const result = await continuous.apiboxSnapshots.listApiboxSnapshots({}); for await (const page of result) { for (const snapshot of page.result.snapshots) { console.log(snapshot.id, snapshot.name, snapshot.status); } } ``` Pass the key through `apiKeyAuth`. List methods return pages; `for await` fetches the next page until none is left. This example uses top-level `await` in an ES module. HTTP errors throw `ContinuousError` from `@continuous-labs/sdk/models/errors`. An `ErrorT` carries the API's problem body in `data$.code` and `data$.detail`; see [Errors](/api-reference/errors) for the codes. Every method is also available as a standalone function, for example `apiboxSnapshotsListApiboxSnapshots`, for bundles that need tree shaking. ## Reference The repository documents every operation with its parameters, response type, and errors: [API Box](https://github.com/continuous-labs-ai/continuous-typescript/blob/main/docs/sdks/apibox/README.md), [API Box Snapshots](https://github.com/continuous-labs-ai/continuous-typescript/blob/main/docs/sdks/apiboxsnapshots/README.md), [Web Box](https://github.com/continuous-labs-ai/continuous-typescript/blob/main/docs/sdks/webbox/README.md), [Web Box Snapshots](https://github.com/continuous-labs-ai/continuous-typescript/blob/main/docs/sdks/webboxsnapshots/README.md), [MCP Box](https://github.com/continuous-labs-ai/continuous-typescript/blob/main/docs/sdks/mcpbox/README.md), and [MCP Box Snapshots](https://github.com/continuous-labs-ai/continuous-typescript/blob/main/docs/sdks/mcpboxsnapshots/README.md). The Simulators, Simulations, and Simulation Snapshots methods are deprecated. Its README also covers retries, a custom HTTP client, server selection, and debug logging. Report SDK and API problems in [continuous-labs-ai/continuous-typescript](https://github.com/continuous-labs-ai/continuous-typescript/issues).