Skip to main content
POST
Create several eval cases

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.

Headers

Idempotency-Key
string

Makes the write retry-safe. A repeat of the same request under the same key lands on the rows the first attempt authored instead of creating a second copy; those entries come back with replayed: true.

Maximum string length: 256

Path Parameters

projectId
string
required

ID of the hosted project that contains the server.

suiteId
string
required

Eval suite ID, as returned by POST /eval-runs.

Query Parameters

declaredSuiteId
string

The suite file's own suite.id, when this request is that file syncing itself. A CI-owned suite (see EvalSuiteDetail.managedBy) refuses configuration writes with 409 and details.reason: "CI_OWNED_SUITE_READ_ONLY"; naming the suite's own declared id is how the file writing itself is allowed through. Naming any other id refuses exactly as loudly as naming none, so it is not a capability — omit it for an ordinary edit.

A QUERY PARAMETER on every route that takes it, never a body field. These request bodies are strict, here and on every Inspector that predates the CI-owned lock, so a body field is a 400 against an older deployment — which would break mcpjam cloud eval run --file for anyone whose CLI is newer than their Inspector. A query parameter is read by the deployments that know it and ignored by those that do not, which is the right degradation: an Inspector with no lock has no exception to make.

Maximum string length: 128

Body

application/json

Author several cases in one call. Each entry takes the same fields as a single create. The 100-case cap is deliberately smaller than a suite file's 500-case limit, so a maximal file uploads in several calls.

cases
object[]
required
Required array length: 1 - 100 elements
declaredSuiteId
string

The suite file's own suite.id, when THIS request is a suite-file sync.

A CI-owned suite (see EvalSuiteDetail.managedBy) refuses configuration writes with 409 and details.reason: "CI_OWNED_SUITE_READ_ONLY". Naming the suite's own declared id is how the file writing itself is allowed through — the platform permits the write only when the id matches, so naming any other id refuses exactly as loudly as naming none. Omit it for ordinary edits.

PREFER THE declaredSuiteId QUERY PARAMETER on this route. This body field still works here, but these request bodies are strict on every Inspector that predates the CI-owned lock, so a body field is a 400 against an older deployment while an unknown query parameter is simply ignored. The MCPJam SDK and CLI send the query parameter.

Maximum string length: 128
duplicatePolicy
enum<string>
default:block

What to do with a case whose definition already matches one in the suite. An unrecognized value coerces to block and reports the coercion in the response's duplicatePolicy rather than failing the call.

Available options:
block,
warn,
create_anyway
overrideReason
string

Required by warn and create_anyway. Recorded on the case's revision.

Minimum string length: 1

Response

Per-case outcomes. Some entries may have failed; see failed.

A partial outcome by design: the cases in created were written even when failed is non-empty. Both arrays carry the index of the request entry they describe.

created
object[]
required
failed
object[]
required
duplicatePolicy
object
required

What policy actually applied, so a coercion is never silent.

warnings
object[]