Reserve one workspace-owned run and all requested copies atomically. The existing
launch request fields select exactly one catalog agent or inline manifest; copies
is required. Acceptance returns 202 with a Location for metadata polling and makes
no provider create before the executor claims each copy. Reuse the same
Idempotency-Key and identical body to recover an uncertain acceptance; a changed
body conflicts and never creates another run.
Credential selectors are resolved at each copy claim. Secret values and provider
tokens are never stored. Saved secrets are re-read by name, so rotation can affect
later copies. Inline secret_values, interactive launches, and unsupported manifest
features are refused before reservation. The feature remains opt-in until compatible
clients are released.
BoxRouter API key; never an upstream provider key.
Headers
Idempotency-Key
string
required
Unique identifier for this logical launch. Reuse it with the identical body to reconcile an uncertain response.
Required string length: 1 - 128
Pattern: ^[^\u0000]+$
Body
application/json
Option 1
Option 2
One unattended launch run. Uses the canonical launch request fields and requires copies; request-only credential values are refused by the server before reservation.
agent
string
required
Required string length: 1 - 63
Pattern: ^[a-z][a-z0-9-]{0,62}$
copies
integer
required
Number of independently managed copies to reserve atomically.
Required range: x >= 1
privacy
object
Privacy floors for the sandbox created by this launch. Cloud carries this policy unchanged into deferred sandbox materialization.
Show child attributes
manifest
object
A complete inline agent manifest or a source wrapper whose command can come from the referenced file.
Option 1
Option 2
Show child attributes
overrides
object
Show child attributes
additional_secret_refs
object
Show child attributes
credential_delivery
enum<string>
default:prefer_native
Whether compatible environment fallback is allowed or protected delivery is required.
Available options:
prefer_native,
require_native
run
object
Optional client supplied batch metadata. Each launch remains independent; the server stores the values on its launch operation, labels the sandbox group and copy, and echoes this object in the successful Launch result. The server does not check group completeness.
Show child attributes
registry_credentials
object
Request-only login for a manifest whose image is {private_oci}; required with it and
refused without it. Both strings are non-empty, at most 64 KiB UTF-8 bytes together.
It is passed to the provider to set up a copy of the image and is never stored,
logged, traced or returned. Not accepted by unattended launch runs.
Show child attributes
secret_values
object
Request-only secret values for names declared by the resolved manifest. Unknown
names are invalid_request. The server enforces request size limits outside JSON
Schema validation. Values are never stored, returned or logged.
Show child attributes
Response
Run and all copy rows were durably accepted, or recovered by idempotency key.
Plain metadata-only run response. It contains neither command observations nor output fields; GET is a provider-free read unless include=command is explicitly selected.
id
string
required
Minimum string length: 1
agent_name
string | null
required
Manifest name of the resolved catalog agent or inline manifest stored with the run; null when the stored run has none. No other launch request or manifest data is returned.
Minimum string length: 1
copies
integer
required
Required range: x >= 1
desired_state
enum<string>
required
Available options:
running,
stopped
created_at
string<date-time>
required
items
object[]
required
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"BoxRouter","description":"Run sandboxes, coding agents, and GitHub Actions jobs on any provider through one API.","colors":{"primary":"#047857","light":"#6ee7b7","dark":"#10b981"},"logo":{"light":"https://mintcdn.com/nv-4965711d/xqQLsJs3vPQQ6w_V/brand-mark.svg?fit=max\u0026auto=format\u0026n=xqQLsJs3vPQQ6w_V\u0026q=85\u0026s=34456eec220b466fd4503f478e120e5b","dark":"https://mintcdn.com/nv-4965711d/xqQLsJs3vPQQ6w_V/brand-mark.svg?fit=max\u0026auto=format\u0026n=xqQLsJs3vPQQ6w_V\u0026q=85\u0026s=34456eec220b466fd4503f478e120e5b","href":"https://boxrouter.ai/"},"favicon":"https://mintcdn.com/nv-4965711d/QLfzpIkb_yuLLqxB/tab-icon.svg?fit=max\u0026auto=format\u0026n=QLfzpIkb_yuLLqxB\u0026q=85\u0026s=768e4d931174b769c852362ed31f7768","api":{"playground":{"display":"none"}},"appearance":{"default":"dark","strict":false},"background":{"color":{"light":"#ffffff","dark":"#03080a"}},"navbar":{"links":[{"href":"https://boxrouter.ai/benchmarks","label":"Benchmarks"},{"href":"/","label":"Docs"}],"primary":{"type":"button","label":"Sign In","href":"https://boxrouter.ai/?return_to=%2Fdashboard"}},"footer":{"links":[{"header":"Company","items":[{"label":"Terms of Service","href":"https://boxrouter.ai/terms"},{"label":"Privacy Policy","href":"https://boxrouter.ai/privacy"},{"label":"Refund Policy","href":"https://boxrouter.ai/refunds"}]},{"header":"Developer","items":[{"label":"Docs","href":"https://boxrouter.ai/docs"},{"label":"Support","href":"https://boxrouter.ai/support"},{"label":"Security","href":"https://boxrouter.ai/security"},{"label":"Service Providers","href":"https://boxrouter.ai/subprocessors"}]},{"header":"Product","items":[{"label":"Dashboard","href":"https://boxrouter.ai/dashboard"},{"label":"Benchmarks","href":"https://boxrouter.ai/benchmarks"}]},{"header":"Connect","items":[{"label":"Contact Us","href":"https://boxrouter.ai/feedback?topic=docs\u0026from=docs"},{"label":"Book a Call","href":"https://calendly.com/andre-boxrouter/boxrouter-intro-call"},{"label":"X","href":"https://x.com/boxrouter_ai"},{"label":"LinkedIn","href":"https://www.linkedin.com/company/boxrouter"},{"label":"Discord","href":"https://discord.gg/3tRbPUJ2bZ"}]}]},"styling":{"codeblocks":{"theme":"css-variables"},"latex":false},"contextual":{"options":["copy","view"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"nv-4965711d","hasAudioNarration":false,"actualSubdomain":"nv-4965711d","customDomains":["boxrouter.ai"],"gitSource":{"type":"github","owner":"boxrouter","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6ae62c8bfb7ed7cff8d909d4"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6af9ce26f845026aa4bf2673","clientVersion":"0.0.4143","searchFilterCounts":[{"language":"default","tag":"API Reference","count":145},{"language":"default","tag":"GitHub Actions","count":34},{"language":"default","tag":"Guides","count":28},{"language":"default","tag":"Credits and Billing","count":24},{"language":"default","tag":"Sandboxes","count":20},{"language":"default","tag":"Volumes","count":15},{"language":"default","tag":"Agents","count":12},{"language":"default","tag":"Files","count":10},{"language":"default","tag":"Provider Accounts","count":8},{"language":"default","tag":"Launch an Agent","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"/docs","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","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":"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":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"docs-search.css","content":".bxs-dialog{--bxs-bg: #071114;--bxs-line: rgba(252, 252, 254, 0.12);--bxs-text: #eef2f3;--bxs-muted: #a3b0b4;--bxs-accent-text: #6ee7b7;--bxs-focus: rgba(252, 252, 254, 0.6);--bxs-hover: rgba(252, 252, 254, 0.08);position:fixed;inset:10vh 0 auto;width:min(640px, calc(100vw - 24px));max-width:none;max-height:80dvh;margin:0 auto;padding:0;overflow:hidden;color:var(--bxs-text);background:var(--bxs-bg);border:1px solid var(--bxs-line);border-radius:14px;box-shadow:0 24px 64px rgba(0, 0, 0, 0.6);font-family:var(--site-font, inherit)}.bxs-dialog::backdrop{background:rgba(3, 8, 10, 0.72)}.bxs-dialog[open]{display:flex;flex-direction:column}.bxs-panel{display:flex;flex-direction:column;min-height:0;max-height:80dvh}.bxs-sr{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.bxs-head{display:flex;align-items:center;gap:10px;padding:0 12px 0 16px;border-bottom:1px solid var(--bxs-line)}.bxs-icon{flex:none;width:18px;height:18px;color:var(--bxs-muted)}.bxs-input{flex:1;min-width:0;height:56px;padding:0;color:var(--bxs-text);background:transparent;border:0;border-radius:6px;font-size:16px;outline:none}.bxs-input::placeholder{color:var(--bxs-muted)}.bxs-input:focus,.bxs-input:focus-visible{outline:none}.bxs-head:focus-within{box-shadow:inset 0 -2px 0 var(--bxs-focus)}.bxs-close{flex:none;min-width:44px;height:32px;padding:0 8px;color:var(--bxs-muted);background:transparent;border:1px solid var(--bxs-line);border-radius:6px;font-size:12px;font-weight:600;cursor:pointer}.bxs-close:hover{color:var(--bxs-text);border-color:rgba(252, 252, 254, 0.3)}.bxs-close:focus-visible,.bxs-option:focus-visible{outline:2px solid var(--bxs-focus);outline-offset:2px}.bxs-close-x{display:none;font-size:20px;line-height:1}.bxs-status{margin:0;padding:12px 16px 6px;color:var(--bxs-muted);font-size:12px;font-weight:600}.bxs-list{flex:1;min-height:0;padding:4px 8px 8px;overflow-y:auto;overscroll-behavior:contain}.bxs-list[hidden]{display:none}.bxs-option{position:relative;display:block;padding:10px 12px 10px 14px;color:inherit;border-radius:8px;text-decoration:none;scroll-margin:8px}.bxs-option[aria-selected=\"true\"],.bxs-fallback .bxs-option:hover{background:var(--bxs-hover)}.bxs-option[aria-selected=\"true\"]::before{content:\"\";position:absolute;inset:8px auto 8px 0;width:3px;background:var(--bxs-focus);border-radius:2px}.bxs-option .bxs-title{display:block;font-size:15px;font-weight:600;line-height:1.4}.bxs-crumb{display:block;margin-top:1px;color:var(--bxs-muted);font-size:12px;line-height:1.5}.bxs-crumb:empty{display:none}.bxs-snippet{margin-top:4px;color:var(--bxs-muted);font-size:13px;line-height:1.5;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}.bxs-snippet:empty{display:none}.bxs-mark{color:var(--bxs-accent-text);background:transparent;font-weight:700}.bxs-foot{display:flex;margin:0;padding:8px 16px;color:var(--bxs-muted);border-top:1px solid var(--bxs-line);font-size:12px}@media (max-width: 640px){.bxs-dialog{inset:12px 0 auto;max-height:calc(100dvh - 24px)}.bxs-panel{max-height:calc(100dvh - 24px)}.bxs-close{min-width:44px;height:44px;border:0}.bxs-close-label,.bxs-foot{display:none}.bxs-close-x{display:inline}.bxs-option{padding-block:12px}}"},{"filePath":"style.css","content":"@font-face{font-family:\"Plus Jakarta Sans\";font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/plus-jakarta-sans-basic.woff2) format(\"woff2\");unicode-range:U+0020-007E, U+00A0-00FF, U+2013-2014, U+2019, U+201C-201D, U+2022, U+2026, U+203A, U+2190-2193, U+2197, U+2212, U+2248, U+2264-2265, U+24D8, U+25B4, U+25BE, U+25CB, U+25CC, U+25CF, U+2713, U+2715}@font-face{font-family:\"Plus Jakarta Sans\";font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/plus-jakarta-sans-cyrillic-ext.woff2) format(\"woff2\");unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F}@font-face{font-family:\"Plus Jakarta Sans\";font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/plus-jakarta-sans-vietnamese.woff2) format(\"woff2\");unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB}@font-face{font-family:\"Plus Jakarta Sans\";font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/plus-jakarta-sans-latin-ext.woff2) format(\"woff2\");unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}@font-face{font-family:\"Plus Jakarta Sans\";font-style:normal;font-weight:400 800;font-display:swap;src:url(/fonts/plus-jakarta-sans-latin.woff2) format(\"woff2\");unicode-range:U+0000-001F, U+007F-009F, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-2012, U+2015-2018, U+201A-201B, U+201E-201F, U+2023-2025, U+2027-2039, U+203B-206F, U+20AC, U+2122, U+2215, U+FEFF, U+FFFD}body{word-spacing:0.1em}pre,code{word-spacing:normal}:root{--heading-text: #fcfcfef2;--lead-gap: 32px;--hairline: #e2ecef1a;--hairline-width: 1px}html{font-feature-settings:normal}body.antialiased,.antialiased{-webkit-font-smoothing:auto;-moz-osx-font-smoothing:auto}:root{--site-font: \"Plus Jakarta Sans\", -apple-system, BlinkMacSystemFont, \"Plus Jakarta Sans Fallback Segoe UI\", \"Segoe UI\", \"Plus Jakarta Sans Fallback DejaVu Sans\", \"Plus Jakarta Sans Fallback Roboto\", sans-serif}body,button,input,h1,h2,h3,h4,h5,h6{font-family:var(--site-font)!important}#navbar .max-w-8xl{max-width:none}#navbar .h-16{height:56px;margin:0;padding:0}#navbar .h-16>.border-b{padding:0 24px}#navbar .nav-tabs{margin-left:4px}#navbar>div>div>div.lg\\:flex.px-12,#navbar .hidden.lg\\:flex.px-12.h-12{padding-left:28px;padding-right:28px}#navbar a:has(>.nav-logo){display:inline-flex;align-items:center;gap:4px;margin-left:4px;color:var(--bx-fg);text-decoration:none}#navbar .nav-logo{width:40px;height:40px}#navbar a:has(>.nav-logo)::after{content:\"BoxRouter\";font-family:var(--site-font);font-size:20px;font-weight:600;letter-spacing:-0.5px;line-height:1;white-space:nowrap}#navbar nav[aria-label=\"Main\"] ul{gap:4px}#navbar nav[aria-label=\"Main\"] ul>li{margin:0!important}#navbar nav[aria-label=\"Main\"] ul>li.navbar-link>a{height:32px;padding:0 8px;border-radius:6px;color:var(--bx-site-muted);font-size:14px;font-weight:500;line-height:1.625;word-spacing:0.1em;transition:color 0.15s, background-color 0.15s}#navbar nav[aria-label=\"Main\"] ul>li.navbar-link>a:hover{color:var(--bx-link);background-color:var(--bx-accent-wash)}#navbar nav[aria-label=\"Main\"] ul>li.navbar-link>a:not([href^=\"https:\"]){color:var(--bx-fg)}#navbar #topbar-cta-button{margin-left:8px!important}#navbar #topbar-cta-button a{justify-content:center;height:32px;min-width:100px;padding:0 12px;line-height:1.625;word-spacing:0.1em}#navbar #topbar-cta-button a>span.absolute{border-radius:6px;background:#10b981}#navbar #topbar-cta-button a:hover>span.absolute{opacity:1;background:#10b981e0}#navbar #topbar-cta-button a .text-white{color:#03080a;font-weight:500}#navbar #topbar-cta-button a svg{display:none}#navbar .ml-auto>div:empty{display:none}#navbar .h-16>.border-b>.ml-auto{gap:4px}#navbar .h-16>.border-b>.ml-auto>*{margin:0!important}#navbar .ml-auto>div:has(>#theme-preference-menu-trigger){order:-1}@media (max-width: 1023px){#navbar .h-16>.border-b{gap:4px;padding:0 16px}#navbar .h-16>.border-b>.ml-auto{display:flex;flex:none;order:2}#navbar .h-16>.border-b>.ml-auto nav li:not(#topbar-cta-button){display:none}#navbar #topbar-cta-button{display:flex;margin-left:0!important}#navbar .h-16>.border-b>.lg\\:hidden{display:contents}#navbar #search-bar-entry-mobile{flex:none;order:1}#navbar .h-16>.border-b>.lg\\:hidden>:last-child{flex:none;order:3}}@media (max-width: 360px){#navbar .nav-logo{width:36px;height:36px}#navbar a:has(>.nav-logo){gap:3.6px}#navbar a:has(>.nav-logo)::after{font-size:18px}#navbar #topbar-cta-button a{min-width:0;padding:0 10px}#navbar #search-bar-entry-mobile{display:none!important}#navbar #theme-preference-menu-trigger{width:28px;padding-inline:6px}}#navbar nav[aria-label=\"Main\"]{margin-right:0!important}:root{--bx-bg: #ffffff;--bx-raised: #f6f8f7;--bx-raised-2: #eef2f0;--bx-line: #0b121014;--bx-line-strong: #0b121026;--bx-fg: #0b1210;--bx-body: #0b1210c9;--bx-muted: #0b1210a6;--bx-site-muted: var(--bx-muted);--bx-faint: #0b121057;--bx-accent: #10b981;--bx-link: #046c4f;--bx-accent-ink: #062a1e;--bx-accent-wash: #10b98110;--bx-accent-line: #05966973;--bx-warn: #b45309;--bx-warn-wash: #f59e0b0f;--bx-warn-line: #d9770652;--bx-font-mono: ui-monospace, \"SF Mono\", SFMono-Regular, Menlo, Consolas, monospace;--bx-code-background: var(--bx-raised);--bx-code-foreground: #1f2725;--bx-code-token-constant: #1f2725;--bx-code-token-string: #985a12;--bx-code-token-comment: #0b1210a3;--bx-code-token-keyword: #047857;--bx-code-token-parameter: #1f2725;--bx-code-token-function: #0b1210;--bx-code-token-string-expression: #985a12;--bx-code-token-punctuation: #1f2725;--bx-code-token-link: #047857}html:not(.dark){--heading-text: #0b1210f2;--hairline: #0b12101a}html.dark{--bx-bg: #03080a;--bx-raised: #0a1013;--bx-raised-2: #0f171a;--bx-line: #fcfcfe14;--bx-line-strong: #fcfcfe26;--bx-fg: #fcfcfe;--bx-body: #fcfcfec7;--bx-muted: #fcfcfe96;--bx-site-muted: #fcfcfea0;--bx-faint: #fcfcfe52;--bx-link: #6ee7b7;--bx-accent-ink: #03080a;--bx-accent-wash: #10b98112;--bx-accent-line: #10b98166;--bx-warn: #fbbf24;--bx-warn-wash: #fbbf240a;--bx-warn-line: #fbbf2447;--bx-code-foreground: #d9dfdd;--bx-code-token-constant: #d9dfdd;--bx-code-token-string: #e8cf9f;--bx-code-token-comment: #fcfcfe8f;--bx-code-token-keyword: #6ee7b7;--bx-code-token-parameter: #d9dfdd;--bx-code-token-function: #fcfcfe;--bx-code-token-string-expression: #e8cf9f;--bx-code-token-punctuation: #d9dfdd;--bx-code-token-link: #6ee7b7}#content :is(.code-block,.code-group,.bx-output){--mint-background: var(--bx-code-background);--mint-foreground: var(--bx-code-foreground);--mint-token-constant: var(--bx-code-token-constant);--mint-token-string: var(--bx-code-token-string);--mint-token-comment: var(--bx-code-token-comment);--mint-token-keyword: var(--bx-code-token-keyword);--mint-token-parameter: var(--bx-code-token-parameter);--mint-token-function: var(--bx-code-token-function);--mint-token-string-expression: var(--bx-code-token-string-expression);--mint-token-punctuation: var(--bx-code-token-punctuation);--mint-token-link: var(--bx-code-token-link)}:focus-visible{outline:2px solid var(--bx-link);outline-offset:2px}#navbar .border-b{border-color:var(--bx-line)!important}#navbar #search-bar-entry{border-color:var(--bx-line)!important;background:var(--bx-raised)!important;border-radius:6px!important;color:var(--bx-muted)!important}#navbar #search-bar-entry:hover{border-color:var(--bx-line-strong)!important}#navbar .nav-tabs a,#navbar [data-component-part=\"nav-tabs-item\"]{font-size:14px;font-weight:500}#navbar .nav-tabs-item,#navbar .nav-tabs-item>div{color:var(--bx-muted)}#navbar .nav-tabs-item[data-active=\"true\"]>div,#navbar .nav-tabs-item:hover>div{color:var(--bx-fg)!important}#navbar .nav-tabs-item>div>div:last-child,#navbar .nav-tabs-item [class*=\"bg-primary\"]{background:var(--bx-accent)!important}#sidebar .sidebar-group-header{color:var(--heading-text)!important;font-size:13px;line-height:20px;font-weight:600}#sidebar .sidebar-group li>a{border-radius:6px!important;font-size:14px;line-height:20px;color:var(--bx-muted)!important}#sidebar .sidebar-group li>a:hover{color:var(--bx-fg)!important;background:var(--bx-raised)!important}#sidebar .sidebar-group li>a[data-active=\"true\"],#sidebar .sidebar-group li>a.font-medium,#sidebar .sidebar-group li>a[class*=\"bg-primary\"]{color:var(--bx-link)!important;background:var(--bx-accent-wash)!important;font-weight:500}#table-of-contents .toc-item a{color:var(--bx-muted)!important;font-size:13px;line-height:20px}#table-of-contents .toc-item a:hover{color:var(--bx-fg)!important}#table-of-contents .toc-item[data-active] a{color:var(--bx-fg)!important;text-shadow:none!important}#table-of-contents button{font-size:13px;font-weight:600;color:var(--bx-fg)!important}#header .eyebrow{margin-bottom:0;font-size:13px;line-height:20px;font-weight:600;color:var(--bx-link)!important}#page-title{font-size:32px!important;line-height:40px!important;font-weight:650!important;letter-spacing:-0.02em;color:var(--heading-text)!important;text-wrap:balance}#header .prose{margin-top:12px;font-size:18px;line-height:30px;color:var(--bx-muted)!important;text-wrap:pretty;position:relative}#header .prose p{margin:0}#header .prose::after{content:\"\";position:absolute;left:0;right:0;top:calc(100% + (var(--lead-gap) - var(--hairline-width)) / 2);border-top:var(--hairline-width) solid var(--hairline);pointer-events:none}#header+#content{margin-top:var(--lead-gap)!important}#page-context-menu button{border-color:var(--bx-line)!important;background:none!important;color:var(--bx-muted)!important;font-size:13px}#page-context-menu button:hover{border-color:var(--bx-line-strong)!important;color:var(--bx-fg)!important}#header{position:relative}#page-context-menu{position:absolute;top:-26px;right:0}#page-context-menu button{height:28px!important;padding-block:0!important}#page-context-menu>div{display:none}@media (min-width: 1024px){#content-area{padding-left:4.5rem!important}}#content{font-size:16px;line-height:28px;color:var(--bx-body)}#content p,#content li{text-wrap:pretty}#content :is(strong,b){color:var(--bx-fg)!important}#content :is(h2,h3,h4){color:var(--heading-text)!important}#content strong{font-weight:600}#content h2:not([data-component-part]){margin:56px 0 0!important;font-size:22px;line-height:30px;font-weight:600;letter-spacing:-0.01em;text-wrap:balance}#content h2:not([data-component-part]){margin-bottom:12px!important}#content h3:not([data-component-part]){margin:32px 0 0!important;font-size:18px;line-height:28px;font-weight:600}#content h3:not([data-component-part]){margin-bottom:8px!important}#content li::marker{color:var(--bx-faint)}@media (max-width: 600px){#page-title{font-size:28px!important;line-height:36px!important}#header .prose{font-size:17px;line-height:28px}#content h2:not([data-component-part]){margin-top:48px!important;font-size:20px;line-height:28px}#content h3{font-size:17px;line-height:24px}}#content a.link,#content a:not([class]),#header .prose a{color:var(--bx-link)!important;font-weight:inherit!important;border-bottom:0!important;text-decoration:underline;text-decoration-color:var(--bx-accent-line);text-decoration-thickness:1px;text-underline-offset:3px;transition:text-decoration-color 0.15s}#content a.link:hover,#content a:not([class]):hover{text-decoration-color:currentColor}#content :not(pre)>code,#header .prose code{padding:1px 5px;border:1px solid var(--bx-line);border-radius:4px;background:var(--bx-raised);color:var(--bx-fg)!important;font-weight:500;font-size:0.875em;font-family:var(--bx-font-mono);overflow-wrap:anywhere}#content :is(h2,h3,h4) code{padding:0;border:0;background:none;font-size:inherit;font-weight:inherit}#content a>code{color:inherit!important}#content :not(pre)>code::before,#content :not(pre)>code::after{content:none}#content .code-block,#content .code-group{margin:16px 0!important;border:1px solid var(--bx-line)!important;border-radius:8px!important;background:var(--bx-raised)!important;box-shadow:none!important;padding:0!important}#content .code-block [data-component-part=\"code-block-root\"]{border-radius:7px!important;background:transparent!important}#content :is(pre,code,.font-mono),#content .code-block :is(pre,code,span),#content .code-group :is(pre,code,span){font-family:var(--bx-font-mono)!important}#content .code-block pre,#content .code-group pre{font:400 14px/22px var(--bx-font-mono);background:transparent!important}#content .code-block [data-component-part=\"scroll-area-viewport\"]{padding:14px 16px!important}#content [data-floating-buttons]{top:6px!important;right:6px!important}#content [data-floating-buttons] button,#content .code-group-tab-bar button[aria-label*=\"Copy\"],#content .code-group [data-testid=\"copy-code-button\"]{background:transparent!important;color:var(--bx-muted)!important;border-radius:6px}#content [data-floating-buttons] button:hover,#content .code-group [data-testid=\"copy-code-button\"]:hover{background:var(--bx-raised-2)!important;color:var(--bx-fg)!important}#content [data-floating-buttons] svg,#content .code-group [data-testid=\"copy-code-button\"] svg{color:inherit!important}#content .code-group>[data-component-part=\"code-group-tab-bar\"]{min-height:40px;padding-right:6px;border-bottom:1px solid var(--bx-line)}#content .code-group [role=\"tab\"]{color:var(--bx-muted)!important;font-size:13px}#content .code-group [role=\"tab\"][aria-selected=\"true\"]{color:var(--bx-fg)!important}#content .code-group [role=\"tab\"]>div{color:inherit!important}#content .code-group [role=\"tab\"]:hover>div{background:transparent!important;color:var(--bx-fg)!important}#content .code-group [role=\"tab\"] .bg-primary,#content .code-group [role=\"tab\"] [class*=\"bg-primary\"]{background:var(--bx-accent)!important}#content .code-group .code-block{margin:0!important;border:0!important;border-radius:0!important;background:transparent!important}#content .code-block-fade-overlay{display:none}#content :is(.code-block,.code-group) [data-component-part=\"scroll-area-viewport\"][data-overflow-x-end]{-webkit-mask-image:linear-gradient(to right, #000 calc(100% - 40px), transparent);mask-image:linear-gradient(to right, #000 calc(100% - 40px), transparent)}#content :is(.code-block,.code-group):has(+.bx-output){margin-bottom:0!important;border-bottom-left-radius:0!important;border-bottom-right-radius:0!important}#content .bx-output{margin:0 0 16px;padding:10px 16px 12px;border:1px solid var(--bx-line);border-radius:8px;background:var(--bx-bg)}#content :is(.code-block,.code-group)+.bx-output{border-top:0;border-top-left-radius:0;border-top-right-radius:0}#content .bx-output-label{display:flex;align-items:center;gap:6px;margin:0;font-size:12px;line-height:20px;font-weight:600;color:var(--bx-muted);opacity:1}#content .bx-output-label svg{width:13px;height:13px;color:var(--bx-link)}#content .bx-output,#content .bx-output :is(.code-block,.code-group){--mint-background: var(--bx-bg)}#content .bx-output :is(.code-block,.code-group),#content .bx-output .code-group [data-component-part=\"code-block-root\"]{margin:0!important;padding:0!important;border:0!important;border-radius:0!important;background:transparent!important;box-shadow:none!important}#content .bx-output .code-group [data-component-part=\"code-group-tab-bar\"]{display:none}#content .bx-output :is(.code-block,.code-group) [data-component-part=\"scroll-area-viewport\"]{padding:4px 0 0!important}#content .bx-output [data-floating-buttons]{display:none}#content .bx-output pre{color:var(--bx-fg)}#content .callout{margin:16px 0;padding:14px 16px!important;gap:12px;border:1px solid var(--bx-line-strong)!important;border-radius:8px!important;background:var(--bx-raised)!important}#content .callout [data-component-part=\"callout-content\"]{font-size:15px;line-height:24px;color:var(--bx-body)!important}#content .callout [data-component-part=\"callout-content\"] :is(a,strong,code){color:var(--bx-fg)!important}#content .callout [data-component-part=\"callout-content\"] a{color:var(--bx-link)!important}#content .callout [data-component-part=\"callout-icon\"]{margin-top:3px;color:var(--bx-muted)}#content .callout [data-component-part=\"callout-icon\"] svg{color:inherit!important;fill:currentColor}#content .callout[data-callout-type=\"warning\"]{border-color:var(--bx-warn-line)!important;background:var(--bx-warn-wash)!important}#content .callout[data-callout-type=\"warning\"] [data-component-part=\"callout-icon\"]{color:var(--bx-warn)}#content .steps{margin:32px 0 16px 0}#content .steps [data-component-part=\"step-indicator\"]{border:1px solid var(--bx-line-strong);background:var(--bx-bg)!important;color:var(--bx-fg)!important;font-size:13px}#content .steps [data-component-part=\"step-line\"]{background:var(--bx-line)!important}#content .steps .step{padding-bottom:36px}#content .steps [data-component-part=\"step-content\"]>:first-child{margin-top:8px}#content .steps [data-component-part=\"step-content\"]>:last-child{margin-bottom:0}#content .steps .step:last-child{padding-bottom:0}#content .steps [data-component-part=\"step-title\"]{font-size:18px;line-height:28px;font-weight:600;color:var(--bx-fg)!important}#content .tabs [data-component-part=\"tabs-list\"]{border-color:var(--bx-line)!important;margin-bottom:16px}#content .tabs [data-component-part=\"tab-button\"]{color:var(--bx-site-muted)!important;font-size:14px;font-weight:500;border-bottom-width:2px;border-color:transparent!important}#content .tabs [data-component-part=\"tab-button\"]:hover{color:var(--bx-fg)!important}#content .tabs [data-component-part=\"tab-button\"][data-active=\"true\"]{color:var(--bx-fg)!important;border-color:var(--bx-accent)!important}#content table{font-size:14px;line-height:22px}#content th{padding:0 14px 8px 0;border-bottom:1px solid var(--bx-line-strong)!important;font-size:13px;font-weight:600;color:var(--bx-muted)!important}#content td{padding:10px 14px 10px 0;border-bottom:1px solid var(--bx-line)!important;vertical-align:top;color:var(--bx-body)}#content td:last-child,#content th:last-child{padding-right:0}#content tr{border:0!important}#content td code{overflow-wrap:anywhere}@media (min-width: 1280px){#content [data-component-part=\"scroll-area\"]:has(table){width:calc(100% + var(--page-padding) * 2 + 56px)}}#content .columns{gap:12px}#content .columns>.card:last-child:nth-child(odd){grid-column:1 / -1}#content .card{margin:0;border:1px solid var(--bx-line)!important;border-radius:8px!important;background:transparent!important;box-shadow:none!important;transition:border-color 0.15s, background-color 0.15s}html.dark #content .card{--primary-light: 40 45 47}html:not(.dark) #content .card{--primary: 214 217 216}html.dark #content .card [data-component-part=\"card-icon\"]{--primary-light: 150 152 154}html:not(.dark) #content .card [data-component-part=\"card-icon\"]{--primary: 96 101 99}html.dark #content .card:hover [data-component-part=\"card-icon\"]{--primary-light: 110 231 183}html:not(.dark) #content .card:hover [data-component-part=\"card-icon\"]{--primary: 4 120 87}#content .card:hover{border-color:var(--bx-line-strong)!important;background:var(--bx-raised)!important}#content .card [data-component-part=\"card-content-container\"]{padding:16px 18px}#content .card [data-component-part=\"card-icon\"],#content .card [data-component-part=\"card-icon\"] svg{width:18px;height:18px;color:var(--bx-muted);fill:currentColor;transition:color 0.15s}#content .card:hover [data-component-part=\"card-icon\"],#content .card:hover [data-component-part=\"card-icon\"] svg{color:var(--bx-link)}#content .card [data-component-part=\"card-title\"]{margin:8px 0 0!important;font-size:15px;line-height:22px;font-weight:600;color:var(--bx-fg)!important}#content .card [data-component-part=\"card-content\"]{margin-top:2px;font-size:14px;line-height:22px;color:var(--bx-muted)!important}#content .card:focus-visible{outline:2px solid var(--bx-link);outline-offset:2px}#content details{border:1px solid var(--bx-line)!important;border-radius:8px!important;background:transparent!important}#content details>summary{color:var(--bx-fg);font-size:15px;font-weight:500}#content details>summary:hover{background:var(--bx-raised)}#pagination{margin-top:64px;gap:12px}#pagination a{flex:1;padding:12px 16px;border:1px solid var(--bx-line);border-radius:8px;color:var(--bx-fg);transition:border-color 0.15s}#pagination a:hover{border-color:var(--bx-line-strong)}#pagination [data-component-part=\"pagination-title\"]{color:var(--bx-fg)!important}#pagination a[rel=\"next\"]{justify-content:flex-end;text-align:right}#sidebar .method-nav-pill>span{background:transparent!important;border:1px solid var(--bx-line-strong);color:var(--bx-muted)!important;font-family:var(--bx-font-mono)}#footer a[href*=\"mintlify.com\"],#footer div:has(>div>a[href*=\"mintlify.com\"]){display:none!important}#footer *{border-color:var(--bx-line)!important}#footer{display:block!important;max-width:none!important;margin:0!important;padding:32px 7% 36px!important;border-top:1px solid var(--bx-line)!important}#footer>div{display:block!important;max-width:none!important;margin:0!important;padding:0!important}#footer>div>div:has(+div>div>a[href*=\"mintlify.com\"]){display:none!important}#footer>div>div:first-child{display:grid!important;grid-template-columns:max-content minmax(0, 1fr);column-gap:24px;row-gap:24px;min-height:0!important}#footer>div>div:first-child>div:first-child{display:flex!important;min-width:0!important;margin-right:16px}#footer>div>div:first-child>div:last-child{display:grid!important;grid-template-columns:repeat(4, minmax(0, 1fr))!important;gap:24px}#footer>div>div:first-child>div:last-child>div{display:block!important;min-width:0;align-items:stretch!important}#footer>div>div:first-child>div:last-child>div>div{display:grid!important;align-content:start;gap:6px}#footer a[class~=\"select-none\"]{display:inline-flex!important;align-items:flex-start;gap:10px;text-decoration:none}#footer a[class~=\"select-none\"] img{flex:none;width:28px;height:28px}#footer a[class~=\"select-none\"]::after{content:\"BoxRouter\";color:var(--bx-fg);font-size:14px;font-weight:600;line-height:28px}#footer p{margin:0 0 4px!important;color:var(--bx-fg)!important;font-size:13px;line-height:1.3;font-weight:600}#footer a:not([class~=\"select-none\"]){max-width:none!important;overflow:visible!important;text-overflow:clip!important;white-space:normal!important;color:var(--bx-site-muted)!important;font-size:14px;line-height:1.625;font-weight:450}#footer a:not([class~=\"select-none\"]):hover{color:var(--bx-fg)!important}@media (max-width: 760px){#footer{padding:28px 20px 36px!important}#footer>div>div:first-child{grid-template-columns:minmax(0, 1fr)!important}#footer>div>div:first-child>div:first-child{margin-right:0}#footer>div>div:first-child>div:last-child{grid-template-columns:repeat(2, minmax(0, 1fr))!important;gap:20px 16px}}@media (max-width: 420px){#footer>div>div:first-child>div:last-child{display:flex!important;flex-direction:column}}#assistant-entry,[data-testid=\"feedback-toolbar\"],#feedback-toolbar,.feedback-toolbar{display:none!important}.doc-figure{margin:32px 0 0;container-type:inline-size;container-name:docfig}.doc-figure img{display:none;width:100%;height:auto;margin:0}.doc-figure .doc-figure-desktop{max-width:560px}.doc-figure .doc-figure-mobile.doc-figure-light,.doc-figure .doc-figure-mobile.doc-figure-dark{display:none}.doc-figure .doc-figure-desktop.doc-figure-light{display:block}.dark .doc-figure .doc-figure-desktop.doc-figure-light{display:none}.dark .doc-figure .doc-figure-desktop.doc-figure-dark{display:block}.doc-figure .doc-figure-caption{margin:10px 0 0;font-size:14px;line-height:22px;color:var(--bx-muted);opacity:1}@container docfig (max-width: 479px){.doc-figure .doc-figure-desktop.doc-figure-light,.dark .doc-figure .doc-figure-desktop.doc-figure-dark{display:none}.doc-figure .doc-figure-mobile.doc-figure-light{display:block;max-width:440px;margin-inline:auto}.dark .doc-figure .doc-figure-mobile.doc-figure-light{display:none}.dark .doc-figure .doc-figure-mobile.doc-figure-dark{display:block;max-width:440px;margin-inline:auto}}@supports not (container-type: inline-size){@media (max-width: 600px){.doc-figure .doc-figure-desktop.doc-figure-light,.dark .doc-figure .doc-figure-desktop.doc-figure-dark{display:none}.doc-figure .doc-figure-mobile.doc-figure-light{display:block;max-width:440px;margin-inline:auto}.dark .doc-figure .doc-figure-mobile.doc-figure-light{display:none}.dark .doc-figure .doc-figure-mobile.doc-figure-dark{display:block;max-width:440px;margin-inline:auto}}}.bx-diagram{margin:32px 0 0;container-type:inline-size;container-name:bxdiagram}.bx-diagram svg{display:block;width:100%;height:auto}.bx-diagram .bx-diagram-mobile{display:none}.bx-diagram-caption{margin-top:10px;font-size:14px;line-height:22px;color:var(--bx-muted)}@container bxdiagram (max-width: 559px){.bx-diagram .bx-diagram-desktop:not(:only-child){display:none}.bx-diagram .bx-diagram-mobile{display:block;max-width:440px;margin-inline:auto}}html{overflow-y:scroll}[class*=\"active:scale\"]:active{scale:none!important}html{overscroll-behavior-x:none}[data-component-part=\"scroll-area-viewport\"]{overscroll-behavior-x:contain}"}],"page":{"pagePath":"reference/create-launch-run","slug":"/reference/create-launch-run","pageMetadata":{"title":"Start an Unattended Launch Run","openapi":"openapi.json POST /launch-runs","description":"Reserve one workspace-owned run and all requested copies atomically. The existing\nlaunch request fields select exactly one catalog agent or inline manifest; `copies`\nis required. Acceptance returns 202 with a Location for metadata polling and makes\nno provider create before the executor claims each copy. Reuse the same\nIdempotency-Key and identical body to recover an uncertain acceptance; a changed\nbody conflicts and never creates another run.\n\nCredential selectors are resolved at each copy claim. Secret values and provider\ntokens are never stored. Saved secrets are re-read by name, so rotation can affect\nlater copies. Inline secret_values, interactive launches, and unsupported manifest\nfeatures are refused before reservation. The feature remains opt-in until compatible\nclients are released.\n","href":"/reference/create-launch-run"},"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: [\"Reserve one workspace-owned run and all requested copies atomically. The existing\\nlaunch request fields select exactly one catalog agent or inline manifest; \", _jsx(_components.code, {\n children: \"copies\"\n }), \"\\nis required. Acceptance returns 202 with a Location for metadata polling and makes\\nno provider create before the executor claims each copy. Reuse the same\\nIdempotency-Key and identical body to recover an uncertain acceptance; a changed\\nbody conflicts and never creates another run.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Credential selectors are resolved at each copy claim. Secret values and provider\\ntokens are never stored. Saved secrets are re-read by name, so rotation can affect\\nlater copies. Inline secret_values, interactive launches, and unsupported manifest\\nfeatures are refused before reservation. The feature remains opt-in until compatible\\nclients are released.\"\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":"css-variables"},"config":{},"pageMetadata":{"title":"Start an Unattended Launch Run","openapi":"openapi.json POST /launch-runs","description":"Reserve one workspace-owned run and all requested copies atomically. The existing\nlaunch request fields select exactly one catalog agent or inline manifest; `copies`\nis required. Acceptance returns 202 with a Location for metadata polling and makes\nno provider create before the executor claims each copy. Reuse the same\nIdempotency-Key and identical body to recover an uncertain acceptance; a changed\nbody conflicts and never creates another run.\n\nCredential selectors are resolved at each copy claim. Secret values and provider\ntokens are never stored. Saved secrets are re-read by name, so rotation can affect\nlater copies. Inline secret_values, interactive launches, and unsupported manifest\nfeatures are refused before reservation. The feature remains opt-in until compatible\nclients are released.\n","href":"/reference/create-launch-run"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/nv-4965711d/0678d865bf98fa52/docs-search.js","/docs/_mintlify/custom/nv-4965711d/1676f8e75d3dc931/docs-header.js"],"openApiReferenceData":{"operation":{"tags":["launch-runs"],"operationId":"createLaunchRun","x-speakeasy-group":"launchRuns","x-speakeasy-name-override":"create","summary":"Start an unattended launch run","description":"Reserve one workspace-owned run and all requested copies atomically. The existing\nlaunch request fields select exactly one catalog agent or inline manifest; `copies`\nis required. Acceptance returns 202 with a Location for metadata polling and makes\nno provider create before the executor claims each copy. Reuse the same\nIdempotency-Key and identical body to recover an uncertain acceptance; a changed\nbody conflicts and never creates another run.\n\nCredential selectors are resolved at each copy claim. Secret values and provider\ntokens are never stored. Saved secrets are re-read by name, so rotation can affect\nlater copies. Inline secret_values, interactive launches, and unsupported manifest\nfeatures are refused before reservation. The feature remains opt-in until compatible\nclients are released.\n","parameters":["20fe7d04-f76b-4d78-9819-03af6b751fe7"],"requestBody":"18f17577-d5a8-4f54-9d93-fbee6cc1cc55","responses":{"202":"56d83c8f-b5b6-49d5-a5f6-093a73e17347","400":"f52e3efe-bd4e-4901-b794-f9fe44e386fe","401":"3f24526c-74d0-4401-8911-b5973d69ae6b","403":"66740c0e-67d0-471e-92ff-ff3f19a54efa","404":"ad5d0813-f99a-4f74-8134-4a50ad7aa659","409":"c3012fc5-591a-4176-aa15-70603ce18042","422":"0ee0f308-6742-423f-a5c9-8735f599f8a4","429":"45d740e5-00a5-46e4-a2d6-0f1f9ed29fd8","500":"8ec6766c-8f5a-40c7-8468-947269476179","default":"9a1c4257-6016-4e60-b5d3-82e4b3c6b6d8"},"method":"post","type":"path","servers":["38340c0e-1365-48ce-8dcd-74c64a2f69dc"],"security":["dd0c83e6-beb9-482e-9a5d-60b9e86012e1","3a6c0149-9909-4d75-82ec-be6787165396"],"path":"/launch-runs","baseUrlOptions":["https://api.boxrouter.ai/api/v1"],"title":"Start an unattended launch run","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"20fe7d04-f76b-4d78-9819-03af6b751fe7":{"name":"Idempotency-Key","in":"header","required":true,"description":"Unique identifier for this logical launch. Reuse it with the identical body to reconcile an uncertain response.","schema":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]+$","isRequired":true,"description":"Unique identifier for this logical launch. Reuse it with the identical body to reconcile an uncertain response.","uniqueKey":"","typeLabel":"string"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"One unattended launch run. Uses the canonical launch request fields and requires copies; request-only credential values are refused by the server before reservation.","required":["copies","agent"],"properties":{"agent":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z][a-z0-9-]{0,62}$","isRequired":true,"uniqueKey":"oneOf.0.agent","typeLabel":"string"},"copies":{"type":"integer","minimum":1,"description":"Number of independently managed copies to reserve atomically.","isRequired":true,"uniqueKey":"oneOf.0.copies","typeLabel":"integer"},"privacy":{"type":"object","additionalProperties":false,"description":"Privacy floors for the sandbox created by this launch. Cloud carries this policy unchanged into deferred sandbox materialization.","properties":{"data_collection":{"type":"string","enum":["allow","deny"],"description":"Require the route to allow or deny provider data collection.","uniqueKey":"oneOf.0.privacy.data_collection","typeLabel":"enum\u003cstring>"},"zdr":{"type":"boolean","description":"Require zero provider data retention when true.","uniqueKey":"oneOf.0.privacy.zdr","typeLabel":"boolean"},"boxrouter_content_retention":{"type":"string","enum":["ordinary","transient"],"description":"Ordinary allows normal bounded service retention; transient requires the\nsupported non-persistent sandbox-content profile. This is not provider\nqualification, permission to train, or consent to capture additional content.\n","uniqueKey":"oneOf.0.privacy.boxrouter_content_retention","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.0.privacy","typeLabel":"object"},"manifest":{"oneOf":[{"type":"object","description":"A complete inline agent manifest or a source wrapper whose command can come from the referenced file.","required":["name","command"],"properties":{"name":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z][a-z0-9-]{0,62}$","description":"A lowercase identifier for the agent.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.name","typeLabel":"string"},"command":{"type":"string","minLength":1,"pattern":"^[^\\u0000]*$","description":"Command to run in an attached terminal or as an unattended process after preparation succeeds.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.command","typeLabel":"string"},"description":{"type":"string","description":"Optional text describing the agent.","uniqueKey":"oneOf.0.manifest.oneOf.0.description","typeLabel":"string"},"image":{"oneOf":[{"type":"string","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","minLength":1,"uniqueKey":"oneOf.0.manifest.oneOf.0.image.oneOf.0","typeLabel":"string"},{"type":"object","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","required":["dockerfile"],"properties":{"dockerfile":{"type":"string","minLength":1,"description":"Dockerfile source sent to the provider's builder; never executed on the BoxRouter host.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.image.oneOf.1.dockerfile","typeLabel":"string"},"context_artifact_id":{"type":"string","minLength":1,"description":"Workspace-owned tar build context. Reject paths escaping the context,\nspecial device files and unsafe links; enforce compressed and expanded\nsize limits before using it. Source file and directory builder helpers\npackage their inputs into this context rather than sending host paths.\n","uniqueKey":"oneOf.0.manifest.oneOf.0.image.oneOf.1.context_artifact_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0.manifest.oneOf.0.image.oneOf.1","typeLabel":"object"},{"type":"object","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","required":["private_oci"],"properties":{"private_oci":{"type":"string","minLength":1,"description":"OCI image reference in a registry that needs a login; send registry_credentials with the launch request.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.image.oneOf.2.private_oci","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0.manifest.oneOf.0.image.oneOf.2","typeLabel":"object"}],"uniqueKey":"oneOf.0.manifest.oneOf.0.image","typeLabel":"string · object · object"},"setup":{"type":"array","items":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.0.setup.items.[INDEX]","typeLabel":"string"},"description":"Shell commands run in order before files and background commands.","uniqueKey":"oneOf.0.manifest.oneOf.0.setup","typeLabel":"string[]"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.0.env.additionalProperties","typeLabel":"string"},"description":"Non-secret environment values applied to setup and the launch.","uniqueKey":"oneOf.0.manifest.oneOf.0.env","typeLabel":"object"},"secrets":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.0.manifest.oneOf.0.secrets.items.[INDEX]","typeLabel":"string"},"description":"Names whose values are resolved by the server and added only to the create environment.","uniqueKey":"oneOf.0.manifest.oneOf.0.secrets","typeLabel":"string[]"},"required_env":{"type":"array","default":[],"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.required_env.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","minLength":1,"maxLength":1024,"description":"Plain-text setup guidance, never an input value or executable markup.","uniqueKey":"oneOf.0.manifest.oneOf.0.required_env.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"oneOf.0.manifest.oneOf.0.required_env.items.[INDEX]","typeLabel":"object"},"description":"Names of environment variables that must have nonblank values when launching the agent. BoxRouter checks them after merging env overrides and resolving credentials, before reservation. Values remain unchanged; this does not verify an external session or credential.","uniqueKey":"oneOf.0.manifest.oneOf.0.required_env","typeLabel":"object[]"},"max_copies":{"type":"integer","minimum":1,"description":"Maximum copies of this resolved manifest in one launch run. Omission adds no manifest-specific ceiling. Interactive manifests remain ineligible for launch runs.","uniqueKey":"oneOf.0.manifest.oneOf.0.max_copies","typeLabel":"integer"},"model_access":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["secret","provider","label"],"properties":{"secret":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.model_access.items.[INDEX].secret","typeLabel":"string"},"provider":{"type":"string","enum":["openai","anthropic","openrouter","cursor"],"x-boxrouter-open-enum":true,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.model_access.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":128,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.model_access.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"oneOf.0.manifest.oneOf.0.model_access.items.[INDEX]","typeLabel":"object"},"description":"Named secrets that configure this catalog agent for model access. A launch may select at most one.","uniqueKey":"oneOf.0.manifest.oneOf.0.model_access","typeLabel":"object[]"},"sign_in":{"type":"string","minLength":1,"maxLength":256,"description":"What to do inside the agent when no recognized model secret is selected.","uniqueKey":"oneOf.0.manifest.oneOf.0.sign_in","typeLabel":"string"},"files":{"type":"object","propertyNames":{"pattern":"^(?:~/)?(?!/)(?!~/?$)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*(?:^|/)\\.(?:/|$))(?!.*\\/$)[^\\u0000]+$"},"additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.manifest.oneOf.0.files.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"object","uniqueKey":"oneOf.0.manifest.oneOf.0.files.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.0.manifest.oneOf.0.files.additionalProperties","typeLabel":"string | object"},"description":"Relative sandbox paths mapped to UTF-8 text or JSON objects, written before background commands.","uniqueKey":"oneOf.0.manifest.oneOf.0.files","typeLabel":"object"},"background":{"type":"array","items":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.0.background.items.[INDEX]","typeLabel":"string"},"description":"Shell commands started detached during preparation before the launch command starts.","uniqueKey":"oneOf.0.manifest.oneOf.0.background","typeLabel":"string[]"},"ports":{"type":"array","uniqueItems":true,"items":{"type":"integer","minimum":1,"maximum":65535,"uniqueKey":"oneOf.0.manifest.oneOf.0.ports.items.[INDEX]","typeLabel":"integer"},"description":"Ports to expose as previews. Naming ports adds the previews requirement to routing.","uniqueKey":"oneOf.0.manifest.oneOf.0.ports","typeLabel":"integer[]"},"interactive":{"type":"boolean","default":true,"description":"When true, a client can attach a terminal; when false, launch starts the command unattended.","uniqueKey":"oneOf.0.manifest.oneOf.0.interactive","typeLabel":"boolean"},"preinstalled":{"type":"boolean","default":false,"description":"Declares that the launch's image already carries this agent's harness. The catalog sets it for agents bundled in the agents image; the listAgents entry reports it.","uniqueKey":"oneOf.0.manifest.oneOf.0.preinstalled","typeLabel":"boolean"},"resources":{"type":"object","additionalProperties":false,"properties":{"cpu_min":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.cpu_min","typeLabel":"number"},"memory_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.memory_min_mib","typeLabel":"integer"},"disk_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.disk_min_mib","typeLabel":"integer"},"extendable_lifetime":{"type":"boolean","const":true,"description":"Needed before POST /sandboxes/{sandbox_id}/lifetime may be called.","uniqueKey":"oneOf.0.manifest.oneOf.0.resources.extendable_lifetime","typeLabel":"boolean"},"region":{"type":"string","minLength":1,"description":"One value from the region registry: a provider's region (for example `provider:eu-west`),\nan area (EU) or a country (US). Never a list.\n","uniqueKey":"oneOf.0.manifest.oneOf.0.resources.region","typeLabel":"string"},"kernel":{"oneOf":[{"type":"string","enum":["shared","filtered","dedicated"],"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.kernel.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["shared","filtered","dedicated"],"type":"string","uniqueKey":"oneOf.0.manifest.oneOf.0.resources.kernel.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.kernel.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.kernel","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"paused_retention_seconds":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.paused_retention_seconds","typeLabel":"number"},"arch":{"oneOf":[{"type":"string","enum":["amd64","arm64"],"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.arch.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["amd64","arm64"],"type":"string","uniqueKey":"oneOf.0.manifest.oneOf.0.resources.arch.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.arch.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.arch","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"run_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.run_seconds","typeLabel":"integer"},"process_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.manifest.oneOf.0.resources.process_seconds","typeLabel":"integer"}},"description":"Resource constraints, execution limits, and environment facts that must hold for this\nsandbox. The matcher compares each named value with declared resources and capabilities;\nfields left out impose no requirement.\n","uniqueKey":"oneOf.0.manifest.oneOf.0.resources","typeLabel":"object"},"lifetime_seconds":{"oneOf":[{"type":"integer","minimum":1,"description":"Requested sandbox lifetime in seconds for this launch; the sandbox may run past its lifetime deadline. Null asks for a sandbox that never ends. Only a provider that never ends a sandbox serves it, and only on the workspace's own provider account. Left out, the create's own default applies: rolling credit reservations on a credit-funded route that can extend a lifetime, else 300 seconds.","uniqueKey":"oneOf.0.manifest.oneOf.0.lifetime_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"Requested sandbox lifetime in seconds for this launch; the sandbox may run past its lifetime deadline. Null asks for a sandbox that never ends. Only a provider that never ends a sandbox serves it, and only on the workspace's own provider account. Left out, the create's own default applies: rolling credit reservations on a credit-funded route that can extend a lifetime, else 300 seconds.","uniqueKey":"oneOf.0.manifest.oneOf.0.lifetime_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.manifest.oneOf.0.lifetime_seconds","typeLabel":"integer | null"},"placement":{"type":"object","additionalProperties":false,"description":"Provider preferences for which routes to use and how to rank them, and the route pin that\na create takes as `route`. A route's `request_overrides` in the provider listing name\n`route` at the top level of a create; a launch takes it here, under `placement`.\n","properties":{"preferences":{"type":"object","additionalProperties":false,"description":"The one provider-preference contract shared by sandbox creation, launch placement and\nActions policy settings. Every property is optional; omitted properties inherit.\nPrecedence, narrowest last: workspace restrictions are the ceiling, then a repository\ndefault or named Actions policy, then a workflow, then request controls. Hard\nrestrictions (provider allowlists, route, account, supply, region, privacy, origin and\nspend) intersect and can only narrow; request ignore unions with workspace exclusions.\nA request true never lifts a workspace allow_fallbacks false. When workspace\nprevent_overrides is on, containing order, sort or allow_fallbacks is refused with\nrouting_overrides_forbidden even if the value matches the workspace; `only` still\nnarrows as a set and cannot reorder workspace ranking. Otherwise soft preference values\nreplace inherited values without widening authority. `order: []` and `ignore: []` are valid empty soft\narrays that name no preference and no exclusion; inherited hard authority is unchanged.\nEach list must hold distinct values; null is never valid for any property.\n`order` prioritizes named providers in listed order; eligible providers omitted from\nit remain candidates afterward, ranked by the existing router order. When `only`\nis supplied, it remains the hard ordered allowlist and caps eligible providers; `order`\nmay rearrange its members, while omitted members retain `only` order. `ignore`\nexcludes providers even when named by `only` or `order`. `sort` ranks routes\nwithin a provider. `allow_fallbacks` defaults to true and controls whether\ncreation may dispatch a later eligible route after a provider definitively refuses before\ncreating a sandbox. This includes another account for the same provider. False stops after\nthe first route dispatch. Eligibility and preparation may skip a route before dispatch.\nProvider, account, supply, payer and requirements constraints remain binding.\n","properties":{"order":{"type":"array","uniqueItems":true,"description":"Softly prioritize these providers in the listed order. Eligible providers omitted\nfrom this list remain candidates afterward using the existing router order. When\n`only` is supplied, it remains the ordered hard allowlist and caps eligibility;\nthis order rearranges its members and omitted members retain their `only` order.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences.order.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences.order","typeLabel":"string[]"},"only":{"type":"array","minItems":1,"uniqueItems":true,"description":"Used as `preferences.only`, this is the hard allowlist of eligible providers. `preferences.order`\ntakes precedence for their order; otherwise this list's order applies. `preferences.sort`\nranks eligible routes within each provider. Route, account, supply,\npayer and requirements restrictions still constrain every route, and unlisted providers\nare never considered. A one-provider list prevents cross-provider fallback while allowing\nlater eligible routes for that provider when `preferences.allow_fallbacks` is true.\nSetting it to false stops after the first route dispatch, including a later account for\nthe same provider.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences.only.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences.only","typeLabel":"string[]"},"ignore":{"type":"array","uniqueItems":true,"description":"Providers to exclude from routing, even if also named in `only` or `order`.","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences.ignore.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences.ignore","typeLabel":"string[]"},"sort":{"type":"string","enum":["price","time"],"x-boxrouter-choices":{"price":{"label":"Price","line":"Lowest hourly price first.","measure":"price","better":"lower"},"time":{"label":"Time","line":"Shortest run time measured on reference workloads first.","measure":"time","better":"lower"}},"description":"How eligible routes are ranked. `price` picks the lowest hourly price. `time` picks the shortest run time, measured on reference workloads.\n","uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences.sort","typeLabel":"enum\u003cstring>"},"allow_fallbacks":{"type":"boolean","default":true,"description":"Whether Cloud may dispatch a later eligible route after a provider definitively\nrefuses before creating a sandbox; defaults to true and continues until a route\ncreates the sandbox or no eligible route remains. If `only` is supplied, it\nlimits eligible providers; `preferences.order` takes precedence for their order, with\n`preferences.sort` ranking routes within each provider.\nFalse stops after the first route dispatch, including when a later route uses another\naccount for the same provider. Local eligibility or preparation failures may skip a\nroute before dispatch. This does not expand the provider allowlist or relax route,\naccount, supply, payer or requirements restrictions.\n","uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences.allow_fallbacks","typeLabel":"boolean"}},"uniqueKey":"oneOf.0.manifest.oneOf.0.placement.preferences","typeLabel":"object"},"route":{"type":"object","additionalProperties":false,"description":"The remaining route filters. Each singular value is a hard pin: `id` and `account_id` name\nexactly one route or connected account and `supply` one funding authority. Fallback never\nmoves a pin, a volume remains attached to its selected route, and these\nfilters only narrow workspace restrictions.\n","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.0.placement.route.id","typeLabel":"string"},"account_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","description":"Connected account ID. A provider disabled on this deployment returns 409 provider_not_enabled before routing.","uniqueKey":"oneOf.0.manifest.oneOf.0.placement.route.account_id","typeLabel":"string"},"supply":{"type":"string","enum":["byok","managed"],"uniqueKey":"oneOf.0.manifest.oneOf.0.placement.route.supply","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.0.manifest.oneOf.0.placement.route","typeLabel":"object"}},"uniqueKey":"oneOf.0.manifest.oneOf.0.placement","typeLabel":"object"},"code":{"type":"object","additionalProperties":false,"required":["repo","ref"],"description":"Clone a GitHub repository at the requested ref before setup.","properties":{"repo":{"type":"string","minLength":1,"pattern":"^(?:https://github\\.com/)?[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?$","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.code.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.code.ref","typeLabel":"string"},"directory":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","description":"Relative directory in the checked-out repository.","uniqueKey":"oneOf.0.manifest.oneOf.0.code.directory","typeLabel":"string"}},"uniqueKey":"oneOf.0.manifest.oneOf.0.code","typeLabel":"object"},"source":{"type":"object","additionalProperties":false,"required":["repo","ref","path"],"description":"For a launch, fetch this manifest file at the selected repository ref, then apply the other supplied manifest fields as overrides.","properties":{"repo":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.source.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.source.ref","typeLabel":"string"},"path":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.source.path","typeLabel":"string"}},"uniqueKey":"oneOf.0.manifest.oneOf.0.source","typeLabel":"object"},"volume":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","pattern":"^vol_[0-9a-f]{32}$","description":"BoxRouter-managed Volume ID. Provider-native volume requirements are not accepted.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.0.volume.id","typeLabel":"string"},"path":{"type":"string","pattern":"^/[^\\u0000]*$","default":"/workspace","description":"Absolute folder the checkpoint is restored into, replacing what the image has there. Repeated\nseparators and `.` path components are normalized; any `..` component is rejected. The path\nmust not be `/`, under /proc, /sys, /dev, /etc, /usr, /bin, /sbin, /lib or /run, or equal to\nor an ancestor of the internal `/tmp/boxrouter-volume` scratch path.\n","uniqueKey":"oneOf.0.manifest.oneOf.0.volume.path","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Checkpoint to restore; omitted means the head. An empty volume restores nothing. A\ncheckpoint saved from a branch sandbox is not the head and can be selected by number with\nwrite, branch or read access; read mounts exactly that checkpoint's files, never the head.\n","uniqueKey":"oneOf.0.manifest.oneOf.0.volume.checkpoint","typeLabel":"integer"},"access":{"type":"string","enum":["write","read","shared","branch"],"default":"write","description":"The access mode requested for this sandbox. Omitted means write. Launch modes are write,\nread, shared, and branch. Checkpoints and branches remain capability-gated.\n","uniqueKey":"oneOf.0.manifest.oneOf.0.volume.access","typeLabel":"enum\u003cstring>"}},"description":"BoxRouter-managed volume reference and access mode attached to the created sandbox.","uniqueKey":"oneOf.0.manifest.oneOf.0.volume","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.0.manifest.oneOf.0","typeLabel":"object"},{"type":"object","description":"A complete inline agent manifest or a source wrapper whose command can come from the referenced file.","required":["name","source"],"properties":{"name":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z][a-z0-9-]{0,62}$","description":"A lowercase identifier for the agent.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.name","typeLabel":"string"},"source":{"type":"object","additionalProperties":false,"required":["repo","ref","path"],"description":"For a launch, fetch this manifest file at the selected repository ref, then apply the other supplied manifest fields as overrides.","properties":{"repo":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.source.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.source.ref","typeLabel":"string"},"path":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.source.path","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.source","typeLabel":"object"},"description":{"type":"string","description":"Optional text describing the agent.","uniqueKey":"oneOf.0.manifest.oneOf.1.description","typeLabel":"string"},"image":{"oneOf":[{"type":"string","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","minLength":1,"uniqueKey":"oneOf.0.manifest.oneOf.1.image.oneOf.0","typeLabel":"string"},{"type":"object","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","required":["dockerfile"],"properties":{"dockerfile":{"type":"string","minLength":1,"description":"Dockerfile source sent to the provider's builder; never executed on the BoxRouter host.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.image.oneOf.1.dockerfile","typeLabel":"string"},"context_artifact_id":{"type":"string","minLength":1,"description":"Workspace-owned tar build context. Reject paths escaping the context,\nspecial device files and unsafe links; enforce compressed and expanded\nsize limits before using it. Source file and directory builder helpers\npackage their inputs into this context rather than sending host paths.\n","uniqueKey":"oneOf.0.manifest.oneOf.1.image.oneOf.1.context_artifact_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0.manifest.oneOf.1.image.oneOf.1","typeLabel":"object"},{"type":"object","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","required":["private_oci"],"properties":{"private_oci":{"type":"string","minLength":1,"description":"OCI image reference in a registry that needs a login; send registry_credentials with the launch request.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.image.oneOf.2.private_oci","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0.manifest.oneOf.1.image.oneOf.2","typeLabel":"object"}],"uniqueKey":"oneOf.0.manifest.oneOf.1.image","typeLabel":"string · object · object"},"setup":{"type":"array","items":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.1.setup.items.[INDEX]","typeLabel":"string"},"description":"Shell commands run in order before files and background commands.","uniqueKey":"oneOf.0.manifest.oneOf.1.setup","typeLabel":"string[]"},"command":{"type":"string","minLength":1,"pattern":"^[^\\u0000]*$","description":"Command to run in an attached terminal or as an unattended process after preparation succeeds.","uniqueKey":"oneOf.0.manifest.oneOf.1.command","typeLabel":"string"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.1.env.additionalProperties","typeLabel":"string"},"description":"Non-secret environment values applied to setup and the launch.","uniqueKey":"oneOf.0.manifest.oneOf.1.env","typeLabel":"object"},"secrets":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.0.manifest.oneOf.1.secrets.items.[INDEX]","typeLabel":"string"},"description":"Names whose values are resolved by the server and added only to the create environment.","uniqueKey":"oneOf.0.manifest.oneOf.1.secrets","typeLabel":"string[]"},"required_env":{"type":"array","default":[],"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.required_env.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","minLength":1,"maxLength":1024,"description":"Plain-text setup guidance, never an input value or executable markup.","uniqueKey":"oneOf.0.manifest.oneOf.1.required_env.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"oneOf.0.manifest.oneOf.1.required_env.items.[INDEX]","typeLabel":"object"},"description":"Names of environment variables that must have nonblank values when launching the agent. BoxRouter checks them after merging env overrides and resolving credentials, before reservation. Values remain unchanged; this does not verify an external session or credential.","uniqueKey":"oneOf.0.manifest.oneOf.1.required_env","typeLabel":"object[]"},"max_copies":{"type":"integer","minimum":1,"description":"Maximum copies of this resolved manifest in one launch run. Omission adds no manifest-specific ceiling. Interactive manifests remain ineligible for launch runs.","uniqueKey":"oneOf.0.manifest.oneOf.1.max_copies","typeLabel":"integer"},"model_access":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["secret","provider","label"],"properties":{"secret":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.model_access.items.[INDEX].secret","typeLabel":"string"},"provider":{"type":"string","enum":["openai","anthropic","openrouter","cursor"],"x-boxrouter-open-enum":true,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.model_access.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":128,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.model_access.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"oneOf.0.manifest.oneOf.1.model_access.items.[INDEX]","typeLabel":"object"},"description":"Named secrets that configure this catalog agent for model access. A launch may select at most one.","uniqueKey":"oneOf.0.manifest.oneOf.1.model_access","typeLabel":"object[]"},"sign_in":{"type":"string","minLength":1,"maxLength":256,"description":"What to do inside the agent when no recognized model secret is selected.","uniqueKey":"oneOf.0.manifest.oneOf.1.sign_in","typeLabel":"string"},"files":{"type":"object","propertyNames":{"pattern":"^(?:~/)?(?!/)(?!~/?$)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*(?:^|/)\\.(?:/|$))(?!.*\\/$)[^\\u0000]+$"},"additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.manifest.oneOf.1.files.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"object","uniqueKey":"oneOf.0.manifest.oneOf.1.files.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.0.manifest.oneOf.1.files.additionalProperties","typeLabel":"string | object"},"description":"Relative sandbox paths mapped to UTF-8 text or JSON objects, written before background commands.","uniqueKey":"oneOf.0.manifest.oneOf.1.files","typeLabel":"object"},"background":{"type":"array","items":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.1.background.items.[INDEX]","typeLabel":"string"},"description":"Shell commands started detached during preparation before the launch command starts.","uniqueKey":"oneOf.0.manifest.oneOf.1.background","typeLabel":"string[]"},"ports":{"type":"array","uniqueItems":true,"items":{"type":"integer","minimum":1,"maximum":65535,"uniqueKey":"oneOf.0.manifest.oneOf.1.ports.items.[INDEX]","typeLabel":"integer"},"description":"Ports to expose as previews. Naming ports adds the previews requirement to routing.","uniqueKey":"oneOf.0.manifest.oneOf.1.ports","typeLabel":"integer[]"},"interactive":{"type":"boolean","default":true,"description":"When true, a client can attach a terminal; when false, launch starts the command unattended.","uniqueKey":"oneOf.0.manifest.oneOf.1.interactive","typeLabel":"boolean"},"preinstalled":{"type":"boolean","default":false,"description":"Declares that the launch's image already carries this agent's harness. The catalog sets it for agents bundled in the agents image; the listAgents entry reports it.","uniqueKey":"oneOf.0.manifest.oneOf.1.preinstalled","typeLabel":"boolean"},"resources":{"type":"object","additionalProperties":false,"properties":{"cpu_min":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.cpu_min","typeLabel":"number"},"memory_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.memory_min_mib","typeLabel":"integer"},"disk_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.disk_min_mib","typeLabel":"integer"},"extendable_lifetime":{"type":"boolean","const":true,"description":"Needed before POST /sandboxes/{sandbox_id}/lifetime may be called.","uniqueKey":"oneOf.0.manifest.oneOf.1.resources.extendable_lifetime","typeLabel":"boolean"},"region":{"type":"string","minLength":1,"description":"One value from the region registry: a provider's region (for example `provider:eu-west`),\nan area (EU) or a country (US). Never a list.\n","uniqueKey":"oneOf.0.manifest.oneOf.1.resources.region","typeLabel":"string"},"kernel":{"oneOf":[{"type":"string","enum":["shared","filtered","dedicated"],"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.kernel.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["shared","filtered","dedicated"],"type":"string","uniqueKey":"oneOf.0.manifest.oneOf.1.resources.kernel.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.kernel.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.kernel","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"paused_retention_seconds":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.paused_retention_seconds","typeLabel":"number"},"arch":{"oneOf":[{"type":"string","enum":["amd64","arm64"],"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.arch.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["amd64","arm64"],"type":"string","uniqueKey":"oneOf.0.manifest.oneOf.1.resources.arch.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.arch.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.arch","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"run_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.run_seconds","typeLabel":"integer"},"process_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.manifest.oneOf.1.resources.process_seconds","typeLabel":"integer"}},"description":"Resource constraints, execution limits, and environment facts that must hold for this\nsandbox. The matcher compares each named value with declared resources and capabilities;\nfields left out impose no requirement.\n","uniqueKey":"oneOf.0.manifest.oneOf.1.resources","typeLabel":"object"},"lifetime_seconds":{"oneOf":[{"type":"integer","minimum":1,"description":"Requested sandbox lifetime in seconds for this launch; the sandbox may run past its lifetime deadline. Null asks for a sandbox that never ends. Only a provider that never ends a sandbox serves it, and only on the workspace's own provider account. Left out, the create's own default applies: rolling credit reservations on a credit-funded route that can extend a lifetime, else 300 seconds.","uniqueKey":"oneOf.0.manifest.oneOf.1.lifetime_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"Requested sandbox lifetime in seconds for this launch; the sandbox may run past its lifetime deadline. Null asks for a sandbox that never ends. Only a provider that never ends a sandbox serves it, and only on the workspace's own provider account. Left out, the create's own default applies: rolling credit reservations on a credit-funded route that can extend a lifetime, else 300 seconds.","uniqueKey":"oneOf.0.manifest.oneOf.1.lifetime_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.manifest.oneOf.1.lifetime_seconds","typeLabel":"integer | null"},"placement":{"type":"object","additionalProperties":false,"description":"Provider preferences for which routes to use and how to rank them, and the route pin that\na create takes as `route`. A route's `request_overrides` in the provider listing name\n`route` at the top level of a create; a launch takes it here, under `placement`.\n","properties":{"preferences":{"type":"object","additionalProperties":false,"description":"The one provider-preference contract shared by sandbox creation, launch placement and\nActions policy settings. Every property is optional; omitted properties inherit.\nPrecedence, narrowest last: workspace restrictions are the ceiling, then a repository\ndefault or named Actions policy, then a workflow, then request controls. Hard\nrestrictions (provider allowlists, route, account, supply, region, privacy, origin and\nspend) intersect and can only narrow; request ignore unions with workspace exclusions.\nA request true never lifts a workspace allow_fallbacks false. When workspace\nprevent_overrides is on, containing order, sort or allow_fallbacks is refused with\nrouting_overrides_forbidden even if the value matches the workspace; `only` still\nnarrows as a set and cannot reorder workspace ranking. Otherwise soft preference values\nreplace inherited values without widening authority. `order: []` and `ignore: []` are valid empty soft\narrays that name no preference and no exclusion; inherited hard authority is unchanged.\nEach list must hold distinct values; null is never valid for any property.\n`order` prioritizes named providers in listed order; eligible providers omitted from\nit remain candidates afterward, ranked by the existing router order. When `only`\nis supplied, it remains the hard ordered allowlist and caps eligible providers; `order`\nmay rearrange its members, while omitted members retain `only` order. `ignore`\nexcludes providers even when named by `only` or `order`. `sort` ranks routes\nwithin a provider. `allow_fallbacks` defaults to true and controls whether\ncreation may dispatch a later eligible route after a provider definitively refuses before\ncreating a sandbox. This includes another account for the same provider. False stops after\nthe first route dispatch. Eligibility and preparation may skip a route before dispatch.\nProvider, account, supply, payer and requirements constraints remain binding.\n","properties":{"order":{"type":"array","uniqueItems":true,"description":"Softly prioritize these providers in the listed order. Eligible providers omitted\nfrom this list remain candidates afterward using the existing router order. When\n`only` is supplied, it remains the ordered hard allowlist and caps eligibility;\nthis order rearranges its members and omitted members retain their `only` order.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences.order.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences.order","typeLabel":"string[]"},"only":{"type":"array","minItems":1,"uniqueItems":true,"description":"Used as `preferences.only`, this is the hard allowlist of eligible providers. `preferences.order`\ntakes precedence for their order; otherwise this list's order applies. `preferences.sort`\nranks eligible routes within each provider. Route, account, supply,\npayer and requirements restrictions still constrain every route, and unlisted providers\nare never considered. A one-provider list prevents cross-provider fallback while allowing\nlater eligible routes for that provider when `preferences.allow_fallbacks` is true.\nSetting it to false stops after the first route dispatch, including a later account for\nthe same provider.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences.only.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences.only","typeLabel":"string[]"},"ignore":{"type":"array","uniqueItems":true,"description":"Providers to exclude from routing, even if also named in `only` or `order`.","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences.ignore.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences.ignore","typeLabel":"string[]"},"sort":{"type":"string","enum":["price","time"],"x-boxrouter-choices":{"price":{"label":"Price","line":"Lowest hourly price first.","measure":"price","better":"lower"},"time":{"label":"Time","line":"Shortest run time measured on reference workloads first.","measure":"time","better":"lower"}},"description":"How eligible routes are ranked. `price` picks the lowest hourly price. `time` picks the shortest run time, measured on reference workloads.\n","uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences.sort","typeLabel":"enum\u003cstring>"},"allow_fallbacks":{"type":"boolean","default":true,"description":"Whether Cloud may dispatch a later eligible route after a provider definitively\nrefuses before creating a sandbox; defaults to true and continues until a route\ncreates the sandbox or no eligible route remains. If `only` is supplied, it\nlimits eligible providers; `preferences.order` takes precedence for their order, with\n`preferences.sort` ranking routes within each provider.\nFalse stops after the first route dispatch, including when a later route uses another\naccount for the same provider. Local eligibility or preparation failures may skip a\nroute before dispatch. This does not expand the provider allowlist or relax route,\naccount, supply, payer or requirements restrictions.\n","uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences.allow_fallbacks","typeLabel":"boolean"}},"uniqueKey":"oneOf.0.manifest.oneOf.1.placement.preferences","typeLabel":"object"},"route":{"type":"object","additionalProperties":false,"description":"The remaining route filters. Each singular value is a hard pin: `id` and `account_id` name\nexactly one route or connected account and `supply` one funding authority. Fallback never\nmoves a pin, a volume remains attached to its selected route, and these\nfilters only narrow workspace restrictions.\n","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.manifest.oneOf.1.placement.route.id","typeLabel":"string"},"account_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","description":"Connected account ID. A provider disabled on this deployment returns 409 provider_not_enabled before routing.","uniqueKey":"oneOf.0.manifest.oneOf.1.placement.route.account_id","typeLabel":"string"},"supply":{"type":"string","enum":["byok","managed"],"uniqueKey":"oneOf.0.manifest.oneOf.1.placement.route.supply","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.0.manifest.oneOf.1.placement.route","typeLabel":"object"}},"uniqueKey":"oneOf.0.manifest.oneOf.1.placement","typeLabel":"object"},"code":{"type":"object","additionalProperties":false,"required":["repo","ref"],"description":"Clone a GitHub repository at the requested ref before setup.","properties":{"repo":{"type":"string","minLength":1,"pattern":"^(?:https://github\\.com/)?[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?$","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.code.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.code.ref","typeLabel":"string"},"directory":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","description":"Relative directory in the checked-out repository.","uniqueKey":"oneOf.0.manifest.oneOf.1.code.directory","typeLabel":"string"}},"uniqueKey":"oneOf.0.manifest.oneOf.1.code","typeLabel":"object"},"volume":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","pattern":"^vol_[0-9a-f]{32}$","description":"BoxRouter-managed Volume ID. Provider-native volume requirements are not accepted.","isRequired":true,"uniqueKey":"oneOf.0.manifest.oneOf.1.volume.id","typeLabel":"string"},"path":{"type":"string","pattern":"^/[^\\u0000]*$","default":"/workspace","description":"Absolute folder the checkpoint is restored into, replacing what the image has there. Repeated\nseparators and `.` path components are normalized; any `..` component is rejected. The path\nmust not be `/`, under /proc, /sys, /dev, /etc, /usr, /bin, /sbin, /lib or /run, or equal to\nor an ancestor of the internal `/tmp/boxrouter-volume` scratch path.\n","uniqueKey":"oneOf.0.manifest.oneOf.1.volume.path","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Checkpoint to restore; omitted means the head. An empty volume restores nothing. A\ncheckpoint saved from a branch sandbox is not the head and can be selected by number with\nwrite, branch or read access; read mounts exactly that checkpoint's files, never the head.\n","uniqueKey":"oneOf.0.manifest.oneOf.1.volume.checkpoint","typeLabel":"integer"},"access":{"type":"string","enum":["write","read","shared","branch"],"default":"write","description":"The access mode requested for this sandbox. Omitted means write. Launch modes are write,\nread, shared, and branch. Checkpoints and branches remain capability-gated.\n","uniqueKey":"oneOf.0.manifest.oneOf.1.volume.access","typeLabel":"enum\u003cstring>"}},"description":"BoxRouter-managed volume reference and access mode attached to the created sandbox.","uniqueKey":"oneOf.0.manifest.oneOf.1.volume","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"oneOf.0.manifest.oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.0.manifest","typeLabel":"object"},"overrides":{"type":"object","additionalProperties":false,"properties":{"image":{"oneOf":[{"type":"string","description":"OCI image reference.","minLength":1,"uniqueKey":"oneOf.0.overrides.image.oneOf.0","typeLabel":"string"},{"type":"object","required":["dockerfile"],"properties":{"dockerfile":{"type":"string","minLength":1,"description":"Dockerfile source sent to the provider's builder; never executed on the BoxRouter host.","isRequired":true,"uniqueKey":"oneOf.0.overrides.image.oneOf.1.dockerfile","typeLabel":"string"},"context_artifact_id":{"type":"string","minLength":1,"description":"Workspace-owned tar build context. Reject paths escaping the context,\nspecial device files and unsafe links; enforce compressed and expanded\nsize limits before using it. Source file and directory builder helpers\npackage their inputs into this context rather than sending host paths.\n","uniqueKey":"oneOf.0.overrides.image.oneOf.1.context_artifact_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0.overrides.image.oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.0.overrides.image","typeLabel":"string | object"},"resources":{"type":"object","additionalProperties":false,"properties":{"cpu_min":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.0.overrides.resources.cpu_min","typeLabel":"number"},"memory_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.overrides.resources.memory_min_mib","typeLabel":"integer"},"disk_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.overrides.resources.disk_min_mib","typeLabel":"integer"},"extendable_lifetime":{"type":"boolean","const":true,"description":"Needed before POST /sandboxes/{sandbox_id}/lifetime may be called.","uniqueKey":"oneOf.0.overrides.resources.extendable_lifetime","typeLabel":"boolean"},"region":{"type":"string","minLength":1,"description":"One value from the region registry: a provider's region (for example `provider:eu-west`),\nan area (EU) or a country (US). Never a list.\n","uniqueKey":"oneOf.0.overrides.resources.region","typeLabel":"string"},"kernel":{"oneOf":[{"type":"string","enum":["shared","filtered","dedicated"],"uniqueKey":"oneOf.0.overrides.resources.kernel.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["shared","filtered","dedicated"],"type":"string","uniqueKey":"oneOf.0.overrides.resources.kernel.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.0.overrides.resources.kernel.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.0.overrides.resources.kernel","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"paused_retention_seconds":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.0.overrides.resources.paused_retention_seconds","typeLabel":"number"},"arch":{"oneOf":[{"type":"string","enum":["amd64","arm64"],"uniqueKey":"oneOf.0.overrides.resources.arch.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["amd64","arm64"],"type":"string","uniqueKey":"oneOf.0.overrides.resources.arch.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.0.overrides.resources.arch.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.0.overrides.resources.arch","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"run_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.overrides.resources.run_seconds","typeLabel":"integer"},"process_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.0.overrides.resources.process_seconds","typeLabel":"integer"}},"description":"Resource constraints, execution limits, and environment facts that must hold for this\nsandbox. The matcher compares each named value with declared resources and capabilities;\nfields left out impose no requirement.\n","uniqueKey":"oneOf.0.overrides.resources","typeLabel":"object"},"lifetime_seconds":{"oneOf":[{"type":"integer","minimum":1,"description":"Requested sandbox lifetime in seconds, replacing the manifest value. The sandbox may run past its lifetime deadline. Null asks for a sandbox with no lifetime: it runs until destroyed, and only a provider that never ends a sandbox serves it, on the workspace's own provider account. If a chosen number exceeds every otherwise matching account's cap, launch fails with `lifetime_cap_exceeded`; the requested value is not lowered.","uniqueKey":"oneOf.0.overrides.lifetime_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"Requested sandbox lifetime in seconds, replacing the manifest value. The sandbox may run past its lifetime deadline. Null asks for a sandbox with no lifetime: it runs until destroyed, and only a provider that never ends a sandbox serves it, on the workspace's own provider account. If a chosen number exceeds every otherwise matching account's cap, launch fails with `lifetime_cap_exceeded`; the requested value is not lowered.","uniqueKey":"oneOf.0.overrides.lifetime_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.overrides.lifetime_seconds","typeLabel":"integer | null"},"code":{"type":"object","additionalProperties":false,"required":["repo","ref"],"description":"Repository/ref to check out, overriding the manifest's code source.","properties":{"repo":{"type":"string","minLength":1,"pattern":"^(?:https://github\\.com/)?[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?$","isRequired":true,"uniqueKey":"oneOf.0.overrides.code.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.overrides.code.ref","typeLabel":"string"},"directory":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","description":"Relative directory in the checked-out repository.","uniqueKey":"oneOf.0.overrides.code.directory","typeLabel":"string"}},"uniqueKey":"oneOf.0.overrides.code","typeLabel":"object"},"placement":{"type":"object","additionalProperties":false,"description":"Provider preferences for which routes to use and how to rank them, and the route pin that\na create takes as `route`. A route's `request_overrides` in the provider listing name\n`route` at the top level of a create; a launch takes it here, under `placement`.\n","properties":{"preferences":{"type":"object","additionalProperties":false,"description":"The one provider-preference contract shared by sandbox creation, launch placement and\nActions policy settings. Every property is optional; omitted properties inherit.\nPrecedence, narrowest last: workspace restrictions are the ceiling, then a repository\ndefault or named Actions policy, then a workflow, then request controls. Hard\nrestrictions (provider allowlists, route, account, supply, region, privacy, origin and\nspend) intersect and can only narrow; request ignore unions with workspace exclusions.\nA request true never lifts a workspace allow_fallbacks false. When workspace\nprevent_overrides is on, containing order, sort or allow_fallbacks is refused with\nrouting_overrides_forbidden even if the value matches the workspace; `only` still\nnarrows as a set and cannot reorder workspace ranking. Otherwise soft preference values\nreplace inherited values without widening authority. `order: []` and `ignore: []` are valid empty soft\narrays that name no preference and no exclusion; inherited hard authority is unchanged.\nEach list must hold distinct values; null is never valid for any property.\n`order` prioritizes named providers in listed order; eligible providers omitted from\nit remain candidates afterward, ranked by the existing router order. When `only`\nis supplied, it remains the hard ordered allowlist and caps eligible providers; `order`\nmay rearrange its members, while omitted members retain `only` order. `ignore`\nexcludes providers even when named by `only` or `order`. `sort` ranks routes\nwithin a provider. `allow_fallbacks` defaults to true and controls whether\ncreation may dispatch a later eligible route after a provider definitively refuses before\ncreating a sandbox. This includes another account for the same provider. False stops after\nthe first route dispatch. Eligibility and preparation may skip a route before dispatch.\nProvider, account, supply, payer and requirements constraints remain binding.\n","properties":{"order":{"type":"array","uniqueItems":true,"description":"Softly prioritize these providers in the listed order. Eligible providers omitted\nfrom this list remain candidates afterward using the existing router order. When\n`only` is supplied, it remains the ordered hard allowlist and caps eligibility;\nthis order rearranges its members and omitted members retain their `only` order.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.overrides.placement.preferences.order.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.overrides.placement.preferences.order","typeLabel":"string[]"},"only":{"type":"array","minItems":1,"uniqueItems":true,"description":"Used as `preferences.only`, this is the hard allowlist of eligible providers. `preferences.order`\ntakes precedence for their order; otherwise this list's order applies. `preferences.sort`\nranks eligible routes within each provider. Route, account, supply,\npayer and requirements restrictions still constrain every route, and unlisted providers\nare never considered. A one-provider list prevents cross-provider fallback while allowing\nlater eligible routes for that provider when `preferences.allow_fallbacks` is true.\nSetting it to false stops after the first route dispatch, including a later account for\nthe same provider.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.overrides.placement.preferences.only.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.overrides.placement.preferences.only","typeLabel":"string[]"},"ignore":{"type":"array","uniqueItems":true,"description":"Providers to exclude from routing, even if also named in `only` or `order`.","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.overrides.placement.preferences.ignore.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.overrides.placement.preferences.ignore","typeLabel":"string[]"},"sort":{"type":"string","enum":["price","time"],"x-boxrouter-choices":{"price":{"label":"Price","line":"Lowest hourly price first.","measure":"price","better":"lower"},"time":{"label":"Time","line":"Shortest run time measured on reference workloads first.","measure":"time","better":"lower"}},"description":"How eligible routes are ranked. `price` picks the lowest hourly price. `time` picks the shortest run time, measured on reference workloads.\n","uniqueKey":"oneOf.0.overrides.placement.preferences.sort","typeLabel":"enum\u003cstring>"},"allow_fallbacks":{"type":"boolean","default":true,"description":"Whether Cloud may dispatch a later eligible route after a provider definitively\nrefuses before creating a sandbox; defaults to true and continues until a route\ncreates the sandbox or no eligible route remains. If `only` is supplied, it\nlimits eligible providers; `preferences.order` takes precedence for their order, with\n`preferences.sort` ranking routes within each provider.\nFalse stops after the first route dispatch, including when a later route uses another\naccount for the same provider. Local eligibility or preparation failures may skip a\nroute before dispatch. This does not expand the provider allowlist or relax route,\naccount, supply, payer or requirements restrictions.\n","uniqueKey":"oneOf.0.overrides.placement.preferences.allow_fallbacks","typeLabel":"boolean"}},"uniqueKey":"oneOf.0.overrides.placement.preferences","typeLabel":"object"},"route":{"type":"object","additionalProperties":false,"description":"The remaining route filters. Each singular value is a hard pin: `id` and `account_id` name\nexactly one route or connected account and `supply` one funding authority. Fallback never\nmoves a pin, a volume remains attached to its selected route, and these\nfilters only narrow workspace restrictions.\n","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.overrides.placement.route.id","typeLabel":"string"},"account_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","description":"Connected account ID. A provider disabled on this deployment returns 409 provider_not_enabled before routing.","uniqueKey":"oneOf.0.overrides.placement.route.account_id","typeLabel":"string"},"supply":{"type":"string","enum":["byok","managed"],"uniqueKey":"oneOf.0.overrides.placement.route.supply","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.0.overrides.placement.route","typeLabel":"object"}},"uniqueKey":"oneOf.0.overrides.placement","typeLabel":"object"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.overrides.env.additionalProperties","typeLabel":"string"},"description":"Non-secret environment values applied to setup and the launch.","uniqueKey":"oneOf.0.overrides.env","typeLabel":"object"}},"uniqueKey":"oneOf.0.overrides","typeLabel":"object"},"additional_secret_refs":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"object","additionalProperties":false,"required":["secret_name"],"properties":{"secret_name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","isRequired":true,"uniqueKey":"oneOf.0.additional_secret_refs.additionalProperties.secret_name","typeLabel":"string"}},"uniqueKey":"oneOf.0.additional_secret_refs.additionalProperties","typeLabel":"object"},"uniqueKey":"oneOf.0.additional_secret_refs","typeLabel":"object"},"credential_delivery":{"type":"string","enum":["prefer_native","require_native"],"default":"prefer_native","description":"Whether compatible environment fallback is allowed or protected delivery is required.","uniqueKey":"oneOf.0.credential_delivery","typeLabel":"enum\u003cstring>"},"run":{"type":"object","additionalProperties":false,"required":["id","index","count"],"description":"Optional client supplied batch metadata. Each launch remains independent; the server stores the values on its launch operation, labels the sandbox group and copy, and echoes this object in the successful Launch result. The server does not check group completeness.","properties":{"id":{"type":"string","minLength":22,"maxLength":128,"description":"Random group identifier chosen by the client with at least 128 bits of entropy.","isRequired":true,"uniqueKey":"oneOf.0.run.id","typeLabel":"string"},"index":{"type":"integer","minimum":0,"description":"Zero-based position of this launch; must be less than count.","isRequired":true,"uniqueKey":"oneOf.0.run.index","typeLabel":"integer"},"count":{"type":"integer","minimum":1,"description":"Number of launches the client intends to submit; completeness is not checked.","isRequired":true,"uniqueKey":"oneOf.0.run.count","typeLabel":"integer"}},"uniqueKey":"oneOf.0.run","typeLabel":"object"},"registry_credentials":{"type":"object","additionalProperties":false,"required":["username","password"],"properties":{"username":{"type":"string","minLength":1,"pattern":"^[^\\u0000]*$","isRequired":true,"uniqueKey":"oneOf.0.registry_credentials.username","typeLabel":"string"},"password":{"type":"string","minLength":1,"writeOnly":true,"pattern":"^[^\\u0000]*$","isRequired":true,"uniqueKey":"oneOf.0.registry_credentials.password","typeLabel":"string"}},"description":"Request-only login for a manifest whose image is {private_oci}; required with it and\nrefused without it. Both strings are non-empty, at most 64 KiB UTF-8 bytes together.\nIt is passed to the provider to set up a copy of the image and is never stored,\nlogged, traced or returned. Not accepted by unattended launch runs.\n","uniqueKey":"oneOf.0.registry_credentials","typeLabel":"object"},"secret_values":{"type":"object","propertyNames":{"$ref":"#/components/schemas/SecretName"},"additionalProperties":{"type":"string","writeOnly":true,"maxLength":16384,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.0.secret_values.additionalProperties","typeLabel":"string"},"description":"Request-only secret values for names declared by the resolved manifest. Unknown\nnames are invalid_request. The server enforces request size limits outside JSON\nSchema validation. Values are never stored, returned or logged.\n","uniqueKey":"oneOf.0.secret_values","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"One unattended launch run. Uses the canonical launch request fields and requires copies; request-only credential values are refused by the server before reservation.","required":["copies","manifest"],"properties":{"manifest":{"oneOf":[{"type":"object","description":"A complete inline agent manifest or a source wrapper whose command can come from the referenced file.","required":["name","command"],"properties":{"name":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z][a-z0-9-]{0,62}$","description":"A lowercase identifier for the agent.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.name","typeLabel":"string"},"command":{"type":"string","minLength":1,"pattern":"^[^\\u0000]*$","description":"Command to run in an attached terminal or as an unattended process after preparation succeeds.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.command","typeLabel":"string"},"description":{"type":"string","description":"Optional text describing the agent.","uniqueKey":"oneOf.1.manifest.oneOf.0.description","typeLabel":"string"},"image":{"oneOf":[{"type":"string","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","minLength":1,"uniqueKey":"oneOf.1.manifest.oneOf.0.image.oneOf.0","typeLabel":"string"},{"type":"object","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","required":["dockerfile"],"properties":{"dockerfile":{"type":"string","minLength":1,"description":"Dockerfile source sent to the provider's builder; never executed on the BoxRouter host.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.image.oneOf.1.dockerfile","typeLabel":"string"},"context_artifact_id":{"type":"string","minLength":1,"description":"Workspace-owned tar build context. Reject paths escaping the context,\nspecial device files and unsafe links; enforce compressed and expanded\nsize limits before using it. Source file and directory builder helpers\npackage their inputs into this context rather than sending host paths.\n","uniqueKey":"oneOf.1.manifest.oneOf.0.image.oneOf.1.context_artifact_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1.manifest.oneOf.0.image.oneOf.1","typeLabel":"object"},{"type":"object","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","required":["private_oci"],"properties":{"private_oci":{"type":"string","minLength":1,"description":"OCI image reference in a registry that needs a login; send registry_credentials with the launch request.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.image.oneOf.2.private_oci","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1.manifest.oneOf.0.image.oneOf.2","typeLabel":"object"}],"uniqueKey":"oneOf.1.manifest.oneOf.0.image","typeLabel":"string · object · object"},"setup":{"type":"array","items":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.0.setup.items.[INDEX]","typeLabel":"string"},"description":"Shell commands run in order before files and background commands.","uniqueKey":"oneOf.1.manifest.oneOf.0.setup","typeLabel":"string[]"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.0.env.additionalProperties","typeLabel":"string"},"description":"Non-secret environment values applied to setup and the launch.","uniqueKey":"oneOf.1.manifest.oneOf.0.env","typeLabel":"object"},"secrets":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.1.manifest.oneOf.0.secrets.items.[INDEX]","typeLabel":"string"},"description":"Names whose values are resolved by the server and added only to the create environment.","uniqueKey":"oneOf.1.manifest.oneOf.0.secrets","typeLabel":"string[]"},"required_env":{"type":"array","default":[],"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.required_env.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","minLength":1,"maxLength":1024,"description":"Plain-text setup guidance, never an input value or executable markup.","uniqueKey":"oneOf.1.manifest.oneOf.0.required_env.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"oneOf.1.manifest.oneOf.0.required_env.items.[INDEX]","typeLabel":"object"},"description":"Names of environment variables that must have nonblank values when launching the agent. BoxRouter checks them after merging env overrides and resolving credentials, before reservation. Values remain unchanged; this does not verify an external session or credential.","uniqueKey":"oneOf.1.manifest.oneOf.0.required_env","typeLabel":"object[]"},"max_copies":{"type":"integer","minimum":1,"description":"Maximum copies of this resolved manifest in one launch run. Omission adds no manifest-specific ceiling. Interactive manifests remain ineligible for launch runs.","uniqueKey":"oneOf.1.manifest.oneOf.0.max_copies","typeLabel":"integer"},"model_access":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["secret","provider","label"],"properties":{"secret":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.model_access.items.[INDEX].secret","typeLabel":"string"},"provider":{"type":"string","enum":["openai","anthropic","openrouter","cursor"],"x-boxrouter-open-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.model_access.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":128,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.model_access.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"oneOf.1.manifest.oneOf.0.model_access.items.[INDEX]","typeLabel":"object"},"description":"Named secrets that configure this catalog agent for model access. A launch may select at most one.","uniqueKey":"oneOf.1.manifest.oneOf.0.model_access","typeLabel":"object[]"},"sign_in":{"type":"string","minLength":1,"maxLength":256,"description":"What to do inside the agent when no recognized model secret is selected.","uniqueKey":"oneOf.1.manifest.oneOf.0.sign_in","typeLabel":"string"},"files":{"type":"object","propertyNames":{"pattern":"^(?:~/)?(?!/)(?!~/?$)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*(?:^|/)\\.(?:/|$))(?!.*\\/$)[^\\u0000]+$"},"additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.manifest.oneOf.0.files.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"object","uniqueKey":"oneOf.1.manifest.oneOf.0.files.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.1.manifest.oneOf.0.files.additionalProperties","typeLabel":"string | object"},"description":"Relative sandbox paths mapped to UTF-8 text or JSON objects, written before background commands.","uniqueKey":"oneOf.1.manifest.oneOf.0.files","typeLabel":"object"},"background":{"type":"array","items":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.0.background.items.[INDEX]","typeLabel":"string"},"description":"Shell commands started detached during preparation before the launch command starts.","uniqueKey":"oneOf.1.manifest.oneOf.0.background","typeLabel":"string[]"},"ports":{"type":"array","uniqueItems":true,"items":{"type":"integer","minimum":1,"maximum":65535,"uniqueKey":"oneOf.1.manifest.oneOf.0.ports.items.[INDEX]","typeLabel":"integer"},"description":"Ports to expose as previews. Naming ports adds the previews requirement to routing.","uniqueKey":"oneOf.1.manifest.oneOf.0.ports","typeLabel":"integer[]"},"interactive":{"type":"boolean","default":true,"description":"When true, a client can attach a terminal; when false, launch starts the command unattended.","uniqueKey":"oneOf.1.manifest.oneOf.0.interactive","typeLabel":"boolean"},"preinstalled":{"type":"boolean","default":false,"description":"Declares that the launch's image already carries this agent's harness. The catalog sets it for agents bundled in the agents image; the listAgents entry reports it.","uniqueKey":"oneOf.1.manifest.oneOf.0.preinstalled","typeLabel":"boolean"},"resources":{"type":"object","additionalProperties":false,"properties":{"cpu_min":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.cpu_min","typeLabel":"number"},"memory_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.memory_min_mib","typeLabel":"integer"},"disk_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.disk_min_mib","typeLabel":"integer"},"extendable_lifetime":{"type":"boolean","const":true,"description":"Needed before POST /sandboxes/{sandbox_id}/lifetime may be called.","uniqueKey":"oneOf.1.manifest.oneOf.0.resources.extendable_lifetime","typeLabel":"boolean"},"region":{"type":"string","minLength":1,"description":"One value from the region registry: a provider's region (for example `provider:eu-west`),\nan area (EU) or a country (US). Never a list.\n","uniqueKey":"oneOf.1.manifest.oneOf.0.resources.region","typeLabel":"string"},"kernel":{"oneOf":[{"type":"string","enum":["shared","filtered","dedicated"],"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.kernel.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["shared","filtered","dedicated"],"type":"string","uniqueKey":"oneOf.1.manifest.oneOf.0.resources.kernel.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.kernel.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.kernel","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"paused_retention_seconds":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.paused_retention_seconds","typeLabel":"number"},"arch":{"oneOf":[{"type":"string","enum":["amd64","arm64"],"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.arch.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["amd64","arm64"],"type":"string","uniqueKey":"oneOf.1.manifest.oneOf.0.resources.arch.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.arch.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.arch","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"run_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.run_seconds","typeLabel":"integer"},"process_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.manifest.oneOf.0.resources.process_seconds","typeLabel":"integer"}},"description":"Resource constraints, execution limits, and environment facts that must hold for this\nsandbox. The matcher compares each named value with declared resources and capabilities;\nfields left out impose no requirement.\n","uniqueKey":"oneOf.1.manifest.oneOf.0.resources","typeLabel":"object"},"lifetime_seconds":{"oneOf":[{"type":"integer","minimum":1,"description":"Requested sandbox lifetime in seconds for this launch; the sandbox may run past its lifetime deadline. Null asks for a sandbox that never ends. Only a provider that never ends a sandbox serves it, and only on the workspace's own provider account. Left out, the create's own default applies: rolling credit reservations on a credit-funded route that can extend a lifetime, else 300 seconds.","uniqueKey":"oneOf.1.manifest.oneOf.0.lifetime_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"Requested sandbox lifetime in seconds for this launch; the sandbox may run past its lifetime deadline. Null asks for a sandbox that never ends. Only a provider that never ends a sandbox serves it, and only on the workspace's own provider account. Left out, the create's own default applies: rolling credit reservations on a credit-funded route that can extend a lifetime, else 300 seconds.","uniqueKey":"oneOf.1.manifest.oneOf.0.lifetime_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.manifest.oneOf.0.lifetime_seconds","typeLabel":"integer | null"},"placement":{"type":"object","additionalProperties":false,"description":"Provider preferences for which routes to use and how to rank them, and the route pin that\na create takes as `route`. A route's `request_overrides` in the provider listing name\n`route` at the top level of a create; a launch takes it here, under `placement`.\n","properties":{"preferences":{"type":"object","additionalProperties":false,"description":"The one provider-preference contract shared by sandbox creation, launch placement and\nActions policy settings. Every property is optional; omitted properties inherit.\nPrecedence, narrowest last: workspace restrictions are the ceiling, then a repository\ndefault or named Actions policy, then a workflow, then request controls. Hard\nrestrictions (provider allowlists, route, account, supply, region, privacy, origin and\nspend) intersect and can only narrow; request ignore unions with workspace exclusions.\nA request true never lifts a workspace allow_fallbacks false. When workspace\nprevent_overrides is on, containing order, sort or allow_fallbacks is refused with\nrouting_overrides_forbidden even if the value matches the workspace; `only` still\nnarrows as a set and cannot reorder workspace ranking. Otherwise soft preference values\nreplace inherited values without widening authority. `order: []` and `ignore: []` are valid empty soft\narrays that name no preference and no exclusion; inherited hard authority is unchanged.\nEach list must hold distinct values; null is never valid for any property.\n`order` prioritizes named providers in listed order; eligible providers omitted from\nit remain candidates afterward, ranked by the existing router order. When `only`\nis supplied, it remains the hard ordered allowlist and caps eligible providers; `order`\nmay rearrange its members, while omitted members retain `only` order. `ignore`\nexcludes providers even when named by `only` or `order`. `sort` ranks routes\nwithin a provider. `allow_fallbacks` defaults to true and controls whether\ncreation may dispatch a later eligible route after a provider definitively refuses before\ncreating a sandbox. This includes another account for the same provider. False stops after\nthe first route dispatch. Eligibility and preparation may skip a route before dispatch.\nProvider, account, supply, payer and requirements constraints remain binding.\n","properties":{"order":{"type":"array","uniqueItems":true,"description":"Softly prioritize these providers in the listed order. Eligible providers omitted\nfrom this list remain candidates afterward using the existing router order. When\n`only` is supplied, it remains the ordered hard allowlist and caps eligibility;\nthis order rearranges its members and omitted members retain their `only` order.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences.order.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences.order","typeLabel":"string[]"},"only":{"type":"array","minItems":1,"uniqueItems":true,"description":"Used as `preferences.only`, this is the hard allowlist of eligible providers. `preferences.order`\ntakes precedence for their order; otherwise this list's order applies. `preferences.sort`\nranks eligible routes within each provider. Route, account, supply,\npayer and requirements restrictions still constrain every route, and unlisted providers\nare never considered. A one-provider list prevents cross-provider fallback while allowing\nlater eligible routes for that provider when `preferences.allow_fallbacks` is true.\nSetting it to false stops after the first route dispatch, including a later account for\nthe same provider.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences.only.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences.only","typeLabel":"string[]"},"ignore":{"type":"array","uniqueItems":true,"description":"Providers to exclude from routing, even if also named in `only` or `order`.","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences.ignore.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences.ignore","typeLabel":"string[]"},"sort":{"type":"string","enum":["price","time"],"x-boxrouter-choices":{"price":{"label":"Price","line":"Lowest hourly price first.","measure":"price","better":"lower"},"time":{"label":"Time","line":"Shortest run time measured on reference workloads first.","measure":"time","better":"lower"}},"description":"How eligible routes are ranked. `price` picks the lowest hourly price. `time` picks the shortest run time, measured on reference workloads.\n","uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences.sort","typeLabel":"enum\u003cstring>"},"allow_fallbacks":{"type":"boolean","default":true,"description":"Whether Cloud may dispatch a later eligible route after a provider definitively\nrefuses before creating a sandbox; defaults to true and continues until a route\ncreates the sandbox or no eligible route remains. If `only` is supplied, it\nlimits eligible providers; `preferences.order` takes precedence for their order, with\n`preferences.sort` ranking routes within each provider.\nFalse stops after the first route dispatch, including when a later route uses another\naccount for the same provider. Local eligibility or preparation failures may skip a\nroute before dispatch. This does not expand the provider allowlist or relax route,\naccount, supply, payer or requirements restrictions.\n","uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences.allow_fallbacks","typeLabel":"boolean"}},"uniqueKey":"oneOf.1.manifest.oneOf.0.placement.preferences","typeLabel":"object"},"route":{"type":"object","additionalProperties":false,"description":"The remaining route filters. Each singular value is a hard pin: `id` and `account_id` name\nexactly one route or connected account and `supply` one funding authority. Fallback never\nmoves a pin, a volume remains attached to its selected route, and these\nfilters only narrow workspace restrictions.\n","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.0.placement.route.id","typeLabel":"string"},"account_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","description":"Connected account ID. A provider disabled on this deployment returns 409 provider_not_enabled before routing.","uniqueKey":"oneOf.1.manifest.oneOf.0.placement.route.account_id","typeLabel":"string"},"supply":{"type":"string","enum":["byok","managed"],"uniqueKey":"oneOf.1.manifest.oneOf.0.placement.route.supply","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.1.manifest.oneOf.0.placement.route","typeLabel":"object"}},"uniqueKey":"oneOf.1.manifest.oneOf.0.placement","typeLabel":"object"},"code":{"type":"object","additionalProperties":false,"required":["repo","ref"],"description":"Clone a GitHub repository at the requested ref before setup.","properties":{"repo":{"type":"string","minLength":1,"pattern":"^(?:https://github\\.com/)?[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?$","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.code.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.code.ref","typeLabel":"string"},"directory":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","description":"Relative directory in the checked-out repository.","uniqueKey":"oneOf.1.manifest.oneOf.0.code.directory","typeLabel":"string"}},"uniqueKey":"oneOf.1.manifest.oneOf.0.code","typeLabel":"object"},"source":{"type":"object","additionalProperties":false,"required":["repo","ref","path"],"description":"For a launch, fetch this manifest file at the selected repository ref, then apply the other supplied manifest fields as overrides.","properties":{"repo":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.source.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.source.ref","typeLabel":"string"},"path":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.source.path","typeLabel":"string"}},"uniqueKey":"oneOf.1.manifest.oneOf.0.source","typeLabel":"object"},"volume":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","pattern":"^vol_[0-9a-f]{32}$","description":"BoxRouter-managed Volume ID. Provider-native volume requirements are not accepted.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0.volume.id","typeLabel":"string"},"path":{"type":"string","pattern":"^/[^\\u0000]*$","default":"/workspace","description":"Absolute folder the checkpoint is restored into, replacing what the image has there. Repeated\nseparators and `.` path components are normalized; any `..` component is rejected. The path\nmust not be `/`, under /proc, /sys, /dev, /etc, /usr, /bin, /sbin, /lib or /run, or equal to\nor an ancestor of the internal `/tmp/boxrouter-volume` scratch path.\n","uniqueKey":"oneOf.1.manifest.oneOf.0.volume.path","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Checkpoint to restore; omitted means the head. An empty volume restores nothing. A\ncheckpoint saved from a branch sandbox is not the head and can be selected by number with\nwrite, branch or read access; read mounts exactly that checkpoint's files, never the head.\n","uniqueKey":"oneOf.1.manifest.oneOf.0.volume.checkpoint","typeLabel":"integer"},"access":{"type":"string","enum":["write","read","shared","branch"],"default":"write","description":"The access mode requested for this sandbox. Omitted means write. Launch modes are write,\nread, shared, and branch. Checkpoints and branches remain capability-gated.\n","uniqueKey":"oneOf.1.manifest.oneOf.0.volume.access","typeLabel":"enum\u003cstring>"}},"description":"BoxRouter-managed volume reference and access mode attached to the created sandbox.","uniqueKey":"oneOf.1.manifest.oneOf.0.volume","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.0","typeLabel":"object"},{"type":"object","description":"A complete inline agent manifest or a source wrapper whose command can come from the referenced file.","required":["name","source"],"properties":{"name":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z][a-z0-9-]{0,62}$","description":"A lowercase identifier for the agent.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.name","typeLabel":"string"},"source":{"type":"object","additionalProperties":false,"required":["repo","ref","path"],"description":"For a launch, fetch this manifest file at the selected repository ref, then apply the other supplied manifest fields as overrides.","properties":{"repo":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.source.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.source.ref","typeLabel":"string"},"path":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.source.path","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.source","typeLabel":"object"},"description":{"type":"string","description":"Optional text describing the agent.","uniqueKey":"oneOf.1.manifest.oneOf.1.description","typeLabel":"string"},"image":{"oneOf":[{"type":"string","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","minLength":1,"uniqueKey":"oneOf.1.manifest.oneOf.1.image.oneOf.0","typeLabel":"string"},{"type":"object","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","required":["dockerfile"],"properties":{"dockerfile":{"type":"string","minLength":1,"description":"Dockerfile source sent to the provider's builder; never executed on the BoxRouter host.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.image.oneOf.1.dockerfile","typeLabel":"string"},"context_artifact_id":{"type":"string","minLength":1,"description":"Workspace-owned tar build context. Reject paths escaping the context,\nspecial device files and unsafe links; enforce compressed and expanded\nsize limits before using it. Source file and directory builder helpers\npackage their inputs into this context rather than sending host paths.\n","uniqueKey":"oneOf.1.manifest.oneOf.1.image.oneOf.1.context_artifact_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1.manifest.oneOf.1.image.oneOf.1","typeLabel":"object"},{"type":"object","description":"Omit to use the standard image. {private_oci} names an image whose registry needs a\nlogin, sent as `registry_credentials` on the launch request; it launches only on\nroutes that use your own provider keys, and not as an unattended run.\n","required":["private_oci"],"properties":{"private_oci":{"type":"string","minLength":1,"description":"OCI image reference in a registry that needs a login; send registry_credentials with the launch request.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.image.oneOf.2.private_oci","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1.manifest.oneOf.1.image.oneOf.2","typeLabel":"object"}],"uniqueKey":"oneOf.1.manifest.oneOf.1.image","typeLabel":"string · object · object"},"setup":{"type":"array","items":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.1.setup.items.[INDEX]","typeLabel":"string"},"description":"Shell commands run in order before files and background commands.","uniqueKey":"oneOf.1.manifest.oneOf.1.setup","typeLabel":"string[]"},"command":{"type":"string","minLength":1,"pattern":"^[^\\u0000]*$","description":"Command to run in an attached terminal or as an unattended process after preparation succeeds.","uniqueKey":"oneOf.1.manifest.oneOf.1.command","typeLabel":"string"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.1.env.additionalProperties","typeLabel":"string"},"description":"Non-secret environment values applied to setup and the launch.","uniqueKey":"oneOf.1.manifest.oneOf.1.env","typeLabel":"object"},"secrets":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.1.manifest.oneOf.1.secrets.items.[INDEX]","typeLabel":"string"},"description":"Names whose values are resolved by the server and added only to the create environment.","uniqueKey":"oneOf.1.manifest.oneOf.1.secrets","typeLabel":"string[]"},"required_env":{"type":"array","default":[],"items":{"type":"object","additionalProperties":false,"required":["name"],"properties":{"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.required_env.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","minLength":1,"maxLength":1024,"description":"Plain-text setup guidance, never an input value or executable markup.","uniqueKey":"oneOf.1.manifest.oneOf.1.required_env.items.[INDEX].description","typeLabel":"string"}},"uniqueKey":"oneOf.1.manifest.oneOf.1.required_env.items.[INDEX]","typeLabel":"object"},"description":"Names of environment variables that must have nonblank values when launching the agent. BoxRouter checks them after merging env overrides and resolving credentials, before reservation. Values remain unchanged; this does not verify an external session or credential.","uniqueKey":"oneOf.1.manifest.oneOf.1.required_env","typeLabel":"object[]"},"max_copies":{"type":"integer","minimum":1,"description":"Maximum copies of this resolved manifest in one launch run. Omission adds no manifest-specific ceiling. Interactive manifests remain ineligible for launch runs.","uniqueKey":"oneOf.1.manifest.oneOf.1.max_copies","typeLabel":"integer"},"model_access":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["secret","provider","label"],"properties":{"secret":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.model_access.items.[INDEX].secret","typeLabel":"string"},"provider":{"type":"string","enum":["openai","anthropic","openrouter","cursor"],"x-boxrouter-open-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.model_access.items.[INDEX].provider","typeLabel":"enum\u003cstring>"},"label":{"type":"string","minLength":1,"maxLength":128,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.model_access.items.[INDEX].label","typeLabel":"string"}},"uniqueKey":"oneOf.1.manifest.oneOf.1.model_access.items.[INDEX]","typeLabel":"object"},"description":"Named secrets that configure this catalog agent for model access. A launch may select at most one.","uniqueKey":"oneOf.1.manifest.oneOf.1.model_access","typeLabel":"object[]"},"sign_in":{"type":"string","minLength":1,"maxLength":256,"description":"What to do inside the agent when no recognized model secret is selected.","uniqueKey":"oneOf.1.manifest.oneOf.1.sign_in","typeLabel":"string"},"files":{"type":"object","propertyNames":{"pattern":"^(?:~/)?(?!/)(?!~/?$)(?!.*(?:^|/)\\.\\.(?:/|$))(?!.*(?:^|/)\\.(?:/|$))(?!.*\\/$)[^\\u0000]+$"},"additionalProperties":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.manifest.oneOf.1.files.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"object","uniqueKey":"oneOf.1.manifest.oneOf.1.files.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.1.manifest.oneOf.1.files.additionalProperties","typeLabel":"string | object"},"description":"Relative sandbox paths mapped to UTF-8 text or JSON objects, written before background commands.","uniqueKey":"oneOf.1.manifest.oneOf.1.files","typeLabel":"object"},"background":{"type":"array","items":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.1.background.items.[INDEX]","typeLabel":"string"},"description":"Shell commands started detached during preparation before the launch command starts.","uniqueKey":"oneOf.1.manifest.oneOf.1.background","typeLabel":"string[]"},"ports":{"type":"array","uniqueItems":true,"items":{"type":"integer","minimum":1,"maximum":65535,"uniqueKey":"oneOf.1.manifest.oneOf.1.ports.items.[INDEX]","typeLabel":"integer"},"description":"Ports to expose as previews. Naming ports adds the previews requirement to routing.","uniqueKey":"oneOf.1.manifest.oneOf.1.ports","typeLabel":"integer[]"},"interactive":{"type":"boolean","default":true,"description":"When true, a client can attach a terminal; when false, launch starts the command unattended.","uniqueKey":"oneOf.1.manifest.oneOf.1.interactive","typeLabel":"boolean"},"preinstalled":{"type":"boolean","default":false,"description":"Declares that the launch's image already carries this agent's harness. The catalog sets it for agents bundled in the agents image; the listAgents entry reports it.","uniqueKey":"oneOf.1.manifest.oneOf.1.preinstalled","typeLabel":"boolean"},"resources":{"type":"object","additionalProperties":false,"properties":{"cpu_min":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.cpu_min","typeLabel":"number"},"memory_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.memory_min_mib","typeLabel":"integer"},"disk_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.disk_min_mib","typeLabel":"integer"},"extendable_lifetime":{"type":"boolean","const":true,"description":"Needed before POST /sandboxes/{sandbox_id}/lifetime may be called.","uniqueKey":"oneOf.1.manifest.oneOf.1.resources.extendable_lifetime","typeLabel":"boolean"},"region":{"type":"string","minLength":1,"description":"One value from the region registry: a provider's region (for example `provider:eu-west`),\nan area (EU) or a country (US). Never a list.\n","uniqueKey":"oneOf.1.manifest.oneOf.1.resources.region","typeLabel":"string"},"kernel":{"oneOf":[{"type":"string","enum":["shared","filtered","dedicated"],"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.kernel.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["shared","filtered","dedicated"],"type":"string","uniqueKey":"oneOf.1.manifest.oneOf.1.resources.kernel.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.kernel.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.kernel","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"paused_retention_seconds":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.paused_retention_seconds","typeLabel":"number"},"arch":{"oneOf":[{"type":"string","enum":["amd64","arm64"],"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.arch.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["amd64","arm64"],"type":"string","uniqueKey":"oneOf.1.manifest.oneOf.1.resources.arch.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.arch.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.arch","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"run_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.run_seconds","typeLabel":"integer"},"process_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.manifest.oneOf.1.resources.process_seconds","typeLabel":"integer"}},"description":"Resource constraints, execution limits, and environment facts that must hold for this\nsandbox. The matcher compares each named value with declared resources and capabilities;\nfields left out impose no requirement.\n","uniqueKey":"oneOf.1.manifest.oneOf.1.resources","typeLabel":"object"},"lifetime_seconds":{"oneOf":[{"type":"integer","minimum":1,"description":"Requested sandbox lifetime in seconds for this launch; the sandbox may run past its lifetime deadline. Null asks for a sandbox that never ends. Only a provider that never ends a sandbox serves it, and only on the workspace's own provider account. Left out, the create's own default applies: rolling credit reservations on a credit-funded route that can extend a lifetime, else 300 seconds.","uniqueKey":"oneOf.1.manifest.oneOf.1.lifetime_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"Requested sandbox lifetime in seconds for this launch; the sandbox may run past its lifetime deadline. Null asks for a sandbox that never ends. Only a provider that never ends a sandbox serves it, and only on the workspace's own provider account. Left out, the create's own default applies: rolling credit reservations on a credit-funded route that can extend a lifetime, else 300 seconds.","uniqueKey":"oneOf.1.manifest.oneOf.1.lifetime_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.manifest.oneOf.1.lifetime_seconds","typeLabel":"integer | null"},"placement":{"type":"object","additionalProperties":false,"description":"Provider preferences for which routes to use and how to rank them, and the route pin that\na create takes as `route`. A route's `request_overrides` in the provider listing name\n`route` at the top level of a create; a launch takes it here, under `placement`.\n","properties":{"preferences":{"type":"object","additionalProperties":false,"description":"The one provider-preference contract shared by sandbox creation, launch placement and\nActions policy settings. Every property is optional; omitted properties inherit.\nPrecedence, narrowest last: workspace restrictions are the ceiling, then a repository\ndefault or named Actions policy, then a workflow, then request controls. Hard\nrestrictions (provider allowlists, route, account, supply, region, privacy, origin and\nspend) intersect and can only narrow; request ignore unions with workspace exclusions.\nA request true never lifts a workspace allow_fallbacks false. When workspace\nprevent_overrides is on, containing order, sort or allow_fallbacks is refused with\nrouting_overrides_forbidden even if the value matches the workspace; `only` still\nnarrows as a set and cannot reorder workspace ranking. Otherwise soft preference values\nreplace inherited values without widening authority. `order: []` and `ignore: []` are valid empty soft\narrays that name no preference and no exclusion; inherited hard authority is unchanged.\nEach list must hold distinct values; null is never valid for any property.\n`order` prioritizes named providers in listed order; eligible providers omitted from\nit remain candidates afterward, ranked by the existing router order. When `only`\nis supplied, it remains the hard ordered allowlist and caps eligible providers; `order`\nmay rearrange its members, while omitted members retain `only` order. `ignore`\nexcludes providers even when named by `only` or `order`. `sort` ranks routes\nwithin a provider. `allow_fallbacks` defaults to true and controls whether\ncreation may dispatch a later eligible route after a provider definitively refuses before\ncreating a sandbox. This includes another account for the same provider. False stops after\nthe first route dispatch. Eligibility and preparation may skip a route before dispatch.\nProvider, account, supply, payer and requirements constraints remain binding.\n","properties":{"order":{"type":"array","uniqueItems":true,"description":"Softly prioritize these providers in the listed order. Eligible providers omitted\nfrom this list remain candidates afterward using the existing router order. When\n`only` is supplied, it remains the ordered hard allowlist and caps eligibility;\nthis order rearranges its members and omitted members retain their `only` order.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences.order.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences.order","typeLabel":"string[]"},"only":{"type":"array","minItems":1,"uniqueItems":true,"description":"Used as `preferences.only`, this is the hard allowlist of eligible providers. `preferences.order`\ntakes precedence for their order; otherwise this list's order applies. `preferences.sort`\nranks eligible routes within each provider. Route, account, supply,\npayer and requirements restrictions still constrain every route, and unlisted providers\nare never considered. A one-provider list prevents cross-provider fallback while allowing\nlater eligible routes for that provider when `preferences.allow_fallbacks` is true.\nSetting it to false stops after the first route dispatch, including a later account for\nthe same provider.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences.only.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences.only","typeLabel":"string[]"},"ignore":{"type":"array","uniqueItems":true,"description":"Providers to exclude from routing, even if also named in `only` or `order`.","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences.ignore.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences.ignore","typeLabel":"string[]"},"sort":{"type":"string","enum":["price","time"],"x-boxrouter-choices":{"price":{"label":"Price","line":"Lowest hourly price first.","measure":"price","better":"lower"},"time":{"label":"Time","line":"Shortest run time measured on reference workloads first.","measure":"time","better":"lower"}},"description":"How eligible routes are ranked. `price` picks the lowest hourly price. `time` picks the shortest run time, measured on reference workloads.\n","uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences.sort","typeLabel":"enum\u003cstring>"},"allow_fallbacks":{"type":"boolean","default":true,"description":"Whether Cloud may dispatch a later eligible route after a provider definitively\nrefuses before creating a sandbox; defaults to true and continues until a route\ncreates the sandbox or no eligible route remains. If `only` is supplied, it\nlimits eligible providers; `preferences.order` takes precedence for their order, with\n`preferences.sort` ranking routes within each provider.\nFalse stops after the first route dispatch, including when a later route uses another\naccount for the same provider. Local eligibility or preparation failures may skip a\nroute before dispatch. This does not expand the provider allowlist or relax route,\naccount, supply, payer or requirements restrictions.\n","uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences.allow_fallbacks","typeLabel":"boolean"}},"uniqueKey":"oneOf.1.manifest.oneOf.1.placement.preferences","typeLabel":"object"},"route":{"type":"object","additionalProperties":false,"description":"The remaining route filters. Each singular value is a hard pin: `id` and `account_id` name\nexactly one route or connected account and `supply` one funding authority. Fallback never\nmoves a pin, a volume remains attached to its selected route, and these\nfilters only narrow workspace restrictions.\n","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.manifest.oneOf.1.placement.route.id","typeLabel":"string"},"account_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","description":"Connected account ID. A provider disabled on this deployment returns 409 provider_not_enabled before routing.","uniqueKey":"oneOf.1.manifest.oneOf.1.placement.route.account_id","typeLabel":"string"},"supply":{"type":"string","enum":["byok","managed"],"uniqueKey":"oneOf.1.manifest.oneOf.1.placement.route.supply","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.1.manifest.oneOf.1.placement.route","typeLabel":"object"}},"uniqueKey":"oneOf.1.manifest.oneOf.1.placement","typeLabel":"object"},"code":{"type":"object","additionalProperties":false,"required":["repo","ref"],"description":"Clone a GitHub repository at the requested ref before setup.","properties":{"repo":{"type":"string","minLength":1,"pattern":"^(?:https://github\\.com/)?[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?$","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.code.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.code.ref","typeLabel":"string"},"directory":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","description":"Relative directory in the checked-out repository.","uniqueKey":"oneOf.1.manifest.oneOf.1.code.directory","typeLabel":"string"}},"uniqueKey":"oneOf.1.manifest.oneOf.1.code","typeLabel":"object"},"volume":{"type":"object","additionalProperties":false,"required":["id"],"properties":{"id":{"type":"string","pattern":"^vol_[0-9a-f]{32}$","description":"BoxRouter-managed Volume ID. Provider-native volume requirements are not accepted.","isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1.volume.id","typeLabel":"string"},"path":{"type":"string","pattern":"^/[^\\u0000]*$","default":"/workspace","description":"Absolute folder the checkpoint is restored into, replacing what the image has there. Repeated\nseparators and `.` path components are normalized; any `..` component is rejected. The path\nmust not be `/`, under /proc, /sys, /dev, /etc, /usr, /bin, /sbin, /lib or /run, or equal to\nor an ancestor of the internal `/tmp/boxrouter-volume` scratch path.\n","uniqueKey":"oneOf.1.manifest.oneOf.1.volume.path","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Checkpoint to restore; omitted means the head. An empty volume restores nothing. A\ncheckpoint saved from a branch sandbox is not the head and can be selected by number with\nwrite, branch or read access; read mounts exactly that checkpoint's files, never the head.\n","uniqueKey":"oneOf.1.manifest.oneOf.1.volume.checkpoint","typeLabel":"integer"},"access":{"type":"string","enum":["write","read","shared","branch"],"default":"write","description":"The access mode requested for this sandbox. Omitted means write. Launch modes are write,\nread, shared, and branch. Checkpoints and branches remain capability-gated.\n","uniqueKey":"oneOf.1.manifest.oneOf.1.volume.access","typeLabel":"enum\u003cstring>"}},"description":"BoxRouter-managed volume reference and access mode attached to the created sandbox.","uniqueKey":"oneOf.1.manifest.oneOf.1.volume","typeLabel":"object"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.1.manifest.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"oneOf.1.manifest","typeLabel":"object"},"copies":{"type":"integer","minimum":1,"description":"Number of independently managed copies to reserve atomically.","isRequired":true,"uniqueKey":"oneOf.1.copies","typeLabel":"integer"},"privacy":{"type":"object","additionalProperties":false,"description":"Privacy floors for the sandbox created by this launch. Cloud carries this policy unchanged into deferred sandbox materialization.","properties":{"data_collection":{"type":"string","enum":["allow","deny"],"description":"Require the route to allow or deny provider data collection.","uniqueKey":"oneOf.1.privacy.data_collection","typeLabel":"enum\u003cstring>"},"zdr":{"type":"boolean","description":"Require zero provider data retention when true.","uniqueKey":"oneOf.1.privacy.zdr","typeLabel":"boolean"},"boxrouter_content_retention":{"type":"string","enum":["ordinary","transient"],"description":"Ordinary allows normal bounded service retention; transient requires the\nsupported non-persistent sandbox-content profile. This is not provider\nqualification, permission to train, or consent to capture additional content.\n","uniqueKey":"oneOf.1.privacy.boxrouter_content_retention","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.1.privacy","typeLabel":"object"},"agent":{"type":"string","minLength":1,"maxLength":63,"pattern":"^[a-z][a-z0-9-]{0,62}$","uniqueKey":"oneOf.1.agent","typeLabel":"string"},"overrides":{"type":"object","additionalProperties":false,"properties":{"image":{"oneOf":[{"type":"string","description":"OCI image reference.","minLength":1,"uniqueKey":"oneOf.1.overrides.image.oneOf.0","typeLabel":"string"},{"type":"object","required":["dockerfile"],"properties":{"dockerfile":{"type":"string","minLength":1,"description":"Dockerfile source sent to the provider's builder; never executed on the BoxRouter host.","isRequired":true,"uniqueKey":"oneOf.1.overrides.image.oneOf.1.dockerfile","typeLabel":"string"},"context_artifact_id":{"type":"string","minLength":1,"description":"Workspace-owned tar build context. Reject paths escaping the context,\nspecial device files and unsafe links; enforce compressed and expanded\nsize limits before using it. Source file and directory builder helpers\npackage their inputs into this context rather than sending host paths.\n","uniqueKey":"oneOf.1.overrides.image.oneOf.1.context_artifact_id","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.1.overrides.image.oneOf.1","typeLabel":"object"}],"uniqueKey":"oneOf.1.overrides.image","typeLabel":"string | object"},"resources":{"type":"object","additionalProperties":false,"properties":{"cpu_min":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.1.overrides.resources.cpu_min","typeLabel":"number"},"memory_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.overrides.resources.memory_min_mib","typeLabel":"integer"},"disk_min_mib":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.overrides.resources.disk_min_mib","typeLabel":"integer"},"extendable_lifetime":{"type":"boolean","const":true,"description":"Needed before POST /sandboxes/{sandbox_id}/lifetime may be called.","uniqueKey":"oneOf.1.overrides.resources.extendable_lifetime","typeLabel":"boolean"},"region":{"type":"string","minLength":1,"description":"One value from the region registry: a provider's region (for example `provider:eu-west`),\nan area (EU) or a country (US). Never a list.\n","uniqueKey":"oneOf.1.overrides.resources.region","typeLabel":"string"},"kernel":{"oneOf":[{"type":"string","enum":["shared","filtered","dedicated"],"uniqueKey":"oneOf.1.overrides.resources.kernel.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["shared","filtered","dedicated"],"type":"string","uniqueKey":"oneOf.1.overrides.resources.kernel.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.1.overrides.resources.kernel.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.1.overrides.resources.kernel","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"paused_retention_seconds":{"type":"number","exclusiveMinimum":0,"uniqueKey":"oneOf.1.overrides.resources.paused_retention_seconds","typeLabel":"number"},"arch":{"oneOf":[{"type":"string","enum":["amd64","arm64"],"uniqueKey":"oneOf.1.overrides.resources.arch.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"array","items":{"enum":["amd64","arm64"],"type":"string","uniqueKey":"oneOf.1.overrides.resources.arch.oneOf.1.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"uniqueItems":true,"uniqueKey":"oneOf.1.overrides.resources.arch.oneOf.1","typeLabel":"enum\u003cstring>[]"}],"uniqueKey":"oneOf.1.overrides.resources.arch","typeLabel":"enum\u003cstring> | enum\u003cstring>[]"},"run_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.overrides.resources.run_seconds","typeLabel":"integer"},"process_seconds":{"type":"integer","minimum":1,"uniqueKey":"oneOf.1.overrides.resources.process_seconds","typeLabel":"integer"}},"description":"Resource constraints, execution limits, and environment facts that must hold for this\nsandbox. The matcher compares each named value with declared resources and capabilities;\nfields left out impose no requirement.\n","uniqueKey":"oneOf.1.overrides.resources","typeLabel":"object"},"lifetime_seconds":{"oneOf":[{"type":"integer","minimum":1,"description":"Requested sandbox lifetime in seconds, replacing the manifest value. The sandbox may run past its lifetime deadline. Null asks for a sandbox with no lifetime: it runs until destroyed, and only a provider that never ends a sandbox serves it, on the workspace's own provider account. If a chosen number exceeds every otherwise matching account's cap, launch fails with `lifetime_cap_exceeded`; the requested value is not lowered.","uniqueKey":"oneOf.1.overrides.lifetime_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"description":"Requested sandbox lifetime in seconds, replacing the manifest value. The sandbox may run past its lifetime deadline. Null asks for a sandbox with no lifetime: it runs until destroyed, and only a provider that never ends a sandbox serves it, on the workspace's own provider account. If a chosen number exceeds every otherwise matching account's cap, launch fails with `lifetime_cap_exceeded`; the requested value is not lowered.","uniqueKey":"oneOf.1.overrides.lifetime_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.overrides.lifetime_seconds","typeLabel":"integer | null"},"code":{"type":"object","additionalProperties":false,"required":["repo","ref"],"description":"Repository/ref to check out, overriding the manifest's code source.","properties":{"repo":{"type":"string","minLength":1,"pattern":"^(?:https://github\\.com/)?[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+(?:\\.git)?$","isRequired":true,"uniqueKey":"oneOf.1.overrides.code.repo","typeLabel":"string"},"ref":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"oneOf.1.overrides.code.ref","typeLabel":"string"},"directory":{"type":"string","minLength":1,"pattern":"^(?!/)(?!.*(?:^|/)\\.\\.(?:/|$))[^\\u0000]*$","description":"Relative directory in the checked-out repository.","uniqueKey":"oneOf.1.overrides.code.directory","typeLabel":"string"}},"uniqueKey":"oneOf.1.overrides.code","typeLabel":"object"},"placement":{"type":"object","additionalProperties":false,"description":"Provider preferences for which routes to use and how to rank them, and the route pin that\na create takes as `route`. A route's `request_overrides` in the provider listing name\n`route` at the top level of a create; a launch takes it here, under `placement`.\n","properties":{"preferences":{"type":"object","additionalProperties":false,"description":"The one provider-preference contract shared by sandbox creation, launch placement and\nActions policy settings. Every property is optional; omitted properties inherit.\nPrecedence, narrowest last: workspace restrictions are the ceiling, then a repository\ndefault or named Actions policy, then a workflow, then request controls. Hard\nrestrictions (provider allowlists, route, account, supply, region, privacy, origin and\nspend) intersect and can only narrow; request ignore unions with workspace exclusions.\nA request true never lifts a workspace allow_fallbacks false. When workspace\nprevent_overrides is on, containing order, sort or allow_fallbacks is refused with\nrouting_overrides_forbidden even if the value matches the workspace; `only` still\nnarrows as a set and cannot reorder workspace ranking. Otherwise soft preference values\nreplace inherited values without widening authority. `order: []` and `ignore: []` are valid empty soft\narrays that name no preference and no exclusion; inherited hard authority is unchanged.\nEach list must hold distinct values; null is never valid for any property.\n`order` prioritizes named providers in listed order; eligible providers omitted from\nit remain candidates afterward, ranked by the existing router order. When `only`\nis supplied, it remains the hard ordered allowlist and caps eligible providers; `order`\nmay rearrange its members, while omitted members retain `only` order. `ignore`\nexcludes providers even when named by `only` or `order`. `sort` ranks routes\nwithin a provider. `allow_fallbacks` defaults to true and controls whether\ncreation may dispatch a later eligible route after a provider definitively refuses before\ncreating a sandbox. This includes another account for the same provider. False stops after\nthe first route dispatch. Eligibility and preparation may skip a route before dispatch.\nProvider, account, supply, payer and requirements constraints remain binding.\n","properties":{"order":{"type":"array","uniqueItems":true,"description":"Softly prioritize these providers in the listed order. Eligible providers omitted\nfrom this list remain candidates afterward using the existing router order. When\n`only` is supplied, it remains the ordered hard allowlist and caps eligibility;\nthis order rearranges its members and omitted members retain their `only` order.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.overrides.placement.preferences.order.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.overrides.placement.preferences.order","typeLabel":"string[]"},"only":{"type":"array","minItems":1,"uniqueItems":true,"description":"Used as `preferences.only`, this is the hard allowlist of eligible providers. `preferences.order`\ntakes precedence for their order; otherwise this list's order applies. `preferences.sort`\nranks eligible routes within each provider. Route, account, supply,\npayer and requirements restrictions still constrain every route, and unlisted providers\nare never considered. A one-provider list prevents cross-provider fallback while allowing\nlater eligible routes for that provider when `preferences.allow_fallbacks` is true.\nSetting it to false stops after the first route dispatch, including a later account for\nthe same provider.\n","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.overrides.placement.preferences.only.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.overrides.placement.preferences.only","typeLabel":"string[]"},"ignore":{"type":"array","uniqueItems":true,"description":"Providers to exclude from routing, even if also named in `only` or `order`.","items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.overrides.placement.preferences.ignore.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.1.overrides.placement.preferences.ignore","typeLabel":"string[]"},"sort":{"type":"string","enum":["price","time"],"x-boxrouter-choices":{"price":{"label":"Price","line":"Lowest hourly price first.","measure":"price","better":"lower"},"time":{"label":"Time","line":"Shortest run time measured on reference workloads first.","measure":"time","better":"lower"}},"description":"How eligible routes are ranked. `price` picks the lowest hourly price. `time` picks the shortest run time, measured on reference workloads.\n","uniqueKey":"oneOf.1.overrides.placement.preferences.sort","typeLabel":"enum\u003cstring>"},"allow_fallbacks":{"type":"boolean","default":true,"description":"Whether Cloud may dispatch a later eligible route after a provider definitively\nrefuses before creating a sandbox; defaults to true and continues until a route\ncreates the sandbox or no eligible route remains. If `only` is supplied, it\nlimits eligible providers; `preferences.order` takes precedence for their order, with\n`preferences.sort` ranking routes within each provider.\nFalse stops after the first route dispatch, including when a later route uses another\naccount for the same provider. Local eligibility or preparation failures may skip a\nroute before dispatch. This does not expand the provider allowlist or relax route,\naccount, supply, payer or requirements restrictions.\n","uniqueKey":"oneOf.1.overrides.placement.preferences.allow_fallbacks","typeLabel":"boolean"}},"uniqueKey":"oneOf.1.overrides.placement.preferences","typeLabel":"object"},"route":{"type":"object","additionalProperties":false,"description":"The remaining route filters. Each singular value is a hard pin: `id` and `account_id` name\nexactly one route or connected account and `supply` one funding authority. Fallback never\nmoves a pin, a volume remains attached to its selected route, and these\nfilters only narrow workspace restrictions.\n","properties":{"id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.overrides.placement.route.id","typeLabel":"string"},"account_id":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[^\\u0000]*$","description":"Connected account ID. A provider disabled on this deployment returns 409 provider_not_enabled before routing.","uniqueKey":"oneOf.1.overrides.placement.route.account_id","typeLabel":"string"},"supply":{"type":"string","enum":["byok","managed"],"uniqueKey":"oneOf.1.overrides.placement.route.supply","typeLabel":"enum\u003cstring>"}},"uniqueKey":"oneOf.1.overrides.placement.route","typeLabel":"object"}},"uniqueKey":"oneOf.1.overrides.placement","typeLabel":"object"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.overrides.env.additionalProperties","typeLabel":"string"},"description":"Non-secret environment values applied to setup and the launch.","uniqueKey":"oneOf.1.overrides.env","typeLabel":"object"}},"uniqueKey":"oneOf.1.overrides","typeLabel":"object"},"additional_secret_refs":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"object","additionalProperties":false,"required":["secret_name"],"properties":{"secret_name":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","isRequired":true,"uniqueKey":"oneOf.1.additional_secret_refs.additionalProperties.secret_name","typeLabel":"string"}},"uniqueKey":"oneOf.1.additional_secret_refs.additionalProperties","typeLabel":"object"},"uniqueKey":"oneOf.1.additional_secret_refs","typeLabel":"object"},"credential_delivery":{"type":"string","enum":["prefer_native","require_native"],"default":"prefer_native","description":"Whether compatible environment fallback is allowed or protected delivery is required.","uniqueKey":"oneOf.1.credential_delivery","typeLabel":"enum\u003cstring>"},"run":{"type":"object","additionalProperties":false,"required":["id","index","count"],"description":"Optional client supplied batch metadata. Each launch remains independent; the server stores the values on its launch operation, labels the sandbox group and copy, and echoes this object in the successful Launch result. The server does not check group completeness.","properties":{"id":{"type":"string","minLength":22,"maxLength":128,"description":"Random group identifier chosen by the client with at least 128 bits of entropy.","isRequired":true,"uniqueKey":"oneOf.1.run.id","typeLabel":"string"},"index":{"type":"integer","minimum":0,"description":"Zero-based position of this launch; must be less than count.","isRequired":true,"uniqueKey":"oneOf.1.run.index","typeLabel":"integer"},"count":{"type":"integer","minimum":1,"description":"Number of launches the client intends to submit; completeness is not checked.","isRequired":true,"uniqueKey":"oneOf.1.run.count","typeLabel":"integer"}},"uniqueKey":"oneOf.1.run","typeLabel":"object"},"registry_credentials":{"type":"object","additionalProperties":false,"required":["username","password"],"properties":{"username":{"type":"string","minLength":1,"pattern":"^[^\\u0000]*$","isRequired":true,"uniqueKey":"oneOf.1.registry_credentials.username","typeLabel":"string"},"password":{"type":"string","minLength":1,"writeOnly":true,"pattern":"^[^\\u0000]*$","isRequired":true,"uniqueKey":"oneOf.1.registry_credentials.password","typeLabel":"string"}},"description":"Request-only login for a manifest whose image is {private_oci}; required with it and\nrefused without it. Both strings are non-empty, at most 64 KiB UTF-8 bytes together.\nIt is passed to the provider to set up a copy of the image and is never stored,\nlogged, traced or returned. Not accepted by unattended launch runs.\n","uniqueKey":"oneOf.1.registry_credentials","typeLabel":"object"},"secret_values":{"type":"object","propertyNames":{"$ref":"#/components/schemas/SecretName"},"additionalProperties":{"type":"string","writeOnly":true,"maxLength":16384,"pattern":"^[^\\u0000]*$","uniqueKey":"oneOf.1.secret_values.additionalProperties","typeLabel":"string"},"description":"Request-only secret values for names declared by the resolved manifest. Unknown\nnames are invalid_request. The server enforces request size limits outside JSON\nSchema validation. Values are never stored, returned or logged.\n","uniqueKey":"oneOf.1.secret_values","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"manifest":{"name":"nightly-check","command":"python3 check.py","interactive":false},"copies":3},"examples":{"Example":{"title":"Example","value":{"manifest":{"name":"nightly-check","command":"python3 check.py","interactive":false},"copies":3}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"56d83c8f-b5b6-49d5-a5f6-093a73e17347":{"description":"Run and all copy rows were durably accepted, or recovered by idempotency key.","headers":{"Location":{"required":true,"description":"URL for provider-free metadata polling of this run.","schema":{"type":"string","format":"uri-reference"}},"X-Request-ID":{"description":"Server-generated correlation identifier; contains no credentials or payloads.","schema":{"type":"string"}},"Server-Timing":{"description":"Durations of server-side phases, for diagnosing slow requests. Phase names are not stable\nand may change.\n","schema":{"type":"string"},"x-boxrouter-server-timing":{"version":1,"unit":"ms","serviceAggregateMetric":"service","maxHeaderBytes":8192,"maxOperationRows":32,"decimalPlaces":3,"safeNamePattern":"^[A-Za-z0-9_.:-]{1,64}$","aggregates":[{"metric":"service","fieldStem":"cloud"},{"metric":"database","fieldStem":"database"},{"metric":"code","fieldStem":"code"},{"metric":"provider_connect","fieldStem":"provider_connect"},{"metric":"provider_wait","fieldStem":"provider_wait"},{"metric":"accept","fieldStem":"accept"},{"metric":"queue","fieldStem":"queue"},{"metric":"admission","fieldStem":"admission"},{"metric":"encode","fieldStem":"encode"}],"aggregateGrammar":{"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"descriptionParameter":"desc","unknownDescription":"unknown","missingMeans":"unreported"},"operationGrammar":{"metric":"op","nameParameter":"desc","namePattern":"safeNamePattern","start":{"parameter":"start","type":"number","finite":true,"sign":"signed","relativeTo":"recorderWindow"},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"outcomeParameter":"outcome","outcomes":["returned","raised"],"requiresAggregateDependencyUnion":false},"omissionGrammar":{"metric":"op-omitted","count":{"parameter":"desc","type":"integer","minimum":0},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0,"sumOf":"knownOmittedMeasuredRows"},"requiresAggregateDependencyUnion":false},"coverageGrammar":{"metric":"op-coverage","descriptionParameter":"desc","unknownValue":"unknown","absentState":"unreported","states":["unknown","unreported"],"absenceImpliesCompleteness":false}}}},"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["id","agent_name","copies","desired_state","created_at","items"],"description":"Plain metadata-only run response. It contains neither command observations nor output fields; GET is a provider-free read unless include=command is explicitly selected.","properties":{"id":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"id","typeLabel":"string"},"agent_name":{"oneOf":[{"type":"string","minLength":1,"description":"Manifest name of the resolved catalog agent or inline manifest stored with the run; null when the stored run has none. No other launch request or manifest data is returned.","isRequired":true,"uniqueKey":"agent_name.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Manifest name of the resolved catalog agent or inline manifest stored with the run; null when the stored run has none. No other launch request or manifest data is returned.","isRequired":true,"uniqueKey":"agent_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"agent_name","typeLabel":"string | null"},"copies":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"copies","typeLabel":"integer"},"desired_state":{"type":"string","enum":["running","stopped"],"x-boxrouter-open-enum":true,"isRequired":true,"uniqueKey":"desired_state","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"items":{"type":"array","items":{"type":"object","additionalProperties":false,"required":["index","status","sandbox_id","provider","error","exit_code","finished_at"],"description":"One ordered copy's public lifecycle metadata; output contents are never included.","properties":{"index":{"type":"integer","minimum":0,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].index","typeLabel":"integer"},"status":{"type":"string","enum":["queued","preparing","started","start_failed","stopping","stopped","finished","unknown"],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"sandbox_id":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].sandbox_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"\\items.items.[INDEX].sandbox_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].sandbox_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","minLength":1,"description":"Provider of the workspace-owned sandbox attached to this copy; null until a sandbox is attached.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].provider.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Provider of the workspace-owned sandbox attached to this copy; null until a sandbox is attached.","isRequired":true,"uniqueKey":"\\items.items.[INDEX].provider.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].provider","typeLabel":"string | null"},"error":{"oneOf":[{"type":"object","required":["code","message","fix"],"properties":{"code":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.code.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.code","typeLabel":"string | null"},"message":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.message.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.message.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.message","typeLabel":"string | null"},"fix":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.fix.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.fix.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0.fix","typeLabel":"string | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.0","typeLabel":"object"},{"type":"null","isRequired":true,"uniqueKey":"\\items.items.[INDEX].error.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].error","typeLabel":"object | null"},"exit_code":{"oneOf":[{"type":"integer","isRequired":true,"uniqueKey":"\\items.items.[INDEX].exit_code.oneOf.0","typeLabel":"integer"},{"type":"null","isRequired":true,"uniqueKey":"\\items.items.[INDEX].exit_code.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].exit_code","typeLabel":"integer | null"},"finished_at":{"oneOf":[{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].finished_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","format":"date-time","isRequired":true,"uniqueKey":"\\items.items.[INDEX].finished_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"\\items.items.[INDEX].finished_at","typeLabel":"string\u003cdate-time> | null"}},"uniqueKey":"\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"\\items","typeLabel":"object[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"id":"\u003cstring>","agent_name":"\u003cstring>","copies":2,"desired_state":"running","created_at":"2023-11-07T05:31:56Z","items":[{"index":1,"status":"queued","sandbox_id":"\u003cstring>","provider":"\u003cstring>","error":{"code":"\u003cstring>","message":"\u003cstring>","fix":"\u003cstring>"},"exit_code":123,"finished_at":"2023-11-07T05:31:56Z"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"f52e3efe-bd4e-4901-b794-f9fe44e386fe":{"description":"Structured error. `retry` says whether to send the call again (`now`, `after_fix`, `inspect` or `never`) and `retry_after_seconds` how long to wait first. Unowned and unknown resource IDs both return 404. Admission overload returns 503 with code overloaded, outcome not_started and Retry-After. It reserves no operation and dispatches no provider work. Shared workspace/provider admission budgets return 429 with code rate_limited, outcome not_started and Retry-After. An incomplete request body can return 408 request_timeout before dispatch. Durable-state failures return 503 database_unavailable with outcome unknown; do not infer that execution did not occur. A read (GET or HEAD) that meets the same failure changed nothing: its message says the state is temporarily unavailable, and it is safe to repeat. A provider that cannot be reached when a create is prepared returns 502 provider_error with outcome not_started; nothing was created, and the create can be retried with the same Idempotency-Key or sent to another provider with `providers`.\nNative errors are sanitized; upstream credentials, request bodies and\nanother workspace's metadata are never included. Server-Timing is present only when the response reached Dispatcher or held-response preparation; an earlier response, including pre-Dispatcher admission overload, may omit it.\n","headers":{"X-Request-ID":{"description":"Server-generated correlation identifier; contains no credentials or payloads.","schema":{"type":"string"}},"Server-Timing":{"description":"Durations of server-side phases, for diagnosing slow requests. Phase names are not stable\nand may change.\n","schema":{"type":"string"},"x-boxrouter-server-timing":{"version":1,"unit":"ms","serviceAggregateMetric":"service","maxHeaderBytes":8192,"maxOperationRows":32,"decimalPlaces":3,"safeNamePattern":"^[A-Za-z0-9_.:-]{1,64}$","aggregates":[{"metric":"service","fieldStem":"cloud"},{"metric":"database","fieldStem":"database"},{"metric":"code","fieldStem":"code"},{"metric":"provider_connect","fieldStem":"provider_connect"},{"metric":"provider_wait","fieldStem":"provider_wait"},{"metric":"accept","fieldStem":"accept"},{"metric":"queue","fieldStem":"queue"},{"metric":"admission","fieldStem":"admission"},{"metric":"encode","fieldStem":"encode"}],"aggregateGrammar":{"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"descriptionParameter":"desc","unknownDescription":"unknown","missingMeans":"unreported"},"operationGrammar":{"metric":"op","nameParameter":"desc","namePattern":"safeNamePattern","start":{"parameter":"start","type":"number","finite":true,"sign":"signed","relativeTo":"recorderWindow"},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"outcomeParameter":"outcome","outcomes":["returned","raised"],"requiresAggregateDependencyUnion":false},"omissionGrammar":{"metric":"op-omitted","count":{"parameter":"desc","type":"integer","minimum":0},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0,"sumOf":"knownOmittedMeasuredRows"},"requiresAggregateDependencyUnion":false},"coverageGrammar":{"metric":"op-coverage","descriptionParameter":"desc","unknownValue":"unknown","absentState":"unreported","states":["unknown","unreported"],"absenceImpliesCompleteness":false}}},"Retry-After":{"description":"Seconds before retrying an eligible read; not permission to replay a mutation.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","request_id":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"details":{"selection_version":1,"considered":1,"excluded":[{"provider":"\u003cstring>"}],"closest":{},"nearest":[{}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"doc_url":"\u003cstring>","fix":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"3f24526c-74d0-4401-8911-b5973d69ae6b":{"description":"Structured error. `retry` says whether to send the call again (`now`, `after_fix`, `inspect` or `never`) and `retry_after_seconds` how long to wait first. Unowned and unknown resource IDs both return 404. Admission overload returns 503 with code overloaded, outcome not_started and Retry-After. It reserves no operation and dispatches no provider work. Shared workspace/provider admission budgets return 429 with code rate_limited, outcome not_started and Retry-After. An incomplete request body can return 408 request_timeout before dispatch. Durable-state failures return 503 database_unavailable with outcome unknown; do not infer that execution did not occur. A read (GET or HEAD) that meets the same failure changed nothing: its message says the state is temporarily unavailable, and it is safe to repeat. A provider that cannot be reached when a create is prepared returns 502 provider_error with outcome not_started; nothing was created, and the create can be retried with the same Idempotency-Key or sent to another provider with `providers`.\nNative errors are sanitized; upstream credentials, request bodies and\nanother workspace's metadata are never included. Server-Timing is present only when the response reached Dispatcher or held-response preparation; an earlier response, including pre-Dispatcher admission overload, may omit it.\n","headers":{"X-Request-ID":{"description":"Server-generated correlation identifier; contains no credentials or payloads.","schema":{"type":"string"}},"Server-Timing":{"description":"Durations of server-side phases, for diagnosing slow requests. Phase names are not stable\nand may change.\n","schema":{"type":"string"},"x-boxrouter-server-timing":{"version":1,"unit":"ms","serviceAggregateMetric":"service","maxHeaderBytes":8192,"maxOperationRows":32,"decimalPlaces":3,"safeNamePattern":"^[A-Za-z0-9_.:-]{1,64}$","aggregates":[{"metric":"service","fieldStem":"cloud"},{"metric":"database","fieldStem":"database"},{"metric":"code","fieldStem":"code"},{"metric":"provider_connect","fieldStem":"provider_connect"},{"metric":"provider_wait","fieldStem":"provider_wait"},{"metric":"accept","fieldStem":"accept"},{"metric":"queue","fieldStem":"queue"},{"metric":"admission","fieldStem":"admission"},{"metric":"encode","fieldStem":"encode"}],"aggregateGrammar":{"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"descriptionParameter":"desc","unknownDescription":"unknown","missingMeans":"unreported"},"operationGrammar":{"metric":"op","nameParameter":"desc","namePattern":"safeNamePattern","start":{"parameter":"start","type":"number","finite":true,"sign":"signed","relativeTo":"recorderWindow"},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"outcomeParameter":"outcome","outcomes":["returned","raised"],"requiresAggregateDependencyUnion":false},"omissionGrammar":{"metric":"op-omitted","count":{"parameter":"desc","type":"integer","minimum":0},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0,"sumOf":"knownOmittedMeasuredRows"},"requiresAggregateDependencyUnion":false},"coverageGrammar":{"metric":"op-coverage","descriptionParameter":"desc","unknownValue":"unknown","absentState":"unreported","states":["unknown","unreported"],"absenceImpliesCompleteness":false}}},"Retry-After":{"description":"Seconds before retrying an eligible read; not permission to replay a mutation.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","request_id":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"details":{"selection_version":1,"considered":1,"excluded":[{"provider":"\u003cstring>"}],"closest":{},"nearest":[{}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"doc_url":"\u003cstring>","fix":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"66740c0e-67d0-471e-92ff-ff3f19a54efa":{"description":"Structured error. `retry` says whether to send the call again (`now`, `after_fix`, `inspect` or `never`) and `retry_after_seconds` how long to wait first. Unowned and unknown resource IDs both return 404. Admission overload returns 503 with code overloaded, outcome not_started and Retry-After. It reserves no operation and dispatches no provider work. Shared workspace/provider admission budgets return 429 with code rate_limited, outcome not_started and Retry-After. An incomplete request body can return 408 request_timeout before dispatch. Durable-state failures return 503 database_unavailable with outcome unknown; do not infer that execution did not occur. A read (GET or HEAD) that meets the same failure changed nothing: its message says the state is temporarily unavailable, and it is safe to repeat. A provider that cannot be reached when a create is prepared returns 502 provider_error with outcome not_started; nothing was created, and the create can be retried with the same Idempotency-Key or sent to another provider with `providers`.\nNative errors are sanitized; upstream credentials, request bodies and\nanother workspace's metadata are never included. Server-Timing is present only when the response reached Dispatcher or held-response preparation; an earlier response, including pre-Dispatcher admission overload, may omit it.\n","headers":{"X-Request-ID":{"description":"Server-generated correlation identifier; contains no credentials or payloads.","schema":{"type":"string"}},"Server-Timing":{"description":"Durations of server-side phases, for diagnosing slow requests. Phase names are not stable\nand may change.\n","schema":{"type":"string"},"x-boxrouter-server-timing":{"version":1,"unit":"ms","serviceAggregateMetric":"service","maxHeaderBytes":8192,"maxOperationRows":32,"decimalPlaces":3,"safeNamePattern":"^[A-Za-z0-9_.:-]{1,64}$","aggregates":[{"metric":"service","fieldStem":"cloud"},{"metric":"database","fieldStem":"database"},{"metric":"code","fieldStem":"code"},{"metric":"provider_connect","fieldStem":"provider_connect"},{"metric":"provider_wait","fieldStem":"provider_wait"},{"metric":"accept","fieldStem":"accept"},{"metric":"queue","fieldStem":"queue"},{"metric":"admission","fieldStem":"admission"},{"metric":"encode","fieldStem":"encode"}],"aggregateGrammar":{"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"descriptionParameter":"desc","unknownDescription":"unknown","missingMeans":"unreported"},"operationGrammar":{"metric":"op","nameParameter":"desc","namePattern":"safeNamePattern","start":{"parameter":"start","type":"number","finite":true,"sign":"signed","relativeTo":"recorderWindow"},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"outcomeParameter":"outcome","outcomes":["returned","raised"],"requiresAggregateDependencyUnion":false},"omissionGrammar":{"metric":"op-omitted","count":{"parameter":"desc","type":"integer","minimum":0},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0,"sumOf":"knownOmittedMeasuredRows"},"requiresAggregateDependencyUnion":false},"coverageGrammar":{"metric":"op-coverage","descriptionParameter":"desc","unknownValue":"unknown","absentState":"unreported","states":["unknown","unreported"],"absenceImpliesCompleteness":false}}},"Retry-After":{"description":"Seconds before retrying an eligible read; not permission to replay a mutation.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","request_id":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"details":{"selection_version":1,"considered":1,"excluded":[{"provider":"\u003cstring>"}],"closest":{},"nearest":[{}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"doc_url":"\u003cstring>","fix":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"ad5d0813-f99a-4f74-8134-4a50ad7aa659":{"description":"The selected agent or credential reference is not visible to this workspace.","content":{"application/json":{"schema":{"type":"object","required":["error"],"description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","request_id":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"details":{"selection_version":1,"considered":1,"excluded":[{"provider":"\u003cstring>"}],"closest":{},"nearest":[{}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"doc_url":"\u003cstring>","fix":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"c3012fc5-591a-4176-aa15-70603ce18042":{"description":"The key conflicts with a previous request, no eligible route can satisfy the run, or launch-run copies are not available to you (`capability_unavailable`).","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","required":["error"],"x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","fix","details","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","const":"no_eligible_route","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"oneOf.0.error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.message","typeLabel":"string"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","required":["excluded"],"properties":{"excluded":{"type":"array","items":{"type":"object","description":"One route that cannot serve the request, with SandboxProviderSpec reasons.","required":["provider","reasons","exclusions"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].provider","typeLabel":"string"},"reasons":{"type":"array","uniqueItems":true,"items":{"type":"string","uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].reasons.items.[INDEX]","typeLabel":"string"},"description":"SandboxProviderSpec match codes such as property_mismatch, capability_unsupported, prerequisite_missing or capacity_unavailable.","isRequired":true,"uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].reasons","typeLabel":"string[]"},"exclusions":{"type":"array","description":"Each failing check, as the matcher reports it. Known fields are capability (the\nfamily), profile, property, requested, offered, rule, reason, explanation, upstream\nand evidence (source identifiers); clients must preserve fields they do not know.\n","items":{"type":"object","properties":{"capability":{"type":"string","uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX].capability","typeLabel":"string"},"profile":{"type":"string","uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX].profile","typeLabel":"string"},"property":{"type":"string","uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX].property","typeLabel":"string"},"rule":{"type":"string","uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX].rule","typeLabel":"string"},"reason":{"type":"string","uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX].reason","typeLabel":"string"},"explanation":{"type":"string","uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX].explanation","typeLabel":"string"},"evidence":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX].evidence.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX].evidence","typeLabel":"string[]"}},"uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].exclusions","typeLabel":"object[]"}},"uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX]","typeLabel":"object"},"description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","isRequired":true,"uniqueKey":"oneOf.0.error.details.excluded","typeLabel":"object[]"},"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"oneOf.0.error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"oneOf.0.error.details.considered","typeLabel":"integer"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.0.error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.0.error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","items":{"type":"object","description":"A route that would become eligible if the failing requirements were relaxed, nearest\nfirst. A suggestion only; nothing is relaxed automatically.\n","required":["provider","distance","failing"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].provider","typeLabel":"string"},"distance":{"type":"integer","minimum":1,"description":"Number of distinct failing (family, property) pairs.","isRequired":true,"uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].distance","typeLabel":"integer"},"failing":{"type":"array","items":{"type":"object","required":["offered_by"],"properties":{"offered_by":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX].offered_by.items.[INDEX]","typeLabel":"string"},"description":"Other considered providers that offer the requested value.","isRequired":true,"uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX].offered_by","typeLabel":"string[]"},"capability":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX].capability.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX].capability.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX].capability","typeLabel":"string | null"},"property":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX].property.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX].property.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX].property","typeLabel":"string | null"}},"uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX].failing","typeLabel":"object[]"}},"uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX]","typeLabel":"object"},"description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","uniqueKey":"oneOf.0.error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"oneOf.0.error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"oneOf.0.error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"oneOf.0.error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"oneOf.0.error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"oneOf.0.error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"oneOf.0.error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"oneOf.0.error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"oneOf.0.error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"oneOf.0.error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"oneOf.0.error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"oneOf.0.error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"oneOf.0.error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"oneOf.0.error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"oneOf.0.error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"oneOf.0.error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"oneOf.0.error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"oneOf.0.error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"oneOf.0.error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"oneOf.0.error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"oneOf.0.error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"oneOf.0.error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"oneOf.0.error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.0.error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"oneOf.0.error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"oneOf.0.error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"oneOf.0.error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"oneOf.0.error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"oneOf.0.error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"oneOf.0.error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.0.error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.0.error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"oneOf.0.error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"oneOf.0.error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"oneOf.0.error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"oneOf.0.error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"oneOf.0.error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"oneOf.0.error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"oneOf.0.error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"oneOf.0.error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"oneOf.0.error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"oneOf.0.error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"oneOf.0.error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"oneOf.0.error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"oneOf.0.error.details.url","typeLabel":"string\u003curi>"}},"isRequired":true,"uniqueKey":"oneOf.0.error.details","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.request_id","typeLabel":"string"},"fix":{"type":"string","description":"The smallest change that would fit. On a command to an existing sandbox whose\ncreating API key has been revoked, the sandbox keeps that key's privacy settings\nfor its whole life and no other key may run commands in it: the response is this\n409 with a failed reason of creator_key_revoked and a fix that says to create a\nnew sandbox with a current key. Nothing was dispatched, and deleting the sandbox\nstill works with any key in the workspace.\n","minLength":1,"isRequired":true,"uniqueKey":"oneOf.0.error.fix","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"oneOf.0.error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"oneOf.0.error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.0.error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.0.error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.error.retry_after_seconds","typeLabel":"integer | null"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.0.error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.0.error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.doc_url","typeLabel":"string\u003curi> | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.0.error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.0.error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.0.error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.0.error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.0.error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.0.error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.0.error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.0.error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","required":["error"],"x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","fix","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","const":"conflict","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"oneOf.1.error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.request_id","typeLabel":"string"},"fix":{"type":"string","description":"Use a new idempotency key for a request with different input.","minLength":1,"isRequired":true,"uniqueKey":"oneOf.1.error.fix","typeLabel":"string"},"outcome":{"type":"string","description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","enum":["not_started","completed","partial","unknown"],"const":"not_started","isRequired":true,"uniqueKey":"oneOf.1.error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"oneOf.1.error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.1.error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.1.error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"oneOf.1.error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"oneOf.1.error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"oneOf.1.error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.1.error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.1.error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"oneOf.1.error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"oneOf.1.error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"oneOf.1.error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"oneOf.1.error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"oneOf.1.error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"oneOf.1.error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"oneOf.1.error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"oneOf.1.error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"oneOf.1.error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.1.error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"oneOf.1.error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"oneOf.1.error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"oneOf.1.error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"oneOf.1.error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"oneOf.1.error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"oneOf.1.error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"oneOf.1.error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"oneOf.1.error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"oneOf.1.error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"oneOf.1.error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"oneOf.1.error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"oneOf.1.error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"oneOf.1.error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"oneOf.1.error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.1.error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"oneOf.1.error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"oneOf.1.error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"oneOf.1.error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"oneOf.1.error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"oneOf.1.error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"oneOf.1.error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.1.error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.1.error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"oneOf.1.error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"oneOf.1.error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"oneOf.1.error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"oneOf.1.error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"oneOf.1.error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"oneOf.1.error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"oneOf.1.error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"oneOf.1.error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"oneOf.1.error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"oneOf.1.error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"oneOf.1.error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"oneOf.1.error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"oneOf.1.error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"oneOf.1.error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.1.error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.1.error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.doc_url","typeLabel":"string\u003curi> | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.1.error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.1.error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.1.error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.1.error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.1.error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.1.error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.1.error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.1.error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.1.error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","required":["error"],"x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","fix","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","const":"capability_unavailable","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"oneOf.2.error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.request_id","typeLabel":"string"},"fix":{"type":"string","description":"This deployment does not run launch-run copies; run the agent without copies.","minLength":1,"isRequired":true,"uniqueKey":"oneOf.2.error.fix","typeLabel":"string"},"outcome":{"type":"string","description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","enum":["not_started","completed","partial","unknown"],"const":"not_started","isRequired":true,"uniqueKey":"oneOf.2.error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"oneOf.2.error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.2.error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.2.error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.2.error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"oneOf.2.error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"oneOf.2.error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"oneOf.2.error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.2.error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.2.error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.2.error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"oneOf.2.error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.2.error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"oneOf.2.error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"oneOf.2.error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"oneOf.2.error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"oneOf.2.error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"oneOf.2.error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"oneOf.2.error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"oneOf.2.error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.2.error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"oneOf.2.error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.2.error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"oneOf.2.error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"oneOf.2.error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"oneOf.2.error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"oneOf.2.error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"oneOf.2.error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"oneOf.2.error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"oneOf.2.error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"oneOf.2.error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"oneOf.2.error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"oneOf.2.error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"oneOf.2.error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"oneOf.2.error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"oneOf.2.error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"oneOf.2.error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.2.error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"oneOf.2.error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"oneOf.2.error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"oneOf.2.error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"oneOf.2.error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"oneOf.2.error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"oneOf.2.error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.2.error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.2.error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"oneOf.2.error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"oneOf.2.error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"oneOf.2.error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"oneOf.2.error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"oneOf.2.error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"oneOf.2.error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"oneOf.2.error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"oneOf.2.error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"oneOf.2.error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"oneOf.2.error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"oneOf.2.error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"oneOf.2.error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"oneOf.2.error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"oneOf.2.error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.2.error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.2.error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.doc_url","typeLabel":"string\u003curi> | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.2.error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.2.error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"oneOf.2.error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.2.error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.2.error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.2.error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.2.error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.2.error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.2.error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.2.error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"oneOf.2.error","typeLabel":"object"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"no_eligible_route","message":"\u003cstring>","details":{"excluded":[{"provider":"\u003cstring>","reasons":["\u003cstring>"],"exclusions":[{"capability":"\u003cstring>","profile":"\u003cstring>","property":"\u003cstring>","rule":"\u003cstring>","reason":"\u003cstring>","explanation":"\u003cstring>","evidence":["\u003cstring>"]}]}],"selection_version":1,"considered":1,"closest":{},"nearest":[{"provider":"\u003cstring>","distance":2,"failing":[{"offered_by":["\u003cstring>"],"capability":"\u003cstring>","property":"\u003cstring>"}]}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"request_id":"\u003cstring>","fix":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"doc_url":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"0ee0f308-6742-423f-a5c9-8735f599f8a4":{"description":"The request is invalid or asks for an unsupported unattended-run feature.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","required":["error"],"x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","const":"invalid_request","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"oneOf.0.error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"oneOf.0.error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"oneOf.0.error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.0.error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.0.error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"oneOf.0.error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"oneOf.0.error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"oneOf.0.error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.0.error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.0.error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"oneOf.0.error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"oneOf.0.error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"oneOf.0.error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"oneOf.0.error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"oneOf.0.error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.0.error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"oneOf.0.error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"oneOf.0.error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"oneOf.0.error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"oneOf.0.error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"oneOf.0.error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"oneOf.0.error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"oneOf.0.error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"oneOf.0.error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"oneOf.0.error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"oneOf.0.error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"oneOf.0.error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"oneOf.0.error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"oneOf.0.error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"oneOf.0.error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"oneOf.0.error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"oneOf.0.error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"oneOf.0.error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"oneOf.0.error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"oneOf.0.error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.0.error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"oneOf.0.error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"oneOf.0.error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"oneOf.0.error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"oneOf.0.error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"oneOf.0.error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"oneOf.0.error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.0.error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.0.error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"oneOf.0.error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"oneOf.0.error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"oneOf.0.error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"oneOf.0.error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"oneOf.0.error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"oneOf.0.error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"oneOf.0.error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"oneOf.0.error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"oneOf.0.error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"oneOf.0.error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"oneOf.0.error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"oneOf.0.error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"oneOf.0.error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"oneOf.0.error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.0.error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.0.error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"oneOf.0.error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"oneOf.0.error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.0.error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.0.error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.0.error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.0.error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.0.error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.0.error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.0.error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.0.error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"object"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","required":["error"],"x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","details","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","const":"secret_missing","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"oneOf.1.error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.message","typeLabel":"string"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","required":["names"],"properties":{"names":{"type":"array","items":{"type":"string","maxLength":128,"minLength":1,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.1.error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","minItems":1,"uniqueItems":true,"isRequired":true,"uniqueKey":"oneOf.1.error.details.names","typeLabel":"string[]"},"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"oneOf.1.error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"oneOf.1.error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"oneOf.1.error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.1.error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.1.error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"oneOf.1.error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.1.error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"oneOf.1.error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"oneOf.1.error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"oneOf.1.error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"oneOf.1.error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.1.error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"oneOf.1.error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"oneOf.1.error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"oneOf.1.error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"oneOf.1.error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.1.error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"oneOf.1.error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.1.error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"oneOf.1.error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"oneOf.1.error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"oneOf.1.error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"oneOf.1.error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"oneOf.1.error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"oneOf.1.error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"oneOf.1.error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"oneOf.1.error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"oneOf.1.error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"oneOf.1.error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"oneOf.1.error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"oneOf.1.error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"oneOf.1.error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"oneOf.1.error.details.failure_reason","typeLabel":"string"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"oneOf.1.error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"oneOf.1.error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"oneOf.1.error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"oneOf.1.error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"oneOf.1.error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.1.error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.1.error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"oneOf.1.error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"oneOf.1.error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"oneOf.1.error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"oneOf.1.error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"oneOf.1.error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"oneOf.1.error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"oneOf.1.error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"oneOf.1.error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"oneOf.1.error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"oneOf.1.error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"oneOf.1.error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"oneOf.1.error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"oneOf.1.error.details.url","typeLabel":"string\u003curi>"}},"isRequired":true,"uniqueKey":"oneOf.1.error.details","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.1.error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"oneOf.1.error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"oneOf.1.error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.1.error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.1.error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.error.retry_after_seconds","typeLabel":"integer | null"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.1.error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.1.error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"oneOf.1.error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"oneOf.1.error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.1.error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.1.error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"oneOf.1.error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.1.error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.1.error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.1.error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.1.error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.1.error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.1.error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.1.error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","required":["error"],"x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","details","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","const":"unsupported_feature","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"oneOf.2.error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.message","typeLabel":"string"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","required":["feature"],"properties":{"feature":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.details.feature","typeLabel":"string"},"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"oneOf.2.error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"oneOf.2.error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"oneOf.2.error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.2.error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.2.error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"oneOf.2.error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"oneOf.2.error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.2.error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"oneOf.2.error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"oneOf.2.error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"oneOf.2.error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"oneOf.2.error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"oneOf.2.error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"oneOf.2.error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"oneOf.2.error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"oneOf.2.error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"oneOf.2.error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"oneOf.2.error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"oneOf.2.error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"oneOf.2.error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"oneOf.2.error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"oneOf.2.error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"oneOf.2.error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"oneOf.2.error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"oneOf.2.error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"oneOf.2.error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"oneOf.2.error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"oneOf.2.error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"oneOf.2.error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"oneOf.2.error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"oneOf.2.error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"oneOf.2.error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"oneOf.2.error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"oneOf.2.error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"oneOf.2.error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"oneOf.2.error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"oneOf.2.error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"oneOf.2.error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"oneOf.2.error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"oneOf.2.error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"oneOf.2.error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.2.error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"oneOf.2.error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"oneOf.2.error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"oneOf.2.error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"oneOf.2.error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"oneOf.2.error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"oneOf.2.error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"oneOf.2.error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"oneOf.2.error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"oneOf.2.error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"oneOf.2.error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"oneOf.2.error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"oneOf.2.error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"oneOf.2.error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"oneOf.2.error.details.url","typeLabel":"string\u003curi>"}},"isRequired":true,"uniqueKey":"oneOf.2.error.details","typeLabel":"object"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"oneOf.2.error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"oneOf.2.error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.2.error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"oneOf.2.error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.2.error.retry_after_seconds","typeLabel":"integer | null"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.2.error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"oneOf.2.error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"oneOf.2.error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"oneOf.2.error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.2.error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"oneOf.2.error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"oneOf.2.error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.2.error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.2.error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"oneOf.2.error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.2.error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"oneOf.2.error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.2.error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"oneOf.2.error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"oneOf.2.error","typeLabel":"object"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"invalid_request","message":"\u003cstring>","request_id":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"details":{"selection_version":1,"considered":1,"excluded":[{"provider":"\u003cstring>"}],"closest":{},"nearest":[{}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"doc_url":"\u003cstring>","fix":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"45d740e5-00a5-46e4-a2d6-0f1f9ed29fd8":{"description":"Structured error. `retry` says whether to send the call again (`now`, `after_fix`, `inspect` or `never`) and `retry_after_seconds` how long to wait first. Unowned and unknown resource IDs both return 404. Admission overload returns 503 with code overloaded, outcome not_started and Retry-After. It reserves no operation and dispatches no provider work. Shared workspace/provider admission budgets return 429 with code rate_limited, outcome not_started and Retry-After. An incomplete request body can return 408 request_timeout before dispatch. Durable-state failures return 503 database_unavailable with outcome unknown; do not infer that execution did not occur. A read (GET or HEAD) that meets the same failure changed nothing: its message says the state is temporarily unavailable, and it is safe to repeat. A provider that cannot be reached when a create is prepared returns 502 provider_error with outcome not_started; nothing was created, and the create can be retried with the same Idempotency-Key or sent to another provider with `providers`.\nNative errors are sanitized; upstream credentials, request bodies and\nanother workspace's metadata are never included. Server-Timing is present only when the response reached Dispatcher or held-response preparation; an earlier response, including pre-Dispatcher admission overload, may omit it.\n","headers":{"X-Request-ID":{"description":"Server-generated correlation identifier; contains no credentials or payloads.","schema":{"type":"string"}},"Server-Timing":{"description":"Durations of server-side phases, for diagnosing slow requests. Phase names are not stable\nand may change.\n","schema":{"type":"string"},"x-boxrouter-server-timing":{"version":1,"unit":"ms","serviceAggregateMetric":"service","maxHeaderBytes":8192,"maxOperationRows":32,"decimalPlaces":3,"safeNamePattern":"^[A-Za-z0-9_.:-]{1,64}$","aggregates":[{"metric":"service","fieldStem":"cloud"},{"metric":"database","fieldStem":"database"},{"metric":"code","fieldStem":"code"},{"metric":"provider_connect","fieldStem":"provider_connect"},{"metric":"provider_wait","fieldStem":"provider_wait"},{"metric":"accept","fieldStem":"accept"},{"metric":"queue","fieldStem":"queue"},{"metric":"admission","fieldStem":"admission"},{"metric":"encode","fieldStem":"encode"}],"aggregateGrammar":{"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"descriptionParameter":"desc","unknownDescription":"unknown","missingMeans":"unreported"},"operationGrammar":{"metric":"op","nameParameter":"desc","namePattern":"safeNamePattern","start":{"parameter":"start","type":"number","finite":true,"sign":"signed","relativeTo":"recorderWindow"},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"outcomeParameter":"outcome","outcomes":["returned","raised"],"requiresAggregateDependencyUnion":false},"omissionGrammar":{"metric":"op-omitted","count":{"parameter":"desc","type":"integer","minimum":0},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0,"sumOf":"knownOmittedMeasuredRows"},"requiresAggregateDependencyUnion":false},"coverageGrammar":{"metric":"op-coverage","descriptionParameter":"desc","unknownValue":"unknown","absentState":"unreported","states":["unknown","unreported"],"absenceImpliesCompleteness":false}}},"Retry-After":{"description":"Seconds before retrying an eligible read; not permission to replay a mutation.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","request_id":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"details":{"selection_version":1,"considered":1,"excluded":[{"provider":"\u003cstring>"}],"closest":{},"nearest":[{}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"doc_url":"\u003cstring>","fix":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"8ec6766c-8f5a-40c7-8468-947269476179":{"description":"Structured error. `retry` says whether to send the call again (`now`, `after_fix`, `inspect` or `never`) and `retry_after_seconds` how long to wait first. Unowned and unknown resource IDs both return 404. Admission overload returns 503 with code overloaded, outcome not_started and Retry-After. It reserves no operation and dispatches no provider work. Shared workspace/provider admission budgets return 429 with code rate_limited, outcome not_started and Retry-After. An incomplete request body can return 408 request_timeout before dispatch. Durable-state failures return 503 database_unavailable with outcome unknown; do not infer that execution did not occur. A read (GET or HEAD) that meets the same failure changed nothing: its message says the state is temporarily unavailable, and it is safe to repeat. A provider that cannot be reached when a create is prepared returns 502 provider_error with outcome not_started; nothing was created, and the create can be retried with the same Idempotency-Key or sent to another provider with `providers`.\nNative errors are sanitized; upstream credentials, request bodies and\nanother workspace's metadata are never included. Server-Timing is present only when the response reached Dispatcher or held-response preparation; an earlier response, including pre-Dispatcher admission overload, may omit it.\n","headers":{"X-Request-ID":{"description":"Server-generated correlation identifier; contains no credentials or payloads.","schema":{"type":"string"}},"Server-Timing":{"description":"Durations of server-side phases, for diagnosing slow requests. Phase names are not stable\nand may change.\n","schema":{"type":"string"},"x-boxrouter-server-timing":{"version":1,"unit":"ms","serviceAggregateMetric":"service","maxHeaderBytes":8192,"maxOperationRows":32,"decimalPlaces":3,"safeNamePattern":"^[A-Za-z0-9_.:-]{1,64}$","aggregates":[{"metric":"service","fieldStem":"cloud"},{"metric":"database","fieldStem":"database"},{"metric":"code","fieldStem":"code"},{"metric":"provider_connect","fieldStem":"provider_connect"},{"metric":"provider_wait","fieldStem":"provider_wait"},{"metric":"accept","fieldStem":"accept"},{"metric":"queue","fieldStem":"queue"},{"metric":"admission","fieldStem":"admission"},{"metric":"encode","fieldStem":"encode"}],"aggregateGrammar":{"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"descriptionParameter":"desc","unknownDescription":"unknown","missingMeans":"unreported"},"operationGrammar":{"metric":"op","nameParameter":"desc","namePattern":"safeNamePattern","start":{"parameter":"start","type":"number","finite":true,"sign":"signed","relativeTo":"recorderWindow"},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"outcomeParameter":"outcome","outcomes":["returned","raised"],"requiresAggregateDependencyUnion":false},"omissionGrammar":{"metric":"op-omitted","count":{"parameter":"desc","type":"integer","minimum":0},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0,"sumOf":"knownOmittedMeasuredRows"},"requiresAggregateDependencyUnion":false},"coverageGrammar":{"metric":"op-coverage","descriptionParameter":"desc","unknownValue":"unknown","absentState":"unreported","states":["unknown","unreported"],"absenceImpliesCompleteness":false}}},"Retry-After":{"description":"Seconds before retrying an eligible read; not permission to replay a mutation.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","request_id":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"details":{"selection_version":1,"considered":1,"excluded":[{"provider":"\u003cstring>"}],"closest":{},"nearest":[{}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"doc_url":"\u003cstring>","fix":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"},"9a1c4257-6016-4e60-b5d3-82e4b3c6b6d8":{"description":"Structured error. `retry` says whether to send the call again (`now`, `after_fix`, `inspect` or `never`) and `retry_after_seconds` how long to wait first. Unowned and unknown resource IDs both return 404. Admission overload returns 503 with code overloaded, outcome not_started and Retry-After. It reserves no operation and dispatches no provider work. Shared workspace/provider admission budgets return 429 with code rate_limited, outcome not_started and Retry-After. An incomplete request body can return 408 request_timeout before dispatch. Durable-state failures return 503 database_unavailable with outcome unknown; do not infer that execution did not occur. A read (GET or HEAD) that meets the same failure changed nothing: its message says the state is temporarily unavailable, and it is safe to repeat. A provider that cannot be reached when a create is prepared returns 502 provider_error with outcome not_started; nothing was created, and the create can be retried with the same Idempotency-Key or sent to another provider with `providers`.\nNative errors are sanitized; upstream credentials, request bodies and\nanother workspace's metadata are never included. Server-Timing is present only when the response reached Dispatcher or held-response preparation; an earlier response, including pre-Dispatcher admission overload, may omit it.\n","headers":{"X-Request-ID":{"description":"Server-generated correlation identifier; contains no credentials or payloads.","schema":{"type":"string"}},"Server-Timing":{"description":"Durations of server-side phases, for diagnosing slow requests. Phase names are not stable\nand may change.\n","schema":{"type":"string"},"x-boxrouter-server-timing":{"version":1,"unit":"ms","serviceAggregateMetric":"service","maxHeaderBytes":8192,"maxOperationRows":32,"decimalPlaces":3,"safeNamePattern":"^[A-Za-z0-9_.:-]{1,64}$","aggregates":[{"metric":"service","fieldStem":"cloud"},{"metric":"database","fieldStem":"database"},{"metric":"code","fieldStem":"code"},{"metric":"provider_connect","fieldStem":"provider_connect"},{"metric":"provider_wait","fieldStem":"provider_wait"},{"metric":"accept","fieldStem":"accept"},{"metric":"queue","fieldStem":"queue"},{"metric":"admission","fieldStem":"admission"},{"metric":"encode","fieldStem":"encode"}],"aggregateGrammar":{"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"descriptionParameter":"desc","unknownDescription":"unknown","missingMeans":"unreported"},"operationGrammar":{"metric":"op","nameParameter":"desc","namePattern":"safeNamePattern","start":{"parameter":"start","type":"number","finite":true,"sign":"signed","relativeTo":"recorderWindow"},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0},"outcomeParameter":"outcome","outcomes":["returned","raised"],"requiresAggregateDependencyUnion":false},"omissionGrammar":{"metric":"op-omitted","count":{"parameter":"desc","type":"integer","minimum":0},"duration":{"parameter":"dur","type":"number","finite":true,"minimum":0,"sumOf":"knownOmittedMeasuredRows"},"requiresAggregateDependencyUnion":false},"coverageGrammar":{"metric":"op-coverage","descriptionParameter":"desc","unknownValue":"unknown","absentState":"unreported","states":["unknown","unreported"],"absenceImpliesCompleteness":false}}},"Retry-After":{"description":"Seconds before retrying an eligible read; not permission to replay a mutation.","schema":{"type":"integer","minimum":0}}},"content":{"application/json":{"schema":{"type":"object","required":["error"],"description":"The one error body every failing call answers. It leads with what to do: `retry` says whether to send the call again, `fix` says what to change, `outcome` says what happened, and `doc_url` links to the page that explains the code. Clients retry `retry: safe` for you with the same idempotency key.","x-sandbox-provider-spec-codes":["no_eligible_route","knob_not_named","unrecognised_word","invalid_request","not_named","gate_unavailable","account_unhealthy","lifetime_limit","lifetime_used_up","not_running","invalid_state","sandbox_ended","not_found","provider_error","timeout","contract_violation"],"properties":{"error":{"type":"object","required":["code","message","request_id","outcome","retry","retry_after_seconds"],"properties":{"code":{"type":"string","description":"Stable machine category. Operation failures use SandboxProviderSpec error codes,\nincluding invalid_request, invalid_state, not_found, unauthorized,\nincompatible_requirements, no_eligible_route, capacity_unavailable,\ncapability_unavailable, contract_violation, resource_limit, timeout and\nprovider_error. Hosted service failures add method_not_allowed,\nunauthenticated, forbidden, actions_sandbox_protected,\ninsufficient_credit, spend_limit_exceeded,\nprovider_not_enabled, credentials_rejected, conflict, rate_limited, provider_quota, request_timeout, overloaded,\ndatabase_unavailable, payment_method_required, payment_declined, promotion_already_redeemed, account_exists, and internal_error. unsupported_feature and\noutput_limit are earlier names still returned by some routes.\nOrganization and membership operations also use organization_changed, last_admin,\nstale_membership, directory_managed and change_in_progress. Key ownership and\ninvitation operations use idempotency_key_reused and conflict.\nCredit refunds and purchase quotes also use refund_window_closed,\nnothing_to_refund, refund_below_minimum, refund_in_progress,\npurchase_in_progress, dispute_open, already_refunded,\nrefund_amount_changed, refund_fee_unavailable, quote_changed,\nsession_required, refund_daily_limit, refund_rate_limit,\nrefund_retry_requires_support, idempotency_key_reused and fraud_review.\nCard setup adds card_setup_rate_limit (429, with Retry-After): a workspace may start five\ncard setups an hour.\nA provider that refuses the request for its own plan or quota limit answers\n429 provider_quota with the provider's words in native_message; rate_limited is\nBoxRouter's own limit.\nRouting Prevent Overrides refuses a request containing preferences.order,\npreferences.sort or preferences.allow_fallbacks with routing_overrides_forbidden,\noutcome not_started and details.fields naming the prohibited inputs. No provider\neffect occurs.\nLaunch operations also use invalid_request, secret_missing, agent_not_found,\nno_eligible_route and launch_failed.\nA process or terminal is observed by one API task. When that task stops, process\noutput, result and stdin answer 410 process_observer_lost (reading or cancelling the\nprocess still works), and a terminal on a provider that cannot reattach it answers\n410 terminal_observer_lost. invalid_observer_hop (403) refuses an internal hop\nbetween API tasks that is not signed; clients never send one.\nOpening a preview that the provider answered with other access than the request\nasked for returns 502 preview_access_refused: that preview is never returned, and\ndetails say whether it was ended.\nStarting a process with wait_for_port answers 409 port_not_listening, outcome partial,\nwhen the process exits before the port accepts connections or the port stays closed for\n30 seconds; the process is ended and details carry the output so far.\nA request that must store content (a volume, a saved artifact) under transient content\nretention answers 409 privacy_persistence_conflict with outcome not_started.\nA sandbox request that stops before anything is created also answers\nlifetime_cap_exceeded, knob_not_named and unrecognised_word (400), and price_unknown and\npolicy_denied (409), each with outcome not_started; the Actions codes job_claim_lost,\nactions_authority_changed, actions_candidate_ceiling_withdrawn and\nactions_candidate_outside_ceiling (409) say the job's claim, settings or admitted routes\nchanged; provider_budget_exhausted (409) says a run's provider budget allows no\nfurther create. A create that names an image Cloud cannot use answers 400\nimage_architecture_unsupported, image_digest_resolution_failed,\nimage_preparation_unsupported or private_image_managed_route_unavailable, and\nprivacy_admission_unavailable when privacy cannot be enforced; each says what to change.\nLaunch and source-repository refusals name the repository or manifest fault (code_ref_not_found,\ncode_repository_*, source_*, invalid_source_manifest, invalid_manifest_encoding,\ninvalid_run_spec, repository_*, reserved_env_refused, launch_run_position_conflict,\ncode_reference_moved, dockerfile_context_unsupported, image_tag_unresolved,\nrecovery_sandbox_mismatch); the GitHub-side ones (source_rate_limited,\nsource_resolution_failed, source_resolution_timeout, code_repository_resolution_failed)\nare safe to resend. image_setup_timeout, managed_funding_unavailable,\nlifetime_funding_conflict, candidate_admission_unavailable, secrets_unavailable and the\nActions candidate codes (actions_candidate_record_invalid, actions_create_budget_exhausted,\nactions_create_format_mismatch) complete the creation and extension refusals.\ndispatch_limit_reached, inline_secret_values_refused and launch_incomplete come from\nlaunch runs, provider_policy_unknown from an operation whose privacy evidence cannot be\nverified, and quota_exceeded from a full managed provider account.\nVolume operations also use volume_busy, volume_lease_lost, volume_not_attached,\nvolume_incompatible, volume_save_failed and volume_restore_failed. Creating a\nsandbox on a volume whose writer is ending waits for the release (at most 120\nseconds) before it can answer volume_busy.\nA team member's new personal API key is paused until WorkOS membership sync catches\nup: it answers 403 forbidden whose message and fix say the key becomes active once\nthe team membership syncs, usually within a minute, and the call can be retried.\nClients must preserve and handle unknown categories explicitly.\n","x-boxrouter-error-codes":{"account_exists":[409],"account_unhealthy":[402],"actions_authority_changed":[409],"actions_candidate_ceiling_withdrawn":[409],"actions_candidate_outside_ceiling":[409],"actions_candidate_record_invalid":[409],"actions_create_budget_exhausted":[409],"actions_create_format_mismatch":[409],"actions_sandbox_protected":[403],"agent_not_found":[404],"already_refunded":[409],"authorization_error":[403],"candidate_admission_unavailable":[503],"capability_unavailable":[409,503],"capability_unverified":[409],"card_setup_rate_limit":[429],"change_in_progress":[409],"code_ref_not_found":[404],"code_reference_moved":[409],"code_repository_not_authorized":[403],"code_repository_not_found":[404],"code_repository_not_private":[400],"code_repository_not_public":[404],"code_repository_resolution_failed":[502],"command_failed":[409],"command_observation_busy":[409],"conflict":[409],"contract_violation":[409],"credentials_rejected":[409,422],"database_unavailable":[503],"directory_managed":[409],"dispatch_limit_reached":[409],"dispute_open":[409],"dockerfile_context_unsupported":[400],"expired":[410],"forbidden":[403],"fraud_review":[409],"gate_unavailable":[409],"idempotency_key_reused":[409,422],"identity_unavailable":[503],"image_architecture_unsupported":[400],"image_digest_resolution_failed":[400],"image_preparation_unsupported":[400],"image_setup_timeout":[504],"image_tag_unresolved":[400],"inline_secret_values_refused":[422],"insufficient_credit":[402],"internal_error":[500],"invalid_manifest_encoding":[400],"invalid_observer_hop":[403],"invalid_request":[400,413,422,428],"invalid_run_spec":[400],"invalid_source_manifest":[400],"invalid_state":[409],"job_claim_lost":[409],"knob_not_named":[400],"last_admin":[409],"launch_failed":[409],"launch_incomplete":[409],"launch_run_position_conflict":[409],"lifetime_cap_exceeded":[400],"lifetime_funding_conflict":[409],"lifetime_limit":[409],"lifetime_used_up":[409],"managed_funding_unavailable":[503],"method_not_allowed":[405],"no_eligible_route":[409],"not_found":[404],"not_named":[409],"not_running":[409],"nothing_to_refund":[409],"organization_changed":[409],"output_limit":[413],"overloaded":[503],"payment_declined":[402],"payment_method_required":[409],"payment_provider_rejected":[502],"payment_provider_unavailable":[503],"payments_unavailable":[503],"policy_denied":[409],"port_not_listening":[409],"preview_access_refused":[502],"price_unknown":[409],"privacy_admission_unavailable":[400],"privacy_persistence_conflict":[409],"private_image_managed_route_unavailable":[400],"process_observer_lost":[410],"promotion_already_redeemed":[409],"promotion_code_invalid":[404],"provider_budget_exhausted":[409],"provider_error":[502],"provider_not_enabled":[409],"provider_policy_unknown":[409],"provider_quota":[429],"purchase_in_progress":[409],"quota_exceeded":[429],"quote_changed":[409],"rate_limited":[429],"recovery_sandbox_mismatch":[409],"refund_amount_changed":[409],"refund_below_minimum":[409],"refund_daily_limit":[429],"refund_fee_unavailable":[409],"refund_in_progress":[409],"refund_rate_limit":[429],"refund_retry_requires_support":[409],"refund_window_closed":[409],"repository_file_unsupported":[400],"repository_too_large":[400],"request_timeout":[408],"reserved_env_refused":[400,422],"resource_limit":[413,507],"routing_overrides_forbidden":[400],"run_limit_exceeded":[429],"sandbox_ended":[410],"secret_missing":[400],"secrets_unavailable":[503],"session_required":[403],"source_file_not_found":[400],"source_file_too_large":[413],"source_rate_limited":[503],"source_ref_not_found":[400],"source_repository_not_accessible":[404],"source_repository_not_found":[400],"source_repository_not_private":[400],"source_repository_not_public":[400],"source_resolution_failed":[502],"source_resolution_timeout":[504],"spend_limit_exceeded":[402],"stale_membership":[409],"terminal_closed":[410],"terminal_observer_lost":[410],"timeout":[504],"unauthenticated":[401],"unavailable":[503],"unrecognised_word":[400],"unsupported_feature":[422],"volume_busy":[409],"volume_incompatible":[409],"volume_lease_lost":[409],"volume_not_attached":[409],"volume_restore_failed":[502],"volume_save_failed":[409,502],"volume_unavailable":[409],"wrong_region":[421]},"x-boxrouter-error-retry":{"account_exists":"after_fix","account_unhealthy":"after_fix","actions_authority_changed":"after_fix","actions_candidate_ceiling_withdrawn":"after_fix","actions_candidate_outside_ceiling":"after_fix","actions_candidate_record_invalid":"after_fix","actions_create_budget_exhausted":"after_fix","actions_create_format_mismatch":"after_fix","actions_sandbox_protected":"never","agent_not_found":"after_fix","already_refunded":"never","authorization_error":"check_outcome","candidate_admission_unavailable":"never","capability_unavailable":"check_outcome","capability_unverified":"after_fix","card_setup_rate_limit":"safe","change_in_progress":"safe","code_ref_not_found":"after_fix","code_reference_moved":"after_fix","code_repository_not_authorized":"after_fix","code_repository_not_found":"after_fix","code_repository_not_private":"after_fix","code_repository_not_public":"after_fix","code_repository_resolution_failed":"safe","command_failed":"after_fix","command_observation_busy":"safe","conflict":"check_outcome","contract_violation":"check_outcome","credentials_rejected":"after_fix","database_unavailable":"check_outcome","directory_managed":"never","dispatch_limit_reached":"after_fix","dispute_open":"after_fix","dockerfile_context_unsupported":"after_fix","expired":"check_outcome","forbidden":"after_fix","fraud_review":"safe","gate_unavailable":"after_fix","idempotency_key_reused":"after_fix","identity_unavailable":"safe","image_architecture_unsupported":"after_fix","image_digest_resolution_failed":"after_fix","image_preparation_unsupported":"after_fix","image_setup_timeout":"after_fix","image_tag_unresolved":"after_fix","inline_secret_values_refused":"after_fix","insufficient_credit":"after_fix","internal_error":"never","invalid_manifest_encoding":"after_fix","invalid_observer_hop":"after_fix","invalid_request":"after_fix","invalid_run_spec":"after_fix","invalid_source_manifest":"after_fix","invalid_state":"check_outcome","job_claim_lost":"after_fix","knob_not_named":"after_fix","last_admin":"after_fix","launch_failed":"check_outcome","launch_incomplete":"check_outcome","launch_run_position_conflict":"after_fix","lifetime_cap_exceeded":"after_fix","lifetime_funding_conflict":"after_fix","lifetime_limit":"check_outcome","lifetime_used_up":"after_fix","managed_funding_unavailable":"safe","method_not_allowed":"after_fix","no_eligible_route":"after_fix","not_found":"check_outcome","not_named":"after_fix","not_running":"after_fix","nothing_to_refund":"never","organization_changed":"safe","output_limit":"check_outcome","overloaded":"safe","payment_declined":"after_fix","payment_method_required":"after_fix","payment_provider_rejected":"check_outcome","payment_provider_unavailable":"check_outcome","payments_unavailable":"safe","policy_denied":"after_fix","port_not_listening":"after_fix","preview_access_refused":"never","price_unknown":"after_fix","privacy_admission_unavailable":"after_fix","privacy_persistence_conflict":"after_fix","private_image_managed_route_unavailable":"after_fix","process_observer_lost":"check_outcome","promotion_already_redeemed":"never","promotion_code_invalid":"after_fix","provider_budget_exhausted":"never","provider_error":"check_outcome","provider_not_enabled":"after_fix","provider_policy_unknown":"after_fix","provider_quota":"after_fix","purchase_in_progress":"safe","quota_exceeded":"safe","quote_changed":"after_fix","rate_limited":"safe","recovery_sandbox_mismatch":"check_outcome","refund_amount_changed":"after_fix","refund_below_minimum":"never","refund_daily_limit":"safe","refund_fee_unavailable":"safe","refund_in_progress":"safe","refund_rate_limit":"safe","refund_retry_requires_support":"never","refund_window_closed":"never","repository_file_unsupported":"after_fix","repository_too_large":"after_fix","request_timeout":"safe","reserved_env_refused":"after_fix","resource_limit":"check_outcome","routing_overrides_forbidden":"after_fix","run_limit_exceeded":"after_fix","sandbox_ended":"check_outcome","secret_missing":"after_fix","secrets_unavailable":"never","session_required":"never","source_file_not_found":"after_fix","source_file_too_large":"after_fix","source_rate_limited":"safe","source_ref_not_found":"after_fix","source_repository_not_accessible":"after_fix","source_repository_not_found":"after_fix","source_repository_not_private":"after_fix","source_repository_not_public":"after_fix","source_resolution_failed":"safe","source_resolution_timeout":"safe","spend_limit_exceeded":"after_fix","stale_membership":"after_fix","terminal_closed":"after_fix","terminal_observer_lost":"after_fix","timeout":"check_outcome","unauthenticated":"after_fix","unavailable":"safe","unrecognised_word":"after_fix","unsupported_feature":"after_fix","volume_busy":"after_fix","volume_incompatible":"after_fix","volume_lease_lost":"after_fix","volume_not_attached":"after_fix","volume_restore_failed":"check_outcome","volume_save_failed":"check_outcome","volume_unavailable":"after_fix","wrong_region":"after_fix"},"isRequired":true,"uniqueKey":"error.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"request_id":{"type":"string","isRequired":true,"uniqueKey":"error.request_id","typeLabel":"string"},"outcome":{"type":"string","enum":["not_started","completed","partial","unknown"],"description":"What is known about the requested side effect. `not_started` means nothing ran\nanywhere, at BoxRouter or at a provider; a launch-setup or process-start failure\nafter dispatch is `partial` or `unknown`. Unknown and partial forbid automatic\nreplay and always carry `retry: check_outcome`. An HTTP status alone does not establish\noutcome.\nMany refusals report not_started before the provider is asked anything. A read\n(GET or HEAD) has no side effect to be unsure about, so its failures report\nnot_started and carry the code's own retry value. A launch preparation failure\nhappens after the sandbox was created and setup commands may already have run, and\ndeleting the sandbox does not undo effects outside it: it reports partial once the\ncleanup is confirmed and unknown if it is not. A process that wait_for_port ended\nreports partial. volume_restore_failed on a resume or create,\nand volume_save_failed after the guest was read, report unknown or partial; they\ncarry the operation_id when the call was recorded, and their fix does not offer to\nsend the call again unchanged.\n","isRequired":true,"uniqueKey":"error.outcome","typeLabel":"enum\u003cstring>"},"retry":{"type":"string","enum":["safe","after_fix","check_outcome","never"],"x-boxrouter-open-enum":true,"description":"What the caller may do next, fixed per code (x-boxrouter-error-retry): safe resends the\nsame request, after_fix changes the request or setup first, check_outcome reads\n`outcome` and the resource before resending, never does not resend. Branch on this\ninstead of the HTTP status.\n","isRequired":true,"uniqueKey":"error.retry","typeLabel":"enum\u003cstring>"},"retry_after_seconds":{"oneOf":[{"type":"integer","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":0,"description":"How long to wait before a `retry: safe` resend, as the Retry-After header says it; null when there is no wait to name.","isRequired":true,"uniqueKey":"error.retry_after_seconds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.retry_after_seconds","typeLabel":"integer | null"},"details":{"type":"object","description":"Code-specific context, spelled for programs. no_eligible_route carries considered,\nexcluded, closest and nearest; knob_not_named the knob and its values;\nunrecognised_word the path, the word and the known ones; not_named the gate, what\nthe call needed beyond the grant and the corrected requirements line; gate_unavailable\nthe gate and account; lifetime_limit the ceiling and this run. A creation that\nstopped before a sandbox existed may also carry `fallbacks_allowed`, `stopped_reason`\nand `attempts`, spelled and bounded as in the sandbox route selection.\ncapability_unavailable may identify the needed capability. A launch preparation failure can follow sandbox creation;\ninspect outcome and cleanup details before creating another. Clients must\npreserve fields they do not know.\n","properties":{"selection_version":{"type":"integer","minimum":0,"description":"Current selected organization version for organization_changed.","uniqueKey":"error.details.selection_version","typeLabel":"integer"},"considered":{"type":"integer","minimum":0,"description":"no_eligible_route only; how many routes were considered.","uniqueKey":"error.details.considered","typeLabel":"integer"},"excluded":{"type":"array","description":"no_eligible_route only; every considered route that cannot serve the request. Each entry names its `provider` and the checks it failed (`failed` for a sandbox request, `reasons` and `exclusions` for a launch); clients must preserve fields they do not know.","items":{"type":"object","required":["provider"],"properties":{"provider":{"type":"string","isRequired":true,"uniqueKey":"error.details.excluded.items.[INDEX].provider","typeLabel":"string"}},"uniqueKey":"error.details.excluded.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.excluded","typeLabel":"object[]"},"closest":{"oneOf":[{"type":"object","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.0","typeLabel":"object"},{"type":"null","description":"no_eligible_route only; the excluded route that fails fewest checks, or null.","uniqueKey":"error.details.closest.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.details.closest","typeLabel":"object | null"},"nearest":{"type":"array","description":"no_eligible_route only; the smallest changes that would make a route eligible, nearest first. An entry names the change (`change` and `then_eligible` for a sandbox request, `provider`, `distance` and `failing` for a launch); clients must preserve fields they do not know.","items":{"type":"object","uniqueKey":"error.details.nearest.items.[INDEX]","typeLabel":"object"},"uniqueKey":"error.details.nearest","typeLabel":"object[]"},"requirement":{"type":"string","description":"The SandboxProviderSpec family whose requirement would make this operation available.","uniqueKey":"error.details.requirement","typeLabel":"string"},"purchase_id":{"type":"string","description":"Retained failed credit purchase ID, when a saved-card charge was declined.","uniqueKey":"error.details.purchase_id","typeLabel":"string"},"preview":{"type":"object","additionalProperties":false,"required":["unused","held_excluded","fee","principal","tax","total","card"],"properties":{"unused":{"type":"integer","minimum":0,"description":"Unused purchased credit in US cents, before held credit is excluded.","isRequired":true,"uniqueKey":"error.details.preview.unused","typeLabel":"integer"},"held_excluded":{"type":"integer","minimum":0,"description":"Credit held for running sandboxes, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.held_excluded","typeLabel":"integer"},"fee":{"type":"integer","minimum":0,"description":"Original Stripe processing fee retained, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.fee","typeLabel":"integer"},"principal":{"type":"integer","minimum":0,"description":"Tax-exclusive principal returned to the original card, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.principal","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Tax Stripe adds to the credit note, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":0,"description":"Total Stripe will refund, in US cents.","isRequired":true,"uniqueKey":"error.details.preview.total","typeLabel":"integer"},"card":{"type":"object","conditionallyRequiredProperties":{"email":[{"when":[[{"property":"type","values":["link"]}]]}],"brand":[{"when":[[{"property":"type","values":["card"]}]]}],"last4":[{"when":[[{"property":"type","values":["card"]}]]}]},"properties":{"brand":{"oneOf":[{"type":"string","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.0","typeLabel":"string"},{"type":"null","description":"Card brand; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.brand","typeLabel":"string | null"},"last4":{"oneOf":[{"type":"string","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.0","typeLabel":"string"},{"type":"null","pattern":"^[0-9]{4}$","description":"Last four card digits; absent for Link methods.","conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4.oneOf.1","typeLabel":"null"}],"conditionalRequirements":[{"when":[[{"property":"type","values":["card"]}]]}],"uniqueKey":"error.details.preview.card.last4","typeLabel":"string | null"},"type":{"type":"string","enum":["card","link"],"x-boxrouter-open-enum":true,"uniqueKey":"error.details.preview.card.type","typeLabel":"enum\u003cstring>"},"email":{"type":"string","format":"email","description":"Link account email; present only when type is link.","conditionalRequirements":[{"when":[[{"property":"type","values":["link"]}]]}],"uniqueKey":"error.details.preview.card.email","typeLabel":"string\u003cemail>"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"error.details.preview.card","typeLabel":"object"}},"description":"Current refund preview returned with 409 refund_amount_changed.","uniqueKey":"error.details.preview","typeLabel":"object"},"quote":{"type":"object","additionalProperties":false,"required":["amount","tax","total","address_required"],"properties":{"amount":{"type":"integer","minimum":1,"description":"Tax-exclusive credit amount in US cents; this is what is added to the balance.","isRequired":true,"uniqueKey":"error.details.quote.amount","typeLabel":"integer"},"tax":{"type":"integer","minimum":0,"description":"Estimated tax in US cents, on the credits and the fee.","isRequired":true,"uniqueKey":"error.details.quote.tax","typeLabel":"integer"},"total":{"type":"integer","minimum":1,"description":"Estimated total to charge in US cents: amount plus fee_minor plus tax.","isRequired":true,"uniqueKey":"error.details.quote.total","typeLabel":"integer"},"address_required":{"type":"boolean","isRequired":true,"uniqueKey":"error.details.quote.address_required","typeLabel":"boolean"},"fee_minor":{"type":"integer","minimum":0,"description":"BoxRouter's purchase fee in US cents, computed by the server and charged on top of amount. Tax applies to amount plus fee. Absent on older services.","uniqueKey":"error.details.quote.fee_minor","typeLabel":"integer"},"missing":{"type":"array","items":{"type":"string","uniqueKey":"error.details.quote.missing.items.[INDEX]","typeLabel":"string"},"description":"Required billing address fields missing for an exact tax quote.","uniqueKey":"error.details.quote.missing","typeLabel":"string[]"}},"description":"Current purchase quote returned with 409 quote_changed.","uniqueKey":"error.details.quote","typeLabel":"object"},"redemption":{"type":"object","additionalProperties":false,"required":["code","amount_nanodollars","description","redeemed_at"],"properties":{"code":{"type":"string","description":"The code in its canonical upper-case form.","isRequired":true,"uniqueKey":"error.details.redemption.code","typeLabel":"string"},"amount_nanodollars":{"type":"string","maxLength":19,"pattern":"^(?:[1-9][0-9]{0,17}|[1-8][0-9]{18}|9[0-1][0-9]{17}|92[0-1][0-9]{16}|922[0-2][0-9]{15}|9223[0-2][0-9]{14}|92233[0-6][0-9]{13}|922337[0-1][0-9]{12}|92233720[0-2][0-9]{10}|922337203[0-5][0-9]{9}|9223372036[0-7][0-9]{8}|92233720368[0-4][0-9]{7}|922337203685[0-3][0-9]{6}|9223372036854[0-6][0-9]{5}|92233720368547[0-6][0-9]{4}|922337203685477[0-4][0-9]{3}|9223372036854775[0-7][0-9]{2}|922337203685477580[0-7])$","description":"Credit granted, in billionths of a US dollar, as a canonical positive signed 64-bit nanodollar string.","isRequired":true,"uniqueKey":"error.details.redemption.amount_nanodollars","typeLabel":"string"},"description":{"type":"string","description":"What the credit is for, as the promotion describes it.","isRequired":true,"uniqueKey":"error.details.redemption.description","typeLabel":"string"},"redeemed_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"error.details.redemption.redeemed_at","typeLabel":"string\u003cdate-time>"}},"description":"Original promotion redemption returned with 409 promotion_already_redeemed.","uniqueKey":"error.details.redemption","typeLabel":"object"},"scope":{"type":"string","enum":["workspace"],"description":"spend_limit_exceeded only; which configured cap refused admission.","uniqueKey":"error.details.scope","typeLabel":"enum\u003cstring>"},"period":{"type":"string","enum":["total","daily","monthly"],"description":"spend_limit_exceeded only; the cap period that applies.","uniqueKey":"error.details.period","typeLabel":"enum\u003cstring>"},"limit_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact configured USD nanodollars.","uniqueKey":"error.details.limit_nanodollars","typeLabel":"integer"},"requested_nanodollars":{"type":"integer","minimum":1,"description":"spend_limit_exceeded only; exact proposed managed hold.","uniqueKey":"error.details.requested_nanodollars","typeLabel":"integer"},"sign_in_method":{"type":"string","description":"account_exists only: how the existing account with this verified address signs in (google, github, email or other).","uniqueKey":"error.details.sign_in_method","typeLabel":"string"},"masked_email":{"type":"string","description":"account_exists only: that account's address, masked as `t…@gmail.com`.","uniqueKey":"error.details.masked_email","typeLabel":"string"},"failure_reason":{"type":"string","maxLength":100,"description":"Short safe card-decline reason; raw Stripe messages are not returned.","uniqueKey":"error.details.failure_reason","typeLabel":"string"},"names":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":128,"pattern":"^[A-Z][A-Z0-9_]{0,127}$","uniqueKey":"error.details.names.items.[INDEX]","typeLabel":"string"},"description":"All manifest secret names that could not be resolved.","uniqueKey":"error.details.names","typeLabel":"string[]"},"fields":{"type":"array","uniqueItems":true,"items":{"type":"string","enum":["preferences.order","preferences.sort","preferences.allow_fallbacks"],"uniqueKey":"error.details.fields.items.[INDEX]","typeLabel":"enum\u003cstring>"},"description":"routing_overrides_forbidden only; the prohibited request inputs.","uniqueKey":"error.details.fields","typeLabel":"enum\u003cstring>[]"},"volume_id":{"type":"string","description":"BoxRouter Volume ID involved in the error.","uniqueKey":"error.details.volume_id","typeLabel":"string"},"writer_sandbox_id":{"type":"string","description":"volume_busy only; the sandbox that holds the volume's writer lease, when it is a recorded sandbox.","uniqueKey":"error.details.writer_sandbox_id","typeLabel":"string"},"checkpoint":{"type":"integer","minimum":1,"description":"Volume checkpoint involved in the error.","uniqueKey":"error.details.checkpoint","typeLabel":"integer"},"limit_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.limit_bytes","typeLabel":"integer"},"observed_bytes":{"type":"integer","minimum":0,"uniqueKey":"error.details.observed_bytes","typeLabel":"integer"},"mismatch":{"type":"object","additionalProperties":false,"required":["field","recorded","requested"],"properties":{"field":{"type":"string","enum":["image","arch"],"isRequired":true,"uniqueKey":"error.details.mismatch.field","typeLabel":"enum\u003cstring>"},"recorded":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.recorded","typeLabel":"string"},"requested":{"type":"string","isRequired":true,"uniqueKey":"error.details.mismatch.requested","typeLabel":"string"}},"uniqueKey":"error.details.mismatch","typeLabel":"object"},"volume_phase":{"type":"string","enum":["check","branch","lease","identity","install","credential","mount","metadata","checkpoint","commit","write"],"uniqueKey":"error.details.volume_phase","typeLabel":"enum\u003cstring>"},"phase":{"type":"string","enum":["code","setup","files","background","previews"],"description":"Preparation phase that failed.","uniqueKey":"error.details.phase","typeLabel":"enum\u003cstring>"},"command":{"type":"string","description":"Command whose nonzero exit stopped launch preparation.","uniqueKey":"error.details.command","typeLabel":"string"},"exit_code":{"type":"integer","description":"Exit code of the failed command, or of the process that exited before its port listened.","uniqueKey":"error.details.exit_code","typeLabel":"integer"},"stderr_tail":{"type":"string","description":"At most the final 4 KiB of stderr from the failed command, with resolved secret values\nredacted. port_not_listening carries the same tail of the process's stderr.\n","uniqueKey":"error.details.stderr_tail","typeLabel":"string"},"stdout_tail":{"type":"string","description":"port_not_listening only; at most the final 4 KiB of the process's stdout.","uniqueKey":"error.details.stdout_tail","typeLabel":"string"},"agent":{"type":"string","description":"Unknown catalog agent name.","uniqueKey":"error.details.agent","typeLabel":"string"},"port":{"type":"integer","minimum":1,"maximum":65535,"description":"The sandbox port whose preview was refused (preview_access_refused) or that never accepted connections (port_not_listening).","uniqueKey":"error.details.port","typeLabel":"integer"},"revoked":{"type":"boolean","description":"preview_access_refused only; true when the unwanted preview was ended and no\naccess to the port remains. False: it may still be reachable (outcome unknown).\n","uniqueKey":"error.details.revoked","typeLabel":"boolean"},"preview_id":{"type":"string","description":"preview_access_refused only; the identifier the provider gave the preview that may\nstill be reachable. Present only for a public preview.\n","uniqueKey":"error.details.preview_id","typeLabel":"string"},"url":{"type":"string","format":"uri","description":"preview_access_refused only; the address of a public preview that may still be\nreachable. Never present for a private preview, whose address holds a credential,\nand never when it was ended.\n","uniqueKey":"error.details.url","typeLabel":"string\u003curi>"}},"uniqueKey":"error.details","typeLabel":"object"},"doc_url":{"oneOf":[{"type":"string","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.0","typeLabel":"string\u003curi>"},{"type":"null","format":"uri","description":"Where the documentation explains this code: `https://boxrouter.ai/docs/error-codes#` followed by the code, for example `https://boxrouter.ai/docs/error-codes#no_eligible_route`. The page has one anchored row per code with what it means and what to do. BoxRouter sends it with every error; it is null for a code that has no documented row. Clients must accept an error body that omits it.","uniqueKey":"error.doc_url.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.doc_url","typeLabel":"string\u003curi> | null"},"fix":{"oneOf":[{"type":"string","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.0","typeLabel":"string"},{"type":"null","minLength":1,"description":"Actionable change for the caller when the request cannot be completed. A refusal (4xx) always carries one; a server or provider fault, including an error event that ends a terminal or process stream, can answer null.","uniqueKey":"error.fix.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.fix","typeLabel":"string | null"},"operation_id":{"oneOf":[{"type":"string","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"Durable server operation ID for reconciliation after uncertain mutations.","uniqueKey":"error.operation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.operation_id","typeLabel":"string | null"},"provider":{"oneOf":[{"type":"string","uniqueKey":"error.provider.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"error.provider.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.provider","typeLabel":"string | null"},"native_code":{"oneOf":[{"type":"string","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.0","typeLabel":"string"},{"type":"null","description":"The provider's machine-readable error code, unchanged, when it reports one.","uniqueKey":"error.native_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_code","typeLabel":"string | null"},"native_status":{"oneOf":[{"type":"integer","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.0","typeLabel":"integer"},{"type":"null","description":"The provider's HTTP status, unchanged, when the failure came from a provider response.","uniqueKey":"error.native_status.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_status","typeLabel":"integer | null"},"native_message":{"oneOf":[{"type":"string","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":4096,"description":"The provider's own error message when it answered with an HTTP 4xx refusal (for example a plan limit); null otherwise. Capped at 512 characters, with whitespace collapsed. Credential secrets and token-shaped strings are removed before return. The literal `[redacted]` marker is used when all credential secret fields are at least 12 characters; legacy saved secrets shorter than 12 characters are removed without the marker.","uniqueKey":"error.native_message.oneOf.1","typeLabel":"null"}],"uniqueKey":"error.native_message","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":{"code":"\u003cstring>","message":"\u003cstring>","request_id":"\u003cstring>","outcome":"not_started","retry":"safe","retry_after_seconds":1,"details":{"selection_version":1,"considered":1,"excluded":[{"provider":"\u003cstring>"}],"closest":{},"nearest":[{}],"requirement":"\u003cstring>","purchase_id":"\u003cstring>","preview":{"unused":1,"held_excluded":1,"fee":1,"principal":1,"tax":1,"total":1,"card":{"brand":"\u003cstring>","last4":"\u003cstring>","type":"card","email":"jsmith@example.com"}},"quote":{"amount":2,"tax":1,"total":2,"address_required":true,"fee_minor":1,"missing":["\u003cstring>"]},"redemption":{"code":"\u003cstring>","amount_nanodollars":"\u003cstring>","description":"\u003cstring>","redeemed_at":"2023-11-07T05:31:56Z"},"scope":"workspace","period":"total","limit_nanodollars":2,"requested_nanodollars":2,"sign_in_method":"\u003cstring>","masked_email":"\u003cstring>","failure_reason":"\u003cstring>","names":["\u003cstring>"],"fields":["preferences.order"],"volume_id":"\u003cstring>","writer_sandbox_id":"\u003cstring>","checkpoint":2,"limit_bytes":1,"observed_bytes":1,"mismatch":{"field":"image","recorded":"\u003cstring>","requested":"\u003cstring>"},"volume_phase":"check","phase":"code","command":"\u003cstring>","exit_code":123,"stderr_tail":"\u003cstring>","stdout_tail":"\u003cstring>","agent":"\u003cstring>","port":32768,"revoked":true,"preview_id":"\u003cstring>","url":"\u003cstring>"},"doc_url":"\u003cstring>","fix":"\u003cstring>","operation_id":"\u003cstring>","provider":"\u003cstring>","native_code":"\u003cstring>","native_status":123,"native_message":"\u003cstring>"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"dd0c83e6-beb9-482e-9a5d-60b9e86012e1":{"BoxRouterKey":{"type":"http","scheme":"bearer","description":"BoxRouter API key; never an upstream provider key.","scopes":[],"schemeName":"BoxRouterKey"}},"3a6c0149-9909-4d75-82ec-be6787165396":{"BrowserSession":{"type":"apiKey","in":"cookie","name":"__Host-boxrouter_session","description":"HttpOnly server-side session. Local HTTP uses boxrouter_session. Browser mutations require the session CSRF token and the configured Origin; execution API keys cannot administer sessions or customer keys.","scopes":[],"schemeName":"BrowserSession"}}},"servers":{"38340c0e-1365-48ce-8dcd-74c64a2f69dc":{"url":"https://api.boxrouter.ai/api/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"BoxRouter API key; never an upstream provider key.","scopes":[],"schemeName":"BoxRouterKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"BoxRouter API key; never an upstream provider key.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BoxRouterKey","name":"Authorization"}],"title":"BoxRouterKey"},{"schemes":[{"scheme":{"type":"apiKey","in":"cookie","name":"__Host-boxrouter_session","description":"HttpOnly server-side session. Local HTTP uses boxrouter_session. Browser mutations require the session CSRF token and the configured Origin; execution API keys cannot administer sessions or customer keys.","scopes":[],"schemeName":"BrowserSession"},"schema":{"title":"__Host-boxrouter_session","type":"string","description":"HttpOnly server-side session. Local HTTP uses boxrouter_session. Browser mutations require the session CSRF token and the configured Origin; execution API keys cannot administer sessions or customer keys.","isRequired":true,"typeLabel":"string","deprecated":false},"schemeName":"BrowserSession","name":"__Host-boxrouter_session"}],"title":"BrowserSession"}]},"originalFileLocation":"openapi.json"},"subdomain":"nv-4965711d","siteName":"BoxRouter","title":"Start an Unattended Launch Run - BoxRouter","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-01T01:33:11.909Z","originalFileLocation":"reference/create-launch-run.md"},"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=\"Reserve one workspace-owned run and all requested copies atomically. The existing launch request fields select exactly one catalog agent or inline manifest; copies is required. Acceptance returns 202 with a Location for metadata polling and makes no provider create before the executor claims each copy. Reuse the same Idempotency-Key and identical body to recover an uncertain acceptance; a changed body conflicts and never creates another run. Credential selectors are resolved at each copy claim. Secret values and provider tokens are never stored. Saved secrets are re-read by name, so rotation can affect later copies. Inline secret_values, interactive launches, and unsupported manifest features are refused before reservation. The feature remains opt-in until compatible clients are released.\">\u003cmeta data-mint-head name=\"application-name\" content=\"BoxRouter\">\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/nv-4965711d/q9ftyRpgQlu0T30E/_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/nv-4965711d/q9ftyRpgQlu0T30E/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/nv-4965711d/q9ftyRpgQlu0T30E/_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/nv-4965711d/q9ftyRpgQlu0T30E/_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/nv-4965711d/q9ftyRpgQlu0T30E/_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/nv-4965711d/q9ftyRpgQlu0T30E/_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/nv-4965711d/q9ftyRpgQlu0T30E/_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/nv-4965711d/q9ftyRpgQlu0T30E/_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/nv-4965711d/q9ftyRpgQlu0T30E/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Start an Unattended Launch Run - BoxRouter\">\u003cmeta data-mint-head property=\"og:description\" content=\"Reserve one workspace-owned run and all requested copies atomically. The existing launch request fields select exactly one catalog agent or inline manifest; copies is required. Acceptance returns 202 with a Location for metadata polling and makes no provider create before the executor claims each copy. Reuse the same Idempotency-Key and identical body to recover an uncertain acceptance; a changed body conflicts and never creates another run. Credential selectors are resolved at each copy claim. Secret values and provider tokens are never stored. Saved secrets are re-read by name, so rotation can affect later copies. Inline secret_values, interactive launches, and unsupported manifest features are refused before reservation. The feature remains opt-in until compatible clients are released.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"BoxRouter\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://boxrouter.ai/docs/reference/create-launch-run\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://nv-4965711d.mintlify.site/docs/_mintlify/api/og/v2?division=Launch+Runs\u0026amp;title=Start+an+Unattended+Launch+Run\u0026amp;description=Reserve+one+workspace-owned+run+and+all+requested+copies+atomically.+The+existing%0Alaunch+request+fields+select+exactly+one+catalog+agent+or+inline+manifest%3B+%60co\u0026amp;theme=231fc68973f7c9fcdf02f0c3\u0026amp;signature=8f1a4ea15100d5a4316985eedd490ae9e7af7a43a422374105606cd0bfd45651\">\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=\"Start an Unattended Launch Run - BoxRouter\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Reserve one workspace-owned run and all requested copies atomically. The existing launch request fields select exactly one catalog agent or inline manifest; copies is required. Acceptance returns 202 with a Location for metadata polling and makes no provider create before the executor claims each copy. Reuse the same Idempotency-Key and identical body to recover an uncertain acceptance; a changed body conflicts and never creates another run. Credential selectors are resolved at each copy claim. Secret values and provider tokens are never stored. Saved secrets are re-read by name, so rotation can affect later copies. Inline secret_values, interactive launches, and unsupported manifest features are refused before reservation. The feature remains opt-in until compatible clients are released.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://nv-4965711d.mintlify.site/docs/_mintlify/api/og/v2?division=Launch+Runs\u0026amp;title=Start+an+Unattended+Launch+Run\u0026amp;description=Reserve+one+workspace-owned+run+and+all+requested+copies+atomically.+The+existing%0Alaunch+request+fields+select+exactly+one+catalog+agent+or+inline+manifest%3B+%60co\u0026amp;theme=231fc68973f7c9fcdf02f0c3\u0026amp;signature=8f1a4ea15100d5a4316985eedd490ae9e7af7a43a422374105606cd0bfd45651\">\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/nv-4965711d/q9ftyRpgQlu0T30E/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"BoxRouter\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#047857\">\u003clink data-mint-head rel=\"canonical\" href=\"https://boxrouter.ai/docs/reference/create-launch-run\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/reference/create-launch-run.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://boxrouter.ai/#organization\",\"name\":\"BoxRouter\",\"url\":\"https://boxrouter.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/nv-4965711d/xqQLsJs3vPQQ6w_V/brand-mark.svg?fit=max\u0026auto=format\u0026n=xqQLsJs3vPQQ6w_V\u0026q=85\u0026s=34456eec220b466fd4503f478e120e5b\"}},{\"@type\":\"WebSite\",\"@id\":\"https://boxrouter.ai/docs#website\",\"name\":\"BoxRouter\",\"url\":\"https://boxrouter.ai/docs\",\"publisher\":{\"@id\":\"https://boxrouter.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://boxrouter.ai/docs/reference/create-launch-run#webpage\",\"url\":\"https://boxrouter.ai/docs/reference/create-launch-run\",\"name\":\"Start an Unattended Launch Run\",\"description\":\"Reserve one workspace-owned run and all requested copies atomically. The existing launch request fields select exactly one catalog agent or inline manifest; copies is required. Acceptance returns 202 with a Location for metadata polling and makes no provider create before the executor claims each copy. Reuse the same Idempotency-Key and identical body to recover an uncertain acceptance; a changed body conflicts and never creates another run. Credential selectors are resolved at each copy claim. Secret values and provider tokens are never stored. Saved secrets are re-read by name, so rotation can affect later copies. Inline secret_values, interactive launches, and unsupported manifest features are refused before reservation. The feature remains opt-in until compatible clients are released.\",\"dateModified\":\"2026-11-01T01:33:11.909Z\",\"isPartOf\":{\"@id\":\"https://boxrouter.ai/docs#website\"},\"breadcrumb\":{\"@id\":\"https://boxrouter.ai/docs/reference/create-launch-run#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://boxrouter.ai/docs/reference/create-launch-run#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Launch Runs\",\"item\":\"https://boxrouter.ai/docs/reference/list-launch-runs\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Start an Unattended Launch Run\",\"item\":\"https://boxrouter.ai/docs/reference/create-launch-run\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://boxrouter.ai/docs/reference/create-launch-run#apireference\",\"headline\":\"Start an Unattended Launch Run\",\"name\":\"Start an Unattended Launch Run\",\"description\":\"Reserve one workspace-owned run and all requested copies atomically. The existing launch request fields select exactly one catalog agent or inline manifest; copies is required. Acceptance returns 202 with a Location for metadata polling and makes no provider create before the executor claims each copy. Reuse the same Idempotency-Key and identical body to recover an uncertain acceptance; a changed body conflicts and never creates another run. Credential selectors are resolved at each copy claim. Secret values and provider tokens are never stored. Saved secrets are re-read by name, so rotation can affect later copies. Inline secret_values, interactive launches, and unsupported manifest features are refused before reservation. The feature remains opt-in until compatible clients are released.\",\"url\":\"https://boxrouter.ai/docs/reference/create-launch-run\",\"mainEntityOfPage\":{\"@id\":\"https://boxrouter.ai/docs/reference/create-launch-run#webpage\"},\"dateModified\":\"2026-11-01T01:33:11.909Z\",\"publisher\":{\"@id\":\"https://boxrouter.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://boxrouter.ai/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"BoxRouter\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"BoxRouter\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/docs/reference/create-launch-run.md","siteName":"BoxRouter","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"Agents","pages":[{"title":"Agents","href":"/launch/quickstart"}]},{"tab":"GitHub Actions","pages":[{"title":"GitHub Actions","href":"/actions/quickstart"}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"Call the BoxRouter API","sidebarTitle":"Overview","href":"/api-overview"},{"title":"Error Codes","href":"/error-codes"}]},{"group":"Sandboxes","pages":[{"title":"Create a Sandbox","openapi":"openapi.json POST /sandboxes","href":"/reference/create"},{"title":"List Workspace Sandboxes","openapi":"openapi.json GET /sandboxes","href":"/reference/list-sandboxes"},{"title":"Get a Sandbox","openapi":"openapi.json GET /sandboxes/{sandbox_id}","href":"/reference/get"},{"title":"Destroy a Sandbox","openapi":"openapi.json DELETE /sandboxes/{sandbox_id}","href":"/reference/destroy"},{"title":"Explain Routing without Creating","openapi":"openapi.json POST /sandboxes/match","href":"/reference/match"},{"title":"Prove a Headless Chromium in the Sandbox","openapi":"openapi.json POST /sandboxes/{sandbox_id}/browser","href":"/reference/ensure-browser"},{"title":"Pause a Sandbox and Keep It","openapi":"openapi.json POST /sandboxes/{sandbox_id}/pause","href":"/reference/pause-sandbox"},{"title":"Resume the Same Paused Sandbox","openapi":"openapi.json POST /sandboxes/{sandbox_id}/resume","href":"/reference/resume-sandbox"},{"title":"Extend a Sandbox Lifetime","openapi":"openapi.json POST /sandboxes/{sandbox_id}/lifetime","href":"/reference/extend-sandbox-lifetime"},{"title":"Change a Running Sandbox's Outbound Network Policy","openapi":"openapi.json POST /sandboxes/{sandbox_id}/network-policy","href":"/reference/update-network-policy"}]},{"group":"Commands","pages":[{"title":"Run a Buffered Command","openapi":"openapi.json POST /sandboxes/{sandbox_id}/commands","href":"/reference/exec"}]},{"group":"Processes","pages":[{"title":"Start a Durable Background Command","openapi":"openapi.json POST /sandboxes/{sandbox_id}/processes","href":"/reference/process-start"},{"title":"Read Process Output from Byte Offsets","openapi":"openapi.json GET /sandboxes/{sandbox_id}/processes/{process_id}","href":"/reference/read-process"},{"title":"Delete a Finished Process's Retained Output","openapi":"openapi.json DELETE /sandboxes/{sandbox_id}/processes/{process_id}","href":"/reference/remove-process"},{"title":"Write Process Input","openapi":"openapi.json POST /sandboxes/{sandbox_id}/processes/{process_id}/stdin","href":"/reference/process-stdin"},{"title":"Send Stdin EOF","openapi":"openapi.json POST /sandboxes/{sandbox_id}/processes/{process_id}/stdin/close","href":"/reference/process-stdin-close"},{"title":"Cancel a Durable Process","openapi":"openapi.json POST /sandboxes/{sandbox_id}/processes/{process_id}/cancel","href":"/reference/process-cancel"}]},{"group":"Files","pages":[{"title":"Read Exact File Bytes","openapi":"openapi.json GET /sandboxes/{sandbox_id}/files/content","href":"/reference/read"},{"title":"Write Exact File Bytes","openapi":"openapi.json PUT /sandboxes/{sandbox_id}/files/content","href":"/reference/write"},{"title":"Create a Sandbox File Upload","openapi":"openapi.json POST /sandboxes/{sandbox_id}/files/uploads","href":"/reference/create-sandbox-upload"},{"title":"Complete a Sandbox File Upload","openapi":"openapi.json POST /sandboxes/{sandbox_id}/files/uploads/{upload_id}/complete","href":"/reference/complete-sandbox-upload"},{"title":"Abort a Sandbox File Upload","openapi":"openapi.json DELETE /sandboxes/{sandbox_id}/files/uploads/{upload_id}","href":"/reference/abort-sandbox-upload"},{"title":"Create a Sandbox File Download","openapi":"openapi.json POST /sandboxes/{sandbox_id}/files/downloads","href":"/reference/create-sandbox-download"},{"title":"List the Immediate Entries of a Directory","openapi":"openapi.json GET /sandboxes/{sandbox_id}/files/directories","href":"/reference/list-directory"},{"title":"Create a Directory","openapi":"openapi.json POST /sandboxes/{sandbox_id}/files/directories","href":"/reference/create-directory"},{"title":"Check for an Accessible Filesystem Target","openapi":"openapi.json GET /sandboxes/{sandbox_id}/files/exists","href":"/reference/path-exists"},{"title":"Remove a File, Symbolic Link or Directory","openapi":"openapi.json POST /sandboxes/{sandbox_id}/files/remove","href":"/reference/remove-path"}]},{"group":"Terminals","pages":[{"title":"Open a Terminal","openapi":"openapi.json POST /sandboxes/{sandbox_id}/terminals","href":"/reference/open-terminal"},{"title":"Get Observed Terminal State","openapi":"openapi.json GET /sandboxes/{sandbox_id}/terminals/{terminal_id}","href":"/reference/get-terminal"},{"title":"Stream Terminal Output and Its End","openapi":"openapi.json GET /sandboxes/{sandbox_id}/terminals/{terminal_id}/events","href":"/reference/stream-terminal-events"},{"title":"Write Terminal Input","openapi":"openapi.json POST /sandboxes/{sandbox_id}/terminals/{terminal_id}/input","href":"/reference/write-terminal-input"},{"title":"Resize the Terminal Window","openapi":"openapi.json POST /sandboxes/{sandbox_id}/terminals/{terminal_id}/resize","href":"/reference/resize-terminal"},{"title":"Hang up the Terminal without Destroying Its Sandbox","openapi":"openapi.json POST /sandboxes/{sandbox_id}/terminals/{terminal_id}/kill","href":"/reference/kill-terminal"}]},{"group":"Previews","pages":[{"title":"List a Sandbox's Open Previews","openapi":"openapi.json GET /sandboxes/{sandbox_id}/previews","href":"/reference/list-previews"},{"title":"Get a URL for a Sandbox Port","openapi":"openapi.json POST /sandboxes/{sandbox_id}/previews","href":"/reference/open-preview"},{"title":"Revoke a Preview","openapi":"openapi.json DELETE /sandboxes/{sandbox_id}/previews/{preview_id}","href":"/reference/revoke-preview"}]},{"group":"Volumes","pages":[{"title":"List Volumes","openapi":"openapi.json GET /volumes","href":"/reference/list-volumes"},{"title":"Create a Volume","openapi":"openapi.json POST /volumes","href":"/reference/create-volume"},{"title":"Get a Volume","openapi":"openapi.json GET /volumes/{volume_id}","href":"/reference/get-volume"},{"title":"Delete a Volume and Its Checkpoints","openapi":"openapi.json DELETE /volumes/{volume_id}","href":"/reference/delete-volume"},{"title":"List Volume Checkpoints","openapi":"openapi.json GET /volumes/{volume_id}/checkpoints","href":"/reference/list-volume-checkpoints"},{"title":"Save a Volume Checkpoint","openapi":"openapi.json POST /volumes/{volume_id}/checkpoints","href":"/reference/save-volume"},{"title":"Get a Volume Checkpoint","openapi":"openapi.json GET /volumes/{volume_id}/checkpoints/{checkpoint}","href":"/reference/get-volume-checkpoint"},{"title":"Delete a Checkpoint","openapi":"openapi.json DELETE /volumes/{volume_id}/checkpoints/{checkpoint}","href":"/reference/delete-volume-checkpoint"},{"title":"Release a Volume's Writer Lease","openapi":"openapi.json DELETE /volumes/{volume_id}/lease","href":"/reference/release-volume-lease"},{"title":"Create a Volume File Upload","openapi":"openapi.json POST /volumes/{volume_id}/uploads","href":"/reference/create-volume-upload"},{"title":"Complete a Volume File Upload","openapi":"openapi.json POST /volumes/{volume_id}/uploads/{upload_id}/complete","href":"/reference/complete-volume-upload"},{"title":"Abort a Volume File Upload","openapi":"openapi.json DELETE /volumes/{volume_id}/uploads/{upload_id}","href":"/reference/abort-volume-upload"},{"title":"Create a Volume File Download","openapi":"openapi.json POST /volumes/{volume_id}/downloads","href":"/reference/create-volume-download"},{"title":"List Files in a Volume","openapi":"openapi.json GET /volumes/{volume_id}/files","href":"/reference/list-volume-files"},{"title":"Delete a Volume File","openapi":"openapi.json DELETE /volumes/{volume_id}/files","href":"/reference/delete-volume-file"}]},{"group":"Images","pages":[{"title":"Prepare an Image on Selected Providers","openapi":"openapi.json POST /images/prepare","href":"/reference/prepare-image"},{"title":"Read Image Preparation Status","openapi":"openapi.json GET /images/preparations","href":"/reference/get-image-preparations"},{"title":"Remove This Workspace's Prepared Image Copies","openapi":"openapi.json POST /images/unprepare","href":"/reference/unprepare-image"}]},{"group":"Operations","pages":[{"title":"List Recorded Workspace Operations","openapi":"openapi.json GET /operations","href":"/reference/list-operations"},{"title":"Get a Mutation's Known Outcome","openapi":"openapi.json GET /operations/{operation_id}","href":"/reference/operation"}]},{"group":"Routing Settings","pages":[{"title":"Read Workspace Routing and Provider Funding","openapi":"openapi.json GET /routing/settings","href":"/reference/get-routing-settings"},{"title":"Update One Workspace Routing Section","openapi":"openapi.json PUT /routing/settings","href":"/reference/update-routing-settings"},{"title":"Preview Workspace Route Availability without Dispatch","openapi":"openapi.json GET /routing/preview","href":"/reference/get-routing-preview"}]},{"group":"Providers","pages":[{"title":"List Available Provider Routes","openapi":"openapi.json GET /providers","href":"/reference/list-providers"}]},{"group":"Price Versions","pages":[{"title":"List the Providers' Live Price Versions","openapi":"openapi.json GET /price-versions","href":"/reference/list-price-versions"}]},{"group":"Agent Catalog","pages":[{"title":"List Launch Agents","openapi":"openapi.json GET /agents","href":"/reference/agents-list"},{"title":"Get a Launch Agent Manifest","openapi":"openapi.json GET /agents/{name}","href":"/reference/agents-get"}]},{"group":"Agent Launches","pages":[{"title":"Create an Agent Launch","openapi":"openapi.json POST /launches","href":"/reference/launch-create"},{"title":"Get Launch Status and Phase Progress","openapi":"openapi.json GET /launches/{operation_id}","href":"/reference/get-launch-operation"},{"title":"Get What a Launch Asked For","openapi":"openapi.json GET /launches/{operation_id}/settings","href":"/reference/get-launch-settings"},{"title":"Get Unattended Command State","openapi":"openapi.json GET /launches/{operation_id}/command","href":"/reference/get-launch-command"},{"title":"Check Whether This Workspace Can Read a Repository","openapi":"openapi.json GET /repositories/{owner}/{repo}/access","href":"/reference/check-repository-access"}]},{"group":"Launch Runs","pages":[{"title":"List Launch Runs","openapi":"openapi.json GET /launch-runs","description":"List the authenticated workspace's launch runs, newest first, as lightweight summaries.\nRows contain no copy items, specs, command data or outputs; read getLaunchRun for one\nrun's copies. `total_copies` and `live_copies` cover every run in the workspace, not\nonly the returned page. A live copy is one whose sandbox has not been confirmed absent,\nincluding copies that are stopping. The read uses stored metadata only and makes no\nprovider calls. Responses are private to the workspace and must not be cached.\n\nIf launch-run copies are not available to you, the read still answers 200, with `available`\nfalse, no runs and zero totals.\n\n`next_cursor` is an opaque, workspace-scoped value for the next page and is null on the\nlast page. A cursor from another workspace or a malformed cursor is invalid_request.\n","href":"/reference/list-launch-runs"},{"title":"Start an Unattended Launch Run","openapi":"openapi.json POST /launch-runs","href":"/reference/create-launch-run"},{"title":"Read Launch Run Metadata","openapi":"openapi.json GET /launch-runs/{run_id}","description":"Read the stored run row and copy rows only. This response excludes command data and\noutput fields and makes no provider calls. `include=command` opts into bounded state\nand exit-code observations for active copies; the server uses at most eight\nobservations at once and one five-second response deadline. Unknown, hung, saturated,\nor failed observations return `unknown`. Neither variant exposes command text,\noutputs, process handles, or credentials. Foreign and missing IDs have the same 404\nresponse.\n","href":"/reference/get-launch-run"},{"title":"Stop a Launch Run","openapi":"openapi.json POST /launch-runs/{run_id}/stop","href":"/reference/stop-launch-run"},{"title":"Destroy One Launch-Run Copy","openapi":"openapi.json POST /launch-runs/{run_id}/copies/{copy_index}/destroy","href":"/reference/destroy-launch-run-copy"}]},{"group":"Workspace Secrets","pages":[{"title":"List Workspace Secret Names","openapi":"openapi.json GET /secrets","href":"/reference/secrets-list"},{"title":"Store a Workspace Secret","openapi":"openapi.json PUT /secrets/{name}","href":"/reference/secrets-put"},{"title":"Delete a Workspace Secret","openapi":"openapi.json DELETE /secrets/{name}","href":"/reference/secrets-delete"}]},{"group":"Artifacts","pages":[{"title":"Upload a Staged Input","openapi":"openapi.json POST /artifacts","href":"/reference/upload-artifact"},{"title":"Inspect a Staged Artifact","openapi":"openapi.json GET /artifacts/{artifact_id}","href":"/reference/get-artifact"},{"title":"Remove a Staged Artifact","openapi":"openapi.json DELETE /artifacts/{artifact_id}","href":"/reference/delete-artifact"}]},{"group":"GitHub","pages":[{"title":"List GitHub App Installations Linked to This Workspace","openapi":"openapi.json GET /github/installations","href":"/reference/list-github-installations"},{"title":"Unlink a GitHub App Installation from This Workspace","openapi":"openapi.json DELETE /github/installations/{installation_id}","href":"/reference/unlink-github-installation"},{"title":"List Repositories Visible through a Linked Installation","openapi":"openapi.json GET /github/repositories","href":"/reference/list-github-repositories"}]},{"group":"GitHub Actions","pages":[{"title":"Batch Actions Enablement and Defaults for the Given Repositories","openapi":"openapi.json GET /actions/repositories","href":"/reference/list-actions-repositories"},{"title":"Get Actions Enablement and Defaults for a Repository","openapi":"openapi.json GET /actions/repositories/{repository_id}","href":"/reference/get-actions-repository"},{"title":"Enable or Update Actions Defaults for a Repository","openapi":"openapi.json PUT /actions/repositories/{repository_id}","href":"/reference/update-actions-repository"},{"title":"Read Actions Runner and Workspace Funding Readiness","openapi":"openapi.json GET /actions/readiness","href":"/reference/get-actions-readiness"},{"title":"Read the Recommended Actions Runner Labels and Resource Floors","openapi":"openapi.json GET /actions/runner-catalog","href":"/reference/get-actions-runner-catalog"},{"title":"List Workspace Actions Policies","openapi":"openapi.json GET /actions/policies","href":"/reference/list-actions-policies"},{"title":"Create a Named Workspace Actions Policy","openapi":"openapi.json POST /actions/policies","href":"/reference/create-actions-policy"},{"title":"Get a Workspace Actions Policy","openapi":"openapi.json GET /actions/policies/{policy_id}","href":"/reference/get-actions-policy"},{"title":"Replace a Workspace Actions Policy","openapi":"openapi.json PUT /actions/policies/{policy_id}","href":"/reference/update-actions-policy"},{"title":"Delete an Unused Workspace Actions Policy","openapi":"openapi.json DELETE /actions/policies/{policy_id}","href":"/reference/delete-actions-policy"},{"title":"Preview Actions Label and Policy Eligibility","openapi":"openapi.json POST /actions/preview","href":"/reference/preview-actions"},{"title":"List Workspace Actions Workflow-Run Projections","openapi":"openapi.json GET /actions/runs","href":"/reference/list-actions-runs"},{"title":"Count the Values Each Run Filter Offers","openapi":"openapi.json GET /actions/runs/facets","href":"/reference/list-actions-run-facets"},{"title":"Get the Billed Time of Runners That Served No Job","openapi":"openapi.json GET /actions/pool-idle-time","href":"/reference/get-actions-pool-idle-time"},{"title":"Get a Workflow-Run Projection and Aggregate Billing Evidence","openapi":"openapi.json GET /actions/runs/{run_id}","href":"/reference/get-actions-run"},{"title":"List GitHub Jobs Projected for a Workflow Run","openapi":"openapi.json GET /actions/runs/{run_id}/jobs","href":"/reference/list-actions-run-jobs"},{"title":"List Placements Attempted for a Workflow Run","openapi":"openapi.json GET /actions/runs/{run_id}/placements","href":"/reference/list-actions-run-placements"},{"title":"Get an Actions Job Projection","openapi":"openapi.json GET /actions/jobs/{job_id}","href":"/reference/get-actions-job"},{"title":"Get GitHub Workflow Steps for an Actions Job","openapi":"openapi.json GET /actions/jobs/{job_id}/steps","href":"/reference/get-actions-job-steps"},{"title":"Read a Bounded Prefix of the Selected GitHub Job Log","openapi":"openapi.json GET /actions/jobs/{job_id}/logs","href":"/reference/get-actions-job-logs"},{"title":"Read a Bounded Prefix of One GitHub Step Log","openapi":"openapi.json GET /actions/jobs/{job_id}/steps/{step_position}/logs","href":"/reference/get-actions-job-step-logs"},{"title":"List Actions Step Events for a Job","openapi":"openapi.json GET /actions/jobs/{job_id}/events","href":"/reference/get-actions-job-events"},{"title":"Get an Actions Placement and Its Cost and Cleanup Evidence","openapi":"openapi.json GET /actions/placements/{placement_id}","href":"/reference/get-actions-placement"},{"title":"Ask GitHub to Cancel the Entire Workflow Run","openapi":"openapi.json POST /actions/runs/{run_id}/cancel","href":"/reference/cancel-actions-run"},{"title":"Ask GitHub to Rerun the Entire Workflow","openapi":"openapi.json POST /actions/runs/{run_id}/rerun","href":"/reference/rerun-actions-run"},{"title":"Ask GitHub to Rerun Failed Jobs and Their Dependents","openapi":"openapi.json POST /actions/runs/{run_id}/rerun-failed-jobs","href":"/reference/rerun-actions-run-failed-jobs"}]},{"group":"Provider Accounts","pages":[{"title":"Connect a Provider Account","openapi":"openapi.json POST /provider-accounts","href":"/reference/connect-provider-account"},{"title":"List Connected Accounts","openapi":"openapi.json GET /provider-accounts","href":"/reference/list-provider-accounts"},{"title":"Test Provider Credentials without Saving Them","openapi":"openapi.json POST /provider-accounts/test","href":"/reference/test-provider-credentials"},{"title":"Get Connected-Account Metadata","openapi":"openapi.json GET /provider-accounts/{account_id}","href":"/reference/get-provider-account"},{"title":"Remove a Connected Account","openapi":"openapi.json DELETE /provider-accounts/{account_id}","href":"/reference/disconnect-provider-account"},{"title":"Rotate a Connected Account's Credentials","openapi":"openapi.json PUT /provider-accounts/{account_id}/credentials","href":"/reference/replace-provider-credentials"},{"title":"Test a Saved Provider Account","openapi":"openapi.json POST /provider-accounts/{account_id}/test","href":"/reference/test-provider-account"},{"title":"Run the Standard Image Setup Proof","openapi":"openapi.json POST /provider-accounts/{account_id}/standard-image/setup","href":"/reference/setup-provider-standard-image"}]},{"group":"Credits and Billing","pages":[{"title":"Get the Workspace Credit Balance","openapi":"openapi.json GET /credits","href":"/reference/get-credits"},{"title":"Start a Credit Purchase through Checkout or a Saved Card","openapi":"openapi.json POST /credits/purchases","href":"/reference/create-credit-purchase"},{"title":"List Recent Credit Purchases","openapi":"openapi.json GET /credits/purchases","href":"/reference/list-credit-purchases"},{"title":"Preview a Credit Purchase and Its Tax","openapi":"openapi.json POST /credits/purchases/quote","href":"/reference/quote-credit-purchase"},{"title":"List Managed-Compute Credit Movements","openapi":"openapi.json GET /credits/usage","href":"/reference/list-credit-usage"},{"title":"List Grouped Managed and BYOK Sandbox Usage","openapi":"openapi.json GET /usage","href":"/reference/list-usage-report"},{"title":"Export Grouped Managed and BYOK Sandbox Usage as CSV","openapi":"openapi.json GET /usage.csv","href":"/reference/export-usage-report-csv"},{"title":"Get One Credit Purchase","openapi":"openapi.json GET /credits/purchases/{purchase_id}","href":"/reference/get-credit-purchase"},{"title":"Close an Unpaid Checkout Session","openapi":"openapi.json POST /credits/purchases/{purchase_id}/cancel","href":"/reference/cancel-credit-purchase"},{"title":"Redeem a Promotion Code for Free Credit","openapi":"openapi.json POST /credits/promotions","href":"/reference/redeem-credit-promotion"},{"title":"List Redeemed Promotion Codes","openapi":"openapi.json GET /credits/promotions","href":"/reference/list-credit-promotions"},{"title":"Get Workspace Billing Details","openapi":"openapi.json GET /credits/billing-details","href":"/reference/get-credit-billing-details"},{"title":"Replace Workspace Billing Details","openapi":"openapi.json PUT /credits/billing-details","href":"/reference/update-credit-billing-details"},{"title":"Get Workspace Credit Alert Settings","openapi":"openapi.json GET /credits/alerts","href":"/reference/get-credit-alerts"},{"title":"Replace Workspace Credit Alert Settings","openapi":"openapi.json PUT /credits/alerts","href":"/reference/update-credit-alerts"},{"title":"List Saved Workspace Payment Methods","openapi":"openapi.json GET /credits/payment-methods","href":"/reference/list-credit-payment-methods"},{"title":"Start Hosted Setup for a Saved Payment Method","openapi":"openapi.json POST /credits/payment-methods/setup","href":"/reference/create-credit-payment-method-setup"},{"title":"Start in-Page Saved Card Setup","openapi":"openapi.json POST /credits/payment-methods/setup-intent","href":"/reference/create-credit-payment-method-setup-intent"},{"title":"Set Saved Card Charge Order","openapi":"openapi.json PUT /credits/payment-methods/order","href":"/reference/reorder-credit-payment-methods"},{"title":"Get a Saved Payment Method Setup Status","openapi":"openapi.json GET /credits/payment-method-setups/{setup_id}","href":"/reference/get-credit-payment-method-setup"},{"title":"Remove a Saved Workspace Payment Method","openapi":"openapi.json DELETE /credits/payment-methods/{payment_method_id}","href":"/reference/delete-credit-payment-method"},{"title":"Set the Workspace's Default Saved Card","openapi":"openapi.json POST /credits/payment-methods/{payment_method_id}/default","href":"/reference/set-credit-default-payment-method"},{"title":"Get Automatic Credit Top-up Settings","openapi":"openapi.json GET /credits/auto-top-up","href":"/reference/get-credit-auto-top-up"},{"title":"Replace Automatic Credit Top-up Settings","openapi":"openapi.json PUT /credits/auto-top-up","href":"/reference/update-credit-auto-top-up"}]},{"group":"Spend Limits","pages":[{"title":"List Managed-Compute Spend Limits","openapi":"openapi.json GET /spend-limits","href":"/reference/list-spend-limits"},{"title":"Set a Managed-Compute Spend Cap","openapi":"openapi.json PUT /spend-limits/{scope}","href":"/reference/set-spend-limit"},{"title":"Clear a Managed-Compute Spend Cap","openapi":"openapi.json DELETE /spend-limits/{scope}","href":"/reference/clear-spend-limit"}]}]}]},"basePath":"","title":"Start an Unattended Launch Run - BoxRouter","buildId":"dpl_Aw98ji4XvBsgtZwL1VrkUF9ehFqz","deploymentId":"dpl_Aw98ji4XvBsgtZwL1VrkUF9ehFqz","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CQGbdtm4.js","utils-D88A1f-Z.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-ChqWdz1A.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-yBrxdh_6.js","snippetPresets-BgqDrFJC.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-Duxc2rZw.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C7jidOil.js","shallow-xkjpHm-U.js","getApiPlaygroundDisplay-fE3rVpvL.js","CodeSnippet-LgxljKed.js","CodeSnippets-D-pXWDHq.js","Page-C2-BijcO.js","getPastedJson-CLRcu-uo.js","icon-Cxirpjgo.js","MethodPill-D49eqY5e.js","DuplicateIcon-CivCz5Rp.js","createIcon-D71qL3f5.js","DynamicMarkdown-BcGRTrw6.js","SectionHeading-DzaqmmSD.js","axios-vUo_bRtp.js","Markdown-CZqUYmMp.js","clsx-B6IZIRsp.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-B0ZV6X5T.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-MqLyPtsW.js"]}