Skip to main content
POST
Launch one run per target as a group (async)

Authorizations

Authorization
string
header
required

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

projectId
string
required

ID of the hosted project that contains the server.

Body

application/json

Launch one run per target under a single server-minted group id.

targets fan out along ONE axis: every entry is an environmentId, or every entry is a namedHostId. A mixed list returns 400 with details.reason: "HETEROGENEOUS_TARGETS" — mixing them would have to answer whether a host runs inside an environment or beside it, and every answer to that is a cross product nobody asked for. Duplicates are deduplicated by id, preserving order.

The knobs below apply UNIFORMLY to every run in the group. serverIds and refreshSnapshot are deliberately absent: an environment supplies its own closed server set, a host derives one from its config, and last-writer-wins on a frozen suite snapshot is never what a fan-out means. Inline tests are absent for the same reason — a group runs a persisted suite.

suiteId
string
required

The suite every target runs.

targets
object[]
required

One entry per run. Every target must be ATTACHED to the suite; an unattached one returns 400 with zero runs started.

Required array length: 1 - 10 elements
iterationOverride
integer

Override the per-case runs count for every run in the group.

Required range: 1 <= x <= 10
caseIds
string[]

Narrow every run in the group to these suite cases.

Minimum array length: 1
matchOptionsOverride
object

Match options for every run in the group. Same public-or-internal vocabulary as POST /eval-runs.

skillsOverride
enum<string>

Run every target as the "without skills" arm.

Available options:
exclude
notes
string
passCriteria
object
idempotencyKey
string

Makes the whole launch replayable. The runGroupId is DERIVED from this key and each target's run key is derived from that, so a retry after a crash mid-launch returns the original run ids rather than double-launching the targets that already started. The Idempotency-Key header carries the same value and wins over this field.

Maximum string length: 256

Response

Group accepted. Each target's outcome is in targets; execution continues in the background.

One entry per target. A per-target failure does NOT abort its siblings, so read outcome rather than treating the 202 as "everything started".

runGroupId
string
required

Server-minted. Every sibling run carries it, and the hosted UI collapses them into one row.

suiteId
string
required
outcome
enum<string>
required

started — every target launched; partial — some did and some did not; failed — none did (still a 202: the group itself was valid, and the per-target reasons are in targets).

Available options:
started,
partial,
failed
startedCount
integer
required
failedCount
integer
required
targets
object[]
required

Discriminated on status, so a target that failed can never be mistaken for one that started with an unread runId.

runId
string
deprecated

Mirror of the FIRST started run, so readers written against the single-run receipt keep working. Absent when nothing started. Read targets instead — this describes one run out of several.

status
string
deprecated

See runId.

servers
object[]
deprecated

See runId.

environment
object · null · null
deprecated

See runId.

caseUpsert
object
deprecated

See runId.