Update a journey
Editing a journey never disturbs a run already under way: a run pins its own immutable snapshot of the definition at launch.
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.
Journey ID, as returned by the project's journey list.
Body
Fields to change.
PATCH with a TRI-STATE, and the third state is the point: a field absent leaves it alone, present sets it, and null CLEARS it. There is no other way to say "stop fanning this journey out across environments and go back to its host targets".
sessionsPerTarget and maxTurns must be sent TOGETHER — they are one config object upstream, so a partial update would need a read-modify-write that could silently clobber a concurrent edit. Requiring both is a 400 you can fix rather than a lost update you never see.
2004000A non-empty list to set, or null to clear and fall back to host targets.
1null clears the attachment.
1 <= x <= 1001 <= x <= 200Response
The updated journey.
A persona's task: what they are trying to accomplish, and across which targets. Launching one is POST /projects/{projectId}/journeys/{journeyId}/runs.
What the persona is trying to accomplish. This drives the whole run.
The swarm container this journey was authored under. Provenance only — nothing resolves through it at run time, and a journey created outside a swarm has none.
Environments this journey fans out across. EMPTY on a host-pinned journey — that is a different execution model, not a journey with no targets.
Sessions run against EACH target. Total sessions = targets × this.
Epoch milliseconds.
Epoch milliseconds.
Legacy host-pinned grounding. Absent on an environment-based journey.

