Recording

Record a long flow and watch it later

The asynchronous recorder: starts a video-recorded, annotated run and returns a job id immediately; the videoId arrives on the job result.

record_job

What it is

The job: Capture a flow that is too long to sit and wait for.

The recordings worth having are usually of the runs worth watching, and those are the long ones — a multi-step export, a sign-up, a flow that pauses for a human. record_job starts that run with recording and annotation forced on and hands back a job id straight away.

Poll get_job as you would any other job. The videoId arrives on the result once the run is complete, and the recording streams from GET /api/v1/runs/{id}/video with your API key.

Everything else behaves like submit_run: the same parking on a 2FA wall, the same settle-on-first-terminal-poll billing, the same full refund if you cancel it.

The call

Call it exactly like this.

Copied from the tool's registration and the route handler — not paraphrased.

MCPrecord_job.mcp.jsonjson
// MCP tool call — server "twin-browser"
{
  "tool": "record_job",
  "arguments": {
    "target": "https://app.example.com",
    "goal": "extract"
  }
}
POST /api/v1/jobs (record + annotate)request.shbash
curl -X POST https://twin-browser.com/api/v1/jobs \
  -H "Authorization: Bearer $TWIN_API_KEY" \
  -H "content-type: application/json" \
  -d '{"target":"https://app.example.com","goal":"extract","record":true,"annotate":true,"blockAssets":false}'
Parameters accepted by record_job
ParameterTypeWhat it does
target*stringBase URL of the target you are authorized to act on.
goal*stringA registry goal name: login, search, extract, reply or like.
proxystringYour own egress proxy URL.

Returns

response.jsonjson
HTTP 202
{ "jobId": "…", "status": "running" }

// then GET /api/v1/jobs/{id} → result carries videoId once complete.

What it costs

10 credits

The same floor as any job, settled higher-of against metered model, compute and egress on the first terminal poll. A recorded job keeps its assets, so the egress component is real; a cancelled or failed job is refunded in full.

See the full rate card

Which one

When a different tool is the right call.

The honest answer is often the neighbouring tool. These are the trades.

record_run

Same recording, synchronous. If the flow is short enough to wait for, record_run gives you the video without the polling.

record_run
submit_run

Same job envelope without the video. If nobody is going to watch it, do not pay to keep the assets loaded.

submit_run

Questions

record_job, answered.

How long is a recording kept?
Recordings are persisted to durable storage and served back through GET /api/v1/runs/{id}/video, with size tiered by plan and storage capped. A recording that is no longer available answers 404 rather than an empty file — so if a video matters to you long-term, pull it down rather than treating the API as your archive.