Publish an environment for user testing
PUT, not POST, because publishing is IDEMPOTENT: one scenario per environment, and publishing an already-published environment returns the existing one rather than minting a second. created says which happened.
Requires project ADMIN.
Authorizations
MCPJam API key (sk_…). Create one at Settings → API keys. Guest sessions cannot use the API, and API keys cannot manage other API keys.
Path Parameters
ID of the hosted project that contains the server.
Project environment ID, as returned by the project's environment list.
Body
Optional create-time overrides. A bodyless publish is the common case.
Optional CREATE-TIME overrides, applied in the same call so the scenario is never briefly live in a wider mode than you asked for. Ignored on a republish — see overridesIgnored.
2002000Who may open the share link:
project_members— signed-in members of the project onlyinvited_only— named members, invited individuallyanyone_with_link— anyone holding the URL, signed in or not
project_members, invited_only, anyone_with_link Response
The scenario, new or existing.
A published environment: what a visitor lands on when you share a link.
Who may open the share link:
project_members— signed-in members of the project onlyinvited_only— named members, invited individuallyanyone_with_link— anyone holding the URL, signed in or not
project_members, invited_only, anyone_with_link 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.
The share link. null when the scenario has no link token.
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.
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}.

