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.
// MCP tool call — server "twin-browser"
{
"tool": "record_job",
"arguments": {
"target": "https://app.example.com",
"goal": "extract"
}
}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}'| Parameter | Type | What it does |
|---|---|---|
| target* | string | Base URL of the target you are authorized to act on. |
| goal* | string | A registry goal name: login, search, extract, reply or like. |
| proxy | string | Your own egress proxy URL. |
Returns
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 cardWhich one
When a different tool is the right call.
The honest answer is often the neighbouring tool. These are the trades.
record_runSame recording, synchronous. If the flow is short enough to wait for, record_run gives you the video without the polling.
record_runsubmit_runSame job envelope without the video. If nobody is going to watch it, do not pay to keep the assets loaded.
submit_runQuestions
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.
Keep going