Applies a partial update to a running sandbox. Each top-level field
in the request body is optional; only fields that are present are
applied. Omitted top-level fields are left unchanged. Nested objects
are full replacements when present — to clear a list, send it as an
empty array.
At least one top-level field must be present, otherwise the request
is rejected with 400. Unknown top-level fields are also rejected
with 400 so typos surface as errors instead of silent no-ops.
Currently patchable fields
network — replaces the egress allow/deny rules. The sandbox
must be in the active state; patching a paused sandbox
returns 409. Rules take effect immediately and are persisted so
they survive a future pause/resume cycle.
metadata — replaces the sandbox’s metadata tags. Can be updated
regardless of sandbox state (active, paused).
auto_delete_seconds — sets or clears (null) the
garbage-collection window for the paused state. Can be updated
regardless of sandbox state. When applied to an already-paused
sandbox, the deletion deadline counts from the moment of this
request — never retroactively from when the sandbox paused — so
you always get the full window.
timeout_seconds — sets or clears (null) the auto-pause
timeout. Can be updated regardless of sandbox state; on a paused
sandbox it applies to the next active session. The timeout is
evaluated against the current active session, so lowering it
below already-elapsed time pauses the sandbox promptly.
idle_timeout_seconds — sets or clears (null) the idle
timeout. Can be updated regardless of sandbox state.
preview_access — sets the default access mode for ports published
in the future. Existing per-port modes are unchanged. It also moves
an older legacy_public sandbox to strict routing. legacy_public
cannot be selected.
The unique identifier of the sandbox.
Public sandbox ID: a bare UUID, or the region-tagged form sb-<region>-<uuid> (e.g. sb-use-1b4e28ba-…). Treat as an opaque string; the tagged form routes the request to the sandbox's home region. Endpoints accept both forms interchangeably.
Partial update body for PATCH /sandboxes/{sandbox_id}. Each
top-level field is optional; only fields that are present are
applied. Omitted fields are left unchanged. Nested objects are
full replacements when present — to clear a list, send it as an
empty array.
At least one top-level field must be set, otherwise the request
is rejected with 400. Unknown fields are also rejected with
400.
Replace the sandbox's egress rules. The sandbox must be in
the active state. The provided allow_out and deny_out
lists fully replace whatever was previously configured.
Replace the sandbox's metadata tags. Fully replaces the existing
metadata — omitted keys are removed. Can be patched regardless of
sandbox state. Same validation limits as on create (64 keys,
256-byte keys, 2 KB values, 16 KB total).
Set or clear the garbage-collection window for the paused state.
Once the sandbox has been continuously paused for this many
seconds it is deleted automatically. 0 deletes as soon as the
sandbox pauses; null disables auto-delete. On an already-paused
sandbox the deadline counts from this request, so the sandbox
gets the full window. Maximum 2592000 (30 days).
Set or clear the auto-pause timeout. Same semantics as on
create; null disables auto-pause. Evaluated against the
current active session, so lowering it below already-elapsed
time pauses the sandbox promptly. Maximum 604800 (7 days).
Set the default access for newly published ports and move a legacy
sandbox to strict routing. Existing per-port modes are unchanged.
legacy_public cannot be selected through the API.
{"docsConfig":{"theme":"luma","$schema":"https://mintlify.com/docs.json","name":"Superserve","colors":{"primary":"#B2FAB4","light":"#B2FAB4","dark":"#B2FAB4"},"logo":"https://mintcdn.com/superserve-ai-superserve-33/G055TX3BjwXpQedU/logo.svg?fit=max\u0026auto=format\u0026n=G055TX3BjwXpQedU\u0026q=85\u0026s=69233fb550a17b81d7d7fa083ca7f3de","favicon":"https://mintcdn.com/superserve-ai-superserve-33/G055TX3BjwXpQedU/favicon.svg?fit=max\u0026auto=format\u0026n=G055TX3BjwXpQedU\u0026q=85\u0026s=5c49ee9ed883d587b192cd419a4747d8","appearance":{"default":"dark","strict":true},"background":{"decoration":"gradient","color":{"dark":"#141414"}},"navbar":{"links":[{"href":"https://github.com/superserve-ai/superserve","label":"GitHub","type":"github"}],"primary":{"type":"button","label":"Get Started","href":"https://console.superserve.ai/auth/signup/?utm_source=docs\u0026utm_medium=navbar"}},"footer":{"socials":{"x":"https://x.com/superserve_ai","github":"https://github.com/superserve-ai","linkedin":"https://www.linkedin.com/company/super-serve-ai"},"links":[{"header":"Resources","items":[{"label":"Status","href":"https://status.superserve.ai"}]}]},"fonts":{"heading":{"family":"Instrument Sans"},"body":{"family":"Instrument Sans"}},"styling":{"codeblocks":{"theme":{"light":"github-light","dark":"vitesse-dark"}},"latex":false},"integrations":{"posthog":{"apiKey":"phc_gjpDKKKQJAnkxkqLrPGrAhoariKsaHNuTpI5rVhkYre","apiHost":"https://p.superserve.ai"}},"contextual":{"options":["copy","view","claude","mcp","add-mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"superserve-ai-superserve-33","hasAudioNarration":false,"actualSubdomain":"superserve-ai-superserve-33","customDomains":["docs.superserve.ai"],"gitSource":{"type":"github","owner":"superserve-ai","repo":"superserve","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aeee774608552e5c950997e","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"REST API","count":58},{"language":"default","tag":"Documentation","count":31},{"language":"default","tag":"Integrations","count":17},{"language":"default","tag":"Sandboxes","count":14},{"language":"default","tag":"Templates","count":13},{"language":"default","tag":"Team Management","count":13},{"language":"default","tag":"Sandbox","count":10},{"language":"default","tag":"Secrets","count":10},{"language":"default","tag":"SDK Reference","count":6},{"language":"default","tag":"Reference","count":6}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","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":true},"customCss":[],"page":{"pagePath":"api-reference/sandboxes/partially-update-a-running-sandbox","slug":"/api-reference/sandboxes/partially-update-a-running-sandbox","pageMetadata":{"title":"Partially update a running sandbox","description":"Applies a partial update to a running sandbox. Each top-level field\nin the request body is optional; only fields that are present are\napplied. Omitted top-level fields are left unchanged. Nested objects\nare full replacements when present — to clear a list, send it as an\nempty array.\n\nAt least one top-level field must be present, otherwise the request\nis rejected with `400`. Unknown top-level fields are also rejected\nwith `400` so typos surface as errors instead of silent no-ops.\n\n## Currently patchable fields\n\n- `network` — replaces the egress allow/deny rules. The sandbox\n must be in the `active` state; patching a paused sandbox\n returns `409`. Rules take effect immediately and are persisted so\n they survive a future pause/resume cycle.\n- `metadata` — replaces the sandbox's metadata tags. Can be updated\n regardless of sandbox state (active, paused).\n- `auto_delete_seconds` — sets or clears (`null`) the\n garbage-collection window for the paused state. Can be updated\n regardless of sandbox state. When applied to an already-paused\n sandbox, the deletion deadline counts from the moment of this\n request — never retroactively from when the sandbox paused — so\n you always get the full window.\n- `timeout_seconds` — sets or clears (`null`) the auto-pause\n timeout. Can be updated regardless of sandbox state; on a paused\n sandbox it applies to the next active session. The timeout is\n evaluated against the current active session, so lowering it\n below already-elapsed time pauses the sandbox promptly.\n- `idle_timeout_seconds` — sets or clears (`null`) the idle\n timeout. Can be updated regardless of sandbox state.\n- `preview_access` — sets the default access mode for ports published\n in the future. Existing per-port modes are unchanged. It also moves\n an older `legacy_public` sandbox to strict routing. `legacy_public`\n cannot be selected.\n","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml patch /sandboxes/{sandbox_id}","href":"/api-reference/sandboxes/partially-update-a-running-sandbox","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 h2: \"h2\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Applies a partial update to a running sandbox. Each top-level field\\nin the request body is optional; only fields that are present are\\napplied. Omitted top-level fields are left unchanged. Nested objects\\nare full replacements when present — to clear a list, send it as an\\nempty array.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"At least one top-level field must be present, otherwise the request\\nis rejected with \", _jsx(_components.code, {\n children: \"400\"\n }), \". Unknown top-level fields are also rejected\\nwith \", _jsx(_components.code, {\n children: \"400\"\n }), \" so typos surface as errors instead of silent no-ops.\"]\n }), \"\\n\", _jsx(_components.h2, {\n children: \"Currently patchable fields\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"network\"\n }), \" — replaces the egress allow/deny rules. The sandbox\\nmust be in the \", _jsx(_components.code, {\n children: \"active\"\n }), \" state; patching a paused sandbox\\nreturns \", _jsx(_components.code, {\n children: \"409\"\n }), \". Rules take effect immediately and are persisted so\\nthey survive a future pause/resume cycle.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"metadata\"\n }), \" — replaces the sandbox’s metadata tags. Can be updated\\nregardless of sandbox state (active, paused).\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"auto_delete_seconds\"\n }), \" — sets or clears (\", _jsx(_components.code, {\n children: \"null\"\n }), \") the\\ngarbage-collection window for the paused state. Can be updated\\nregardless of sandbox state. When applied to an already-paused\\nsandbox, the deletion deadline counts from the moment of this\\nrequest — never retroactively from when the sandbox paused — so\\nyou always get the full window.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"timeout_seconds\"\n }), \" — sets or clears (\", _jsx(_components.code, {\n children: \"null\"\n }), \") the auto-pause\\ntimeout. Can be updated regardless of sandbox state; on a paused\\nsandbox it applies to the next active session. The timeout is\\nevaluated against the current active session, so lowering it\\nbelow already-elapsed time pauses the sandbox promptly.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"idle_timeout_seconds\"\n }), \" — sets or clears (\", _jsx(_components.code, {\n children: \"null\"\n }), \") the idle\\ntimeout. Can be updated regardless of sandbox state.\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [_jsx(_components.code, {\n children: \"preview_access\"\n }), \" — sets the default access mode for ports published\\nin the future. Existing per-port modes are unchanged. It also moves\\nan older \", _jsx(_components.code, {\n children: \"legacy_public\"\n }), \" sandbox to strict routing. \", _jsx(_components.code, {\n children: \"legacy_public\"\n }), \"\\ncannot be selected.\"]\n }), \"\\n\"]\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":{"codeStyling":{"theme":{"light":"github-light","dark":"vitesse-dark"}},"config":{},"pageMetadata":{"title":"Partially update a running sandbox","description":"Applies a partial update to a running sandbox. Each top-level field\nin the request body is optional; only fields that are present are\napplied. Omitted top-level fields are left unchanged. Nested objects\nare full replacements when present — to clear a list, send it as an\nempty array.\n\nAt least one top-level field must be present, otherwise the request\nis rejected with `400`. Unknown top-level fields are also rejected\nwith `400` so typos surface as errors instead of silent no-ops.\n\n## Currently patchable fields\n\n- `network` — replaces the egress allow/deny rules. The sandbox\n must be in the `active` state; patching a paused sandbox\n returns `409`. Rules take effect immediately and are persisted so\n they survive a future pause/resume cycle.\n- `metadata` — replaces the sandbox's metadata tags. Can be updated\n regardless of sandbox state (active, paused).\n- `auto_delete_seconds` — sets or clears (`null`) the\n garbage-collection window for the paused state. Can be updated\n regardless of sandbox state. When applied to an already-paused\n sandbox, the deletion deadline counts from the moment of this\n request — never retroactively from when the sandbox paused — so\n you always get the full window.\n- `timeout_seconds` — sets or clears (`null`) the auto-pause\n timeout. Can be updated regardless of sandbox state; on a paused\n sandbox it applies to the next active session. The timeout is\n evaluated against the current active session, so lowering it\n below already-elapsed time pauses the sandbox promptly.\n- `idle_timeout_seconds` — sets or clears (`null`) the idle\n timeout. Can be updated regardless of sandbox state.\n- `preview_access` — sets the default access mode for ports published\n in the future. Existing per-port modes are unchanged. It also moves\n an older `legacy_public` sandbox to strict routing. `legacy_public`\n cannot be selected.\n","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml patch /sandboxes/{sandbox_id}","href":"/api-reference/sandboxes/partially-update-a-running-sandbox","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/superserve-ai-superserve-33/3827cde3b4df02bf/letter.min.js"],"openApiReferenceData":{"operation":{"operationId":"patchSandbox","tags":["Sandboxes"],"summary":"Partially update a running sandbox","description":"Applies a partial update to a running sandbox. Each top-level field\nin the request body is optional; only fields that are present are\napplied. Omitted top-level fields are left unchanged. Nested objects\nare full replacements when present — to clear a list, send it as an\nempty array.\n\nAt least one top-level field must be present, otherwise the request\nis rejected with `400`. Unknown top-level fields are also rejected\nwith `400` so typos surface as errors instead of silent no-ops.\n\n## Currently patchable fields\n\n- `network` — replaces the egress allow/deny rules. The sandbox\n must be in the `active` state; patching a paused sandbox\n returns `409`. Rules take effect immediately and are persisted so\n they survive a future pause/resume cycle.\n- `metadata` — replaces the sandbox's metadata tags. Can be updated\n regardless of sandbox state (active, paused).\n- `auto_delete_seconds` — sets or clears (`null`) the\n garbage-collection window for the paused state. Can be updated\n regardless of sandbox state. When applied to an already-paused\n sandbox, the deletion deadline counts from the moment of this\n request — never retroactively from when the sandbox paused — so\n you always get the full window.\n- `timeout_seconds` — sets or clears (`null`) the auto-pause\n timeout. Can be updated regardless of sandbox state; on a paused\n sandbox it applies to the next active session. The timeout is\n evaluated against the current active session, so lowering it\n below already-elapsed time pauses the sandbox promptly.\n- `idle_timeout_seconds` — sets or clears (`null`) the idle\n timeout. Can be updated regardless of sandbox state.\n- `preview_access` — sets the default access mode for ports published\n in the future. Existing per-port modes are unchanged. It also moves\n an older `legacy_public` sandbox to strict routing. `legacy_public`\n cannot be selected.\n","security":["a2583e3c-7b42-4d6b-9a1b-2f0dc63e8931"],"requestBody":"caed1b94-41e9-4138-af4e-3dc9a08cb09b","responses":{"204":"cd20f4a2-65ce-41b3-a282-7b0674e794f0","400":"d37416f2-015a-4255-8270-e75a4e2009aa","401":"53c2ac99-c7ce-4f41-9016-6037752530af","404":"41552fdc-3304-4ecd-a637-8cef9fb7a973","409":"50f17809-66d9-4b91-8ef8-e0cd0e23810a","500":"66d6e093-0c2e-421a-959d-9507e56c2c46"},"method":"patch","type":"path","servers":["eb91a4a7-8bbd-4253-a460-75e66def9932"],"path":"/sandboxes/{sandbox_id}","baseUrlOptions":["https://api.superserve.ai"],"title":"Partially update a running sandbox","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"eaef1e02-7fd2-4712-aa67-c588496bf56f":{"name":"sandbox_id","in":"path","required":true,"schema":{"type":"string","pattern":"^(sb-[a-z0-9]+-)?[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","description":"The unique identifier of the sandbox.\nPublic sandbox ID: a bare UUID, or the region-tagged form `sb-\u003cregion>-\u003cuuid>` (e.g. `sb-use-1b4e28ba-…`). Treat as an opaque string; the tagged form routes the request to the sandbox's home region. Endpoints accept both forms interchangeably.\n","isRequired":true,"uniqueKey":"","typeLabel":"string"},"description":"The unique identifier of the sandbox."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Partial update body for `PATCH /sandboxes/{sandbox_id}`. Each\ntop-level field is optional; only fields that are present are\napplied. Omitted fields are left unchanged. Nested objects are\nfull replacements when present — to clear a list, send it as an\nempty array.\n\nAt least one top-level field must be set, otherwise the request\nis rejected with `400`. Unknown fields are also rejected with\n`400`.\n","properties":{"network":{"type":"object","description":"Replace the sandbox's egress rules. The sandbox must be in\nthe `active` state. The provided `allow_out` and `deny_out`\nlists fully replace whatever was previously configured.\n","properties":{"allow_out":{"type":"array","items":{"type":"string","uniqueKey":"network.allow_out.items.[INDEX]","typeLabel":"string"},"description":"CIDRs or domains to allow.","example":["api.openai.com","*.github.com","8.8.8.8/32"],"uniqueKey":"network.allow_out","typeLabel":"string[]"},"deny_out":{"type":"array","items":{"type":"string","uniqueKey":"network.deny_out.items.[INDEX]","typeLabel":"string"},"description":"CIDRs to deny. Use `0.0.0.0/0` to block all traffic not in `allow_out`.","example":["0.0.0.0/0"],"uniqueKey":"network.deny_out","typeLabel":"string[]"}},"uniqueKey":"network","typeLabel":"object"},"metadata":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"description":"Replace the sandbox's metadata tags. Fully replaces the existing\nmetadata — omitted keys are removed. Can be patched regardless of\nsandbox state. Same validation limits as on create (64 keys,\n256-byte keys, 2 KB values, 16 KB total).\n","uniqueKey":"metadata","typeLabel":"object"},"auto_delete_seconds":{"oneOf":[{"type":"integer","format":"int32","minimum":0,"maximum":2592000,"description":"Set or clear the garbage-collection window for the paused state.\nOnce the sandbox has been continuously paused for this many\nseconds it is deleted automatically. `0` deletes as soon as the\nsandbox pauses; `null` disables auto-delete. On an already-paused\nsandbox the deadline counts from this request, so the sandbox\ngets the full window. Maximum 2592000 (30 days).\n","uniqueKey":"auto_delete_seconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","minimum":0,"maximum":2592000,"description":"Set or clear the garbage-collection window for the paused state.\nOnce the sandbox has been continuously paused for this many\nseconds it is deleted automatically. `0` deletes as soon as the\nsandbox pauses; `null` disables auto-delete. On an already-paused\nsandbox the deadline counts from this request, so the sandbox\ngets the full window. Maximum 2592000 (30 days).\n","uniqueKey":"auto_delete_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"auto_delete_seconds","typeLabel":"integer\u003cint32> | null"},"timeout_seconds":{"oneOf":[{"type":"integer","format":"int32","minimum":1,"maximum":604800,"description":"Set or clear the auto-pause timeout. Same semantics as on\ncreate; `null` disables auto-pause. Evaluated against the\ncurrent active session, so lowering it below already-elapsed\ntime pauses the sandbox promptly. Maximum 604800 (7 days).\n","uniqueKey":"timeout_seconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","minimum":1,"maximum":604800,"description":"Set or clear the auto-pause timeout. Same semantics as on\ncreate; `null` disables auto-pause. Evaluated against the\ncurrent active session, so lowering it below already-elapsed\ntime pauses the sandbox promptly. Maximum 604800 (7 days).\n","uniqueKey":"timeout_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"timeout_seconds","typeLabel":"integer\u003cint32> | null"},"idle_timeout_seconds":{"oneOf":[{"type":"integer","format":"int32","minimum":60,"maximum":604800,"description":"Set or clear the idle timeout. Same semantics as on create;\n`null` disables idle pausing.\n","uniqueKey":"idle_timeout_seconds.oneOf.0","typeLabel":"integer\u003cint32>"},{"type":"null","format":"int32","minimum":60,"maximum":604800,"description":"Set or clear the idle timeout. Same semantics as on create;\n`null` disables idle pausing.\n","uniqueKey":"idle_timeout_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"idle_timeout_seconds","typeLabel":"integer\u003cint32> | null"},"preview_access":{"type":"string","enum":["public","private"],"description":"Set the default access for newly published ports and move a legacy\nsandbox to strict routing. Existing per-port modes are unchanged.\n`legacy_public` cannot be selected through the API.\n","uniqueKey":"preview_access","typeLabel":"enum\u003cstring>"}},"example":{"metadata":{"env":"prod","owner":"agent-7"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"metadata":{"env":"prod","owner":"agent-7"}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"cd20f4a2-65ce-41b3-a282-7b0674e794f0":{"description":"Patch applied","content":{"_mintlify/placeholder":{"schema":{"type":"object","description":""}}}},"d37416f2-015a-4255-8270-e75a4e2009aa":{"description":"Invalid request","content":{"application/json":{"schema":{"type":"object","description":"Error envelope. `error.code` is a stable, machine-readable identifier\n(e.g. `bad_request`, `not_found`, `conflict`, `sandbox_pausing`,\n`rate_limited`, `too_many_builds`, `too_many_templates`, `too_many_sandboxes`,\n`image_pull_failed`, `step_failed`, `snapshot_failed`,\n`start_cmd_failed`, `ready_cmd_failed`, `capacity_unavailable`,\n`build_timed_out`, `infrastructure_failed`, `build_failed`,\n`trial_exhausted`, `trial_unavailable`, `trial_check_unavailable`,\n`free_allowance_exhausted`, `sandbox_exceeds_plan_limits`,\n`billing_ineligible`).\n`error.message` is human-readable and may change between releases;\nclients should branch on `code`, not `message`.\n","properties":{"error":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"action_url":{"type":"string","format":"uri","example":"https://console.superserve.ai/plan-usage","description":"Where to resolve the error, when there is a next step. Sent with `trial_exhausted`, `trial_unavailable` and `trial_check_unavailable`: the page where the team adds a card and chooses a plan.\n","uniqueKey":"error.action_url","typeLabel":"string\u003curi>"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","action_url":"https://console.superserve.ai/plan-usage"}}}},"exampleType":"generated"}},"exampleType":"generated"},"53c2ac99-c7ce-4f41-9016-6037752530af":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"type":"object","description":"Error envelope. `error.code` is a stable, machine-readable identifier\n(e.g. `bad_request`, `not_found`, `conflict`, `sandbox_pausing`,\n`rate_limited`, `too_many_builds`, `too_many_templates`, `too_many_sandboxes`,\n`image_pull_failed`, `step_failed`, `snapshot_failed`,\n`start_cmd_failed`, `ready_cmd_failed`, `capacity_unavailable`,\n`build_timed_out`, `infrastructure_failed`, `build_failed`,\n`trial_exhausted`, `trial_unavailable`, `trial_check_unavailable`,\n`free_allowance_exhausted`, `sandbox_exceeds_plan_limits`,\n`billing_ineligible`).\n`error.message` is human-readable and may change between releases;\nclients should branch on `code`, not `message`.\n","properties":{"error":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"action_url":{"type":"string","format":"uri","example":"https://console.superserve.ai/plan-usage","description":"Where to resolve the error, when there is a next step. Sent with `trial_exhausted`, `trial_unavailable` and `trial_check_unavailable`: the page where the team adds a card and chooses a plan.\n","uniqueKey":"error.action_url","typeLabel":"string\u003curi>"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","action_url":"https://console.superserve.ai/plan-usage"}}}},"exampleType":"generated"}},"exampleType":"generated"},"41552fdc-3304-4ecd-a637-8cef9fb7a973":{"description":"Resource not found","content":{"application/json":{"schema":{"type":"object","description":"Error envelope. `error.code` is a stable, machine-readable identifier\n(e.g. `bad_request`, `not_found`, `conflict`, `sandbox_pausing`,\n`rate_limited`, `too_many_builds`, `too_many_templates`, `too_many_sandboxes`,\n`image_pull_failed`, `step_failed`, `snapshot_failed`,\n`start_cmd_failed`, `ready_cmd_failed`, `capacity_unavailable`,\n`build_timed_out`, `infrastructure_failed`, `build_failed`,\n`trial_exhausted`, `trial_unavailable`, `trial_check_unavailable`,\n`free_allowance_exhausted`, `sandbox_exceeds_plan_limits`,\n`billing_ineligible`).\n`error.message` is human-readable and may change between releases;\nclients should branch on `code`, not `message`.\n","properties":{"error":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"action_url":{"type":"string","format":"uri","example":"https://console.superserve.ai/plan-usage","description":"Where to resolve the error, when there is a next step. Sent with `trial_exhausted`, `trial_unavailable` and `trial_check_unavailable`: the page where the team adds a card and chooses a plan.\n","uniqueKey":"error.action_url","typeLabel":"string\u003curi>"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","action_url":"https://console.superserve.ai/plan-usage"}}}},"exampleType":"generated"}},"exampleType":"generated"},"50f17809-66d9-4b91-8ef8-e0cd0e23810a":{"description":"Operation conflicts with the resource's current state","content":{"application/json":{"schema":{"type":"object","description":"Error envelope. `error.code` is a stable, machine-readable identifier\n(e.g. `bad_request`, `not_found`, `conflict`, `sandbox_pausing`,\n`rate_limited`, `too_many_builds`, `too_many_templates`, `too_many_sandboxes`,\n`image_pull_failed`, `step_failed`, `snapshot_failed`,\n`start_cmd_failed`, `ready_cmd_failed`, `capacity_unavailable`,\n`build_timed_out`, `infrastructure_failed`, `build_failed`,\n`trial_exhausted`, `trial_unavailable`, `trial_check_unavailable`,\n`free_allowance_exhausted`, `sandbox_exceeds_plan_limits`,\n`billing_ineligible`).\n`error.message` is human-readable and may change between releases;\nclients should branch on `code`, not `message`.\n","properties":{"error":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"action_url":{"type":"string","format":"uri","example":"https://console.superserve.ai/plan-usage","description":"Where to resolve the error, when there is a next step. Sent with `trial_exhausted`, `trial_unavailable` and `trial_check_unavailable`: the page where the team adds a card and chooses a plan.\n","uniqueKey":"error.action_url","typeLabel":"string\u003curi>"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","action_url":"https://console.superserve.ai/plan-usage"}}}},"exampleType":"generated"}},"exampleType":"generated"},"66d6e093-0c2e-421a-959d-9507e56c2c46":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","description":"Error envelope. `error.code` is a stable, machine-readable identifier\n(e.g. `bad_request`, `not_found`, `conflict`, `sandbox_pausing`,\n`rate_limited`, `too_many_builds`, `too_many_templates`, `too_many_sandboxes`,\n`image_pull_failed`, `step_failed`, `snapshot_failed`,\n`start_cmd_failed`, `ready_cmd_failed`, `capacity_unavailable`,\n`build_timed_out`, `infrastructure_failed`, `build_failed`,\n`trial_exhausted`, `trial_unavailable`, `trial_check_unavailable`,\n`free_allowance_exhausted`, `sandbox_exceeds_plan_limits`,\n`billing_ineligible`).\n`error.message` is human-readable and may change between releases;\nclients should branch on `code`, not `message`.\n","properties":{"error":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","uniqueKey":"error.message","typeLabel":"string"},"action_url":{"type":"string","format":"uri","example":"https://console.superserve.ai/plan-usage","description":"Where to resolve the error, when there is a next step. Sent with `trial_exhausted`, `trial_unavailable` and `trial_check_unavailable`: the page where the team adds a card and chooses a plan.\n","uniqueKey":"error.action_url","typeLabel":"string\u003curi>"}},"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","action_url":"https://console.superserve.ai/plan-usage"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"a2583e3c-7b42-4d6b-9a1b-2f0dc63e8931":{"apiKey":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"apiKey"}}},"servers":{"eb91a4a7-8bbd-4253-a460-75e66def9932":{"url":"https://api.superserve.ai","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"apiKey","in":"header","name":"X-API-Key","scopes":[],"schemeName":"apiKey"},"schema":{"title":"X-API-Key","type":"string","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"apiKey","name":"X-API-Key"}],"title":"apiKey"}]},"originalFileLocation":"https://api.superserve.ai/openapi.yaml"},"subdomain":"superserve-ai-superserve-33","siteName":"Superserve","title":"Partially update a running sandbox - Superserve","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-07T07:17:05.605Z","originalFileLocation":"api-reference/sandboxes/partially-update-a-running-sandbox.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";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=\"Applies a partial update to a running sandbox. Each top-level field in the request body is optional; only fields that are present are applied. Omitted top-level fields are left unchanged. Nested objects are full replacements when present — to clear a list, send it as an empty array. At least one top-level field must be present, otherwise the request is rejected with 400. Unknown top-level fields are also rejected with 400 so typos surface as errors instead of silent no-ops. ## Currently patchable fields - network — replaces the egress allow/deny rules. The sandbox must be in the active state; patching a paused sandbox returns 409. Rules take effect immediately and are persisted so they survive a future pause/resume cycle. - metadata — replaces the sandbox\u0026#x27;s metadata tags. Can be updated regardless of sandbox state (active, paused). - auto_delete_seconds — sets or clears (null) the garbage-collection window for the paused state. Can be updated regardless of sandbox state. When applied to an already-paused sandbox, the deletion deadline counts from the moment of this request — never retroactively from when the sandbox paused — so you always get the full window. - timeout_seconds — sets or clears (null) the auto-pause timeout. Can be updated regardless of sandbox state; on a paused sandbox it applies to the next active session. The timeout is evaluated against the current active session, so lowering it below already-elapsed time pauses the sandbox promptly. - idle_timeout_seconds — sets or clears (null) the idle timeout. Can be updated regardless of sandbox state. - preview_access — sets the default access mode for ports published in the future. Existing per-port modes are unchanged. It also moves an older legacy_public sandbox to strict routing. legacy_public cannot be selected.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Superserve\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_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=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Partially update a running sandbox - Superserve\">\u003cmeta data-mint-head property=\"og:description\" content=\"Applies a partial update to a running sandbox. Each top-level field in the request body is optional; only fields that are present are applied. Omitted top-level fields are left unchanged. Nested objects are full replacements when present — to clear a list, send it as an empty array. At least one top-level field must be present, otherwise the request is rejected with 400. Unknown top-level fields are also rejected with 400 so typos surface as errors instead of silent no-ops. ## Currently patchable fields - network — replaces the egress allow/deny rules. The sandbox must be in the active state; patching a paused sandbox returns 409. Rules take effect immediately and are persisted so they survive a future pause/resume cycle. - metadata — replaces the sandbox\u0026#x27;s metadata tags. Can be updated regardless of sandbox state (active, paused). - auto_delete_seconds — sets or clears (null) the garbage-collection window for the paused state. Can be updated regardless of sandbox state. When applied to an already-paused sandbox, the deletion deadline counts from the moment of this request — never retroactively from when the sandbox paused — so you always get the full window. - timeout_seconds — sets or clears (null) the auto-pause timeout. Can be updated regardless of sandbox state; on a paused sandbox it applies to the next active session. The timeout is evaluated against the current active session, so lowering it below already-elapsed time pauses the sandbox promptly. - idle_timeout_seconds — sets or clears (null) the idle timeout. Can be updated regardless of sandbox state. - preview_access — sets the default access mode for ports published in the future. Existing per-port modes are unchanged. It also moves an older legacy_public sandbox to strict routing. legacy_public cannot be selected.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Superserve\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://superserve-ai-superserve-33.mintlify.site/_mintlify/api/og/v2?division=Sandboxes\u0026amp;title=Partially+update+a+running+sandbox\u0026amp;description=Applies+a+partial+update+to+a+running+sandbox.+Each+top-level+field%0Ain+the+request+body+is+optional%3B+only+fields+that+are+present+are%0Aapplied.+Omitted+top-level\u0026amp;theme=812d3aa274a9b09d054f08f6\u0026amp;signature=7e46515d8b2cdf059237488062b5a288eb75d073526df2458610c0a856a1f4a3\">\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=\"Partially update a running sandbox - Superserve\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Applies a partial update to a running sandbox. Each top-level field in the request body is optional; only fields that are present are applied. Omitted top-level fields are left unchanged. Nested objects are full replacements when present — to clear a list, send it as an empty array. At least one top-level field must be present, otherwise the request is rejected with 400. Unknown top-level fields are also rejected with 400 so typos surface as errors instead of silent no-ops. ## Currently patchable fields - network — replaces the egress allow/deny rules. The sandbox must be in the active state; patching a paused sandbox returns 409. Rules take effect immediately and are persisted so they survive a future pause/resume cycle. - metadata — replaces the sandbox\u0026#x27;s metadata tags. Can be updated regardless of sandbox state (active, paused). - auto_delete_seconds — sets or clears (null) the garbage-collection window for the paused state. Can be updated regardless of sandbox state. When applied to an already-paused sandbox, the deletion deadline counts from the moment of this request — never retroactively from when the sandbox paused — so you always get the full window. - timeout_seconds — sets or clears (null) the auto-pause timeout. Can be updated regardless of sandbox state; on a paused sandbox it applies to the next active session. The timeout is evaluated against the current active session, so lowering it below already-elapsed time pauses the sandbox promptly. - idle_timeout_seconds — sets or clears (null) the idle timeout. Can be updated regardless of sandbox state. - preview_access — sets the default access mode for ports published in the future. Existing per-port modes are unchanged. It also moves an older legacy_public sandbox to strict routing. legacy_public cannot be selected.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://superserve-ai-superserve-33.mintlify.site/_mintlify/api/og/v2?division=Sandboxes\u0026amp;title=Partially+update+a+running+sandbox\u0026amp;description=Applies+a+partial+update+to+a+running+sandbox.+Each+top-level+field%0Ain+the+request+body+is+optional%3B+only+fields+that+are+present+are%0Aapplied.+Omitted+top-level\u0026amp;theme=812d3aa274a9b09d054f08f6\u0026amp;signature=7e46515d8b2cdf059237488062b5a288eb75d073526df2458610c0a856a1f4a3\">\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=\"/mintlify-assets/_mintlify/favicons/superserve-ai-superserve-33/Ce0V87RVeZcleFb4/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Superserve\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#B2FAB4\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/sandboxes/partially-update-a-running-sandbox.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.superserve.ai/#organization\",\"name\":\"Superserve\",\"url\":\"https://docs.superserve.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/superserve-ai-superserve-33/G055TX3BjwXpQedU/logo.svg?fit=max\u0026auto=format\u0026n=G055TX3BjwXpQedU\u0026q=85\u0026s=69233fb550a17b81d7d7fa083ca7f3de\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.superserve.ai#website\",\"name\":\"Superserve\",\"url\":\"https://docs.superserve.ai\",\"publisher\":{\"@id\":\"https://docs.superserve.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox#webpage\",\"url\":\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox\",\"name\":\"Partially update a running sandbox\",\"description\":\"Applies a partial update to a running sandbox. Each top-level field in the request body is optional; only fields that are present are applied. Omitted top-level fields are left unchanged. Nested objects are full replacements when present — to clear a list, send it as an empty array. At least one top-level field must be present, otherwise the request is rejected with 400. Unknown top-level fields are also rejected with 400 so typos surface as errors instead of silent no-ops. ## Currently patchable fields - network — replaces the egress allow/deny rules. The sandbox must be in the active state; patching a paused sandbox returns 409. Rules take effect immediately and are persisted so they survive a future pause/resume cycle. - metadata — replaces the sandbox's metadata tags. Can be updated regardless of sandbox state (active, paused). - auto_delete_seconds — sets or clears (null) the garbage-collection window for the paused state. Can be updated regardless of sandbox state. When applied to an already-paused sandbox, the deletion deadline counts from the moment of this request — never retroactively from when the sandbox paused — so you always get the full window. - timeout_seconds — sets or clears (null) the auto-pause timeout. Can be updated regardless of sandbox state; on a paused sandbox it applies to the next active session. The timeout is evaluated against the current active session, so lowering it below already-elapsed time pauses the sandbox promptly. - idle_timeout_seconds — sets or clears (null) the idle timeout. Can be updated regardless of sandbox state. - preview_access — sets the default access mode for ports published in the future. Existing per-port modes are unchanged. It also moves an older legacy_public sandbox to strict routing. legacy_public cannot be selected.\",\"dateModified\":\"2026-11-07T07:17:05.605Z\",\"isPartOf\":{\"@id\":\"https://docs.superserve.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Sandboxes\",\"item\":\"https://docs.superserve.ai/api-reference/sandboxes/list-all-sandboxes\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Partially update a running sandbox\",\"item\":\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox#apireference\",\"headline\":\"Partially update a running sandbox\",\"name\":\"Partially update a running sandbox\",\"description\":\"Applies a partial update to a running sandbox. Each top-level field in the request body is optional; only fields that are present are applied. Omitted top-level fields are left unchanged. Nested objects are full replacements when present — to clear a list, send it as an empty array. At least one top-level field must be present, otherwise the request is rejected with 400. Unknown top-level fields are also rejected with 400 so typos surface as errors instead of silent no-ops. ## Currently patchable fields - network — replaces the egress allow/deny rules. The sandbox must be in the active state; patching a paused sandbox returns 409. Rules take effect immediately and are persisted so they survive a future pause/resume cycle. - metadata — replaces the sandbox's metadata tags. Can be updated regardless of sandbox state (active, paused). - auto_delete_seconds — sets or clears (null) the garbage-collection window for the paused state. Can be updated regardless of sandbox state. When applied to an already-paused sandbox, the deletion deadline counts from the moment of this request — never retroactively from when the sandbox paused — so you always get the full window. - timeout_seconds — sets or clears (null) the auto-pause timeout. Can be updated regardless of sandbox state; on a paused sandbox it applies to the next active session. The timeout is evaluated against the current active session, so lowering it below already-elapsed time pauses the sandbox promptly. - idle_timeout_seconds — sets or clears (null) the idle timeout. Can be updated regardless of sandbox state. - preview_access — sets the default access mode for ports published in the future. Existing per-port modes are unchanged. It also moves an older legacy_public sandbox to strict routing. legacy_public cannot be selected.\",\"url\":\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox\",\"mainEntityOfPage\":{\"@id\":\"https://docs.superserve.ai/api-reference/sandboxes/partially-update-a-running-sandbox#webpage\"},\"dateModified\":\"2026-11-07T07:17:05.605Z\",\"publisher\":{\"@id\":\"https://docs.superserve.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.superserve.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Superserve\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Superserve","nav":{"global":null,"anchors":[{"anchor":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":"/introduction"}]},{"anchor":"SDK Reference","icon":"code","pages":[{"title":"SDK Reference","href":"/sdk-reference/sandbox"}]},{"anchor":"REST API","icon":"server","groups":[{"group":"Sandboxes","pages":[{"title":"List all sandboxes","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /sandboxes","href":"/api-reference/sandboxes/list-all-sandboxes"},{"title":"Create a new sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes","href":"/api-reference/sandboxes/create-a-new-sandbox"},{"title":"Get a sandbox by ID","description":null,"deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /sandboxes/{sandbox_id}","href":"/api-reference/sandboxes/get-a-sandbox-by-id"},{"title":"Partially update a running sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml patch /sandboxes/{sandbox_id}","href":"/api-reference/sandboxes/partially-update-a-running-sandbox"},{"title":"Delete a sandbox","description":null,"deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /sandboxes/{sandbox_id}","href":"/api-reference/sandboxes/delete-a-sandbox"},{"title":"Pause a running sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes/{sandbox_id}/pause","href":"/api-reference/sandboxes/pause-a-running-sandbox"},{"title":"Resume a paused sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes/{sandbox_id}/resume","href":"/api-reference/sandboxes/resume-a-paused-sandbox"},{"title":"Activate a sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes/{sandbox_id}/activate","href":"/api-reference/sandboxes/activate-a-sandbox"},{"title":"List a sandbox's egress activity","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /sandboxes/{sandbox_id}/network","href":"/api-reference/sandboxes/list-a-sandboxs-egress-activity"},{"title":"List published preview ports","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /sandboxes/{sandbox_id}/preview-ports","href":"/api-reference/sandboxes/list-published-preview-ports"},{"title":"Publish or update a preview port","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes/{sandbox_id}/preview-ports","href":"/api-reference/sandboxes/publish-or-update-a-preview-port"},{"title":"Unpublish a preview port","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /sandboxes/{sandbox_id}/preview-ports/{port}","href":"/api-reference/sandboxes/unpublish-a-preview-port"},{"title":"Mint a token for a private preview port","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes/{sandbox_id}/preview-ports/{port}/token","href":"/api-reference/sandboxes/mint-a-token-for-a-private-preview-port"},{"title":"Rotate a private preview port's token generation","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes/{sandbox_id}/preview-ports/{port}/token/rotate","href":"/api-reference/sandboxes/rotate-a-private-preview-ports-token-generation"}]},{"group":"Snapshots","pages":[{"title":"Snapshot a sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes/{sandbox_id}/snapshot","href":"/api-reference/snapshots/snapshot-a-sandbox"},{"title":"List a sandbox's snapshots","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /sandboxes/{sandbox_id}/snapshots","href":"/api-reference/snapshots/list-a-sandboxs-snapshots"},{"title":"Get a snapshot","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /snapshots/{snapshot_id}","href":"/api-reference/snapshots/get-a-snapshot"},{"title":"Rename a snapshot","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml patch /snapshots/{snapshot_id}","href":"/api-reference/snapshots/rename-a-snapshot"},{"title":"Delete a snapshot","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /snapshots/{snapshot_id}","href":"/api-reference/snapshots/delete-a-snapshot"}]},{"group":"Exec","pages":[{"title":"Run a command and wait for it to finish","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /exec","href":"/api-reference/exec/run-a-command-and-wait-for-it-to-finish"},{"title":"Run a command and stream output over SSE","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /exec/stream","href":"/api-reference/exec/run-a-command-and-stream-output-over-sse"},{"title":"Run a command over a WebSocket","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /exec/connect","href":"/api-reference/exec/run-a-command-over-a-websocket"}]},{"group":"Files","pages":[{"title":"List a directory inside a sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /sandboxes/{sandbox_id}/files","href":"/api-reference/files/list-a-directory-inside-a-sandbox"},{"title":"Read a file from a sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /files","href":"/api-reference/files/read-a-file-from-a-sandbox"},{"title":"Write a file to a sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /files","href":"/api-reference/files/write-a-file-to-a-sandbox"}]},{"group":"Templates","pages":[{"title":"List templates visible to the caller","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /templates","href":"/api-reference/templates/list-templates-visible-to-the-caller"},{"title":"Create a template and kick off the first build","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /templates","href":"/api-reference/templates/create-a-template-and-kick-off-the-first-build"},{"title":"Get a template by ID","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /templates/{template_id}","href":"/api-reference/templates/get-a-template-by-id"},{"title":"Delete a template","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /templates/{template_id}","href":"/api-reference/templates/delete-a-template"},{"title":"List recent builds for a template","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /templates/{template_id}/builds","href":"/api-reference/templates/list-recent-builds-for-a-template"},{"title":"Rebuild an existing template","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /templates/{template_id}/builds","href":"/api-reference/templates/rebuild-an-existing-template"},{"title":"Get a build by ID","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /templates/{template_id}/builds/{build_id}","href":"/api-reference/templates/get-a-build-by-id"},{"title":"Cancel an in-flight build","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /templates/{template_id}/builds/{build_id}","href":"/api-reference/templates/cancel-an-in-flight-build"},{"title":"Stream build logs via SSE","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /templates/{template_id}/builds/{build_id}/logs","href":"/api-reference/templates/stream-build-logs-via-sse"}]},{"group":"Secrets","pages":[{"title":"Create a secret","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /secrets","href":"/api-reference/secrets/create-a-secret"},{"title":"List secrets for the calling team","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /secrets","href":"/api-reference/secrets/list-secrets-for-the-calling-team"},{"title":"Get a secret's metadata","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /secrets/{name}","href":"/api-reference/secrets/get-a-secrets-metadata"},{"title":"Rotate a secret's value","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml patch /secrets/{name}","href":"/api-reference/secrets/rotate-a-secrets-value"},{"title":"Revoke a secret","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /secrets/{name}","href":"/api-reference/secrets/revoke-a-secret"},{"title":"Attach a secret to a sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /sandboxes/{sandbox_id}/secrets","href":"/api-reference/sandboxes/attach-a-secret-to-a-sandbox"},{"title":"Detach a secret from a sandbox","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /sandboxes/{sandbox_id}/secrets/{env_key}","href":"/api-reference/sandboxes/detach-a-secret-from-a-sandbox"},{"title":"List proxy egress events that used this credential","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /secrets/{name}/audit","href":"/api-reference/secrets/list-proxy-egress-events-that-used-this-credential"},{"title":"List sandboxes currently bound to this credential","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /secrets/{name}/sandboxes","href":"/api-reference/secrets/list-sandboxes-currently-bound-to-this-credential"},{"title":"List the built-in provider shortcut catalog","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /providers","href":"/api-reference/secrets/list-the-built-in-provider-shortcut-catalog"}]},{"group":"Team Management","pages":[{"title":"Rename a team","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml patch /teams/{team_id}","href":"/api-reference/rbac/rename-a-team"},{"title":"List team members","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /teams/{team_id}/members","href":"/api-reference/rbac/list-team-members"},{"title":"Add or invite a team member","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /teams/{team_id}/members","href":"/api-reference/rbac/add-or-invite-a-team-member"},{"title":"Deactivate a team member","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /teams/{team_id}/members/{user_id}","href":"/api-reference/rbac/deactivate-a-team-member"},{"title":"List team role assignments","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /teams/{team_id}/roles","href":"/api-reference/rbac/list-team-role-assignments"},{"title":"Assign a team role","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /teams/{team_id}/roles","href":"/api-reference/rbac/assign-a-team-role"},{"title":"Revoke a team role","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml delete /teams/{team_id}/roles/{assignment_id}","href":"/api-reference/rbac/revoke-a-team-role"},{"title":"List team invitations","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /teams/{team_id}/invitations","href":"/api-reference/rbac/list-team-invitations"},{"title":"Invite an owner","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /teams/{team_id}/invitations","href":"/api-reference/rbac/invite-an-owner"},{"title":"Resend a team invitation","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /teams/{team_id}/invitations/{invitation_id}/resend","href":"/api-reference/rbac/resend-a-team-invitation"},{"title":"Revoke a team invitation","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /teams/{team_id}/invitations/{invitation_id}/revoke","href":"/api-reference/rbac/revoke-a-team-invitation"},{"title":"Report invitation email delivery","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /teams/{team_id}/invitations/{invitation_id}/delivery","href":"/api-reference/rbac/report-invitation-email-delivery"},{"title":"Leave a team","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml post /teams/{team_id}/leave","href":"/api-reference/rbac/leave-a-team"}]},{"group":"Activity","pages":[{"title":"List team audit-log activity","deprecated":null,"version":null,"openapi":"https://api.superserve.ai/openapi.yaml get /activity","href":"/api-reference/activity/list-team-audit-log-activity"}]}]},{"anchor":"Integrations","icon":"puzzle-piece","pages":[{"title":"Integrations","href":"/integrations/overview"}]}]},"basePath":"","title":"Partially update a running sandbox - Superserve","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-BUDYNlhG.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}