WebSocket: an interactive debug shell into a **running** step's Pod (the debug surface). Gated behind `Administer` — exec is the most privileged surface. Only a running step has a live Pod (they are `restartPolicy: Never` and gone once done), so a terminal/pending step is refused. Bridges the Pod's TTY to the socket: client text/binary → shell stdin, shell output → client. Disabled (404) unless an attacher is wired (k8s executor only).
GET
/v1/runs/{id}/steps/{step}/attach
const url = 'https://example.com/v1/runs/example/steps/example/attach';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/v1/runs/example/steps/example/attachParameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”id
required
string
Run id
step
required
string
Step id
Responses
Section titled “Responses”WebSocket upgrade — interactive TTY into the running step’s Pod
Step is not running (no live Pod)
No such run/step, or attach disabled