Run a command in the sandbox and return its output.
Runs cmd with bash -lc as the sandbox’s login user (dev, HOME
/data/home, the user SSH sessions get), after exporting envs and
changing to cwd (default HOME, even if the profile changes directory;
a cwd that does not exist makes the command fail with exit code 1). stdin is fed to the command, then EOF:
UTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that
are not UTF-8 become U+FFFD, so base64-encode binary input or write it
with PUT /v1/machines/{id}/files first (see ExecRequest.stdin).
Instead of cmd, send argv (a program and its arguments) to run
it with no shell: {"argv": ["printf", "%s|", "a b", "$X"]} prints
a b|$X|. The login profile, envs and cwd apply the same way;
only the parsing of the command differs. Set exactly one of cmd
and argv.
The request blocks until the command exits or timeoutSeconds passes.
On timeout the command’s process group is killed (SIGKILL) and the
result has timedOut: true and exitCode: 124 (also when the sandbox
did not start the command in time). A command killed by a signal has
signal set and exitCode 128+N for standard signal N, otherwise
255. A non-zero exit code is a 200 result,
not an error. The request returns when the command exits, even if
a process it started in the background keeps its stdout or stderr
open: that process keeps running, output it writes later than about
a second after the exit is not returned, and its later writes to
that output fail with a broken pipe, so redirect a server’s stdout
and stderr to a file (nohup server >log 2>&1 &). stdout and stderr
keep their first 1 MiB each (truncated: true when either was cut);
invalid UTF-8 is replaced with U+FFFD (invalidUtf8: true), so binary
output is not byte-exact: read files with
GET /v1/machines/{id}/files/content.
The sandbox must be running (409 machine_not_running). At most 32
requests run at once per user on the free plan, per workspace for a
workspace’s API keys (Pro 64; Builder, Team
and Enterprise 256), across all your sandboxes. Commands,
file reads, desktop, port-forward and Secret refresh calls share this
limit. A background command counts only while it starts. More get a
retryable 429 quota_exceeded (server config limits.maxExecsPerUser,
plans.<tier>.maxExecs and limits.maxExecsPerOrg,
not reported by GET /v1/usage). If the sandbox cannot be reached,
503 host_unavailable; when the connection is lost after the command
started it is not retryable, since the command may have run (it is
killed, not left running). An API server that restarts mid-command
kills it and answers a retryable503 host_unavailable (“the API
server restarted before the command finished”).
Not idempotent: no Idempotency-Key, and a retry runs the command again.
API keys: needs one of the scopes machines:write, machines:exec (legacy).
Streaming: send Accept: text/event-stream to get the output as the
command writes it, as server-sent events: a stdout or stderr
event (data: ExecOutput) for each chunk, a : ping comment every
15 s while the command is quiet, then one exit event (data: the
ExecResult, with empty stdout and stderr and never
truncated: streamed output is not capped) or error event (data:
an ErrorBody, e.g. host_unavailable when the connection to the
sandbox was lost). Errors found before the command starts (400,
404, 409, 429, a 503 dial failure) are plain JSON responses.
Closing the stream kills the command. Timeouts are the same as
without streaming; for a command longer than 10 minutes start it
in the background (instabox exec --background) and follow its log.
POST
/
v1
/
machines
/
{id}
/
exec
Run a command in the sandbox and return its output.
Sandbox ID (m_ + 26 lowercase base32 characters) or the sandbox's name (unique among your sandboxes; names never contain _, so the two never collide). Older servers take only the ID and answer 404 for a name.
Set exactly one of cmd (a shell string) and argv (a program and its arguments, run without a shell); both, neither or an empty argv is 400 bad_request. An empty cmd counts as no cmd, so {"cmd": "", "argv": [...]} runs the argv.
The program and its arguments, run with no shell: each element reaches the program exactly as sent (no expansion of $, * or ~, no word splitting, quotes or redirections; "" is an empty argument). argv[0] must not be empty and is looked up on the login profile's PATH; the login profile, envs and cwd apply as for cmd. A program that is not found exits 127, one that cannot run 126. At most 64 KiB counting each element's length plus one, no NUL bytes. The command sent to the sandbox (envs, cwd and argv, quoted for the shell: about 9 bytes per element plus its text) must also stay under 128 KiB, so many short elements can be 400 bad_request below the 64 KiB cap; send bulk data on stdin. Set this or cmd.
Direct (delivery env) Secrets of the sandbox's org exported for this command only: variable name -> Secret name. Resolved at exec time, never stored or written into the sandbox; each use is audited by name. A name may not also be in envs; reserved variables are refused. A proxy or missing Secret is 400. Only where GET /v1/me has directSecretRefs; elsewhere 400 (a control host from before secretEnvs would run the command without them).
Text fed to the command, then EOF. It is a JSON string, so the command reads its UTF-8 bytes: NUL, CR and LF arrive unchanged (escaped as \u0000, \r, \n). At most 1 MiB (1048576 bytes) of UTF-8, counted in bytes, not characters (é is 2): more is 400 bad_requeststdin is longer than 1048576 bytes. The schema sets no maxLength here, because maxLength counts characters. JSON cannot carry bytes that are not UTF-8; any in the request body reach the command as U+FFFD (ef bf bd), with no error. For binary input, send it base64-encoded and decode it in the command (base64 -d | ...; up to 768 KiB of binary fits), or write the file first with PUT /v1/machines/{id}/files and redirect it in (cmd < file). The CLI's exec --stdin does that upload itself for input past 1 MiB or not UTF-8, up to 5 GiB.
Leave the command out of the sandbox's history (GET /v1/machines/{id}/history): for a client's own housekeeping commands, such as the CLI's job polls. Does not go with historyCommand.
How the command appears in the sandbox's history instead of cmd or argv, for a wrapper that runs something else (the CLI's exec --background). Cut at 4096 bytes like them; no NUL bytes.
Set when the command failed with No space left on device (read again right after it), or a filesystem was at least 90% full when last read (read in the background after an exec or metrics call, at most once a minute).
stdout or stderr had bytes that are not UTF-8 (binary output), replaced with U+FFFD, so the output is not what the command wrote. Absent when false; also set on a streamed exec's exit event.
The command exited non-zero and the sandbox's kernel OOM killer killed one of its own processes (the command or a child: its SSH session's cgroup; never another command's process, and each kill is reported once). oomKill says which, when the sandbox named it. Checked only for exit code 137, a signal, or stderr saying a process was killed. False when none was seen, the exec's session scope could not be read, or the sandbox's host or guest agent cannot report kills; a kill whose kernel log record was lost is still true when the session scope's oom_kill count shows it (oomKill absent). Absent from older servers. Also set on a streamed exec's exit event.
The OOM kill behind oomKilled (the newest, when several).
Show child attributes
Was this page helpful?
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"InstaBox","description":"A Linux machine of its own in the cloud for every agent.","colors":{"primary":"#0A0A0A","light":"#FAFAFA","dark":"#0A0A0A"},"logo":{"light":"https://instacloud.mintlify.site/docs/logo/light.svg","dark":"https://instacloud.mintlify.site/docs/logo/dark.svg","href":"https://instabox.sh"},"favicon":"https://mintlify.s3.us-west-1.amazonaws.com/instacloud/instabox/favicon.svg","appearance":{"default":"dark"},"navbar":{"links":[{"href":"https://instabox.sh/pricing","label":"Pricing"},{"href":"https://instabox.sh/changelog","label":"Changelog"}],"primary":{"type":"button","label":"Dashboard","href":"https://dashboard.instabox.sh"}},"footer":{"socials":{"github":"https://github.com/InsForge"}},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","chatgpt","claude","cursor","vscode","mcp"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"instacloud","hasAudioNarration":false,"actualSubdomain":"instacloud","customDomains":["instabox.sh"],"gitSource":{"type":"github","owner":"insforge","repo":"instabox","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"instabox","label":"","_id":"6aed4ce60814409ea4a899b5"},"feedback":{"thumbs":true,"contextualFeedback":{"allowEmail":false}},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af24f2490cec7c60d18d067","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API reference","count":86},{"language":"default","tag":"Documentation","count":34},{"language":"default","tag":"Machines","count":15},{"language":"default","tag":"Use cases","count":9},{"language":"default","tag":"SDK reference","count":8},{"language":"default","tag":"Lifecycle","count":8},{"language":"default","tag":"Secrets","count":7},{"language":"default","tag":"Account","count":6},{"language":"default","tag":"TypeScript","count":6},{"language":"default","tag":"Get started","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output","slug":"/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output","pageMetadata":{"title":"Run a command in the sandbox and return its output.","description":"Runs `cmd` with `bash -lc` as the sandbox's login user (`dev`, HOME\n`/data/home`, the user SSH sessions get), after exporting `envs` and\nchanging to `cwd` (default HOME, even if the profile changes directory;\na `cwd` that does not exist makes the command fail with exit code 1). `stdin` is fed to the command, then EOF:\nUTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that\nare not UTF-8 become U+FFFD, so base64-encode binary input or write it\nwith `PUT /v1/machines/{id}/files` first (see `ExecRequest.stdin`).\n\nInstead of `cmd`, send `argv` (a program and its arguments) to run\nit with no shell: `{\"argv\": [\"printf\", \"%s|\", \"a b\", \"$X\"]}` prints\n`a b|$X|`. The login profile, `envs` and `cwd` apply the same way;\nonly the parsing of the command differs. Set exactly one of `cmd`\nand `argv`.\n\nThe request blocks until the command exits or `timeoutSeconds` passes.\nOn timeout the command's process group is killed (SIGKILL) and the\nresult has `timedOut: true` and `exitCode: 124` (also when the sandbox\ndid not start the command in time). A command killed by a signal has\n`signal` set and `exitCode` 128+N for standard signal N, otherwise\n255. A non-zero exit code is a `200` result,\nnot an error. The request returns when the command exits, even if\na process it started in the background keeps its stdout or stderr\nopen: that process keeps running, output it writes later than about\na second after the exit is not returned, and its later writes to\nthat output fail with a broken pipe, so redirect a server's stdout\nand stderr to a file (`nohup server >log 2>\u00261 \u0026`). stdout and stderr\nkeep their first 1 MiB each (`truncated: true` when either was cut);\ninvalid UTF-8 is replaced with U+FFFD (`invalidUtf8: true`), so binary\noutput is not byte-exact: read files with\n`GET /v1/machines/{id}/files/content`.\n\nThe sandbox must be `running` (`409 machine_not_running`). At most 32\nrequests run at once per user on the free plan, per workspace for a\nworkspace's API keys (Pro 64; Builder, Team\nand Enterprise 256), across all your sandboxes. Commands,\nfile reads, desktop, port-forward and Secret refresh calls share this\nlimit. A background command counts only while it starts. More get a\nretryable `429 quota_exceeded` (server config `limits.maxExecsPerUser`,\n`plans.\u003ctier>.maxExecs` and `limits.maxExecsPerOrg`,\nnot reported by `GET /v1/usage`). If the sandbox cannot be reached,\n`503 host_unavailable`; when the connection is lost after the command\nstarted it is not `retryable`, since the command may have run (it is\nkilled, not left running). An API server that restarts mid-command\nkills it and answers a `retryable` `503 host_unavailable` (\"the API\nserver restarted before the command finished\").\nNot idempotent: no Idempotency-Key, and a retry runs the command again.\nAPI keys: needs one of the scopes `machines:write`, `machines:exec` (legacy).\n\nStreaming: send `Accept: text/event-stream` to get the output as the\ncommand writes it, as server-sent events: a `stdout` or `stderr`\nevent (data: `ExecOutput`) for each chunk, a `: ping` comment every\n15 s while the command is quiet, then one `exit` event (data: the\n`ExecResult`, with empty `stdout` and `stderr` and never\n`truncated`: streamed output is not capped) or `error` event (data:\nan `ErrorBody`, e.g. `host_unavailable` when the connection to the\nsandbox was lost). Errors found before the command starts (`400`,\n`404`, `409`, `429`, a `503` dial failure) are plain JSON responses.\nClosing the stream kills the command. Timeouts are the same as\nwithout streaming; for a command longer than 10 minutes start it\nin the background (`instabox exec --background`) and follow its log.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/exec","href":"/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Runs \", _jsx(_components.code, {\n children: \"cmd\"\n }), \" with \", _jsx(_components.code, {\n children: \"bash -lc\"\n }), \" as the sandbox’s login user (\", _jsx(_components.code, {\n children: \"dev\"\n }), \", HOME\\n\", _jsx(_components.code, {\n children: \"/data/home\"\n }), \", the user SSH sessions get), after exporting \", _jsx(_components.code, {\n children: \"envs\"\n }), \" and\\nchanging to \", _jsx(_components.code, {\n children: \"cwd\"\n }), \" (default HOME, even if the profile changes directory;\\na \", _jsx(_components.code, {\n children: \"cwd\"\n }), \" that does not exist makes the command fail with exit code 1). \", _jsx(_components.code, {\n children: \"stdin\"\n }), \" is fed to the command, then EOF:\\nUTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that\\nare not UTF-8 become U+FFFD, so base64-encode binary input or write it\\nwith \", _jsx(_components.code, {\n children: \"PUT /v1/machines/{id}/files\"\n }), \" first (see \", _jsx(_components.code, {\n children: \"ExecRequest.stdin\"\n }), \").\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Instead of \", _jsx(_components.code, {\n children: \"cmd\"\n }), \", send \", _jsx(_components.code, {\n children: \"argv\"\n }), \" (a program and its arguments) to run\\nit with no shell: \", _jsx(_components.code, {\n children: \"{\\\"argv\\\": [\\\"printf\\\", \\\"%s|\\\", \\\"a b\\\", \\\"$X\\\"]}\"\n }), \" prints\\n\", _jsx(_components.code, {\n children: \"a b|$X|\"\n }), \". The login profile, \", _jsx(_components.code, {\n children: \"envs\"\n }), \" and \", _jsx(_components.code, {\n children: \"cwd\"\n }), \" apply the same way;\\nonly the parsing of the command differs. Set exactly one of \", _jsx(_components.code, {\n children: \"cmd\"\n }), \"\\nand \", _jsx(_components.code, {\n children: \"argv\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The request blocks until the command exits or \", _jsx(_components.code, {\n children: \"timeoutSeconds\"\n }), \" passes.\\nOn timeout the command’s process group is killed (SIGKILL) and the\\nresult has \", _jsx(_components.code, {\n children: \"timedOut: true\"\n }), \" and \", _jsx(_components.code, {\n children: \"exitCode: 124\"\n }), \" (also when the sandbox\\ndid not start the command in time). A command killed by a signal has\\n\", _jsx(_components.code, {\n children: \"signal\"\n }), \" set and \", _jsx(_components.code, {\n children: \"exitCode\"\n }), \" 128+N for standard signal N, otherwise\\n255. A non-zero exit code is a \", _jsx(_components.code, {\n children: \"200\"\n }), \" result,\\nnot an error. The request returns when the command exits, even if\\na process it started in the background keeps its stdout or stderr\\nopen: that process keeps running, output it writes later than about\\na second after the exit is not returned, and its later writes to\\nthat output fail with a broken pipe, so redirect a server’s stdout\\nand stderr to a file (\", _jsx(_components.code, {\n children: \"nohup server >log 2>\u00261 \u0026\"\n }), \"). stdout and stderr\\nkeep their first 1 MiB each (\", _jsx(_components.code, {\n children: \"truncated: true\"\n }), \" when either was cut);\\ninvalid UTF-8 is replaced with U+FFFD (\", _jsx(_components.code, {\n children: \"invalidUtf8: true\"\n }), \"), so binary\\noutput is not byte-exact: read files with\\n\", _jsx(_components.code, {\n children: \"GET /v1/machines/{id}/files/content\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The sandbox must be \", _jsx(_components.code, {\n children: \"running\"\n }), \" (\", _jsx(_components.code, {\n children: \"409 machine_not_running\"\n }), \"). At most 32\\nrequests run at once per user on the free plan, per workspace for a\\nworkspace’s API keys (Pro 64; Builder, Team\\nand Enterprise 256), across all your sandboxes. Commands,\\nfile reads, desktop, port-forward and Secret refresh calls share this\\nlimit. A background command counts only while it starts. More get a\\nretryable \", _jsx(_components.code, {\n children: \"429 quota_exceeded\"\n }), \" (server config \", _jsx(_components.code, {\n children: \"limits.maxExecsPerUser\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"plans.\u003ctier>.maxExecs\"\n }), \" and \", _jsx(_components.code, {\n children: \"limits.maxExecsPerOrg\"\n }), \",\\nnot reported by \", _jsx(_components.code, {\n children: \"GET /v1/usage\"\n }), \"). If the sandbox cannot be reached,\\n\", _jsx(_components.code, {\n children: \"503 host_unavailable\"\n }), \"; when the connection is lost after the command\\nstarted it is not \", _jsx(_components.code, {\n children: \"retryable\"\n }), \", since the command may have run (it is\\nkilled, not left running). An API server that restarts mid-command\\nkills it and answers a \", _jsx(_components.code, {\n children: \"retryable\"\n }), \" \", _jsx(_components.code, {\n children: \"503 host_unavailable\"\n }), \" (“the API\\nserver restarted before the command finished”).\\nNot idempotent: no Idempotency-Key, and a retry runs the command again.\\nAPI keys: needs one of the scopes \", _jsx(_components.code, {\n children: \"machines:write\"\n }), \", \", _jsx(_components.code, {\n children: \"machines:exec\"\n }), \" (legacy).\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Streaming: send \", _jsx(_components.code, {\n children: \"Accept: text/event-stream\"\n }), \" to get the output as the\\ncommand writes it, as server-sent events: a \", _jsx(_components.code, {\n children: \"stdout\"\n }), \" or \", _jsx(_components.code, {\n children: \"stderr\"\n }), \"\\nevent (data: \", _jsx(_components.code, {\n children: \"ExecOutput\"\n }), \") for each chunk, a \", _jsx(_components.code, {\n children: \": ping\"\n }), \" comment every\\n15 s while the command is quiet, then one \", _jsx(_components.code, {\n children: \"exit\"\n }), \" event (data: the\\n\", _jsx(_components.code, {\n children: \"ExecResult\"\n }), \", with empty \", _jsx(_components.code, {\n children: \"stdout\"\n }), \" and \", _jsx(_components.code, {\n children: \"stderr\"\n }), \" and never\\n\", _jsx(_components.code, {\n children: \"truncated\"\n }), \": streamed output is not capped) or \", _jsx(_components.code, {\n children: \"error\"\n }), \" event (data:\\nan \", _jsx(_components.code, {\n children: \"ErrorBody\"\n }), \", e.g. \", _jsx(_components.code, {\n children: \"host_unavailable\"\n }), \" when the connection to the\\nsandbox was lost). Errors found before the command starts (\", _jsx(_components.code, {\n children: \"400\"\n }), \",\\n\", _jsx(_components.code, {\n children: \"404\"\n }), \", \", _jsx(_components.code, {\n children: \"409\"\n }), \", \", _jsx(_components.code, {\n children: \"429\"\n }), \", a \", _jsx(_components.code, {\n children: \"503\"\n }), \" dial failure) are plain JSON responses.\\nClosing the stream kills the command. Timeouts are the same as\\nwithout streaming; for a command longer than 10 minutes start it\\nin the background (\", _jsx(_components.code, {\n children: \"instabox exec --background\"\n }), \") and follow its log.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Run a command in the sandbox and return its output.","description":"Runs `cmd` with `bash -lc` as the sandbox's login user (`dev`, HOME\n`/data/home`, the user SSH sessions get), after exporting `envs` and\nchanging to `cwd` (default HOME, even if the profile changes directory;\na `cwd` that does not exist makes the command fail with exit code 1). `stdin` is fed to the command, then EOF:\nUTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that\nare not UTF-8 become U+FFFD, so base64-encode binary input or write it\nwith `PUT /v1/machines/{id}/files` first (see `ExecRequest.stdin`).\n\nInstead of `cmd`, send `argv` (a program and its arguments) to run\nit with no shell: `{\"argv\": [\"printf\", \"%s|\", \"a b\", \"$X\"]}` prints\n`a b|$X|`. The login profile, `envs` and `cwd` apply the same way;\nonly the parsing of the command differs. Set exactly one of `cmd`\nand `argv`.\n\nThe request blocks until the command exits or `timeoutSeconds` passes.\nOn timeout the command's process group is killed (SIGKILL) and the\nresult has `timedOut: true` and `exitCode: 124` (also when the sandbox\ndid not start the command in time). A command killed by a signal has\n`signal` set and `exitCode` 128+N for standard signal N, otherwise\n255. A non-zero exit code is a `200` result,\nnot an error. The request returns when the command exits, even if\na process it started in the background keeps its stdout or stderr\nopen: that process keeps running, output it writes later than about\na second after the exit is not returned, and its later writes to\nthat output fail with a broken pipe, so redirect a server's stdout\nand stderr to a file (`nohup server >log 2>\u00261 \u0026`). stdout and stderr\nkeep their first 1 MiB each (`truncated: true` when either was cut);\ninvalid UTF-8 is replaced with U+FFFD (`invalidUtf8: true`), so binary\noutput is not byte-exact: read files with\n`GET /v1/machines/{id}/files/content`.\n\nThe sandbox must be `running` (`409 machine_not_running`). At most 32\nrequests run at once per user on the free plan, per workspace for a\nworkspace's API keys (Pro 64; Builder, Team\nand Enterprise 256), across all your sandboxes. Commands,\nfile reads, desktop, port-forward and Secret refresh calls share this\nlimit. A background command counts only while it starts. More get a\nretryable `429 quota_exceeded` (server config `limits.maxExecsPerUser`,\n`plans.\u003ctier>.maxExecs` and `limits.maxExecsPerOrg`,\nnot reported by `GET /v1/usage`). If the sandbox cannot be reached,\n`503 host_unavailable`; when the connection is lost after the command\nstarted it is not `retryable`, since the command may have run (it is\nkilled, not left running). An API server that restarts mid-command\nkills it and answers a `retryable` `503 host_unavailable` (\"the API\nserver restarted before the command finished\").\nNot idempotent: no Idempotency-Key, and a retry runs the command again.\nAPI keys: needs one of the scopes `machines:write`, `machines:exec` (legacy).\n\nStreaming: send `Accept: text/event-stream` to get the output as the\ncommand writes it, as server-sent events: a `stdout` or `stderr`\nevent (data: `ExecOutput`) for each chunk, a `: ping` comment every\n15 s while the command is quiet, then one `exit` event (data: the\n`ExecResult`, with empty `stdout` and `stderr` and never\n`truncated`: streamed output is not capped) or `error` event (data:\nan `ErrorBody`, e.g. `host_unavailable` when the connection to the\nsandbox was lost). Errors found before the command starts (`400`,\n`404`, `409`, `429`, a `503` dial failure) are plain JSON responses.\nClosing the stream kills the command. Timeouts are the same as\nwithout streaming; for a command longer than 10 minutes start it\nin the background (`instabox exec --background`) and follow its log.\n","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/exec","href":"/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["connections"],"operationId":"execCommand","summary":"Run a command in the sandbox and return its output.","security":["2ec85235-5d4f-4c56-83ad-f717a1fda2ee","62006052-20e4-4349-9b20-422d5755e1e3","baae66da-46c3-4603-bf0c-f0e0d3340e75"],"description":"Runs `cmd` with `bash -lc` as the sandbox's login user (`dev`, HOME\n`/data/home`, the user SSH sessions get), after exporting `envs` and\nchanging to `cwd` (default HOME, even if the profile changes directory;\na `cwd` that does not exist makes the command fail with exit code 1). `stdin` is fed to the command, then EOF:\nUTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that\nare not UTF-8 become U+FFFD, so base64-encode binary input or write it\nwith `PUT /v1/machines/{id}/files` first (see `ExecRequest.stdin`).\n\nInstead of `cmd`, send `argv` (a program and its arguments) to run\nit with no shell: `{\"argv\": [\"printf\", \"%s|\", \"a b\", \"$X\"]}` prints\n`a b|$X|`. The login profile, `envs` and `cwd` apply the same way;\nonly the parsing of the command differs. Set exactly one of `cmd`\nand `argv`.\n\nThe request blocks until the command exits or `timeoutSeconds` passes.\nOn timeout the command's process group is killed (SIGKILL) and the\nresult has `timedOut: true` and `exitCode: 124` (also when the sandbox\ndid not start the command in time). A command killed by a signal has\n`signal` set and `exitCode` 128+N for standard signal N, otherwise\n255. A non-zero exit code is a `200` result,\nnot an error. The request returns when the command exits, even if\na process it started in the background keeps its stdout or stderr\nopen: that process keeps running, output it writes later than about\na second after the exit is not returned, and its later writes to\nthat output fail with a broken pipe, so redirect a server's stdout\nand stderr to a file (`nohup server >log 2>\u00261 \u0026`). stdout and stderr\nkeep their first 1 MiB each (`truncated: true` when either was cut);\ninvalid UTF-8 is replaced with U+FFFD (`invalidUtf8: true`), so binary\noutput is not byte-exact: read files with\n`GET /v1/machines/{id}/files/content`.\n\nThe sandbox must be `running` (`409 machine_not_running`). At most 32\nrequests run at once per user on the free plan, per workspace for a\nworkspace's API keys (Pro 64; Builder, Team\nand Enterprise 256), across all your sandboxes. Commands,\nfile reads, desktop, port-forward and Secret refresh calls share this\nlimit. A background command counts only while it starts. More get a\nretryable `429 quota_exceeded` (server config `limits.maxExecsPerUser`,\n`plans.\u003ctier>.maxExecs` and `limits.maxExecsPerOrg`,\nnot reported by `GET /v1/usage`). If the sandbox cannot be reached,\n`503 host_unavailable`; when the connection is lost after the command\nstarted it is not `retryable`, since the command may have run (it is\nkilled, not left running). An API server that restarts mid-command\nkills it and answers a `retryable` `503 host_unavailable` (\"the API\nserver restarted before the command finished\").\nNot idempotent: no Idempotency-Key, and a retry runs the command again.\nAPI keys: needs one of the scopes `machines:write`, `machines:exec` (legacy).\n\nStreaming: send `Accept: text/event-stream` to get the output as the\ncommand writes it, as server-sent events: a `stdout` or `stderr`\nevent (data: `ExecOutput`) for each chunk, a `: ping` comment every\n15 s while the command is quiet, then one `exit` event (data: the\n`ExecResult`, with empty `stdout` and `stderr` and never\n`truncated`: streamed output is not capped) or `error` event (data:\nan `ErrorBody`, e.g. `host_unavailable` when the connection to the\nsandbox was lost). Errors found before the command starts (`400`,\n`404`, `409`, `429`, a `503` dial failure) are plain JSON responses.\nClosing the stream kills the command. Timeouts are the same as\nwithout streaming; for a command longer than 10 minutes start it\nin the background (`instabox exec --background`) and follow its log.\n","requestBody":"664fed8e-47a5-4e23-be6b-62d90d91c85d","responses":{"200":"9702ce29-d87c-40eb-b42f-9fcc14b9b69d","400":"3e318fee-b5a9-499f-931a-0257460fc205","401":"473944eb-bee1-42d2-ab29-599a6dea0877","403":"f1ad4a5d-d5b5-4a91-bef6-e7b677bb08f0","404":"f44c8c21-e12a-468f-91c8-6de726fda00a","409":"cd81710e-5693-4ed3-85fd-415e3c49d329","429":"6547447a-2753-4775-8e58-deb1c85830e9","500":"268f5792-e17a-4a73-a160-bd7fe090eb94","503":"a92309d9-9063-4432-9d35-15172b7c7de2"},"method":"post","type":"path","servers":["e2c665bb-4b53-46fa-8dd3-3dba6e3ac4a8"],"path":"/v1/machines/{id}/exec","baseUrlOptions":["https://api.instabox.sh"],"title":"Run a command in the sandbox and return its output.","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"6e4039c4-1755-4d73-b754-523807bed8ff":{"name":"id","in":"path","required":true,"description":"Sandbox ID (`m_` + 26 lowercase base32 characters) or the sandbox's name (unique among your sandboxes; names never contain `_`, so the two never collide). Older servers take only the ID and answer `404` for a name.","schema":{"type":"string","pattern":"^(m_[a-z2-7]{26}|[a-z0-9][a-z0-9-]{0,62})$","isRequired":true,"description":"Sandbox ID (`m_` + 26 lowercase base32 characters) or the sandbox's name (unique among your sandboxes; names never contain `_`, so the two never collide). Older servers take only the ID and answer `404` for a name.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Set exactly one of `cmd` (a shell string) and `argv` (a program and its arguments, run without a shell); both, neither or an empty `argv` is `400 bad_request`. An empty `cmd` counts as no `cmd`, so `{\"cmd\": \"\", \"argv\": [...]}` runs the `argv`.","required":["cmd"],"properties":{"cmd":{"type":"string","description":"Shell command, run with `bash -lc`. At most 64 KiB, no NUL bytes. Set this or `argv`; an empty `cmd` is no `cmd`.","maxLength":65536,"minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.cmd","typeLabel":"string"},"argv":{"type":"array","minItems":1,"items":{"type":"string","uniqueKey":"oneOf.0.argv.items.[INDEX]","typeLabel":"string"},"description":"The program and its arguments, run with no shell: each element reaches the program exactly as sent (no expansion of `$`, `*` or `~`, no word splitting, quotes or redirections; `\"\"` is an empty argument). `argv[0]` must not be empty and is looked up on the login profile's `PATH`; the login profile, `envs` and `cwd` apply as for `cmd`. A program that is not found exits 127, one that cannot run 126. At most 64 KiB counting each element's length plus one, no NUL bytes. The command sent to the sandbox (`envs`, `cwd` and `argv`, quoted for the shell: about 9 bytes per element plus its text) must also stay under 128 KiB, so many short elements can be `400 bad_request` below the 64 KiB cap; send bulk data on `stdin`. Set this or `cmd`.","uniqueKey":"oneOf.0.argv","typeLabel":"string[]"},"cwd":{"type":"string","maxLength":4096,"description":"Working directory (default HOME, `/data/home`).","uniqueKey":"oneOf.0.cwd","typeLabel":"string"},"envs":{"type":"object","maxProperties":256,"description":"Environment variables exported before the command (after the login profile). Names match `^[A-Za-z_][A-Za-z0-9_]*$`.","additionalProperties":{"type":"string","uniqueKey":"oneOf.0.envs.additionalProperties","typeLabel":"string"},"uniqueKey":"oneOf.0.envs","typeLabel":"object"},"secretEnvs":{"type":"object","maxProperties":64,"description":"Direct (delivery env) Secrets of the sandbox's org exported for this command only: variable name -> Secret name. Resolved at exec time, never stored or written into the sandbox; each use is audited by name. A name may not also be in `envs`; reserved variables are refused. A proxy or missing Secret is 400. Only where `GET /v1/me` has `directSecretRefs`; elsewhere 400 (a control host from before secretEnvs would run the command without them).","additionalProperties":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,127}$","description":"A unique environment variable name within an org. The names a sandbox's env reserves are reserved (shell variables such as PATH, HOME, BASH_ENV, ENV and IFS, session and trust-store variables, and INSTABOX_ and SSH_ prefixes). A Secret saved under a name before it was reserved is not delivered: the machine's guest status names it.","uniqueKey":"oneOf.0.secretEnvs.additionalProperties","typeLabel":"string"},"uniqueKey":"oneOf.0.secretEnvs","typeLabel":"object"},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":600,"description":"Default 60, max 600.","uniqueKey":"oneOf.0.timeoutSeconds","typeLabel":"integer"},"stdin":{"type":"string","description":"Text fed to the command, then EOF. It is a JSON string, so the command reads its UTF-8 bytes: NUL, CR and LF arrive unchanged (escaped as `\\u0000`, `\\r`, `\\n`). At most 1 MiB (1048576 bytes) of UTF-8, counted in bytes, not characters (`é` is 2): more is `400 bad_request` `stdin is longer than 1048576 bytes`. The schema sets no `maxLength` here, because `maxLength` counts characters. JSON cannot carry bytes that are not UTF-8; any in the request body reach the command as U+FFFD (`ef bf bd`), with no error. For binary input, send it base64-encoded and decode it in the command (`base64 -d | ...`; up to 768 KiB of binary fits), or write the file first with `PUT /v1/machines/{id}/files` and redirect it in (`cmd \u003c file`). The CLI's `exec --stdin` does that upload itself for input past 1 MiB or not UTF-8, up to 5 GiB.","uniqueKey":"oneOf.0.stdin","typeLabel":"string"},"noHistory":{"type":"boolean","description":"Leave the command out of the sandbox's history (`GET /v1/machines/{id}/history`): for a client's own housekeeping commands, such as the CLI's job polls. Does not go with `historyCommand`.","uniqueKey":"oneOf.0.noHistory","typeLabel":"boolean"},"historyCommand":{"type":"string","description":"How the command appears in the sandbox's history instead of `cmd` or `argv`, for a wrapper that runs something else (the CLI's `exec --background`). Cut at 4096 bytes like them; no NUL bytes.","uniqueKey":"oneOf.0.historyCommand","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Set exactly one of `cmd` (a shell string) and `argv` (a program and its arguments, run without a shell); both, neither or an empty `argv` is `400 bad_request`. An empty `cmd` counts as no `cmd`, so `{\"cmd\": \"\", \"argv\": [...]}` runs the `argv`.","required":["argv"],"properties":{"argv":{"type":"array","minItems":1,"items":{"type":"string","uniqueKey":"oneOf.1.argv.items.[INDEX]","typeLabel":"string"},"description":"The program and its arguments, run with no shell: each element reaches the program exactly as sent (no expansion of `$`, `*` or `~`, no word splitting, quotes or redirections; `\"\"` is an empty argument). `argv[0]` must not be empty and is looked up on the login profile's `PATH`; the login profile, `envs` and `cwd` apply as for `cmd`. A program that is not found exits 127, one that cannot run 126. At most 64 KiB counting each element's length plus one, no NUL bytes. The command sent to the sandbox (`envs`, `cwd` and `argv`, quoted for the shell: about 9 bytes per element plus its text) must also stay under 128 KiB, so many short elements can be `400 bad_request` below the 64 KiB cap; send bulk data on `stdin`. Set this or `cmd`.","isRequired":true,"uniqueKey":"oneOf.1.argv","typeLabel":"string[]"},"cmd":{"type":"string","description":"Shell command, run with `bash -lc`. At most 64 KiB, no NUL bytes. Set this or `argv`; an empty `cmd` is no `cmd`.","maxLength":0,"uniqueKey":"oneOf.1.cmd","typeLabel":"string"},"cwd":{"type":"string","maxLength":4096,"description":"Working directory (default HOME, `/data/home`).","uniqueKey":"oneOf.1.cwd","typeLabel":"string"},"envs":{"type":"object","maxProperties":256,"description":"Environment variables exported before the command (after the login profile). Names match `^[A-Za-z_][A-Za-z0-9_]*$`.","additionalProperties":{"type":"string","uniqueKey":"oneOf.1.envs.additionalProperties","typeLabel":"string"},"uniqueKey":"oneOf.1.envs","typeLabel":"object"},"secretEnvs":{"type":"object","maxProperties":64,"description":"Direct (delivery env) Secrets of the sandbox's org exported for this command only: variable name -> Secret name. Resolved at exec time, never stored or written into the sandbox; each use is audited by name. A name may not also be in `envs`; reserved variables are refused. A proxy or missing Secret is 400. Only where `GET /v1/me` has `directSecretRefs`; elsewhere 400 (a control host from before secretEnvs would run the command without them).","additionalProperties":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]{0,127}$","description":"A unique environment variable name within an org. The names a sandbox's env reserves are reserved (shell variables such as PATH, HOME, BASH_ENV, ENV and IFS, session and trust-store variables, and INSTABOX_ and SSH_ prefixes). A Secret saved under a name before it was reserved is not delivered: the machine's guest status names it.","uniqueKey":"oneOf.1.secretEnvs.additionalProperties","typeLabel":"string"},"uniqueKey":"oneOf.1.secretEnvs","typeLabel":"object"},"timeoutSeconds":{"type":"integer","minimum":1,"maximum":600,"description":"Default 60, max 600.","uniqueKey":"oneOf.1.timeoutSeconds","typeLabel":"integer"},"stdin":{"type":"string","description":"Text fed to the command, then EOF. It is a JSON string, so the command reads its UTF-8 bytes: NUL, CR and LF arrive unchanged (escaped as `\\u0000`, `\\r`, `\\n`). At most 1 MiB (1048576 bytes) of UTF-8, counted in bytes, not characters (`é` is 2): more is `400 bad_request` `stdin is longer than 1048576 bytes`. The schema sets no `maxLength` here, because `maxLength` counts characters. JSON cannot carry bytes that are not UTF-8; any in the request body reach the command as U+FFFD (`ef bf bd`), with no error. For binary input, send it base64-encoded and decode it in the command (`base64 -d | ...`; up to 768 KiB of binary fits), or write the file first with `PUT /v1/machines/{id}/files` and redirect it in (`cmd \u003c file`). The CLI's `exec --stdin` does that upload itself for input past 1 MiB or not UTF-8, up to 5 GiB.","uniqueKey":"oneOf.1.stdin","typeLabel":"string"},"noHistory":{"type":"boolean","description":"Leave the command out of the sandbox's history (`GET /v1/machines/{id}/history`): for a client's own housekeeping commands, such as the CLI's job polls. Does not go with `historyCommand`.","uniqueKey":"oneOf.1.noHistory","typeLabel":"boolean"},"historyCommand":{"type":"string","description":"How the command appears in the sandbox's history instead of `cmd` or `argv`, for a wrapper that runs something else (the CLI's `exec --background`). Cut at 4096 bytes like them; no NUL bytes.","uniqueKey":"oneOf.1.historyCommand","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"cmd":"\u003cstring>","argv":["\u003cstring>"],"cwd":"\u003cstring>","envs":{},"secretEnvs":{},"timeoutSeconds":300,"stdin":"\u003cstring>","noHistory":true,"historyCommand":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"9702ce29-d87c-40eb-b42f-9fcc14b9b69d":{"description":"The command ran (whatever its exit code).","content":{"application/json":{"schema":{"type":"object","required":["stdout","stderr","exitCode","timedOut","truncated"],"properties":{"stdout":{"type":"string","description":"First 1 MiB of standard output.","isRequired":true,"uniqueKey":"stdout","typeLabel":"string"},"stderr":{"type":"string","description":"First 1 MiB of standard error.","isRequired":true,"uniqueKey":"stderr","typeLabel":"string"},"exitCode":{"type":"integer","description":"Exit status; 128+N if killed by standard signal N, otherwise 255 with `signal` set; 124 if timed out.","isRequired":true,"uniqueKey":"exitCode","typeLabel":"integer"},"timedOut":{"type":"boolean","description":"The command ran past `timeoutSeconds` and was killed.","isRequired":true,"uniqueKey":"timedOut","typeLabel":"boolean"},"truncated":{"type":"boolean","description":"stdout or stderr was longer than 1 MiB and was cut.","isRequired":true,"uniqueKey":"truncated","typeLabel":"boolean"},"signal":{"type":"string","description":"The signal that killed the command, as the sandbox named it (absent otherwise).","uniqueKey":"signal","typeLabel":"string"},"diskWarning":{"type":"object","required":["mount","usedPct","level","message"],"properties":{"mount":{"type":"string","description":"The fullest filesystem (empty when it could not be read after a command ran out of space).","isRequired":true,"uniqueKey":"diskWarning.mount","typeLabel":"string"},"usedPct":{"type":"number","isRequired":true,"uniqueKey":"diskWarning.usedPct","typeLabel":"number"},"level":{"type":"string","enum":["ok","high","critical","full"],"isRequired":true,"uniqueKey":"diskWarning.level","typeLabel":"enum\u003cstring>"},"message":{"type":"string","description":"What is full and how to free or add space (delete files, `instabox resize \u003cbox> --disk N` for /data: a running sandbox's disk grows live).","isRequired":true,"uniqueKey":"diskWarning.message","typeLabel":"string"},"noSpace":{"type":"boolean","description":"The command failed with No space left on device (or Disk quota exceeded).","uniqueKey":"diskWarning.noSpace","typeLabel":"boolean"}},"description":"Set when the command failed with No space left on device (read again right after it), or a filesystem was at least 90% full when last read (read in the background after an exec or metrics call, at most once a minute).","uniqueKey":"diskWarning","typeLabel":"object"},"invalidUtf8":{"type":"boolean","description":"stdout or stderr had bytes that are not UTF-8 (binary output), replaced with U+FFFD, so the output is not what the command wrote. Absent when false; also set on a streamed exec's exit event.","uniqueKey":"invalidUtf8","typeLabel":"boolean"},"oomKilled":{"type":"boolean","description":"The command exited non-zero and the sandbox's kernel OOM killer killed one of its own processes (the command or a child: its SSH session's cgroup; never another command's process, and each kill is reported once). `oomKill` says which, when the sandbox named it. Checked only for exit code 137, a signal, or stderr saying a process was killed. False when none was seen, the exec's session scope could not be read, or the sandbox's host or guest agent cannot report kills; a kill whose kernel log record was lost is still true when the session scope's oom_kill count shows it (`oomKill` absent). Absent from older servers. Also set on a streamed exec's exit event.","uniqueKey":"oomKilled","typeLabel":"boolean"},"oomKill":{"type":"object","description":"The OOM kill behind `oomKilled` (the newest, when several).","required":["at","pid","process","rssBytes","anonRssBytes","cgroup"],"properties":{"at":{"type":"string","format":"date-time","description":"When it was killed (to about a second).","isRequired":true,"uniqueKey":"oomKill.at","typeLabel":"string\u003cdate-time>"},"pid":{"type":"integer","isRequired":true,"uniqueKey":"oomKill.pid","typeLabel":"integer"},"process":{"type":"string","description":"The killed process's name: its comm (at most 15 bytes from the kernel), capped at 64 bytes.","isRequired":true,"uniqueKey":"oomKill.process","typeLabel":"string"},"rssBytes":{"type":"integer","format":"int64","description":"Its resident memory when it was killed (anonymous, file and shared).","isRequired":true,"uniqueKey":"oomKill.rssBytes","typeLabel":"integer\u003cint64>"},"anonRssBytes":{"type":"integer","format":"int64","description":"The anonymous part of rssBytes.","isRequired":true,"uniqueKey":"oomKill.anonRssBytes","typeLabel":"integer\u003cint64>"},"cgroup":{"type":"boolean","description":"A memory cgroup's limit killed it (a container, a unit's MemoryMax), not the sandbox running out of memory.","isRequired":true,"uniqueKey":"oomKill.cgroup","typeLabel":"boolean"},"uid":{"type":"integer","description":"The killed process's user ID, when the kernel logged it.","uniqueKey":"oomKill.uid","typeLabel":"integer"}},"uniqueKey":"oomKill","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"stdout":"\u003cstring>","stderr":"\u003cstring>","exitCode":123,"timedOut":true,"truncated":true,"signal":"\u003cstring>","diskWarning":{"mount":"\u003cstring>","usedPct":123,"level":"ok","message":"\u003cstring>","noSpace":true},"invalidUtf8":true,"oomKilled":true,"oomKill":{"at":"2023-11-07T05:31:56Z","pid":123,"process":"\u003cstring>","rssBytes":123,"anonRssBytes":123,"cgroup":true,"uid":123}}}},"exampleType":"generated"},"text/event-stream":{"schema":{"type":"string","description":"Server-sent events: `stdout`/`stderr` (`ExecOutput`), then `exit` (`ExecResult`) or `error` (`ErrorBody`).","example":"event: stdout\ndata: {\"data\":\"line 1\\n\"}\n\nevent: exit\ndata: {\"stdout\":\"\",\"stderr\":\"\",\"exitCode\":0,\"timedOut\":false,\"truncated\":false}\n\n","uniqueKey":"","typeLabel":"string"},"examples":{"Example":{"title":"Example","value":"event: stdout\ndata: {\"data\":\"line 1\\n\"}\n\nevent: exit\ndata: {\"stdout\":\"\",\"stderr\":\"\",\"exitCode\":0,\"timedOut\":false,\"truncated\":false}\n\n"}},"exampleType":"generated"}},"exampleType":"generated"},"3e318fee-b5a9-499f-931a-0257460fc205":{"description":"`bad_request`: invalid input or missing Idempotency-Key. `unknown_field`: a body key that is no field of the request's schema (create, fork, restore, start, stop, suspend, resume, wake and `PATCH` of a sandbox); the message names it and the closest known field (`did you mean \"templateId\"?`) and lists the known ones. Nothing is changed. `spec_not_allowed`: sandbox sizes are fixed (4 vCPUs, 8 GiB memory by default; `limits.machineSpec`) and the request names another size (create, create from a snapshot), or someone other than an admin tries to grow the disk of a free sandbox or of a sandbox whose owner may not resize disks. On `PATCH /v1/machines/{id}` it is also a `vcpus`/`memMiB` size the workspace's plan does not offer (the message lists the plan's sizes) or any new size for a free sandbox, whose size is fixed. The message gives the size the sandbox gets; leaving the size fields out always works. `invalid_guest_user`: a create's `guestUser` is not a valid Linux user name or is reserved (`root`, `instabox`, the Debian base system's users and groups such as `sudo`, `systemd-*`). `vault_unavailable` (503): a Vault item was sealed under a master key this server does not have (docs/vault.md).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","retryable","operationId"],"properties":{"code":{"type":"string","description":"Machine-readable code. HTTP status per code is fixed.","enum":["unauthenticated","missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","permission_denied","not_found","bad_request","feature_disabled","unknown_field","operation_conflict","idempotency_conflict","machine_not_running","restore_unavailable","delete_confirmation_required","fork_unavailable","machine_cooldown","max_run_disabled","desktop_not_running","disk_too_small","grow_needs_stop","resize_restart_off","private_ports_unavailable","quota_exceeded","no_capacity","host_unavailable","metrics_unavailable","restore_failed","internal","authorization_pending","slow_down","expired_token","access_denied","invalid_grant","invite_required","invite_invalid","invite_email_mismatch","api_key_expired","api_key_revoked","insufficient_scope","orca_unsupported","runtime_not_ready","spec_not_allowed","template_not_allowed","template_limit","kernel_unavailable","template_unavailable","invalid_guest_user","vault_unavailable","vault_retired","credit_exhausted","spend_limit_reached","subscription_required","payment_method_required","early_allowance_ended","rate_limited","concurrency_limit","payment_failed","missing_parent","not_a_file","no_space","too_large","data_disk_not_browsable","support_unavailable","host_oom","vmm_crashed","guest_reboot_loop"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"retryable":{"type":"boolean","description":"True if the same request may succeed later.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"operationId":{"oneOf":[{"type":"string","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.operationId","typeLabel":"string | null"},"reason":{"type":"string","description":"The same as `code` for credential errors (401 `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key`, `session_expired`; 403 `missing_scope`). For 409 `machine_cooldown`, the automatic abuse check whose pause locks the sandbox: `abuse_egress_blocklist` (it tried to connect to a blocked destination on the egress blocklist, not a DNS lookup), `abuse_network_flows` (scanning or attack traffic), `abuse_cpu` (mining); absent for a max-run cooldown. For a retryable 409 `fork_unavailable`, why the source's host cannot take the fork: `source_host_unavailable` (it takes no new sandboxes) or `source_host_full` (no room now). Absent on other errors and from older servers.","enum":["missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","abuse_egress_blocklist","abuse_network_flows","abuse_cpu","source_host_unavailable","source_host_full"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"hint":{"type":"string","description":"The next step that fixes the error (credential errors). Absent otherwise.","uniqueKey":"error.hint","typeLabel":"string"},"docs":{"type":"string","format":"uri","description":"A URL documenting the error (credential errors). Absent otherwise.","uniqueKey":"error.docs","typeLabel":"string\u003curi>"},"docs_url":{"type":"string","format":"uri","description":"The code's entry on the errors page, on every error response: https://instabox.sh/docs/errors#\u003ccode> with underscores as dashes (e.g. #credit-exhausted): its HTTP status, whether to retry and what to do. Snake case, unlike the other fields. Absent from a failed operation's `error` and from older servers.","uniqueKey":"error.docs_url","typeLabel":"string\u003curi>"},"requiredScopes":{"type":"array","items":{"type":"string","uniqueKey":"error.requiredScopes.items.[INDEX]","typeLabel":"string"},"description":"For `missing_scope`, the scopes the route accepts; the key needs one of them.","uniqueKey":"error.requiredScopes","typeLabel":"string[]"},"retryAfterSeconds":{"type":"integer","minimum":1,"description":"Seconds to wait before trying again: a retryable `no_capacity` (60, as a 503 or on a failed operation's `error`), `rate_limited`, `machine_cooldown` and agent sign-up `quota_exceeded`. An error response also sends it as the `Retry-After` header; a failed operation's `error` has only this field. Absent otherwise and from older servers.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When it happened, for a stop the platform found (a sandbox's `lastError` with code `host_oom`, `vmm_crashed` or `guest_reboot_loop`; `hint` says what to do). The next successful start clears the error. Absent otherwise and from older servers.","uniqueKey":"error.at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"\u003cstring>","requestId":"\u003cstring>","retryable":true,"operationId":"\u003cstring>","reason":"missing_key","hint":"\u003cstring>","docs":"\u003cstring>","docs_url":"\u003cstring>","requiredScopes":["\u003cstring>"],"retryAfterSeconds":2,"at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"473944eb-bee1-42d2-ab29-599a6dea0877":{"description":"A credential 401 has its own code: `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key` or `session_expired`, with `hint` and `docs` (older servers sent `unauthenticated`, `api_key_expired` or `api_key_revoked`). Other 401s (refresh tokens, tickets) are `unauthenticated`. For a missing or bad API key or access token the message ends with how to get a key (session and refresh-token 401s say to sign in again instead), e.g. `create an API key at https://dashboard.instabox.sh/dashboard/api-keys and send it as \"Authorization: Bearer \u003ckey>\" or \"X-API-Key: \u003ckey>\"`.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","retryable","operationId"],"properties":{"code":{"type":"string","description":"Machine-readable code. HTTP status per code is fixed.","enum":["unauthenticated","missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","permission_denied","not_found","bad_request","feature_disabled","unknown_field","operation_conflict","idempotency_conflict","machine_not_running","restore_unavailable","delete_confirmation_required","fork_unavailable","machine_cooldown","max_run_disabled","desktop_not_running","disk_too_small","grow_needs_stop","resize_restart_off","private_ports_unavailable","quota_exceeded","no_capacity","host_unavailable","metrics_unavailable","restore_failed","internal","authorization_pending","slow_down","expired_token","access_denied","invalid_grant","invite_required","invite_invalid","invite_email_mismatch","api_key_expired","api_key_revoked","insufficient_scope","orca_unsupported","runtime_not_ready","spec_not_allowed","template_not_allowed","template_limit","kernel_unavailable","template_unavailable","invalid_guest_user","vault_unavailable","vault_retired","credit_exhausted","spend_limit_reached","subscription_required","payment_method_required","early_allowance_ended","rate_limited","concurrency_limit","payment_failed","missing_parent","not_a_file","no_space","too_large","data_disk_not_browsable","support_unavailable","host_oom","vmm_crashed","guest_reboot_loop"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"retryable":{"type":"boolean","description":"True if the same request may succeed later.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"operationId":{"oneOf":[{"type":"string","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.operationId","typeLabel":"string | null"},"reason":{"type":"string","description":"The same as `code` for credential errors (401 `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key`, `session_expired`; 403 `missing_scope`). For 409 `machine_cooldown`, the automatic abuse check whose pause locks the sandbox: `abuse_egress_blocklist` (it tried to connect to a blocked destination on the egress blocklist, not a DNS lookup), `abuse_network_flows` (scanning or attack traffic), `abuse_cpu` (mining); absent for a max-run cooldown. For a retryable 409 `fork_unavailable`, why the source's host cannot take the fork: `source_host_unavailable` (it takes no new sandboxes) or `source_host_full` (no room now). Absent on other errors and from older servers.","enum":["missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","abuse_egress_blocklist","abuse_network_flows","abuse_cpu","source_host_unavailable","source_host_full"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"hint":{"type":"string","description":"The next step that fixes the error (credential errors). Absent otherwise.","uniqueKey":"error.hint","typeLabel":"string"},"docs":{"type":"string","format":"uri","description":"A URL documenting the error (credential errors). Absent otherwise.","uniqueKey":"error.docs","typeLabel":"string\u003curi>"},"docs_url":{"type":"string","format":"uri","description":"The code's entry on the errors page, on every error response: https://instabox.sh/docs/errors#\u003ccode> with underscores as dashes (e.g. #credit-exhausted): its HTTP status, whether to retry and what to do. Snake case, unlike the other fields. Absent from a failed operation's `error` and from older servers.","uniqueKey":"error.docs_url","typeLabel":"string\u003curi>"},"requiredScopes":{"type":"array","items":{"type":"string","uniqueKey":"error.requiredScopes.items.[INDEX]","typeLabel":"string"},"description":"For `missing_scope`, the scopes the route accepts; the key needs one of them.","uniqueKey":"error.requiredScopes","typeLabel":"string[]"},"retryAfterSeconds":{"type":"integer","minimum":1,"description":"Seconds to wait before trying again: a retryable `no_capacity` (60, as a 503 or on a failed operation's `error`), `rate_limited`, `machine_cooldown` and agent sign-up `quota_exceeded`. An error response also sends it as the `Retry-After` header; a failed operation's `error` has only this field. Absent otherwise and from older servers.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When it happened, for a stop the platform found (a sandbox's `lastError` with code `host_oom`, `vmm_crashed` or `guest_reboot_loop`; `hint` says what to do). The next successful start clears the error. Absent otherwise and from older servers.","uniqueKey":"error.at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"\u003cstring>","requestId":"\u003cstring>","retryable":true,"operationId":"\u003cstring>","reason":"missing_key","hint":"\u003cstring>","docs":"\u003cstring>","docs_url":"\u003cstring>","requiredScopes":["\u003cstring>"],"retryAfterSeconds":2,"at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"f1ad4a5d-d5b5-4a91-bef6-e7b677bb08f0":{"description":"`permission_denied`: the user is not allowed (not on the allowlist, or not the owner), or an API key was used where only a sign-in session is; `missing_scope`: the API key lacks the route's scope (`requiredScopes` names it; older servers sent `insufficient_scope`).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","retryable","operationId"],"properties":{"code":{"type":"string","description":"Machine-readable code. HTTP status per code is fixed.","enum":["unauthenticated","missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","permission_denied","not_found","bad_request","feature_disabled","unknown_field","operation_conflict","idempotency_conflict","machine_not_running","restore_unavailable","delete_confirmation_required","fork_unavailable","machine_cooldown","max_run_disabled","desktop_not_running","disk_too_small","grow_needs_stop","resize_restart_off","private_ports_unavailable","quota_exceeded","no_capacity","host_unavailable","metrics_unavailable","restore_failed","internal","authorization_pending","slow_down","expired_token","access_denied","invalid_grant","invite_required","invite_invalid","invite_email_mismatch","api_key_expired","api_key_revoked","insufficient_scope","orca_unsupported","runtime_not_ready","spec_not_allowed","template_not_allowed","template_limit","kernel_unavailable","template_unavailable","invalid_guest_user","vault_unavailable","vault_retired","credit_exhausted","spend_limit_reached","subscription_required","payment_method_required","early_allowance_ended","rate_limited","concurrency_limit","payment_failed","missing_parent","not_a_file","no_space","too_large","data_disk_not_browsable","support_unavailable","host_oom","vmm_crashed","guest_reboot_loop"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"retryable":{"type":"boolean","description":"True if the same request may succeed later.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"operationId":{"oneOf":[{"type":"string","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.operationId","typeLabel":"string | null"},"reason":{"type":"string","description":"The same as `code` for credential errors (401 `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key`, `session_expired`; 403 `missing_scope`). For 409 `machine_cooldown`, the automatic abuse check whose pause locks the sandbox: `abuse_egress_blocklist` (it tried to connect to a blocked destination on the egress blocklist, not a DNS lookup), `abuse_network_flows` (scanning or attack traffic), `abuse_cpu` (mining); absent for a max-run cooldown. For a retryable 409 `fork_unavailable`, why the source's host cannot take the fork: `source_host_unavailable` (it takes no new sandboxes) or `source_host_full` (no room now). Absent on other errors and from older servers.","enum":["missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","abuse_egress_blocklist","abuse_network_flows","abuse_cpu","source_host_unavailable","source_host_full"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"hint":{"type":"string","description":"The next step that fixes the error (credential errors). Absent otherwise.","uniqueKey":"error.hint","typeLabel":"string"},"docs":{"type":"string","format":"uri","description":"A URL documenting the error (credential errors). Absent otherwise.","uniqueKey":"error.docs","typeLabel":"string\u003curi>"},"docs_url":{"type":"string","format":"uri","description":"The code's entry on the errors page, on every error response: https://instabox.sh/docs/errors#\u003ccode> with underscores as dashes (e.g. #credit-exhausted): its HTTP status, whether to retry and what to do. Snake case, unlike the other fields. Absent from a failed operation's `error` and from older servers.","uniqueKey":"error.docs_url","typeLabel":"string\u003curi>"},"requiredScopes":{"type":"array","items":{"type":"string","uniqueKey":"error.requiredScopes.items.[INDEX]","typeLabel":"string"},"description":"For `missing_scope`, the scopes the route accepts; the key needs one of them.","uniqueKey":"error.requiredScopes","typeLabel":"string[]"},"retryAfterSeconds":{"type":"integer","minimum":1,"description":"Seconds to wait before trying again: a retryable `no_capacity` (60, as a 503 or on a failed operation's `error`), `rate_limited`, `machine_cooldown` and agent sign-up `quota_exceeded`. An error response also sends it as the `Retry-After` header; a failed operation's `error` has only this field. Absent otherwise and from older servers.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When it happened, for a stop the platform found (a sandbox's `lastError` with code `host_oom`, `vmm_crashed` or `guest_reboot_loop`; `hint` says what to do). The next successful start clears the error. Absent otherwise and from older servers.","uniqueKey":"error.at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"\u003cstring>","requestId":"\u003cstring>","retryable":true,"operationId":"\u003cstring>","reason":"missing_key","hint":"\u003cstring>","docs":"\u003cstring>","docs_url":"\u003cstring>","requiredScopes":["\u003cstring>"],"retryAfterSeconds":2,"at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"f44c8c21-e12a-468f-91c8-6de726fda00a":{"description":"`not_found`: no such resource (also for deleted sandboxes).","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","retryable","operationId"],"properties":{"code":{"type":"string","description":"Machine-readable code. HTTP status per code is fixed.","enum":["unauthenticated","missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","permission_denied","not_found","bad_request","feature_disabled","unknown_field","operation_conflict","idempotency_conflict","machine_not_running","restore_unavailable","delete_confirmation_required","fork_unavailable","machine_cooldown","max_run_disabled","desktop_not_running","disk_too_small","grow_needs_stop","resize_restart_off","private_ports_unavailable","quota_exceeded","no_capacity","host_unavailable","metrics_unavailable","restore_failed","internal","authorization_pending","slow_down","expired_token","access_denied","invalid_grant","invite_required","invite_invalid","invite_email_mismatch","api_key_expired","api_key_revoked","insufficient_scope","orca_unsupported","runtime_not_ready","spec_not_allowed","template_not_allowed","template_limit","kernel_unavailable","template_unavailable","invalid_guest_user","vault_unavailable","vault_retired","credit_exhausted","spend_limit_reached","subscription_required","payment_method_required","early_allowance_ended","rate_limited","concurrency_limit","payment_failed","missing_parent","not_a_file","no_space","too_large","data_disk_not_browsable","support_unavailable","host_oom","vmm_crashed","guest_reboot_loop"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"retryable":{"type":"boolean","description":"True if the same request may succeed later.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"operationId":{"oneOf":[{"type":"string","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.operationId","typeLabel":"string | null"},"reason":{"type":"string","description":"The same as `code` for credential errors (401 `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key`, `session_expired`; 403 `missing_scope`). For 409 `machine_cooldown`, the automatic abuse check whose pause locks the sandbox: `abuse_egress_blocklist` (it tried to connect to a blocked destination on the egress blocklist, not a DNS lookup), `abuse_network_flows` (scanning or attack traffic), `abuse_cpu` (mining); absent for a max-run cooldown. For a retryable 409 `fork_unavailable`, why the source's host cannot take the fork: `source_host_unavailable` (it takes no new sandboxes) or `source_host_full` (no room now). Absent on other errors and from older servers.","enum":["missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","abuse_egress_blocklist","abuse_network_flows","abuse_cpu","source_host_unavailable","source_host_full"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"hint":{"type":"string","description":"The next step that fixes the error (credential errors). Absent otherwise.","uniqueKey":"error.hint","typeLabel":"string"},"docs":{"type":"string","format":"uri","description":"A URL documenting the error (credential errors). Absent otherwise.","uniqueKey":"error.docs","typeLabel":"string\u003curi>"},"docs_url":{"type":"string","format":"uri","description":"The code's entry on the errors page, on every error response: https://instabox.sh/docs/errors#\u003ccode> with underscores as dashes (e.g. #credit-exhausted): its HTTP status, whether to retry and what to do. Snake case, unlike the other fields. Absent from a failed operation's `error` and from older servers.","uniqueKey":"error.docs_url","typeLabel":"string\u003curi>"},"requiredScopes":{"type":"array","items":{"type":"string","uniqueKey":"error.requiredScopes.items.[INDEX]","typeLabel":"string"},"description":"For `missing_scope`, the scopes the route accepts; the key needs one of them.","uniqueKey":"error.requiredScopes","typeLabel":"string[]"},"retryAfterSeconds":{"type":"integer","minimum":1,"description":"Seconds to wait before trying again: a retryable `no_capacity` (60, as a 503 or on a failed operation's `error`), `rate_limited`, `machine_cooldown` and agent sign-up `quota_exceeded`. An error response also sends it as the `Retry-After` header; a failed operation's `error` has only this field. Absent otherwise and from older servers.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When it happened, for a stop the platform found (a sandbox's `lastError` with code `host_oom`, `vmm_crashed` or `guest_reboot_loop`; `hint` says what to do). The next successful start clears the error. Absent otherwise and from older servers.","uniqueKey":"error.at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"\u003cstring>","requestId":"\u003cstring>","retryable":true,"operationId":"\u003cstring>","reason":"missing_key","hint":"\u003cstring>","docs":"\u003cstring>","docs_url":"\u003cstring>","requiredScopes":["\u003cstring>"],"retryAfterSeconds":2,"at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"cd81710e-5693-4ed3-85fd-415e3c49d329":{"description":"`operation_conflict` (another operation is active; `operationId` names it,\nor the transition is not allowed), `idempotency_conflict` (key reused for\na different request), `delete_confirmation_required` (a delete's\n`X-Confirm-Delete` header is not the sandbox's or snapshot's ID or name,\nor a key that must send it left it out),\n`machine_not_running` (the sandbox is not running), `desktop_not_running` (the\nVNC endpoint before the desktop started), or for Orca connections\n`orca_unsupported` and `runtime_not_ready` (retryable).\n","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","retryable","operationId"],"properties":{"code":{"type":"string","description":"Machine-readable code. HTTP status per code is fixed.","enum":["unauthenticated","missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","permission_denied","not_found","bad_request","feature_disabled","unknown_field","operation_conflict","idempotency_conflict","machine_not_running","restore_unavailable","delete_confirmation_required","fork_unavailable","machine_cooldown","max_run_disabled","desktop_not_running","disk_too_small","grow_needs_stop","resize_restart_off","private_ports_unavailable","quota_exceeded","no_capacity","host_unavailable","metrics_unavailable","restore_failed","internal","authorization_pending","slow_down","expired_token","access_denied","invalid_grant","invite_required","invite_invalid","invite_email_mismatch","api_key_expired","api_key_revoked","insufficient_scope","orca_unsupported","runtime_not_ready","spec_not_allowed","template_not_allowed","template_limit","kernel_unavailable","template_unavailable","invalid_guest_user","vault_unavailable","vault_retired","credit_exhausted","spend_limit_reached","subscription_required","payment_method_required","early_allowance_ended","rate_limited","concurrency_limit","payment_failed","missing_parent","not_a_file","no_space","too_large","data_disk_not_browsable","support_unavailable","host_oom","vmm_crashed","guest_reboot_loop"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"retryable":{"type":"boolean","description":"True if the same request may succeed later.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"operationId":{"oneOf":[{"type":"string","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.operationId","typeLabel":"string | null"},"reason":{"type":"string","description":"The same as `code` for credential errors (401 `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key`, `session_expired`; 403 `missing_scope`). For 409 `machine_cooldown`, the automatic abuse check whose pause locks the sandbox: `abuse_egress_blocklist` (it tried to connect to a blocked destination on the egress blocklist, not a DNS lookup), `abuse_network_flows` (scanning or attack traffic), `abuse_cpu` (mining); absent for a max-run cooldown. For a retryable 409 `fork_unavailable`, why the source's host cannot take the fork: `source_host_unavailable` (it takes no new sandboxes) or `source_host_full` (no room now). Absent on other errors and from older servers.","enum":["missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","abuse_egress_blocklist","abuse_network_flows","abuse_cpu","source_host_unavailable","source_host_full"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"hint":{"type":"string","description":"The next step that fixes the error (credential errors). Absent otherwise.","uniqueKey":"error.hint","typeLabel":"string"},"docs":{"type":"string","format":"uri","description":"A URL documenting the error (credential errors). Absent otherwise.","uniqueKey":"error.docs","typeLabel":"string\u003curi>"},"docs_url":{"type":"string","format":"uri","description":"The code's entry on the errors page, on every error response: https://instabox.sh/docs/errors#\u003ccode> with underscores as dashes (e.g. #credit-exhausted): its HTTP status, whether to retry and what to do. Snake case, unlike the other fields. Absent from a failed operation's `error` and from older servers.","uniqueKey":"error.docs_url","typeLabel":"string\u003curi>"},"requiredScopes":{"type":"array","items":{"type":"string","uniqueKey":"error.requiredScopes.items.[INDEX]","typeLabel":"string"},"description":"For `missing_scope`, the scopes the route accepts; the key needs one of them.","uniqueKey":"error.requiredScopes","typeLabel":"string[]"},"retryAfterSeconds":{"type":"integer","minimum":1,"description":"Seconds to wait before trying again: a retryable `no_capacity` (60, as a 503 or on a failed operation's `error`), `rate_limited`, `machine_cooldown` and agent sign-up `quota_exceeded`. An error response also sends it as the `Retry-After` header; a failed operation's `error` has only this field. Absent otherwise and from older servers.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When it happened, for a stop the platform found (a sandbox's `lastError` with code `host_oom`, `vmm_crashed` or `guest_reboot_loop`; `hint` says what to do). The next successful start clears the error. Absent otherwise and from older servers.","uniqueKey":"error.at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"\u003cstring>","requestId":"\u003cstring>","retryable":true,"operationId":"\u003cstring>","reason":"missing_key","hint":"\u003cstring>","docs":"\u003cstring>","docs_url":"\u003cstring>","requiredScopes":["\u003cstring>"],"retryAfterSeconds":2,"at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"6547447a-2753-4775-8e58-deb1c85830e9":{"description":"`quota_exceeded`: one of your limits was reached: the number of sandboxes (on the free plan 1, in any state, stopped and paused included; Pro 500; Builder 1000), stored data (on the free plan 200 GiB), snapshots (on the free plan 5), API keys, execs or terminals. The message says which, e.g. \"sandbox limit reached (1 of 1) in org alice (free plan): delete a sandbox first\". Delete a sandbox or snapshot, upgrade the plan, or ask an admin to raise your limit.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","retryable","operationId"],"properties":{"code":{"type":"string","description":"Machine-readable code. HTTP status per code is fixed.","enum":["unauthenticated","missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","permission_denied","not_found","bad_request","feature_disabled","unknown_field","operation_conflict","idempotency_conflict","machine_not_running","restore_unavailable","delete_confirmation_required","fork_unavailable","machine_cooldown","max_run_disabled","desktop_not_running","disk_too_small","grow_needs_stop","resize_restart_off","private_ports_unavailable","quota_exceeded","no_capacity","host_unavailable","metrics_unavailable","restore_failed","internal","authorization_pending","slow_down","expired_token","access_denied","invalid_grant","invite_required","invite_invalid","invite_email_mismatch","api_key_expired","api_key_revoked","insufficient_scope","orca_unsupported","runtime_not_ready","spec_not_allowed","template_not_allowed","template_limit","kernel_unavailable","template_unavailable","invalid_guest_user","vault_unavailable","vault_retired","credit_exhausted","spend_limit_reached","subscription_required","payment_method_required","early_allowance_ended","rate_limited","concurrency_limit","payment_failed","missing_parent","not_a_file","no_space","too_large","data_disk_not_browsable","support_unavailable","host_oom","vmm_crashed","guest_reboot_loop"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"retryable":{"type":"boolean","description":"True if the same request may succeed later.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"operationId":{"oneOf":[{"type":"string","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.operationId","typeLabel":"string | null"},"reason":{"type":"string","description":"The same as `code` for credential errors (401 `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key`, `session_expired`; 403 `missing_scope`). For 409 `machine_cooldown`, the automatic abuse check whose pause locks the sandbox: `abuse_egress_blocklist` (it tried to connect to a blocked destination on the egress blocklist, not a DNS lookup), `abuse_network_flows` (scanning or attack traffic), `abuse_cpu` (mining); absent for a max-run cooldown. For a retryable 409 `fork_unavailable`, why the source's host cannot take the fork: `source_host_unavailable` (it takes no new sandboxes) or `source_host_full` (no room now). Absent on other errors and from older servers.","enum":["missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","abuse_egress_blocklist","abuse_network_flows","abuse_cpu","source_host_unavailable","source_host_full"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"hint":{"type":"string","description":"The next step that fixes the error (credential errors). Absent otherwise.","uniqueKey":"error.hint","typeLabel":"string"},"docs":{"type":"string","format":"uri","description":"A URL documenting the error (credential errors). Absent otherwise.","uniqueKey":"error.docs","typeLabel":"string\u003curi>"},"docs_url":{"type":"string","format":"uri","description":"The code's entry on the errors page, on every error response: https://instabox.sh/docs/errors#\u003ccode> with underscores as dashes (e.g. #credit-exhausted): its HTTP status, whether to retry and what to do. Snake case, unlike the other fields. Absent from a failed operation's `error` and from older servers.","uniqueKey":"error.docs_url","typeLabel":"string\u003curi>"},"requiredScopes":{"type":"array","items":{"type":"string","uniqueKey":"error.requiredScopes.items.[INDEX]","typeLabel":"string"},"description":"For `missing_scope`, the scopes the route accepts; the key needs one of them.","uniqueKey":"error.requiredScopes","typeLabel":"string[]"},"retryAfterSeconds":{"type":"integer","minimum":1,"description":"Seconds to wait before trying again: a retryable `no_capacity` (60, as a 503 or on a failed operation's `error`), `rate_limited`, `machine_cooldown` and agent sign-up `quota_exceeded`. An error response also sends it as the `Retry-After` header; a failed operation's `error` has only this field. Absent otherwise and from older servers.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When it happened, for a stop the platform found (a sandbox's `lastError` with code `host_oom`, `vmm_crashed` or `guest_reboot_loop`; `hint` says what to do). The next successful start clears the error. Absent otherwise and from older servers.","uniqueKey":"error.at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"\u003cstring>","requestId":"\u003cstring>","retryable":true,"operationId":"\u003cstring>","reason":"missing_key","hint":"\u003cstring>","docs":"\u003cstring>","docs_url":"\u003cstring>","requiredScopes":["\u003cstring>"],"retryAfterSeconds":2,"at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"268f5792-e17a-4a73-a160-bd7fe090eb94":{"description":"`internal`: unexpected server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","retryable","operationId"],"properties":{"code":{"type":"string","description":"Machine-readable code. HTTP status per code is fixed.","enum":["unauthenticated","missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","permission_denied","not_found","bad_request","feature_disabled","unknown_field","operation_conflict","idempotency_conflict","machine_not_running","restore_unavailable","delete_confirmation_required","fork_unavailable","machine_cooldown","max_run_disabled","desktop_not_running","disk_too_small","grow_needs_stop","resize_restart_off","private_ports_unavailable","quota_exceeded","no_capacity","host_unavailable","metrics_unavailable","restore_failed","internal","authorization_pending","slow_down","expired_token","access_denied","invalid_grant","invite_required","invite_invalid","invite_email_mismatch","api_key_expired","api_key_revoked","insufficient_scope","orca_unsupported","runtime_not_ready","spec_not_allowed","template_not_allowed","template_limit","kernel_unavailable","template_unavailable","invalid_guest_user","vault_unavailable","vault_retired","credit_exhausted","spend_limit_reached","subscription_required","payment_method_required","early_allowance_ended","rate_limited","concurrency_limit","payment_failed","missing_parent","not_a_file","no_space","too_large","data_disk_not_browsable","support_unavailable","host_oom","vmm_crashed","guest_reboot_loop"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"retryable":{"type":"boolean","description":"True if the same request may succeed later.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"operationId":{"oneOf":[{"type":"string","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.operationId","typeLabel":"string | null"},"reason":{"type":"string","description":"The same as `code` for credential errors (401 `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key`, `session_expired`; 403 `missing_scope`). For 409 `machine_cooldown`, the automatic abuse check whose pause locks the sandbox: `abuse_egress_blocklist` (it tried to connect to a blocked destination on the egress blocklist, not a DNS lookup), `abuse_network_flows` (scanning or attack traffic), `abuse_cpu` (mining); absent for a max-run cooldown. For a retryable 409 `fork_unavailable`, why the source's host cannot take the fork: `source_host_unavailable` (it takes no new sandboxes) or `source_host_full` (no room now). Absent on other errors and from older servers.","enum":["missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","abuse_egress_blocklist","abuse_network_flows","abuse_cpu","source_host_unavailable","source_host_full"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"hint":{"type":"string","description":"The next step that fixes the error (credential errors). Absent otherwise.","uniqueKey":"error.hint","typeLabel":"string"},"docs":{"type":"string","format":"uri","description":"A URL documenting the error (credential errors). Absent otherwise.","uniqueKey":"error.docs","typeLabel":"string\u003curi>"},"docs_url":{"type":"string","format":"uri","description":"The code's entry on the errors page, on every error response: https://instabox.sh/docs/errors#\u003ccode> with underscores as dashes (e.g. #credit-exhausted): its HTTP status, whether to retry and what to do. Snake case, unlike the other fields. Absent from a failed operation's `error` and from older servers.","uniqueKey":"error.docs_url","typeLabel":"string\u003curi>"},"requiredScopes":{"type":"array","items":{"type":"string","uniqueKey":"error.requiredScopes.items.[INDEX]","typeLabel":"string"},"description":"For `missing_scope`, the scopes the route accepts; the key needs one of them.","uniqueKey":"error.requiredScopes","typeLabel":"string[]"},"retryAfterSeconds":{"type":"integer","minimum":1,"description":"Seconds to wait before trying again: a retryable `no_capacity` (60, as a 503 or on a failed operation's `error`), `rate_limited`, `machine_cooldown` and agent sign-up `quota_exceeded`. An error response also sends it as the `Retry-After` header; a failed operation's `error` has only this field. Absent otherwise and from older servers.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When it happened, for a stop the platform found (a sandbox's `lastError` with code `host_oom`, `vmm_crashed` or `guest_reboot_loop`; `hint` says what to do). The next successful start clears the error. Absent otherwise and from older servers.","uniqueKey":"error.at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"\u003cstring>","requestId":"\u003cstring>","retryable":true,"operationId":"\u003cstring>","reason":"missing_key","hint":"\u003cstring>","docs":"\u003cstring>","docs_url":"\u003cstring>","requiredScopes":["\u003cstring>"],"retryAfterSeconds":2,"at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"},"a92309d9-9063-4432-9d35-15172b7c7de2":{"description":"`no_capacity` (there is no room for the sandbox right now; the message says what could not run and when to retry) or `host_unavailable` (the sandbox cannot be reached right now). Usually `retryable`; try again shortly. `no_capacity` is `retryable`: retry with exponential backoff (for example after 15 s, 30 s, 60 s, then every few minutes), or try another size or template. A create whose operation failed with it replays that failed operation for the same `Idempotency-Key`, so retry it with a new key. With `--fail-fast` the CLI's `create` and `run` exit 75 on it (otherwise 1). A retryable `no_capacity` has `retryAfterSeconds` and the same `Retry-After` header: wait at least that long before the first retry.","headers":{"Retry-After":{"description":"Seconds to wait before retrying; the body's `retryAfterSeconds`.","schema":{"type":"integer","minimum":1,"examples":[60]}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message","requestId","retryable","operationId"],"properties":{"code":{"type":"string","description":"Machine-readable code. HTTP status per code is fixed.","enum":["unauthenticated","missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","permission_denied","not_found","bad_request","feature_disabled","unknown_field","operation_conflict","idempotency_conflict","machine_not_running","restore_unavailable","delete_confirmation_required","fork_unavailable","machine_cooldown","max_run_disabled","desktop_not_running","disk_too_small","grow_needs_stop","resize_restart_off","private_ports_unavailable","quota_exceeded","no_capacity","host_unavailable","metrics_unavailable","restore_failed","internal","authorization_pending","slow_down","expired_token","access_denied","invalid_grant","invite_required","invite_invalid","invite_email_mismatch","api_key_expired","api_key_revoked","insufficient_scope","orca_unsupported","runtime_not_ready","spec_not_allowed","template_not_allowed","template_limit","kernel_unavailable","template_unavailable","invalid_guest_user","vault_unavailable","vault_retired","credit_exhausted","spend_limit_reached","subscription_required","payment_method_required","early_allowance_ended","rate_limited","concurrency_limit","payment_failed","missing_parent","not_a_file","no_space","too_large","data_disk_not_browsable","support_unavailable","host_oom","vmm_crashed","guest_reboot_loop"],"isRequired":true,"uniqueKey":"error.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"requestId":{"type":"string","isRequired":true,"uniqueKey":"error.requestId","typeLabel":"string"},"retryable":{"type":"boolean","description":"True if the same request may succeed later.","isRequired":true,"uniqueKey":"error.retryable","typeLabel":"boolean"},"operationId":{"oneOf":[{"type":"string","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.0","typeLabel":"string"},{"type":"null","description":"For `operation_conflict`, the active operation.","isRequired":true,"uniqueKey":"error.operationId.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.operationId","typeLabel":"string | null"},"reason":{"type":"string","description":"The same as `code` for credential errors (401 `missing_key`, `malformed_key`, `invalid_key`, `expired_key`, `revoked_key`, `session_expired`; 403 `missing_scope`). For 409 `machine_cooldown`, the automatic abuse check whose pause locks the sandbox: `abuse_egress_blocklist` (it tried to connect to a blocked destination on the egress blocklist, not a DNS lookup), `abuse_network_flows` (scanning or attack traffic), `abuse_cpu` (mining); absent for a max-run cooldown. For a retryable 409 `fork_unavailable`, why the source's host cannot take the fork: `source_host_unavailable` (it takes no new sandboxes) or `source_host_full` (no room now). Absent on other errors and from older servers.","enum":["missing_key","malformed_key","invalid_key","expired_key","revoked_key","session_expired","missing_scope","abuse_egress_blocklist","abuse_network_flows","abuse_cpu","source_host_unavailable","source_host_full"],"uniqueKey":"error.reason","typeLabel":"enum\u003cstring>"},"hint":{"type":"string","description":"The next step that fixes the error (credential errors). Absent otherwise.","uniqueKey":"error.hint","typeLabel":"string"},"docs":{"type":"string","format":"uri","description":"A URL documenting the error (credential errors). Absent otherwise.","uniqueKey":"error.docs","typeLabel":"string\u003curi>"},"docs_url":{"type":"string","format":"uri","description":"The code's entry on the errors page, on every error response: https://instabox.sh/docs/errors#\u003ccode> with underscores as dashes (e.g. #credit-exhausted): its HTTP status, whether to retry and what to do. Snake case, unlike the other fields. Absent from a failed operation's `error` and from older servers.","uniqueKey":"error.docs_url","typeLabel":"string\u003curi>"},"requiredScopes":{"type":"array","items":{"type":"string","uniqueKey":"error.requiredScopes.items.[INDEX]","typeLabel":"string"},"description":"For `missing_scope`, the scopes the route accepts; the key needs one of them.","uniqueKey":"error.requiredScopes","typeLabel":"string[]"},"retryAfterSeconds":{"type":"integer","minimum":1,"description":"Seconds to wait before trying again: a retryable `no_capacity` (60, as a 503 or on a failed operation's `error`), `rate_limited`, `machine_cooldown` and agent sign-up `quota_exceeded`. An error response also sends it as the `Retry-After` header; a failed operation's `error` has only this field. Absent otherwise and from older servers.","uniqueKey":"error.retryAfterSeconds","typeLabel":"integer"},"at":{"type":"string","format":"date-time","description":"When it happened, for a stop the platform found (a sandbox's `lastError` with code `host_oom`, `vmm_crashed` or `guest_reboot_loop`; `hint` says what to do). The next successful start clears the error. Absent otherwise and from older servers.","uniqueKey":"error.at","typeLabel":"string\u003cdate-time>"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"unauthenticated","message":"\u003cstring>","requestId":"\u003cstring>","retryable":true,"operationId":"\u003cstring>","reason":"missing_key","hint":"\u003cstring>","docs":"\u003cstring>","docs_url":"\u003cstring>","requiredScopes":["\u003cstring>"],"retryAfterSeconds":2,"at":"2023-11-07T05:31:56Z"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"2ec85235-5d4f-4c56-83ad-f717a1fda2ee":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Opaque instabox access token (1 hour). Refresh with `/v1/auth/refresh` (refresh token valid 30 days, rotates on use).","scopes":[],"schemeName":"bearerAuth"}},"62006052-20e4-4349-9b20-422d5755e1e3":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key (`ibk_...`) with scopes; also accepted as `Authorization: Bearer ibk_...`.\nAccepted on sandbox, snapshot, operation, template and usage routes per scope\n(see API keys), never on key management, sessions, logout or admin routes.\n","scopes":[],"schemeName":"apiKey"}},"baae66da-46c3-4603-bf0c-f0e0d3340e75":{"sessionCookie":{"type":"apiKey","in":"cookie","name":"instabox_session","description":"Dashboard browser session from `/auth/github/login` (7 days idle, 30 days at\nmost). Used only when no Authorization header is sent. Requests other than\nGET and HEAD must send `X-Instabox-CSRF` (from `GET /v1/me`) and an `Origin`\nequal to the server's `publicUrl`; otherwise `403 permission_denied`.\n","scopes":[],"schemeName":"sessionCookie"}}},"servers":{"e2c665bb-4b53-46fa-8dd3-3dba6e3ac4a8":{"url":"https://api.instabox.sh"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Opaque instabox access token (1 hour). Refresh with `/v1/auth/refresh` (refresh token valid 30 days, rotates on use).","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Opaque instabox access token (1 hour). Refresh with `/v1/auth/refresh` (refresh token valid 30 days, rotates on use).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"},{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API key (`ibk_...`) with scopes; also accepted as `Authorization: Bearer ibk_...`.\nAccepted on sandbox, snapshot, operation, template and usage routes per scope\n(see API keys), never on key management, sessions, logout or admin routes.\n","scopes":[],"schemeName":"apiKey"},"schema":{"title":"X-API-Key","type":"string","description":"API key (`ibk_...`) with scopes; also accepted as `Authorization: Bearer ibk_...`.\nAccepted on sandbox, snapshot, operation, template and usage routes per scope\n(see API keys), never on key management, sessions, logout or admin routes.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"X-API-Key"}],"title":"apiKey"},{"schemes":[{"scheme":{"type":"apiKey","in":"cookie","name":"instabox_session","description":"Dashboard browser session from `/auth/github/login` (7 days idle, 30 days at\nmost). Used only when no Authorization header is sent. Requests other than\nGET and HEAD must send `X-Instabox-CSRF` (from `GET /v1/me`) and an `Origin`\nequal to the server's `publicUrl`; otherwise `403 permission_denied`.\n","scopes":[],"schemeName":"sessionCookie"},"schema":{"title":"instabox_session","type":"string","description":"Dashboard browser session from `/auth/github/login` (7 days idle, 30 days at\nmost). Used only when no Authorization header is sent. Requests other than\nGET and HEAD must send `X-Instabox-CSRF` (from `GET /v1/me`) and an `Origin`\nequal to the server's `publicUrl`; otherwise `403 permission_denied`.\n","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"sessionCookie","name":"instabox_session"}],"title":"sessionCookie"}]},"originalFileLocation":"api-reference/openapi.yaml"},"subdomain":"instacloud","siteName":"InstaBox","title":"Run a command in the sandbox and return its output. - InstaBox","relatedPagesConfig":{"enabled":false,"limit":5,"mode":"automatic"},"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T06:53:03.694Z","originalFileLocation":"api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Runs cmd with bash -lc as the sandbox\u0026#x27;s login user (dev, HOME /data/home, the user SSH sessions get), after exporting envs and changing to cwd (default HOME, even if the profile changes directory; a cwd that does not exist makes the command fail with exit code 1). stdin is fed to the command, then EOF: UTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that are not UTF-8 become U+FFFD, so base64-encode binary input or write it with PUT /v1/machines/{id}/files first (see ExecRequest.stdin). Instead of cmd, send argv (a program and its arguments) to run it with no shell: {\u0026quot;argv\u0026quot;: [\u0026quot;printf\u0026quot;, \u0026quot;%s|\u0026quot;, \u0026quot;a b\u0026quot;, \u0026quot;$X\u0026quot;]} prints a b|$X|. The login profile, envs and cwd apply the same way; only the parsing of the command differs. Set exactly one of cmd and argv. The request blocks until the command exits or timeoutSeconds passes. On timeout the command\u0026#x27;s process group is killed (SIGKILL) and the result has timedOut: true and exitCode: 124 (also when the sandbox did not start the command in time). A command killed by a signal has signal set and exitCode 128+N for standard signal N, otherwise 255. A non-zero exit code is a 200 result, not an error. The request returns when the command exits, even if a process it started in the background keeps its stdout or stderr open: that process keeps running, output it writes later than about a second after the exit is not returned, and its later writes to that output fail with a broken pipe, so redirect a server\u0026#x27;s stdout and stderr to a file (nohup server \u0026gt;log 2\u0026gt;\u0026amp;1 \u0026amp;). stdout and stderr keep their first 1 MiB each (truncated: true when either was cut); invalid UTF-8 is replaced with U+FFFD (invalidUtf8: true), so binary output is not byte-exact: read files with GET /v1/machines/{id}/files/content. The sandbox must be running (409 machine_not_running). At most 32 requests run at once per user on the free plan, per workspace for a workspace\u0026#x27;s API keys (Pro 64; Builder, Team and Enterprise 256), across all your sandboxes. Commands, file reads, desktop, port-forward and Secret refresh calls share this limit. A background command counts only while it starts. More get a retryable 429 quota_exceeded (server config limits.maxExecsPerUser, plans..maxExecs and limits.maxExecsPerOrg, not reported by GET /v1/usage). If the sandbox cannot be reached, 503 host_unavailable; when the connection is lost after the command started it is not retryable, since the command may have run (it is killed, not left running). An API server that restarts mid-command kills it and answers a retryable 503 host_unavailable (\u0026quot;the API server restarted before the command finished\u0026quot;). Not idempotent: no Idempotency-Key, and a retry runs the command again. API keys: needs one of the scopes machines:write, machines:exec (legacy). Streaming: send Accept: text/event-stream to get the output as the command writes it, as server-sent events: a stdout or stderr event (data: ExecOutput) for each chunk, a : ping comment every 15 s while the command is quiet, then one exit event (data: the ExecResult, with empty stdout and stderr and never truncated: streamed output is not capped) or error event (data: an ErrorBody, e.g. host_unavailable when the connection to the sandbox was lost). Errors found before the command starts (400, 404, 409, 429, a 503 dial failure) are plain JSON responses. Closing the stream kills the command. Timeouts are the same as without streaming; for a command longer than 10 minutes start it in the background (instabox exec --background) and follow its log.\">\u003cmeta data-mint-head name=\"application-name\" content=\"InstaBox\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Run a command in the sandbox and return its output. - InstaBox\">\u003cmeta data-mint-head property=\"og:description\" content=\"Runs cmd with bash -lc as the sandbox\u0026#x27;s login user (dev, HOME /data/home, the user SSH sessions get), after exporting envs and changing to cwd (default HOME, even if the profile changes directory; a cwd that does not exist makes the command fail with exit code 1). stdin is fed to the command, then EOF: UTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that are not UTF-8 become U+FFFD, so base64-encode binary input or write it with PUT /v1/machines/{id}/files first (see ExecRequest.stdin). Instead of cmd, send argv (a program and its arguments) to run it with no shell: {\u0026quot;argv\u0026quot;: [\u0026quot;printf\u0026quot;, \u0026quot;%s|\u0026quot;, \u0026quot;a b\u0026quot;, \u0026quot;$X\u0026quot;]} prints a b|$X|. The login profile, envs and cwd apply the same way; only the parsing of the command differs. Set exactly one of cmd and argv. The request blocks until the command exits or timeoutSeconds passes. On timeout the command\u0026#x27;s process group is killed (SIGKILL) and the result has timedOut: true and exitCode: 124 (also when the sandbox did not start the command in time). A command killed by a signal has signal set and exitCode 128+N for standard signal N, otherwise 255. A non-zero exit code is a 200 result, not an error. The request returns when the command exits, even if a process it started in the background keeps its stdout or stderr open: that process keeps running, output it writes later than about a second after the exit is not returned, and its later writes to that output fail with a broken pipe, so redirect a server\u0026#x27;s stdout and stderr to a file (nohup server \u0026gt;log 2\u0026gt;\u0026amp;1 \u0026amp;). stdout and stderr keep their first 1 MiB each (truncated: true when either was cut); invalid UTF-8 is replaced with U+FFFD (invalidUtf8: true), so binary output is not byte-exact: read files with GET /v1/machines/{id}/files/content. The sandbox must be running (409 machine_not_running). At most 32 requests run at once per user on the free plan, per workspace for a workspace\u0026#x27;s API keys (Pro 64; Builder, Team and Enterprise 256), across all your sandboxes. Commands, file reads, desktop, port-forward and Secret refresh calls share this limit. A background command counts only while it starts. More get a retryable 429 quota_exceeded (server config limits.maxExecsPerUser, plans..maxExecs and limits.maxExecsPerOrg, not reported by GET /v1/usage). If the sandbox cannot be reached, 503 host_unavailable; when the connection is lost after the command started it is not retryable, since the command may have run (it is killed, not left running). An API server that restarts mid-command kills it and answers a retryable 503 host_unavailable (\u0026quot;the API server restarted before the command finished\u0026quot;). Not idempotent: no Idempotency-Key, and a retry runs the command again. API keys: needs one of the scopes machines:write, machines:exec (legacy). Streaming: send Accept: text/event-stream to get the output as the command writes it, as server-sent events: a stdout or stderr event (data: ExecOutput) for each chunk, a : ping comment every 15 s while the command is quiet, then one exit event (data: the ExecResult, with empty stdout and stderr and never truncated: streamed output is not capped) or error event (data: an ErrorBody, e.g. host_unavailable when the connection to the sandbox was lost). Errors found before the command starts (400, 404, 409, 429, a 503 dial failure) are plain JSON responses. Closing the stream kills the command. Timeouts are the same as without streaming; for a command longer than 10 minutes start it in the background (instabox exec --background) and follow its log.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"InstaBox\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://instacloud.mintlify.site/docs/_mintlify/api/og/v2?division=Commands+and+files\u0026amp;title=Run+a+command+in+the+sandbox+and+return+its+output.\u0026amp;description=Runs+%60cmd%60+with+%60bash+-lc%60+as+the+sandbox%27s+login+user+%28%60dev%60%2C+HOME%0A%60%2Fdata%2Fhome%60%2C+the+user+SSH+sessions+get%29%2C+after+exporting+%60envs%60+and%0Achanging+to+%60cwd%60+%28defa\u0026amp;theme=4d60089f83d6d00671834b24\u0026amp;signature=912ce501289bf7172347f818d9c7a266c2e4e7337bd0b5e70d5f46e18665c0c0\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Run a command in the sandbox and return its output. - InstaBox\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Runs cmd with bash -lc as the sandbox\u0026#x27;s login user (dev, HOME /data/home, the user SSH sessions get), after exporting envs and changing to cwd (default HOME, even if the profile changes directory; a cwd that does not exist makes the command fail with exit code 1). stdin is fed to the command, then EOF: UTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that are not UTF-8 become U+FFFD, so base64-encode binary input or write it with PUT /v1/machines/{id}/files first (see ExecRequest.stdin). Instead of cmd, send argv (a program and its arguments) to run it with no shell: {\u0026quot;argv\u0026quot;: [\u0026quot;printf\u0026quot;, \u0026quot;%s|\u0026quot;, \u0026quot;a b\u0026quot;, \u0026quot;$X\u0026quot;]} prints a b|$X|. The login profile, envs and cwd apply the same way; only the parsing of the command differs. Set exactly one of cmd and argv. The request blocks until the command exits or timeoutSeconds passes. On timeout the command\u0026#x27;s process group is killed (SIGKILL) and the result has timedOut: true and exitCode: 124 (also when the sandbox did not start the command in time). A command killed by a signal has signal set and exitCode 128+N for standard signal N, otherwise 255. A non-zero exit code is a 200 result, not an error. The request returns when the command exits, even if a process it started in the background keeps its stdout or stderr open: that process keeps running, output it writes later than about a second after the exit is not returned, and its later writes to that output fail with a broken pipe, so redirect a server\u0026#x27;s stdout and stderr to a file (nohup server \u0026gt;log 2\u0026gt;\u0026amp;1 \u0026amp;). stdout and stderr keep their first 1 MiB each (truncated: true when either was cut); invalid UTF-8 is replaced with U+FFFD (invalidUtf8: true), so binary output is not byte-exact: read files with GET /v1/machines/{id}/files/content. The sandbox must be running (409 machine_not_running). At most 32 requests run at once per user on the free plan, per workspace for a workspace\u0026#x27;s API keys (Pro 64; Builder, Team and Enterprise 256), across all your sandboxes. Commands, file reads, desktop, port-forward and Secret refresh calls share this limit. A background command counts only while it starts. More get a retryable 429 quota_exceeded (server config limits.maxExecsPerUser, plans..maxExecs and limits.maxExecsPerOrg, not reported by GET /v1/usage). If the sandbox cannot be reached, 503 host_unavailable; when the connection is lost after the command started it is not retryable, since the command may have run (it is killed, not left running). An API server that restarts mid-command kills it and answers a retryable 503 host_unavailable (\u0026quot;the API server restarted before the command finished\u0026quot;). Not idempotent: no Idempotency-Key, and a retry runs the command again. API keys: needs one of the scopes machines:write, machines:exec (legacy). Streaming: send Accept: text/event-stream to get the output as the command writes it, as server-sent events: a stdout or stderr event (data: ExecOutput) for each chunk, a : ping comment every 15 s while the command is quiet, then one exit event (data: the ExecResult, with empty stdout and stderr and never truncated: streamed output is not capped) or error event (data: an ErrorBody, e.g. host_unavailable when the connection to the sandbox was lost). Errors found before the command starts (400, 404, 409, 429, a 503 dial failure) are plain JSON responses. Closing the stream kills the command. Timeouts are the same as without streaming; for a command longer than 10 minutes start it in the background (instabox exec --background) and follow its log.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://instacloud.mintlify.site/docs/_mintlify/api/og/v2?division=Commands+and+files\u0026amp;title=Run+a+command+in+the+sandbox+and+return+its+output.\u0026amp;description=Runs+%60cmd%60+with+%60bash+-lc%60+as+the+sandbox%27s+login+user+%28%60dev%60%2C+HOME%0A%60%2Fdata%2Fhome%60%2C+the+user+SSH+sessions+get%29%2C+after+exporting+%60envs%60+and%0Achanging+to+%60cwd%60+%28defa\u0026amp;theme=4d60089f83d6d00671834b24\u0026amp;signature=912ce501289bf7172347f818d9c7a266c2e4e7337bd0b5e70d5f46e18665c0c0\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/instacloud/B4TOiHlk6CDYfBRt/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"InstaBox\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0A0A0A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://instabox.sh/#organization\",\"name\":\"InstaBox\",\"url\":\"https://instabox.sh\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://instacloud.mintlify.site/docs/logo/light.svg\"}},{\"@type\":\"WebSite\",\"@id\":\"https://instabox.sh/docs#website\",\"name\":\"InstaBox\",\"url\":\"https://instabox.sh/docs\",\"publisher\":{\"@id\":\"https://instabox.sh/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output#webpage\",\"url\":\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output\",\"name\":\"Run a command in the sandbox and return its output.\",\"description\":\"Runs cmd with bash -lc as the sandbox's login user (dev, HOME /data/home, the user SSH sessions get), after exporting envs and changing to cwd (default HOME, even if the profile changes directory; a cwd that does not exist makes the command fail with exit code 1). stdin is fed to the command, then EOF: UTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that are not UTF-8 become U+FFFD, so base64-encode binary input or write it with PUT /v1/machines/{id}/files first (see ExecRequest.stdin). Instead of cmd, send argv (a program and its arguments) to run it with no shell: {\\\"argv\\\": [\\\"printf\\\", \\\"%s|\\\", \\\"a b\\\", \\\"$X\\\"]} prints a b|$X|. The login profile, envs and cwd apply the same way; only the parsing of the command differs. Set exactly one of cmd and argv. The request blocks until the command exits or timeoutSeconds passes. On timeout the command's process group is killed (SIGKILL) and the result has timedOut: true and exitCode: 124 (also when the sandbox did not start the command in time). A command killed by a signal has signal set and exitCode 128+N for standard signal N, otherwise 255. A non-zero exit code is a 200 result, not an error. The request returns when the command exits, even if a process it started in the background keeps its stdout or stderr open: that process keeps running, output it writes later than about a second after the exit is not returned, and its later writes to that output fail with a broken pipe, so redirect a server's stdout and stderr to a file (nohup server >log 2>\u00261 \u0026). stdout and stderr keep their first 1 MiB each (truncated: true when either was cut); invalid UTF-8 is replaced with U+FFFD (invalidUtf8: true), so binary output is not byte-exact: read files with GET /v1/machines/{id}/files/content. The sandbox must be running (409 machine_not_running). At most 32 requests run at once per user on the free plan, per workspace for a workspace's API keys (Pro 64; Builder, Team and Enterprise 256), across all your sandboxes. Commands, file reads, desktop, port-forward and Secret refresh calls share this limit. A background command counts only while it starts. More get a retryable 429 quota_exceeded (server config limits.maxExecsPerUser, plans..maxExecs and limits.maxExecsPerOrg, not reported by GET /v1/usage). If the sandbox cannot be reached, 503 host_unavailable; when the connection is lost after the command started it is not retryable, since the command may have run (it is killed, not left running). An API server that restarts mid-command kills it and answers a retryable 503 host_unavailable (\\\"the API server restarted before the command finished\\\"). Not idempotent: no Idempotency-Key, and a retry runs the command again. API keys: needs one of the scopes machines:write, machines:exec (legacy). Streaming: send Accept: text/event-stream to get the output as the command writes it, as server-sent events: a stdout or stderr event (data: ExecOutput) for each chunk, a : ping comment every 15 s while the command is quiet, then one exit event (data: the ExecResult, with empty stdout and stderr and never truncated: streamed output is not capped) or error event (data: an ErrorBody, e.g. host_unavailable when the connection to the sandbox was lost). Errors found before the command starts (400, 404, 409, 429, a 503 dial failure) are plain JSON responses. Closing the stream kills the command. Timeouts are the same as without streaming; for a command longer than 10 minutes start it in the background (instabox exec --background) and follow its log.\",\"dateModified\":\"2026-11-09T06:53:03.694Z\",\"isPartOf\":{\"@id\":\"https://instabox.sh/docs#website\"},\"breadcrumb\":{\"@id\":\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API reference\",\"item\":\"https://instabox.sh/docs/api-reference/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Run a command in the sandbox and return its output.\",\"item\":\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output#apireference\",\"headline\":\"Run a command in the sandbox and return its output.\",\"name\":\"Run a command in the sandbox and return its output.\",\"description\":\"Runs cmd with bash -lc as the sandbox's login user (dev, HOME /data/home, the user SSH sessions get), after exporting envs and changing to cwd (default HOME, even if the profile changes directory; a cwd that does not exist makes the command fail with exit code 1). stdin is fed to the command, then EOF: UTF-8 text of at most 1 MiB (1048576 bytes, not characters); bytes that are not UTF-8 become U+FFFD, so base64-encode binary input or write it with PUT /v1/machines/{id}/files first (see ExecRequest.stdin). Instead of cmd, send argv (a program and its arguments) to run it with no shell: {\\\"argv\\\": [\\\"printf\\\", \\\"%s|\\\", \\\"a b\\\", \\\"$X\\\"]} prints a b|$X|. The login profile, envs and cwd apply the same way; only the parsing of the command differs. Set exactly one of cmd and argv. The request blocks until the command exits or timeoutSeconds passes. On timeout the command's process group is killed (SIGKILL) and the result has timedOut: true and exitCode: 124 (also when the sandbox did not start the command in time). A command killed by a signal has signal set and exitCode 128+N for standard signal N, otherwise 255. A non-zero exit code is a 200 result, not an error. The request returns when the command exits, even if a process it started in the background keeps its stdout or stderr open: that process keeps running, output it writes later than about a second after the exit is not returned, and its later writes to that output fail with a broken pipe, so redirect a server's stdout and stderr to a file (nohup server >log 2>\u00261 \u0026). stdout and stderr keep their first 1 MiB each (truncated: true when either was cut); invalid UTF-8 is replaced with U+FFFD (invalidUtf8: true), so binary output is not byte-exact: read files with GET /v1/machines/{id}/files/content. The sandbox must be running (409 machine_not_running). At most 32 requests run at once per user on the free plan, per workspace for a workspace's API keys (Pro 64; Builder, Team and Enterprise 256), across all your sandboxes. Commands, file reads, desktop, port-forward and Secret refresh calls share this limit. A background command counts only while it starts. More get a retryable 429 quota_exceeded (server config limits.maxExecsPerUser, plans..maxExecs and limits.maxExecsPerOrg, not reported by GET /v1/usage). If the sandbox cannot be reached, 503 host_unavailable; when the connection is lost after the command started it is not retryable, since the command may have run (it is killed, not left running). An API server that restarts mid-command kills it and answers a retryable 503 host_unavailable (\\\"the API server restarted before the command finished\\\"). Not idempotent: no Idempotency-Key, and a retry runs the command again. API keys: needs one of the scopes machines:write, machines:exec (legacy). Streaming: send Accept: text/event-stream to get the output as the command writes it, as server-sent events: a stdout or stderr event (data: ExecOutput) for each chunk, a : ping comment every 15 s while the command is quiet, then one exit event (data: the ExecResult, with empty stdout and stderr and never truncated: streamed output is not capped) or error event (data: an ErrorBody, e.g. host_unavailable when the connection to the sandbox was lost). Errors found before the command starts (400, 404, 409, 429, a 503 dial failure) are plain JSON responses. Closing the stream kills the command. Timeouts are the same as without streaming; for a command longer than 10 minutes start it in the background (instabox exec --background) and follow its log.\",\"url\":\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output\",\"mainEntityOfPage\":{\"@id\":\"https://instabox.sh/docs/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output#webpage\"},\"dateModified\":\"2026-11-09T06:53:03.694Z\",\"publisher\":{\"@id\":\"https://instabox.sh/#organization\"},\"isPartOf\":{\"@id\":\"https://instabox.sh/docs#website\"}}]}\u003c/script>","siteName":"InstaBox","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API reference","groups":[{"group":"API reference","pages":[{"title":"API overview","icon":"braces","href":"/api-reference/introduction"},{"group":"Machines","pages":[{"title":"Create a sandbox.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines","href":"/api-reference/machines/create-a-sandbox"},{"title":"List the sandboxes of your orgs.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/machines","href":"/api-reference/machines/list-the-sandboxes-of-your-orgs"},{"title":"Get a sandbox.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/machines/{id}","href":"/api-reference/machines/get-a-sandbox"},{"title":"Rename, resize (vCPUs, memory, disk) a stopped sandbox, or set its idle pause and metadata.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/machines/{id}","href":"/api-reference/machines/rename-resize-vcpus-memory-disk-a-stopped-sandbox-or-set-its-idle-pause-and-metadata"},{"title":"Delete a sandbox, its system files and its storage.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/machines/{id}","href":"/api-reference/machines/delete-a-sandbox-its-system-files-and-its-storage"}]},{"group":"Lifecycle","pages":[{"title":"Start a stopped or paused sandbox.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/start","href":"/api-reference/machines/start-a-stopped-or-paused-sandbox"},{"title":"Stop a running sandbox (shuts it down; running programs end, files are kept).","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/stop","href":"/api-reference/machines/stop-a-running-sandbox-shuts-it-down;-running-programs-end-files-are-kept"},{"title":"Pause a running sandbox, keeping its running programs.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/suspend","href":"/api-reference/machines/pause-a-running-sandbox-keeping-its-running-programs"},{"title":"Resume a paused sandbox where it left off.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/resume","href":"/api-reference/machines/resume-a-paused-sandbox-where-it-left-off"},{"title":"Resume an idle-suspended machine before using it.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/wake","href":"/api-reference/machines/resume-an-idle-suspended-machine-before-using-it"},{"title":"Put a sandbox's disks back to a snapshot's, in place.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/restore","href":"/api-reference/machines/put-a-sandboxs-disks-back-to-a-snapshots-in-place"},{"title":"Create a copy of a sandbox on its host, without a snapshot.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/fork","href":"/api-reference/machines/create-a-copy-of-a-sandbox-on-its-host-without-a-snapshot"},{"title":"Get an operation (the progress of a sandbox change).","description":"API keys: needs one of the scopes `machines:read`, `images:read`.\n\nWith `wait`, a long poll: the response comes as soon as the operation is `succeeded` or `failed`, or its `state` or `phase` differs from what it was when the request arrived, or when the wait ends, whichever is first; it is always the operation as it is then. Loop on it instead of polling at an interval. A done operation answers at once.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/operations/{id}","href":"/api-reference/operations/get-an-operation-the-progress-of-a-sandbox-change"}]},{"group":"Commands and files","pages":[{"title":"Run a command in the sandbox and return its output.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/exec","href":"/api-reference/connections/run-a-command-in-the-sandbox-and-return-its-output"},{"title":"Read a file or directory of a running sandbox.","description":"Lists a directory or returns a file of a running sandbox you own, read live the same way exec runs commands, as root (sudo; as the dev user if sudo needs a password). The response is the Files shape: a directory lists its entries (directories first, then by name, at most 5000); a regular file returns its content as text (at most 256 KiB) unless it is binary. Symbolic links in the path are followed. A sandbox paused for idleness is resumed first; other non-running sandboxes return 409 `machine_not_running`. A path that does not exist is 404. It counts toward the per-user limit of requests at once (free plan 32; Pro 64; Builder, Team and Enterprise 256). API keys: needs one of the scopes `machines:write`, `machines:exec` (legacy).","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/machines/{id}/files","href":"/api-reference/machines/read-a-file-or-directory-of-a-running-sandbox"},{"title":"Write (upload) a file to a running sandbox.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /v1/machines/{id}/files","href":"/api-reference/machines/write-upload-a-file-to-a-running-sandbox"},{"title":"Download a file's raw bytes from a running sandbox.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/machines/{id}/files/content","href":"/api-reference/machines/download-a-files-raw-bytes-from-a-running-sandbox"},{"title":"Get a short-lived signed URL that uploads one file.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/files/upload-url","href":"/api-reference/machines/get-a-short-lived-signed-url-that-uploads-one-file"}]},{"group":"Snapshots","pages":[{"title":"Save a sandbox's system files and storage as a snapshot.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/snapshots","href":"/api-reference/snapshots/save-a-sandboxs-system-files-and-storage-as-a-snapshot"},{"title":"List the snapshots of your orgs.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/snapshots","href":"/api-reference/snapshots/list-the-snapshots-of-your-orgs"},{"title":"Get a snapshot of one of your orgs.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/snapshots/{id}","href":"/api-reference/snapshots/get-a-snapshot-of-one-of-your-orgs"},{"title":"Read a file or directory of a snapshot's system files.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/snapshots/{id}/files","href":"/api-reference/snapshots/read-a-file-or-directory-of-a-snapshots-system-files"},{"title":"Delete a snapshot.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/snapshots/{id}","href":"/api-reference/snapshots/delete-a-snapshot"}]},{"group":"Ports","pages":[{"title":"Give one HTTP port of a sandbox an HTTPS URL, public or private.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/ports","href":"/api-reference/give-one-http-port-of-a-sandbox-an-https-url-public-or-private"},{"title":"List a sandbox's public ports.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/machines/{id}/ports","href":"/api-reference/list-a-sandboxs-public-ports"},{"title":"List the public ports of all your sandboxes.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/ports","href":"/api-reference/list-the-public-ports-of-all-your-sandboxes"},{"title":"Remove a port's public URL and close its active connections.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/machines/{id}/ports/{port}","href":"/api-reference/remove-a-ports-public-url-and-close-its-active-connections"}]},{"group":"SSH","pages":[{"title":"Issue an SSH token, for a plain `ssh` command without a key.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/ssh-tokens","href":"/api-reference/connections/issue-an-ssh-token-for-a-plain-`ssh`-command-without-a-key"},{"title":"List SSH token metadata, including revoked and recently expired tokens.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/machines/{id}/ssh-tokens","href":"/api-reference/connections/list-ssh-token-metadata-including-revoked-and-recently-expired-tokens"},{"title":"Revoke one SSH token and close its SSH and mosh connections.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/machines/{id}/ssh-tokens/{tokenID}","href":"/api-reference/connections/revoke-one-ssh-token-and-close-its-ssh-and-mosh-connections"},{"title":"Revoke every SSH token of the sandbox and close their connections.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/machines/{id}/ssh-tokens","href":"/api-reference/connections/revoke-every-ssh-token-of-the-sandbox-and-close-their-connections"},{"title":"Issue a short-lived SSH user certificate for the sandbox.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/connections","href":"/api-reference/connections/issue-a-short-lived-ssh-user-certificate-for-the-sandbox"}]},{"group":"Secrets","pages":[{"title":"List an org's Secret metadata, never values.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/orgs/{id}/secrets","href":"/api-reference/secrets/list-an-orgs-secret-metadata-never-values"},{"title":"Create or replace an org Secret.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml put /v1/orgs/{id}/secrets/{name}","href":"/api-reference/secrets/create-or-replace-an-org-secret"},{"title":"Atomically create or replace a batch of org Secrets.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/orgs/{id}/secrets/import","href":"/api-reference/secrets/atomically-create-or-replace-a-batch-of-org-secrets"},{"title":"Delete an org Secret and its explicit sandbox grants.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml delete /v1/orgs/{id}/secrets/{name}","href":"/api-reference/secrets/delete-an-org-secret-and-its-explicit-sandbox-grants"},{"title":"Read a sandbox's Secret selections and delivery status.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/machines/{id}/secrets","href":"/api-reference/secrets/read-a-sandboxs-secret-selections-and-delivery-status"},{"title":"Replace supplied Secret selections for a sandbox.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml patch /v1/machines/{id}/secrets","href":"/api-reference/secrets/replace-supplied-secret-selections-for-a-sandbox"},{"title":"Refresh managed Secret delivery in a running sandbox.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml post /v1/machines/{id}/secrets","href":"/api-reference/secrets/refresh-managed-secret-delivery-in-a-running-sandbox"}]},{"group":"Account","pages":[{"title":"The signed-in user and the sandbox size they get.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/me","href":"/api-reference/auth/the-signed-in-user-and-the-sandbox-size-they-get"},{"title":"List the templates a sandbox can start from.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/templates","href":"/api-reference/machines/list-the-templates-a-sandbox-can-start-from"},{"title":"Your storage use, limits, this month's cost and credit balance.","deprecated":null,"version":null,"openapi":"/api-reference/openapi.yaml get /v1/usage","href":"/api-reference/usage/your-storage-use-limits-this-months-cost-and-credit-balance"}]}]}]},{"tab":"SDK reference","pages":[{"title":"SDK reference","href":"/integrations/sdk-quickstart"}]}]},"basePath":"","title":"Run a command in the sandbox and return its output. - InstaBox","buildId":"dpl_3pZeXn3XukjzFRgAX73A7GNDfRJ1","deploymentId":"dpl_3pZeXn3XukjzFRgAX73A7GNDfRJ1","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CW3yP2DK.js","utils-BN0nty2W.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C8_MydSG.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bsl5xDMQ.js","snippetPresets-DYv9OBej.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-9OnYPrVf.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-xr67xWGO.js","shallow-DO1aDdBF.js","getApiPlaygroundDisplay-o7cLzFL-.js","CodeSnippet-CGr2yOA8.js","CodeSnippets-CzBbqPNh.js","Page-CBlOSKZG.js","getPastedJson-dpi9sn5Y.js","icon-aIWHt8Pn.js","MethodPill-Bv2zLsGY.js","DuplicateIcon-DxFSz0J6.js","createIcon-uDNv6jwj.js","DynamicMarkdown-C91yhnNP.js","SectionHeading-DG_xjOLR.js","axios-vUo_bRtp.js","Markdown-B4M_Eo1P.js","clsx-DShopWo_.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BX6wab7q.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-48h67xm_.js"]}