> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.runtype.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.runtype.com/_mcp/server.

# Product versioning and status

Products do not have versions. A Product runs the published configuration of each Flow Capability. Save records a working draft; Publish activates the selected saved version. Each Surface has a status that controls whether it accepts requests.

> **Warning**
>
> Save and test your Flow changes, then publish that saved version to change live Product behavior. A Flow with no publication keeps using its saved definition. A publication created before this saved-version model also runs the current saved definition until you explicitly publish a version.

## Surface status

Each Surface has one of these statuses:

* **Draft**: the Surface is being set up. Most Surface types reject requests in Draft.
* **Active**: the Surface is live and accepts requests.
* **Paused**: the Surface rejects new requests and keeps its configuration.

A new Surface starts in Draft. To create a Surface that is live from the start through the API or a product definition, set `status` to `active`.

Some Surface types behave differently in Draft and Paused:

| Surface type    | In Draft                                                        | In Paused                                                                                                     |
| --------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| Webhook         | Accepts events, so you can send test events while you set it up | Rejects events with `Webhook surface is paused`                                                               |
| Email           | Accepts messages only from the Product owner's email address    | Rejects messages                                                                                              |
| Chat            | Rejects requests                                                | Rejects new conversations. In the chat widget, a visitor can still resume a conversation that already exists. |
| All other types | Rejects requests                                                | Rejects requests                                                                                              |

> **Note**
>
> Some actions set a Surface to Active for you. Creating an API key for a Surface sets it to Active, even when it was Paused. Completing the Slack install for a Draft Slack Surface also sets it to Active. If you want to keep a Surface offline, create its keys or finish the Slack install only when you are ready for it to go live.

## Change a Surface's status

To change a Surface's status in the dashboard, follow these steps:

1. Open your Product.
2. Click the Surface on the Product canvas.
3. On the **Overview** tab, click the status menu and select **Draft**, **Active**, or **Paused**.
4. Click **Save**.
5. Send a test request to the Surface, then check [Logs](/user-guide/logs/working-with-logs) to confirm that the request succeeded.

A chat Surface needs exactly one enabled entry-point Capability before it can become Active. Otherwise the save fails with `Active chat needs exactly one enabled entry point`.

After a chat Surface leaves Draft, it cannot go back to Draft. The save fails with `An activated surface cannot return to draft`. To stop new conversations, select **Paused** instead.

To change the status from code, send `status` with the value `draft`, `active`, or `paused` in a `PUT /v1/products/{id}/surfaces/{surfaceId}` request. The Runtype MCP server's `update_surface` tool accepts the same `status` field. For all fields, see the [Products API reference](/api-reference/runtype-api/products/list-products).

## Surface card labels

Each Surface card on the Product canvas has a status line. The line can show these labels, joined with a dot when more than one applies:

* **Active**, **Draft**, or **Paused**: the Surface's status.
* **Setup complete**: shown after **Draft** when the Surface is configured and ready to set to Active.
* **1 failure** or **N failures**: runs from this Surface failed during the selected time window. A **+** after the number means the count is a lower bound.
* **Rejecting events**: the most recent delivery to the Surface's inbound webhook was rejected. This label comes first and does not depend on the Surface's status.

When an Active Surface still needs setup, the card shows what is missing in place of **Active**.

## What a Product runs

Versions exist for each Flow and Agent, not for the Product. Runtype does not keep Product version history, and you cannot roll back a Product as a whole.

| Capability type | What a Product runs                                                                                                                                                                                                                                                          | How to return to an earlier version                                                                                                                                                                                  |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Flow            | The published snapshot. Save leaves an existing publication active.                                                                                                                                                                                                          | Open **Versions** in the Flow editor and click **Publish** beside the earlier saved version. This activates its existing configuration ID.                                                                           |
| Agent           | Depends on your organization's [live-default setting](/user-guide/agents/agent-versioning-and-publishing#what-runs-when-you-do-not-name-a-version). With it off, the Agent's saved configuration runs. With it on, the version that the Agent's `live` alias points at runs. | Open **Version History** in the Agent editor and click **Publish to live** beside the earlier version. This writes the version's configuration back to the Agent and moves `live`, so it works under either setting. |

With the live default on, a Product request to an Agent whose `live` alias points at nothing runnable fails with `404` and `AGENT_NOT_DEPLOYED`. The request does not fall back to the saved configuration. To fix it, publish a version to `live`.

## Troubleshooting

Callers see these errors when a Surface is not Active:

| Error                               | Surface type | Fix                                                                                                             |
| ----------------------------------- | ------------ | --------------------------------------------------------------------------------------------------------------- |
| `API surface is not active`         | API          | Set the Surface to Active.                                                                                      |
| `A2A surface is not active`         | A2A          | Set the Surface to Active.                                                                                      |
| `MCP surface is not active` (`404`) | MCP          | Set the Surface to Active.                                                                                      |
| `Chat surface is not active`        | Chat         | Set the Surface to Active. When the Surface is Paused, widget visitors can still resume existing conversations. |
| `Webhook surface is paused`         | Webhook      | Set the Surface to Active.                                                                                      |

## Next steps

* [Flow versioning and publishing](/user-guide/flows/flow-versioning-and-publishing): publish and roll back Flow versions
* [Agent versioning and publishing](/user-guide/agents/agent-versioning-and-publishing): publish and deploy Agent versions
* [Manage Agents as code](/user-guide/agents/manage-agents-as-code): version Agent definitions and publish changes
* [Working with logs](/user-guide/logs/working-with-logs): monitor Flow and Agent executions
* [What are Surfaces?](/user-guide/products-surfaces/what-are-surfaces): configure Surface types and availability