---
title: "Point a scenario at a different environment"
method: POST
path: "/projects/{projectId}/user-testing/scenarios/{scenarioId}/rebind"
tags: ["User testing"]
---

# Point a scenario at a different environment

`POST /projects/{projectId}/user-testing/scenarios/{scenarioId}/rebind`

Keeps the scenario's LINK, its members and its session history while changing what visitors actually reach. The alternative — unpublish and republish — mints a new link, which means re-sharing it with everyone.

The new environment must belong to THIS project; one that does not answers 404 rather than confirming it exists elsewhere.

## Request body

- ScenarioRebindRequest
  - `environmentId` string, required — The environment to point this scenario at. Must belong to the SAME project.

## Response `200`

The scenario now points at the new environment.

- Scenario — A published environment: what a visitor lands on when you share a link.
  - `id` string, required
  - `environmentId` string, required
  - `name` string, required
  - `mode` 'project_members' | 'invited_only' | 'anyone_with_link', required — Who may open the share link: - `project_members` — signed-in members of the project only - `invited_only` — named members, invited individually - `anyone_with_link` — **anyone holding the URL**, signed in or not
  - `accessVersion` integer, required — Bumped whenever access NARROWS — a mode change, or a member removal. Sessions minted under an older version stop working, which is what makes those changes take effect at once rather than at expiry. A link ROTATION is deliberately not one of them: it mints a new URL without bumping this, so anyone who already redeemed the old link keeps working. Rotating is half of closing a leak — see the rotate-link operation.
  - `link` string, nullable, required — The share link. `null` when the scenario has no link token.
  - `created` boolean — False when the environment was ALREADY published and this returned the existing scenario. Publishing is idempotent, so this is how you tell "I published it" from "it was already there" without a preflight read.
  - `overridesIgnored` boolean — True when the create-time overrides (`name`, `description`, `mode`) were NOT applied because the environment was already published. Paired with `created: false` — change an existing scenario with `PATCH .../user-testing/scenarios/{scenarioId}`.

## Other responses

- `400` — Malformed body or parameters.
- `401` — Missing, invalid, revoked, or orphaned key (`UNAUTHORIZED`) — or the **target MCP server** needs an OAuth grant (`OAUTH_REQUIRED`), which is a property of the server, not your key.
- `403` — Key is valid but not allowed to do this.
- `404` — Unknown project, server, or resource.
- `429` — Per-key rate limit exceeded (60 requests/minute sustained, bursts up to 10). Honor `Retry-After` and back off with jitter.
- `500` — Something failed on MCPJam's side.

---

[API](https://skmtc.net/mcpjam/apis/mcpjam-api.md) · [All operations](https://skmtc.net/mcpjam/apis/mcpjam-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/mcpjam/mcpjam-api/revisions/d3adfe49fbbf/schema)
