A routine step calls a product operation with uses: <product>/<step>@<major>. Its with is the operation's request body plus one field for each path or query parameter, and its outputs are the response body, or, for a job, the finished job record. This page is generated from the API spec, the same source the node builds its table from. Steps run as the key that published the routine version, so that key needs each operation's scope.

Kind. A sync step makes one request. A job step creates a job, waits for it without holding a step slot, and outputs the finished job; canceling the run cancels the job. Effect. read steps retry under defaults.retry; write steps retry only when the step sets its own retry (Steps). Idempotency-Key. Every product step sends <run id>:<step id>; the operations marked yes return the stored response to a repeat instead of running again (FAQ).

StepKindEffectOperationMeterDedupes on Idempotency-Key
vision/scrape@1syncreadPOST /v1/vision/scrapevision.pageno
vision/map@1syncreadPOST /v1/vision/mapvision.pageno
vision/crawl@1jobreadPOST /v1/vision/crawlsvision.pageyes
vision/batch@1jobreadPOST /v1/vision/batchesvision.pageyes
vision/act@1syncwritePOST /v1/vision/sessions/{session_id}/actnoneno
vision/extract@1jobreadPOST /v1/vision/extracts (not in the API reference yet)vision.page, infer.input_tokens, infer.output_tokensyes
render/screenshot@1syncreadPOST /v1/render/screenshotsrender.screenshotyes
render/video@1jobreadPOST /v1/render/videosrender.video_syes
render/restyle@1jobreadPOST /v1/render/videos/{video_id}/restylerender.video_syes
sandboxes/create@1syncwritePOST /v1/sandboxessandboxes.vcpu_ms, sandboxes.gib_msyes
sandboxes/exec@1syncwritePOST /v1/sandboxes/{sandbox_id}/execnoneyes
sandboxes/read_file@1syncreadGET /v1/sandboxes/{sandbox_id}/filesnoneno
sandboxes/write_file@1syncwritePUT /v1/sandboxes/{sandbox_id}/filesnoneno
sandboxes/run_code@1syncwritePOST /v1/sandboxes/{sandbox_id}/run_codenoneno
sandboxes/snapshot@1syncwritePOST /v1/sandboxes/{sandbox_id}/snapshotnoneyes
sandboxes/fork@1syncwritePOST /v1/sandboxes/{sandbox_id}/forksandboxes.vcpu_ms, sandboxes.gib_msyes
sandboxes/delete@1syncwriteDELETE /v1/sandboxes/{sandbox_id}noneno
infer/chat@1syncreadPOST /v1/infer/chat/completionsinfer.input_tokens, infer.output_tokensno
infer/speech@1syncreadPOST /v1/infer/audio/speechinfer.audio_charsno

Vision

What each operation does is on the Vision pages and in its API reference.

vision/scrape@1 calls POST /v1/vision/scrape (scope vision:run).

  • with: the request body (required: url).
  • Outputs: the response body (ScrapeResult).

vision/map@1 calls POST /v1/vision/map (scope vision:run).

  • with: the request body (required: url).
  • Outputs: the response body (MapResult).

vision/crawl@1 calls POST /v1/vision/crawls (scope vision:run).

  • with: the request body (required: url).
  • Outputs: the finished job record, as GET /v1/vision/crawls/{crawl_id} returns it.

vision/batch@1 calls POST /v1/vision/batches (scope vision:run).

  • with: the request body (required: urls).
  • Outputs: the finished job record, as GET /v1/vision/batches/{batch_id} returns it.

vision/act@1 calls POST /v1/vision/sessions/{session_id}/act (scope vision:run).

  • with: the request body (required: actions) and session for the path parameter session_id (optional).
  • Outputs: the response body (ActResult).
  • session is optional: without it the step acts in a browser session made for it and closed after it, also when it fails or times out, and profile loads a saved profile into that session.

vision/extract@1 calls POST /v1/vision/extracts (not in the API reference yet) (scope vision:run).

  • with: the request body (required: urls).
  • Outputs: the finished job record, as GET /v1/vision/extracts/{job_id} returns it.

Render

What each operation does is on the Render pages and in its API reference.

render/screenshot@1 calls POST /v1/render/screenshots (scope render:run).

  • with: the request body (no field is required).
  • Outputs: the response body (Screenshot).

render/video@1 calls POST /v1/render/videos (scope render:run).

  • with: the request body (required: source and beats).
  • Outputs: the finished job record, as GET /v1/render/videos/{video_id} returns it.

render/restyle@1 calls POST /v1/render/videos/{video_id}/restyle (scope render:run).

  • with: the request body (no field is required) and video for the path parameter video_id.
  • Outputs: the finished job record, as GET /v1/render/videos/{video_id} returns it.

Sandboxes

What each operation does is on the Sandboxes pages and in its API reference.

sandboxes/create@1 calls POST /v1/sandboxes (scope sandboxes:write).

  • with: the request body (no field is required).
  • Outputs: the response body (Sandbox).

sandboxes/exec@1 calls POST /v1/sandboxes/{sandbox_id}/exec (scope sandboxes:run).

  • with: the request body (required: cmd) and sandbox for the path parameter sandbox_id.
  • Outputs: the response body (ExecResult).
  • Give sandbox to run in an existing sandbox, or template instead to run in a sandbox made for the step and deleted after it; create then takes the rest of that sandbox's create request. See Steps.

sandboxes/read_file@1 calls GET /v1/sandboxes/{sandbox_id}/files (scope sandboxes:run).

  • with: sandbox for the path parameter sandbox_id, path for the query parameter path and list for the query parameter list (optional).
  • Outputs: the response body (FileEntryList).
  • Not runnable in a routine yet: the step fails with 501 not_implemented, because steps call products in-process and that path carries JSON only on this build.

sandboxes/write_file@1 calls PUT /v1/sandboxes/{sandbox_id}/files (scope sandboxes:run).

  • with: the bytes to send as the request body, sandbox for the path parameter sandbox_id, path for the query parameter path, mode for the query parameter mode (optional) and mkdir for the query parameter mkdir (optional).
  • Outputs: the response body (FileEntry).
  • Not runnable in a routine yet: the step fails with 501 not_implemented, because steps call products in-process and that path carries JSON only on this build.

sandboxes/run_code@1 calls POST /v1/sandboxes/{sandbox_id}/run_code (scope sandboxes:run).

  • with: the request body (required: code) and sandbox for the path parameter sandbox_id.
  • Outputs: the response body (RunCodeResult).

sandboxes/snapshot@1 calls POST /v1/sandboxes/{sandbox_id}/snapshot (scope sandboxes:write).

  • with: the request body (no field is required) and sandbox for the path parameter sandbox_id.
  • Outputs: the response body (Snapshot).

sandboxes/fork@1 calls POST /v1/sandboxes/{sandbox_id}/fork (scope sandboxes:write).

  • with: the request body (no field is required) and sandbox for the path parameter sandbox_id.
  • Outputs: the response body (SandboxList).

sandboxes/delete@1 calls DELETE /v1/sandboxes/{sandbox_id} (scope sandboxes:write).

  • with: sandbox for the path parameter sandbox_id.
  • Outputs: the response body (Sandbox).

Infer

What each operation does is on the Infer pages and in its API reference.

infer/chat@1 calls POST /v1/infer/chat/completions (scope infer:run).

  • with: the request body (required: model and messages).
  • Outputs: the response body (ChatCompletion).

infer/speech@1 calls POST /v1/infer/audio/speech (scope infer:run).

  • with: the request body (required: model, input and voice).
  • Outputs: the response body (SpeechWithTimestamps).
  • Not runnable in a routine yet: the step fails with 501 not_implemented, because steps call products in-process and that path carries JSON only on this build.
Ask a question... ⌘I