{ recipe, params?, name?, sleep? } or { spec } (spec), plus stack and expose ("public" or "private": the URL comes back as outputs.URL). Waits until ready, up to waitTimeoutMs (120000), unless wait: false
GET
/v1/briqs?stack=&all=
List with state and cost; all=true includes destroyed briqs
GET
/v1/briqs/:id
One briq: cost, sleep and sleepsAt, endpoints, env (secrets masked), stoppedReason, lastExit, files (path and bytes)
POST
/v1/briqs/:id/exec
{ cmd, timeoutMs?, stdin? } → { exitCode, stdout, stderr }. cmd is an argv, run without a shell: ["sh", "-c", "…"] for pipes or $VARS
GET
/v1/briqs/:id/logs?since=&limit=
Log lines and a next cursor
POST
/v1/briqs/:id/files
{ path, contentBase64 }, up to 1 MB; larger is a 400 validation, and so is base64 cut short (line breaks are fine) → { path, bytes, sha256, verified }: verified when the briq computed the same SHA-256 from its disk. A warning when the path is a boot file
PUT
/v1/briqs/:id/files?path=
The same, with the raw bytes as the body: curl -X PUT --data-binary @server.py; the same answer
GET
/v1/briqs/:id/files?path=
{ path, contentBase64 }, up to 1 MB; larger is a 400 validation
POST
/v1/briqs/:id/expose
{ port, mode?, rotate? } → { url, mode, port, warning? }. One URL per briq: another port moves it and restarts the machine. See Expose
Starts a briq stopped by /stop or by its own exit. A sleeping briq wakes on its next use without it, and so does one stopped by a limit once the limit has cleared
POST
/v1/briqs/:id/sleep
{ sleep, stack? }: "30m", "3h", "7d" or "never", a string. stack: true for every briq of its stack → { briqs }. See Sleep
{ topic: "question" | "bug" | "idea", message } emails the briq team; the answer goes to the account's address (with a key or an agent's token: to the person who connected it, or the team's owner). Five per ten minutes