Launch a journey
Answers 202: the run row exists and its fan-out has started. It is not finished — poll GET /projects/{projectId}/goal-runs/{runId} until status leaves running.
SPENDS. A launch fans out into targets × iterations chat sessions, every one of which runs a model on your organization’s account.
Two different 429s can come back and they mean different waits: the per-minute burst brake (retry in seconds) and your plan’s daily launch cap (resets at UTC midnight). Both normally carry Retry-After — honor it when it is there, and back off on your own when it is not, rather than blocking on a header that may not come. A retried Idempotency-Key consumes NO quota.
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.
Headers
Send one. A launch spends model credits, so a retry of a dropped response must not run the goal twice. Replaying a key returns the ORIGINAL run with deduped: true and starts no second runner.
Omitting the header is read as a request that declined to identify itself, and gets a FRESH run every time.
Path Parameters
Body
Optional launch options. Omit the body entirely to run the goal as authored.
Optional. A launch with no options is a BODYLESS POST — omit the body entirely rather than sending null, which is rejected.
Fan out across THESE environments instead of the goal's authored targets. NON-EMPTY when present: [] is a caller saying "across these" while naming none, and would have silently launched the authored targets instead. Silently running something other than what was asked for is bad anywhere; on an operation that spends it is worse. Omit the field to mean "as authored".
1How many of this launch's conversations you expect to be sponsored (paid from MCPJam's per-user allowance instead of your organization's credits). If the actual split differs, the launch is refused with a 409 whose details.code is swarm_funding_changed (with expectedSponsored, actualSponsored and totalConversations) and nothing is created. Omit it to accept whatever split applies.
x >= 0Response
The run was accepted and started.

