/v1 endpoints take Authorization: Bearer … and are scoped to a workspace.
See Introduction for auth, rate limits, and
versioning.
Two credentials
A workspace key (mk_live_…, minted in Settings) can do anything the
workspace can. A session token (ms_…) is returned once when you open a
session and can do exactly one thing: call tools in that session.
Give your agent process the session token. It is the credential that travels into
a loop, a CI job, or a teammate’s terminal, and scoping it means a leak dies with
the session rather than opening your whole workspace.
GET /v1/envs/{slug}/tools
The callable surface, in the shape whatever is binding to it expects.string
default:"native"
native, openai, or anthropic. The provider formats are the exact shape
those SDKs’ tools= parameter takes, so the response goes straight into your
loop. native adds what we are unsure of (see below).native format carries fields the provider formats deliberately drop, because
they are facts about the twin for the engineer reading the listing, not
instructions for the model choosing a tool:
binding is the one to read. provided means your own tool code runs against the
seeded world, so behaviour matches production. synthesized means code we
generated from the recordings. simulated means a model answers from the
recordings and the schema. All three answer; the difference decides how much
weight to put on a surprising result.
POST /v1/envs/{slug}/wake
Start the environment’s container without opening a session, and answer immediately:200 when it is ready, 202 while it boots.
POST /v1/envs/{slug}/sessions
Open an isolated world and mint the token that can act in it.string
Plain English preconditions. The twin constructs a world that satisfies them.
Omit for the world the mirror was built with.
integer
Pins the draw. The same seed and instructions reproduce the same world exactly.
Omit to draw a fresh one; it comes back in the response.
session_token is shown once. seed and world_hash are the reproducibility
receipts: keep them and any run is replayable.
POST /v1/sessions/{id}/call
Call one tool in that world.error is the TOOL’s error, not the transport’s. A call that correctly reports
“no such booking” is a successful request carrying an errored result, exactly as
your real tool would behave.
GET /v1/sessions/{id}
What the session has done and what world it is in:n_calls, n_errors, the
fidelity mix, state_hash (which changes when the world changes), and the
seeding receipts.
