Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned build_id is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through GET /v1/templates/builds/{build_id} using status=error, legacy error, and structured error_detail.
Base OCI image reference imported directly on the Firecracker path (for example ubuntu:22.04). The importer currently supports raw tar, gzip, and zstd layer media types; regular files, directories, symlinks, and hard links; and Linux OCI User values in user, uid, user:group, user:gid, uid:group, or uid:gid form. OCI special files such as sockets, FIFOs, block devices, and character devices are rejected. For image indexes, the importer prefers exact Firecracker-compatible Linux variants for the current host architecture (amd64/v1 or arm64/v8 / arm64/v8.0) and falls back to a variantless Linux manifest when present; manifests with os.version or non-empty os.features are rejected. Guest boot recreates /dev, /dev/pts, /dev/shm, /proc, and /sys through nullspace-init, so those do not need to come from imported OCI layers.
Firecracker template start command executed during template build before snapshotting; machines later restore the snapshotted running state instead of rerunning this command, and create-time env injection is not visible to it
Optional template build backend. Dockerfile builds default to BuildKit; declarative and external OCI import inputs use the native backend unless explicitly supported otherwise. Dockerfile input with native is rejected.
Optional credentials for authenticated external OCI base-image imports. Applies to explicit base_image imports and Dockerfile builds that resolve to exactly one external non-template FROM image. Authenticated Dockerfile-backed imports currently reject variable-based FROM, alias-based imported stages, and multiple external registry hosts.
Optional per-registry request-time credentials for BuildKit Dockerfile pulls. Each registry must match a registry host used by the Dockerfile or base image. Secret values are forwarded only to the build worker and are not stored in durable build records.
Optional request-time BuildKit secrets exposed to Dockerfile RUN --mount=type=secret instructions. Supported only by the BuildKit backend. Values are forwarded only to the build worker and are not persisted in durable build records, cache keys, or context manifests.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Nullspace","description":"Nullspace is composable machines for AI agents: on-demand microVM compute that agents create, scale, pause, and fork.","colors":{"primary":"#1a1d23","light":"#d7dae0","dark":"#1a1d23"},"logo":{"light":"https://mintcdn.com/catamaranresearch/IKCWYZugMKgGJaLI/images/logo-light.svg?fit=max\u0026auto=format\u0026n=IKCWYZugMKgGJaLI\u0026q=85\u0026s=fbbc2f6e5c18d0cc912d4eb6bd3af8ca","dark":"https://mintcdn.com/catamaranresearch/IKCWYZugMKgGJaLI/images/logo-dark.svg?fit=max\u0026auto=format\u0026n=IKCWYZugMKgGJaLI\u0026q=85\u0026s=45090618928ba93bf1541f1237343216"},"favicon":"https://mintcdn.com/catamaranresearch/Nr4-Qd7vJxaLolgu/images/favicon.svg?fit=max\u0026auto=format\u0026n=Nr4-Qd7vJxaLolgu\u0026q=85\u0026s=af5b7478b24f7fa69691fdc785300537","api":{"openapi":"openapi.yaml","playground":{"display":"interactive","proxy":true},"examples":{"defaults":"required","languages":["python","curl"],"prefill":true,"autogenerate":true},"url":"full"},"appearance":{"default":"system"},"background":{"color":{"light":"#fafafa","dark":"#121212"}},"navbar":{"links":[{"href":"https://github.com/catamaran-research/nullspace","type":"github"}]},"footer":{"socials":{"github":"https://github.com/catamaran-research/nullspace"}},"search":{"prompt":"Search Nullspace docs"},"seo":{"indexing":"navigable"},"fonts":{"heading":{"family":"JetBrains Mono"}},"icons":{"library":"lucide"},"styling":{"codeblocks":{"theme":{"light":"one-light","dark":"one-dark-pro"}},"latex":false},"contextual":{"options":["copy","assistant","chatgpt","claude","cursor","vscode","mcp"],"display":"header"},"thumbnails":{"appearance":"dark","background":"https://mintcdn.com/catamaranresearch/bD-Cd21B2-kH3wuD/images/og-card.svg?fit=max\u0026auto=format\u0026n=bD-Cd21B2-kH3wuD\u0026q=85\u0026s=c0f0e8a21a89402d5babb5b32aaf4786"},"interaction":{"drilldown":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"catamaranresearch","hasAudioNarration":false,"actualSubdomain":"catamaranresearch","customDomains":["docs.ns.rocks"],"gitSource":{"type":"github","owner":"catamaran-hq","repo":"nullspace","deployBranch":"main","contentDirectory":"docs/site","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6a3822b512441f3b9589a265","collectionId":"7fc4efa0-bd9b-434b-a45f-b0aeb2b88e14","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a3822b512441f3b9589a265:success","clientVersion":"0.0.4006","searchFilterCounts":[{"language":"default","tag":"API Reference","count":258},{"language":"default","tag":"Endpoints","count":256},{"language":"default","tag":"Documentation","count":95},{"language":"default","tag":"Templates","count":62},{"language":"default","tag":"Machines","count":51},{"language":"default","tag":"Reference","count":48},{"language":"default","tag":"Volumes","count":42},{"language":"default","tag":"Desktop","count":38},{"language":"default","tag":"Agent Deployments","count":23},{"language":"default","tag":"Files","count":23}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","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":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[],"page":{"pagePath":"api-reference/templates/start-a-background-template-build","slug":"/api-reference/templates/start-a-background-template-build","pageMetadata":{"title":"Start a background template build","description":"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned `build_id` is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through `GET /v1/templates/builds/{build_id}` using `status=error`, legacy `error`, and structured `error_detail`.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/builds","href":"/api-reference/templates/start-a-background-template-build","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {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(_components.p, {\n children: [\"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned \", _jsx(_components.code, {\n children: \"build_id\"\n }), \" is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through \", _jsx(_components.code, {\n children: \"GET /v1/templates/builds/{build_id}\"\n }), \" using \", _jsx(_components.code, {\n children: \"status=error\"\n }), \", legacy \", _jsx(_components.code, {\n children: \"error\"\n }), \", and structured \", _jsx(_components.code, {\n children: \"error_detail\"\n }), \".\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"one-light","dark":"one-dark-pro"}},"config":{},"pageMetadata":{"title":"Start a background template build","description":"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned `build_id` is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through `GET /v1/templates/builds/{build_id}` using `status=error`, legacy `error`, and structured `error_detail`.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/builds","href":"/api-reference/templates/start-a-background-template-build","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"startTemplateBuild","tags":["Templates"],"summary":"Start a background template build","description":"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned `build_id` is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through `GET /v1/templates/builds/{build_id}` using `status=error`, legacy `error`, and structured `error_detail`.\n","requestBody":"53217b58-25ee-48db-a4f6-53dd3e8fc80a","responses":{"202":"a72e70ae-21eb-4587-aaed-d34799301e48","400":"416b1bb3-84a0-404a-9495-dda3878d9b64","401":"584a8b90-2835-46aa-b851-ac41c80da8db","503":"c4b7a368-b4ee-4a96-92b0-edb557d85285"},"method":"post","type":"path","servers":["f71276dc-ef86-4d4f-985f-09c832d1de19","a0e428dc-322f-4ccd-9734-92e4de588316","749ab2a6-3532-4028-b71c-05bbf14deb12","a433d02e-5c00-4042-8b8c-7e9096206976"],"security":["0074367e-5f75-43db-afc2-3b1ecac22146"],"path":"/v1/templates/builds","baseUrlOptions":["https://api.13-215-85-171.sslip.io","https://nullspace.example","http://localhost","http://localhost:3000"],"title":"Start a background template build","codeSamples":[],"requestExampleLanguages":["python","bash"],"requiredOnlyExamples":true,"requestExampleType":"generated","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.name":"tmpl-app","body.base_image":"ubuntu:22.04","body.steps.items.0.oneOf.7.action":"copy","body.steps.items.0.oneOf.7.sources.items.0":"builder-context/src/package.json","body.steps.items.0.oneOf.7.sources.items.1":"builder-context/src/package-lock.json","body.steps.items.0.oneOf.7.dst":"/workspace/","body.steps.items.0.oneOf.7.user":"app","body.steps.items.0.oneOf.7.mode.oneOf.0":"0644","body.steps.items.1.oneOf.4.action":"run","body.steps.items.1.oneOf.4.command":"npm ci","body.steps.items.1.oneOf.4.user":"app","body.steps.items.2.oneOf.13.action":"git_clone","body.steps.items.2.oneOf.13.url":"https://github.com/acme/service.git","body.steps.items.2.oneOf.13.path":"/workspace/service","body.steps.items.2.oneOf.13.branch":"main","body.steps.items.2.oneOf.13.depth":1,"body.steps.items.3.oneOf.2.action":"npm_install","body.steps.items.3.oneOf.2.packages.items.0":"tsx","body.steps.items.3.oneOf.2.g":true,"body.build_envs.APP_ENV":"build","body.start_cmd":"npm run dev","body.runtime_config.default_user":"app","body.runtime_config.default_workdir":"/workspace","body.runtime_config.default_envs.PORT":"3000","body.runtime_config.readiness.oneOf.0.kind":"tcp","body.runtime_config.readiness.oneOf.0.port":3000,"body.runtime_config.readiness.oneOf.0.timeout_secs":30,"body.runtime_config.readiness.oneOf.0.interval_ms":500,"body.runtime_config.readiness.oneOf.0.startup_grace_secs":2}],"urlDisplay":"full"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"Template name (falls back to alias, then auto-generated)","uniqueKey":"name","typeLabel":"string"},"dockerfile":{"type":"string","description":"Inline Dockerfile content","uniqueKey":"dockerfile","typeLabel":"string"},"base_image":{"type":"string","description":"Base OCI image reference imported directly on the Firecracker path (for example `ubuntu:22.04`). The importer currently supports raw tar, gzip, and zstd layer media types; regular files, directories, symlinks, and hard links; and Linux OCI `User` values in `user`, `uid`, `user:group`, `user:gid`, `uid:group`, or `uid:gid` form. OCI special files such as sockets, FIFOs, block devices, and character devices are rejected. For image indexes, the importer prefers exact Firecracker-compatible Linux variants for the current host architecture (`amd64/v1` or `arm64/v8` / `arm64/v8.0`) and falls back to a variantless Linux manifest when present; manifests with `os.version` or non-empty `os.features` are rejected. Guest boot recreates `/dev`, `/dev/pts`, `/dev/shm`, `/proc`, and `/sys` through `nullspace-init`, so those do not need to come from imported OCI layers.","uniqueKey":"base_image","typeLabel":"string"},"alias":{"type":"string","description":"Alternative name field used by SDK builders","uniqueKey":"alias","typeLabel":"string"},"tags":{"type":"array","items":{"type":"string","uniqueKey":"tags.items.[INDEX]","typeLabel":"string"},"description":"Tags assigned to the built artifact. Omit this field to use [\"default\"]; explicit empty arrays are invalid.","uniqueKey":"tags","typeLabel":"string[]"},"steps":{"type":"array","items":{"oneOf":[{"type":"object","required":["action","packages"],"properties":{"action":{"type":"string","enum":["apt_install"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.0.action","typeLabel":"enum\u003cstring>"},"packages":{"type":"array","items":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.0.packages.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.0.packages","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["action","packages"],"properties":{"action":{"type":"string","enum":["pip_install"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.1.action","typeLabel":"enum\u003cstring>"},"packages":{"type":"array","items":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.1.packages.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.1.packages","typeLabel":"string[]"},"g":{"type":"boolean","description":"Set to false to perform a user install instead of the default system install.","uniqueKey":"steps.items.[INDEX].oneOf.1.g","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["action","packages"],"properties":{"action":{"type":"string","enum":["npm_install"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.2.action","typeLabel":"enum\u003cstring>"},"packages":{"type":"array","items":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.2.packages.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.2.packages","typeLabel":"string[]"},"g":{"type":"boolean","description":"Set to true to install globally; defaults to local install behavior.","uniqueKey":"steps.items.[INDEX].oneOf.2.g","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","required":["action","packages"],"properties":{"action":{"type":"string","enum":["bun_install"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.3.action","typeLabel":"enum\u003cstring>"},"packages":{"type":"array","items":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.3.packages.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.3.packages","typeLabel":"string[]"},"g":{"type":"boolean","description":"Set to true to install globally; defaults to local install behavior.","uniqueKey":"steps.items.[INDEX].oneOf.3.g","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","required":["action","command"],"properties":{"action":{"type":"string","enum":["run"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.action","typeLabel":"enum\u003cstring>"},"command":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.4.command","typeLabel":"string"},"user":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.4.user","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.4","typeLabel":"object"},{"type":"object","required":["action","path"],"properties":{"action":{"type":"string","enum":["workdir"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.5.action","typeLabel":"enum\u003cstring>"},"path":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.5.path","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.5","typeLabel":"object"},{"type":"object","required":["action","user"],"properties":{"action":{"type":"string","enum":["user"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.6.action","typeLabel":"enum\u003cstring>"},"user":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.6.user","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.6","typeLabel":"object"},{"type":"object","required":["action","sources","dst"],"properties":{"action":{"type":"string","enum":["copy"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.7.action","typeLabel":"enum\u003cstring>"},"sources":{"type":"array","items":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.7.sources.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.7.sources","typeLabel":"string[]"},"dst":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.7.dst","typeLabel":"string"},"user":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.7.user","typeLabel":"string"},"mode":{"oneOf":[{"type":"string","description":"File mode accepted as an octal string like \"0755\" or as a numeric mode.","uniqueKey":"steps.items.[INDEX].oneOf.7.mode.oneOf.0","typeLabel":"string"},{"type":"integer","description":"File mode accepted as an octal string like \"0755\" or as a numeric mode.","format":"int32","uniqueKey":"steps.items.[INDEX].oneOf.7.mode.oneOf.1","typeLabel":"integer\u003cint32>"}],"uniqueKey":"steps.items.[INDEX].oneOf.7.mode","typeLabel":"string | integer\u003cint32>"},"force_upload":{"type":"boolean","uniqueKey":"steps.items.[INDEX].oneOf.7.force_upload","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.7","typeLabel":"object"},{"type":"object","required":["action","items"],"properties":{"action":{"type":"string","enum":["copy_items"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.8.action","typeLabel":"enum\u003cstring>"},"items":{"type":"array","items":{"type":"object","required":["sources","dst"],"properties":{"sources":{"type":"array","items":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX].sources.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX].sources","typeLabel":"string[]"},"dst":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX].dst","typeLabel":"string"},"user":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX].user","typeLabel":"string"},"mode":{"oneOf":[{"type":"string","description":"File mode accepted as an octal string like \"0755\" or as a numeric mode.","uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX].mode.oneOf.0","typeLabel":"string"},{"type":"integer","description":"File mode accepted as an octal string like \"0755\" or as a numeric mode.","format":"int32","uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX].mode.oneOf.1","typeLabel":"integer\u003cint32>"}],"uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX].mode","typeLabel":"string | integer\u003cint32>"},"force_upload":{"type":"boolean","uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX].force_upload","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.8.\\items.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.8.\\items","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.8","typeLabel":"object"},{"type":"object","required":["action","path"],"properties":{"action":{"type":"string","enum":["remove"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.9.action","typeLabel":"enum\u003cstring>"},"path":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.9.path","typeLabel":"string"},"recursive":{"type":"boolean","uniqueKey":"steps.items.[INDEX].oneOf.9.recursive","typeLabel":"boolean"},"force":{"type":"boolean","uniqueKey":"steps.items.[INDEX].oneOf.9.force","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.9","typeLabel":"object"},{"type":"object","required":["action","src","dst"],"properties":{"action":{"type":"string","enum":["rename"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.10.action","typeLabel":"enum\u003cstring>"},"src":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.10.src","typeLabel":"string"},"dst":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.10.dst","typeLabel":"string"},"force":{"type":"boolean","uniqueKey":"steps.items.[INDEX].oneOf.10.force","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.10","typeLabel":"object"},{"type":"object","required":["action","path"],"properties":{"action":{"type":"string","enum":["make_dir"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.11.action","typeLabel":"enum\u003cstring>"},"path":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.11.path","typeLabel":"string"},"mode":{"oneOf":[{"type":"string","description":"File mode accepted as an octal string like \"0755\" or as a numeric mode.","uniqueKey":"steps.items.[INDEX].oneOf.11.mode.oneOf.0","typeLabel":"string"},{"type":"integer","description":"File mode accepted as an octal string like \"0755\" or as a numeric mode.","format":"int32","uniqueKey":"steps.items.[INDEX].oneOf.11.mode.oneOf.1","typeLabel":"integer\u003cint32>"}],"uniqueKey":"steps.items.[INDEX].oneOf.11.mode","typeLabel":"string | integer\u003cint32>"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.11","typeLabel":"object"},{"type":"object","required":["action","target","path"],"properties":{"action":{"type":"string","enum":["make_symlink"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.12.action","typeLabel":"enum\u003cstring>"},"target":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.12.target","typeLabel":"string"},"path":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.12.path","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.12","typeLabel":"object"},{"type":"object","required":["action","url"],"properties":{"action":{"type":"string","enum":["git_clone"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.13.action","typeLabel":"enum\u003cstring>"},"url":{"type":"string","isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.13.url","typeLabel":"string"},"path":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.13.path","typeLabel":"string"},"branch":{"type":"string","uniqueKey":"steps.items.[INDEX].oneOf.13.branch","typeLabel":"string"},"depth":{"type":"integer","format":"int64","uniqueKey":"steps.items.[INDEX].oneOf.13.depth","typeLabel":"integer\u003cint64>"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.13","typeLabel":"object"},{"type":"object","required":["action"],"properties":{"action":{"type":"string","enum":["skip_cache"],"isRequired":true,"uniqueKey":"steps.items.[INDEX].oneOf.14.action","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"steps.items.[INDEX].oneOf.14","typeLabel":"object"}],"uniqueKey":"steps.items.[INDEX]","typeLabel":"object"},"description":"Declarative builder steps converted to a Dockerfile server-side","uniqueKey":"steps","typeLabel":"object[]"},"build_envs":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"build_envs.additionalProperties","typeLabel":"string"},"description":"Environment variables available during template build only","uniqueKey":"build_envs","typeLabel":"object"},"start_cmd":{"type":"string","description":"Firecracker template start command executed during template build before snapshotting; machines later restore the snapshotted running state instead of rerunning this command, and create-time env injection is not visible to it","uniqueKey":"start_cmd","typeLabel":"string"},"build_context":{"type":"object","required":["files"],"properties":{"files":{"type":"array","items":{"type":"object","required":["path","entry_type"],"properties":{"path":{"type":"string","description":"Relative context path used by COPY/ADD","isRequired":true,"uniqueKey":"build_context.files.items.[INDEX].path","typeLabel":"string"},"entry_type":{"type":"string","enum":["file","dir"],"description":"Build-context entry kind","isRequired":true,"uniqueKey":"build_context.files.items.[INDEX].entry_type","typeLabel":"enum\u003cstring>"},"content_base64":{"type":"string","description":"Base64-encoded file content for file entries. Mutually exclusive with `blob_id`.","uniqueKey":"build_context.files.items.[INDEX].content_base64","typeLabel":"string"},"blob_id":{"type":"string","description":"Opaque blob identifier returned by `/v1/templates/blobs/preflight`. Mutually exclusive with `content_base64`.","uniqueKey":"build_context.files.items.[INDEX].blob_id","typeLabel":"string"},"mode":{"type":"string","description":"Optional octal permission bits for the file or directory (for example 0644 or 0755)","uniqueKey":"build_context.files.items.[INDEX].mode","typeLabel":"string"}},"uniqueKey":"build_context.files.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"build_context.files","typeLabel":"object[]"}},"description":"Explicit local build context used to satisfy COPY/ADD sources during template builds","uniqueKey":"build_context","typeLabel":"object"},"build_config":{"type":"object","description":"Optional build VM configuration (vCPUs, memory, internet access)","properties":{"vcpus":{"type":"integer","description":"Number of vCPUs for the build VM (default 1)","uniqueKey":"build_config.vcpus","typeLabel":"integer"},"memory_mib":{"type":"integer","description":"Memory in MiB for the build VM (default 512)","uniqueKey":"build_config.memory_mib","typeLabel":"integer"},"internet_access":{"type":"boolean","description":"Whether the build VM has internet access (default true)","uniqueKey":"build_config.internet_access","typeLabel":"boolean"},"disk_mb":{"type":"integer","minimum":512,"description":"Minimum rootfs size in MiB baked into the built template. The build VM's rootfs is grown to this size before its snapshot is captured, so every machine created from the template (cold, warm-pool, fork, resume) inherits the larger disk. Omit to use the default headroom.","uniqueKey":"build_config.disk_mb","typeLabel":"integer"}},"uniqueKey":"build_config","typeLabel":"object"},"build_backend":{"type":"string","description":"Optional template build backend. Dockerfile builds default to BuildKit; declarative and external OCI import inputs use the native backend unless explicitly supported otherwise. Dockerfile input with `native` is rejected.","enum":["native","buildkit"],"uniqueKey":"build_backend","typeLabel":"enum\u003cstring>"},"dockerfile_path":{"type":"string","description":"Relative Dockerfile path inside the uploaded build context for BuildKit builds.","uniqueKey":"dockerfile_path","typeLabel":"string"},"build_args":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"build_args.additionalProperties","typeLabel":"string"},"description":"Safe-to-persist Dockerfile build arguments for BuildKit builds.","uniqueKey":"build_args","typeLabel":"object"},"build_target":{"type":"string","description":"Optional Dockerfile target stage for BuildKit builds.","uniqueKey":"build_target","typeLabel":"string"},"runtime_config":{"type":"object","properties":{"default_user":{"type":"string","uniqueKey":"runtime_config.default_user","typeLabel":"string"},"default_workdir":{"type":"string","uniqueKey":"runtime_config.default_workdir","typeLabel":"string"},"default_envs":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"runtime_config.default_envs.additionalProperties","typeLabel":"string"},"uniqueKey":"runtime_config.default_envs","typeLabel":"object"},"readiness":{"oneOf":[{"type":"object","description":"Readiness gate evaluated during template build before snapshotting; when start_cmd is present and readiness is omitted, Firecracker applies an implicit timeout probe of 20,000 ms","required":["kind","port"],"example":{"kind":"tcp","port":3000,"timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["tcp"],"isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"port":{"type":"integer","format":"int32","isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.0.port","typeLabel":"integer\u003cint32>"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_config.readiness.oneOf.0.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"runtime_config.readiness.oneOf.0.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_config.readiness.oneOf.0.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"runtime_config.readiness.oneOf.0","typeLabel":"object"},{"type":"object","description":"Readiness gate evaluated during template build before snapshotting; when start_cmd is present and readiness is omitted, Firecracker applies an implicit timeout probe of 20,000 ms","required":["kind","timeout_ms"],"example":{"kind":"timeout","timeout_ms":20000},"properties":{"kind":{"type":"string","enum":["timeout"],"isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"timeout_ms":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.1.timeout_ms","typeLabel":"integer\u003cint64>"}},"uniqueKey":"runtime_config.readiness.oneOf.1","typeLabel":"object"},{"type":"object","description":"Readiness gate evaluated during template build before snapshotting; when start_cmd is present and readiness is omitted, Firecracker applies an implicit timeout probe of 20,000 ms","required":["kind","port","path"],"example":{"kind":"http","port":3000,"path":"/ready","timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["http"],"isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"port":{"type":"integer","format":"int32","isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.2.port","typeLabel":"integer\u003cint32>"},"path":{"type":"string","isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.2.path","typeLabel":"string"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_config.readiness.oneOf.2.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"runtime_config.readiness.oneOf.2.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_config.readiness.oneOf.2.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"runtime_config.readiness.oneOf.2","typeLabel":"object"},{"type":"object","description":"Readiness gate evaluated during template build before snapshotting; when start_cmd is present and readiness is omitted, Firecracker applies an implicit timeout probe of 20,000 ms","required":["kind","command"],"example":{"kind":"command","command":"test -e /tmp/template-ready","timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["command"],"isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"command":{"type":"string","isRequired":true,"uniqueKey":"runtime_config.readiness.oneOf.3.command","typeLabel":"string"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_config.readiness.oneOf.3.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"runtime_config.readiness.oneOf.3.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_config.readiness.oneOf.3.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"runtime_config.readiness.oneOf.3","typeLabel":"object"}],"uniqueKey":"runtime_config.readiness","typeLabel":"object"}},"description":"Firecracker-only runtime defaults baked into the built template","uniqueKey":"runtime_config","typeLabel":"object"},"base_image_auth":{"oneOf":[{"type":"object","description":"Optional credentials for authenticated external OCI base-image imports. Applies to explicit `base_image` imports and Dockerfile builds that resolve to exactly one external non-template `FROM` image. Authenticated Dockerfile-backed imports currently reject variable-based `FROM`, alias-based imported stages, and multiple external registry hosts.","required":["kind","username","password"],"properties":{"kind":{"type":"string","enum":["basic"],"isRequired":true,"uniqueKey":"base_image_auth.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"username":{"type":"string","isRequired":true,"uniqueKey":"base_image_auth.oneOf.0.username","typeLabel":"string"},"password":{"type":"string","isRequired":true,"uniqueKey":"base_image_auth.oneOf.0.password","typeLabel":"string"}},"uniqueKey":"base_image_auth.oneOf.0","typeLabel":"object"},{"type":"object","description":"Optional credentials for authenticated external OCI base-image imports. Applies to explicit `base_image` imports and Dockerfile builds that resolve to exactly one external non-template `FROM` image. Authenticated Dockerfile-backed imports currently reject variable-based `FROM`, alias-based imported stages, and multiple external registry hosts.","required":["kind","service_account_json"],"properties":{"kind":{"type":"string","enum":["gcp_artifact_registry"],"isRequired":true,"uniqueKey":"base_image_auth.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"service_account_json":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"base_image_auth.oneOf.1.service_account_json.oneOf.0","typeLabel":"string"},{"type":"object","description":"Parsed GCP service-account key JSON; the shape is defined by Google Cloud, deliberately open.","additionalProperties":true,"isRequired":true,"uniqueKey":"base_image_auth.oneOf.1.service_account_json.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"base_image_auth.oneOf.1.service_account_json","typeLabel":"string | object"}},"uniqueKey":"base_image_auth.oneOf.1","typeLabel":"object"},{"type":"object","description":"Optional credentials for authenticated external OCI base-image imports. Applies to explicit `base_image` imports and Dockerfile builds that resolve to exactly one external non-template `FROM` image. Authenticated Dockerfile-backed imports currently reject variable-based `FROM`, alias-based imported stages, and multiple external registry hosts.","required":["kind","access_key_id","secret_access_key","region"],"properties":{"kind":{"type":"string","enum":["aws_ecr"],"isRequired":true,"uniqueKey":"base_image_auth.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"access_key_id":{"type":"string","isRequired":true,"uniqueKey":"base_image_auth.oneOf.2.access_key_id","typeLabel":"string"},"secret_access_key":{"type":"string","isRequired":true,"uniqueKey":"base_image_auth.oneOf.2.secret_access_key","typeLabel":"string"},"region":{"type":"string","isRequired":true,"uniqueKey":"base_image_auth.oneOf.2.region","typeLabel":"string"},"session_token":{"type":"string","uniqueKey":"base_image_auth.oneOf.2.session_token","typeLabel":"string"}},"uniqueKey":"base_image_auth.oneOf.2","typeLabel":"object"}],"uniqueKey":"base_image_auth","typeLabel":"object"},"registry_auth":{"type":"array","items":{"type":"object","required":["registry","auth"],"properties":{"registry":{"type":"string","description":"Registry host such as `registry.example.com` or `docker.io`.","isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].registry","typeLabel":"string"},"auth":{"oneOf":[{"type":"object","required":["kind","username","password"],"properties":{"kind":{"type":"string","enum":["basic"],"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"username":{"type":"string","isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.0.username","typeLabel":"string"},"password":{"type":"string","isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.0.password","typeLabel":"string"}},"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.0","typeLabel":"object"},{"type":"object","required":["kind","service_account_json"],"properties":{"kind":{"type":"string","enum":["gcp_artifact_registry"],"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"service_account_json":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.1.service_account_json.oneOf.0","typeLabel":"string"},{"type":"object","description":"Parsed GCP service-account key JSON; the shape is defined by Google Cloud, deliberately open.","additionalProperties":true,"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.1.service_account_json.oneOf.1","typeLabel":"object"}],"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.1.service_account_json","typeLabel":"string | object"}},"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.1","typeLabel":"object"},{"type":"object","required":["kind","access_key_id","secret_access_key","region"],"properties":{"kind":{"type":"string","enum":["aws_ecr"],"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"access_key_id":{"type":"string","isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.2.access_key_id","typeLabel":"string"},"secret_access_key":{"type":"string","isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.2.secret_access_key","typeLabel":"string"},"region":{"type":"string","isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.2.region","typeLabel":"string"},"session_token":{"type":"string","uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.2.session_token","typeLabel":"string"}},"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"registry_auth.items.[INDEX].auth","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"registry_auth.items.[INDEX]","typeLabel":"object"},"description":"Optional per-registry request-time credentials for BuildKit Dockerfile pulls. Each `registry` must match a registry host used by the Dockerfile or base image. Secret values are forwarded only to the build worker and are not stored in durable build records.","uniqueKey":"registry_auth","typeLabel":"object[]"},"build_secrets":{"type":"array","items":{"type":"object","required":["id","value"],"properties":{"id":{"type":"string","description":"BuildKit secret ID used by Dockerfile `RUN --mount=type=secret,id=\u003cid>` instructions. IDs may contain letters, numbers, `.`, `_`, and `-`.","isRequired":true,"uniqueKey":"build_secrets.items.[INDEX].id","typeLabel":"string"},"value":{"type":"string","description":"Request-time secret value. The value is forwarded to the build worker as a temporary BuildKit secret file and is not stored.","isRequired":true,"uniqueKey":"build_secrets.items.[INDEX].value","typeLabel":"string"},"source":{"type":"string","enum":["value","env","file"],"description":"Client-side source hint for the secret value. The API receives a request-time value either way; env and file sources should be resolved by SDKs or CLIs before submission.","uniqueKey":"build_secrets.items.[INDEX].source","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"build_secrets.items.[INDEX]","typeLabel":"object"},"description":"Optional request-time BuildKit secrets exposed to Dockerfile `RUN --mount=type=secret` instructions. Supported only by the BuildKit backend. Values are forwarded only to the build worker and are not persisted in durable build records, cache keys, or context manifests.","uniqueKey":"build_secrets","typeLabel":"object[]"},"skip_cache":{"type":"boolean","description":"Firecracker-only whole-build cache bypass","uniqueKey":"skip_cache","typeLabel":"boolean"},"claim_token":{"type":"string","description":"Optional reserved template-name claim token","uniqueKey":"claim_token","typeLabel":"string"}},"example":{"name":"tmpl-app","base_image":"ubuntu:22.04","build_envs":{"APP_ENV":"build"},"steps":[{"action":"copy","sources":["builder-context/src/package.json","builder-context/src/package-lock.json"],"dst":"/workspace/","user":"app","mode":"0644"},{"action":"run","command":"npm ci","user":"app"},{"action":"git_clone","url":"https://github.com/acme/service.git","path":"/workspace/service","branch":"main","depth":1},{"action":"npm_install","packages":["tsx"],"g":true}],"runtime_config":{"default_user":"app","default_workdir":"/workspace","readiness":{"kind":"tcp","port":3000,"timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"default_envs":{"PORT":"3000"}},"start_cmd":"npm run dev"},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"name":"tmpl-app","base_image":"ubuntu:22.04","build_envs":{"APP_ENV":"build"},"steps":[{"action":"copy","sources":["builder-context/src/package.json","builder-context/src/package-lock.json"],"dst":"/workspace/","user":"app","mode":"0644"},{"action":"run","command":"npm ci","user":"app"},{"action":"git_clone","url":"https://github.com/acme/service.git","path":"/workspace/service","branch":"main","depth":1},{"action":"npm_install","packages":["tsx"],"g":true}],"runtime_config":{"default_user":"app","default_workdir":"/workspace","readiness":{"kind":"tcp","port":3000,"timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"default_envs":{"PORT":"3000"}},"start_cmd":"npm run dev"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"a72e70ae-21eb-4587-aaed-d34799301e48":{"description":"Build accepted","content":{"application/json":{"schema":{"type":"object","required":["build_id","template_id","name","tags","status","build_backend","source_type","canonical_ref","namespace_slug","visibility","created_at","updated_at"],"properties":{"build_id":{"type":"string","isRequired":true,"uniqueKey":"build_id","typeLabel":"string"},"template_id":{"type":"string","isRequired":true,"uniqueKey":"template_id","typeLabel":"string"},"name":{"type":"string","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"tags":{"type":"array","items":{"type":"string","uniqueKey":"tags.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"tags","typeLabel":"string[]"},"status":{"type":"string","enum":["waiting","building","ready","error","cancelled"],"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"build_backend":{"type":"string","description":"Template build backend. `native` is retained for declarative/OCI build requests and historical filters; Dockerfile build requests use `buildkit`.","enum":["native","buildkit"],"isRequired":true,"uniqueKey":"build_backend","typeLabel":"enum\u003cstring>"},"source_type":{"type":"string","enum":["declarative","dockerfile","oci_import","template_base"],"isRequired":true,"uniqueKey":"source_type","typeLabel":"enum\u003cstring>"},"canonical_ref":{"type":"string","isRequired":true,"uniqueKey":"canonical_ref","typeLabel":"string"},"namespace_slug":{"type":"string","isRequired":true,"uniqueKey":"namespace_slug","typeLabel":"string"},"visibility":{"type":"string","enum":["private","public"],"isRequired":true,"uniqueKey":"visibility","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"source_digest":{"type":"string","uniqueKey":"source_digest","typeLabel":"string"},"context_digest":{"type":"string","uniqueKey":"context_digest","typeLabel":"string"},"dockerfile_digest":{"type":"string","uniqueKey":"dockerfile_digest","typeLabel":"string"},"build_config":{"type":"object","description":"Build VM resource configuration","properties":{"vcpus":{"type":"integer","description":"Number of vCPUs for the build VM (default 1)","uniqueKey":"build_config.vcpus","typeLabel":"integer"},"memory_mib":{"type":"integer","description":"Memory in MiB for the build VM (default 512)","uniqueKey":"build_config.memory_mib","typeLabel":"integer"},"internet_access":{"type":"boolean","description":"Whether the build VM has internet access (default true)","uniqueKey":"build_config.internet_access","typeLabel":"boolean"},"disk_mb":{"type":"integer","minimum":512,"description":"Minimum rootfs size in MiB baked into the built template. The build VM's rootfs is grown to this size before its snapshot is captured, so every machine created from the template (cold, warm-pool, fork, resume) inherits the larger disk. Omit to use the default headroom.","uniqueKey":"build_config.disk_mb","typeLabel":"integer"}},"uniqueKey":"build_config","typeLabel":"object"},"triggered_by":{"type":"string","uniqueKey":"triggered_by","typeLabel":"string"},"queued_at":{"type":"string","format":"date-time","uniqueKey":"queued_at","typeLabel":"string\u003cdate-time>"},"started_at":{"type":"string","format":"date-time","uniqueKey":"started_at","typeLabel":"string\u003cdate-time>"},"finished_at":{"type":"string","format":"date-time","uniqueKey":"finished_at","typeLabel":"string\u003cdate-time>"},"duration_ms":{"type":"integer","format":"uint64","uniqueKey":"duration_ms","typeLabel":"integer\u003cuint64>"},"failure_phase":{"type":"string","uniqueKey":"failure_phase","typeLabel":"string"},"cache_summary":{"type":"object","properties":{"final_artifact_hits":{"type":"integer","uniqueKey":"cache_summary.final_artifact_hits","typeLabel":"integer"},"final_artifact_misses":{"type":"integer","uniqueKey":"cache_summary.final_artifact_misses","typeLabel":"integer"},"final_artifact_bypasses":{"type":"integer","uniqueKey":"cache_summary.final_artifact_bypasses","typeLabel":"integer"},"final_artifact_stores":{"type":"integer","uniqueKey":"cache_summary.final_artifact_stores","typeLabel":"integer"},"layer_hits":{"type":"integer","uniqueKey":"cache_summary.layer_hits","typeLabel":"integer"},"layer_misses":{"type":"integer","uniqueKey":"cache_summary.layer_misses","typeLabel":"integer"},"layer_bypasses":{"type":"integer","uniqueKey":"cache_summary.layer_bypasses","typeLabel":"integer"},"layer_stores":{"type":"integer","uniqueKey":"cache_summary.layer_stores","typeLabel":"integer"},"file_blob_hits":{"type":"integer","uniqueKey":"cache_summary.file_blob_hits","typeLabel":"integer"},"file_blob_misses":{"type":"integer","uniqueKey":"cache_summary.file_blob_misses","typeLabel":"integer"},"file_blob_bypasses":{"type":"integer","uniqueKey":"cache_summary.file_blob_bypasses","typeLabel":"integer"},"file_blob_stores":{"type":"integer","uniqueKey":"cache_summary.file_blob_stores","typeLabel":"integer"}},"uniqueKey":"cache_summary","typeLabel":"object"},"artifact_availability":{"type":"object","required":["status"],"properties":{"status":{"type":"string","enum":["available","publishing","warming","unavailable","failed"],"isRequired":true,"uniqueKey":"artifact_availability.status","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","uniqueKey":"artifact_availability.reason","typeLabel":"string"}},"uniqueKey":"artifact_availability","typeLabel":"object"},"promotability":{"type":"object","required":["status","promotable"],"properties":{"status":{"type":"string","enum":["promotable","not_ready","expired","purged","unavailable"],"isRequired":true,"uniqueKey":"promotability.status","typeLabel":"enum\u003cstring>"},"promotable":{"type":"boolean","isRequired":true,"uniqueKey":"promotability.promotable","typeLabel":"boolean"},"reason":{"type":"string","uniqueKey":"promotability.reason","typeLabel":"string"}},"uniqueKey":"promotability","typeLabel":"object"},"retention_expires_at":{"type":"string","format":"date-time","uniqueKey":"retention_expires_at","typeLabel":"string\u003cdate-time>"},"runtime_defaults":{"type":"object","description":"Effective runtime defaults retained for a built template. Environment values are intentionally omitted; only keys are exposed.","properties":{"default_env_keys":{"type":"array","items":{"type":"string","uniqueKey":"runtime_defaults.default_env_keys.items.[INDEX]","typeLabel":"string"},"uniqueKey":"runtime_defaults.default_env_keys","typeLabel":"string[]"},"start_cmd":{"type":"string","uniqueKey":"runtime_defaults.start_cmd","typeLabel":"string"},"default_user":{"type":"string","uniqueKey":"runtime_defaults.default_user","typeLabel":"string"},"default_workdir":{"type":"string","uniqueKey":"runtime_defaults.default_workdir","typeLabel":"string"},"readiness":{"oneOf":[{"type":"object","required":["kind","port"],"example":{"kind":"tcp","port":3000,"timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["tcp"],"isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"port":{"type":"integer","format":"int32","isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.0.port","typeLabel":"integer\u003cint32>"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_defaults.readiness.oneOf.0.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"runtime_defaults.readiness.oneOf.0.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_defaults.readiness.oneOf.0.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"runtime_defaults.readiness.oneOf.0","typeLabel":"object"},{"type":"object","required":["kind","timeout_ms"],"example":{"kind":"timeout","timeout_ms":20000},"properties":{"kind":{"type":"string","enum":["timeout"],"isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"timeout_ms":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.1.timeout_ms","typeLabel":"integer\u003cint64>"}},"uniqueKey":"runtime_defaults.readiness.oneOf.1","typeLabel":"object"},{"type":"object","required":["kind","port","path"],"example":{"kind":"http","port":3000,"path":"/ready","timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["http"],"isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"port":{"type":"integer","format":"int32","isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.2.port","typeLabel":"integer\u003cint32>"},"path":{"type":"string","isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.2.path","typeLabel":"string"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_defaults.readiness.oneOf.2.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"runtime_defaults.readiness.oneOf.2.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_defaults.readiness.oneOf.2.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"runtime_defaults.readiness.oneOf.2","typeLabel":"object"},{"type":"object","required":["kind","command"],"example":{"kind":"command","command":"test -e /tmp/template-ready","timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["command"],"isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"command":{"type":"string","isRequired":true,"uniqueKey":"runtime_defaults.readiness.oneOf.3.command","typeLabel":"string"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_defaults.readiness.oneOf.3.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"runtime_defaults.readiness.oneOf.3.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"runtime_defaults.readiness.oneOf.3.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"runtime_defaults.readiness.oneOf.3","typeLabel":"object"}],"uniqueKey":"runtime_defaults.readiness","typeLabel":"object"}},"uniqueKey":"runtime_defaults","typeLabel":"object"},"oci_metadata":{"type":"object","description":"OCI image metadata retained from Dockerfile or OCI imports. Volume declarations are metadata only and do not create persistent Nullspace volumes.","properties":{"labels":{"type":"object","additionalProperties":{"type":"string","uniqueKey":"oci_metadata.labels.additionalProperties","typeLabel":"string"},"uniqueKey":"oci_metadata.labels","typeLabel":"object"},"exposed_ports":{"type":"array","items":{"type":"string","uniqueKey":"oci_metadata.exposed_ports.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oci_metadata.exposed_ports","typeLabel":"string[]"},"volumes":{"type":"array","items":{"type":"string","uniqueKey":"oci_metadata.volumes.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oci_metadata.volumes","typeLabel":"string[]"},"healthcheck":{"type":"object","properties":{"test":{"type":"array","items":{"type":"string","uniqueKey":"oci_metadata.healthcheck.test.items.[INDEX]","typeLabel":"string"},"uniqueKey":"oci_metadata.healthcheck.test","typeLabel":"string[]"},"interval_ns":{"type":"integer","format":"int64","uniqueKey":"oci_metadata.healthcheck.interval_ns","typeLabel":"integer\u003cint64>"},"timeout_ns":{"type":"integer","format":"int64","uniqueKey":"oci_metadata.healthcheck.timeout_ns","typeLabel":"integer\u003cint64>"},"start_period_ns":{"type":"integer","format":"int64","uniqueKey":"oci_metadata.healthcheck.start_period_ns","typeLabel":"integer\u003cint64>"},"retries":{"type":"integer","format":"int32","uniqueKey":"oci_metadata.healthcheck.retries","typeLabel":"integer\u003cint32>"},"mapped_readiness":{"oneOf":[{"type":"object","required":["kind","port"],"example":{"kind":"tcp","port":3000,"timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["tcp"],"isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.0.kind","typeLabel":"enum\u003cstring>"},"port":{"type":"integer","format":"int32","isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.0.port","typeLabel":"integer\u003cint32>"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.0.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.0.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.0.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.0","typeLabel":"object"},{"type":"object","required":["kind","timeout_ms"],"example":{"kind":"timeout","timeout_ms":20000},"properties":{"kind":{"type":"string","enum":["timeout"],"isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.1.kind","typeLabel":"enum\u003cstring>"},"timeout_ms":{"type":"integer","format":"int64","isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.1.timeout_ms","typeLabel":"integer\u003cint64>"}},"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.1","typeLabel":"object"},{"type":"object","required":["kind","port","path"],"example":{"kind":"http","port":3000,"path":"/ready","timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["http"],"isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.2.kind","typeLabel":"enum\u003cstring>"},"port":{"type":"integer","format":"int32","isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.2.port","typeLabel":"integer\u003cint32>"},"path":{"type":"string","isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.2.path","typeLabel":"string"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.2.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.2.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.2.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.2","typeLabel":"object"},{"type":"object","required":["kind","command"],"example":{"kind":"command","command":"test -e /tmp/template-ready","timeout_secs":30,"interval_ms":500,"startup_grace_secs":2},"properties":{"kind":{"type":"string","enum":["command"],"isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.3.kind","typeLabel":"enum\u003cstring>"},"command":{"type":"string","isRequired":true,"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.3.command","typeLabel":"string"},"timeout_secs":{"type":"integer","format":"int32","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.3.timeout_secs","typeLabel":"integer\u003cint32>"},"interval_ms":{"type":"integer","format":"int64","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.3.interval_ms","typeLabel":"integer\u003cint64>"},"startup_grace_secs":{"type":"integer","format":"int32","uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.3.startup_grace_secs","typeLabel":"integer\u003cint32>"}},"uniqueKey":"oci_metadata.healthcheck.mapped_readiness.oneOf.3","typeLabel":"object"}],"uniqueKey":"oci_metadata.healthcheck.mapped_readiness","typeLabel":"object"}},"uniqueKey":"oci_metadata.healthcheck","typeLabel":"object"}},"uniqueKey":"oci_metadata","typeLabel":"object"},"artifact_ids":{"type":"array","items":{"type":"string","uniqueKey":"artifact_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"artifact_ids","typeLabel":"string[]"},"retry_of_build_id":{"type":"string","uniqueKey":"retry_of_build_id","typeLabel":"string"},"original_build_id":{"type":"string","uniqueKey":"original_build_id","typeLabel":"string"},"cancel_requested_at":{"type":"string","format":"date-time","uniqueKey":"cancel_requested_at","typeLabel":"string\u003cdate-time>"},"cancel_requested_by":{"type":"string","uniqueKey":"cancel_requested_by","typeLabel":"string"},"cancellation_reason":{"type":"string","uniqueKey":"cancellation_reason","typeLabel":"string"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"error_detail":{"type":"object","required":["code","message","phase","retryable","suggested_action"],"properties":{"code":{"type":"string","enum":["unauthorized","file_upload_error","build_error","internal_error"],"isRequired":true,"uniqueKey":"error_detail.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error_detail.message","typeLabel":"string"},"phase":{"type":"string","enum":["auth","preflight","blob_upload","prepare","build_step","readiness","snapshot","finalize","interrupted"],"isRequired":true,"uniqueKey":"error_detail.phase","typeLabel":"enum\u003cstring>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"error_detail.retryable","typeLabel":"boolean"},"suggested_action":{"type":"string","isRequired":true,"uniqueKey":"error_detail.suggested_action","typeLabel":"string"},"step_index":{"type":"integer","uniqueKey":"error_detail.step_index","typeLabel":"integer"},"attempt":{"type":"integer","uniqueKey":"error_detail.attempt","typeLabel":"integer"},"max_attempts":{"type":"integer","uniqueKey":"error_detail.max_attempts","typeLabel":"integer"},"cache_subject":{"type":"string","uniqueKey":"error_detail.cache_subject","typeLabel":"string"},"build_id":{"type":"string","uniqueKey":"error_detail.build_id","typeLabel":"string"},"request_id":{"type":"string","description":"Present on terminal request-originated failures and blocking error responses.","uniqueKey":"error_detail.request_id","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Stable failure metadata. Includes a `reason` key plus phase-specific fields such as `blob_id`, `path`, digest/size mismatch values, `command`, or `alias`.","uniqueKey":"error_detail.details","typeLabel":"object"}},"uniqueKey":"error_detail","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"build_id":"\u003cstring>","template_id":"\u003cstring>","name":"\u003cstring>","tags":["\u003cstring>"],"status":"waiting","build_backend":"native","source_type":"declarative","canonical_ref":"\u003cstring>","namespace_slug":"\u003cstring>","visibility":"private","created_at":"2023-11-07T05:31:56Z","updated_at":"2023-11-07T05:31:56Z","source_digest":"\u003cstring>","context_digest":"\u003cstring>","dockerfile_digest":"\u003cstring>","build_config":{"vcpus":123,"memory_mib":123,"internet_access":true,"disk_mb":513},"triggered_by":"\u003cstring>","queued_at":"2023-11-07T05:31:56Z","started_at":"2023-11-07T05:31:56Z","finished_at":"2023-11-07T05:31:56Z","duration_ms":123,"failure_phase":"\u003cstring>","cache_summary":{"final_artifact_hits":123,"final_artifact_misses":123,"final_artifact_bypasses":123,"final_artifact_stores":123,"layer_hits":123,"layer_misses":123,"layer_bypasses":123,"layer_stores":123,"file_blob_hits":123,"file_blob_misses":123,"file_blob_bypasses":123,"file_blob_stores":123},"artifact_availability":{"status":"available","reason":"\u003cstring>"},"promotability":{"status":"promotable","promotable":true,"reason":"\u003cstring>"},"retention_expires_at":"2023-11-07T05:31:56Z","runtime_defaults":{"default_env_keys":["\u003cstring>"],"start_cmd":"\u003cstring>","default_user":"\u003cstring>","default_workdir":"\u003cstring>","readiness":{"kind":"tcp","port":3000,"timeout_secs":30,"interval_ms":500,"startup_grace_secs":2}},"oci_metadata":{"labels":{},"exposed_ports":["\u003cstring>"],"volumes":["\u003cstring>"],"healthcheck":{"test":["\u003cstring>"],"interval_ns":123,"timeout_ns":123,"start_period_ns":123,"retries":123,"mapped_readiness":{"kind":"tcp","port":3000,"timeout_secs":30,"interval_ms":500,"startup_grace_secs":2}}},"artifact_ids":["\u003cstring>"],"retry_of_build_id":"\u003cstring>","original_build_id":"\u003cstring>","cancel_requested_at":"2023-11-07T05:31:56Z","cancel_requested_by":"\u003cstring>","cancellation_reason":"\u003cstring>","error":"\u003cstring>","error_detail":{"code":"unauthorized","message":"\u003cstring>","phase":"auth","retryable":true,"suggested_action":"\u003cstring>","step_index":123,"attempt":123,"max_attempts":123,"cache_subject":"\u003cstring>","build_id":"\u003cstring>","request_id":"\u003cstring>","details":{}}}}},"exampleType":"generated"}},"exampleType":"generated"},"416b1bb3-84a0-404a-9495-dda3878d9b64":{"description":"Invalid request or build-context blob failure before the build is accepted","content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code","enum":["invalid_request","machine_not_found","snapshot_not_found","template_not_found","template_build_not_found","template_name_claim_not_found","machine_not_ready","unauthorized","auth_failed","auth_locked","auth_proxy_error","auth_proxy_unavailable","invalid_auth_redirect","invalid_oauth_provider","captcha_required","captcha_failed","captcha_unavailable","disposable_email","signup_rate_limited","oauth_rate_limited","email_action_rate_limited","database_error","email_not_verified","account_deleted","operator_required","account_not_found","account_not_soft_deleted","account_hard_delete_active_resources","file_upload_error","build_error","exec_timeout","exec_failed","file_error","not_implemented","capacity_exceeded","QUOTA_EXCEEDED","feature_unavailable","snapshot_in_use","no_eligible_runtime_host","same_host_required","incompatible_snapshot","rebuild_required","rate_limit_exceeded","transition_in_progress","transition_conflict","agent_deployment_not_found","agent_deployment_version_not_found","agent_run_not_found","agent_service_instance_not_found","agent_deployment_name_conflict","agent_deployment_idempotency_mismatch","agent_deployment_invalid_config","agent_deployment_invalid_state","volume_beta_restriction","volume_invalid_mount_path","volume_overlapping_mounts","volume_backend_capability_unsupported","volume_quota_exceeded","volume_mount_credential_issue_failed","volume_backend_unavailable","volume_stale_revision","volume_busy","volume_read_only","volume_limit_exceeded","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error_detail":{"oneOf":[{"type":"object","required":["code","message","phase","retryable","suggested_action"],"properties":{"code":{"type":"string","enum":["unauthorized","file_upload_error","build_error","internal_error"],"isRequired":true,"uniqueKey":"error_detail.oneOf.0.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.0.message","typeLabel":"string"},"phase":{"type":"string","enum":["auth","preflight","blob_upload","prepare","build_step","readiness","snapshot","finalize","interrupted"],"isRequired":true,"uniqueKey":"error_detail.oneOf.0.phase","typeLabel":"enum\u003cstring>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"error_detail.oneOf.0.retryable","typeLabel":"boolean"},"suggested_action":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.0.suggested_action","typeLabel":"string"},"step_index":{"type":"integer","uniqueKey":"error_detail.oneOf.0.step_index","typeLabel":"integer"},"attempt":{"type":"integer","uniqueKey":"error_detail.oneOf.0.attempt","typeLabel":"integer"},"max_attempts":{"type":"integer","uniqueKey":"error_detail.oneOf.0.max_attempts","typeLabel":"integer"},"cache_subject":{"type":"string","uniqueKey":"error_detail.oneOf.0.cache_subject","typeLabel":"string"},"build_id":{"type":"string","uniqueKey":"error_detail.oneOf.0.build_id","typeLabel":"string"},"request_id":{"type":"string","description":"Present on terminal request-originated failures and blocking error responses.","uniqueKey":"error_detail.oneOf.0.request_id","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Stable failure metadata. Includes a `reason` key plus phase-specific fields such as `blob_id`, `path`, digest/size mismatch values, `command`, or `alias`.","uniqueKey":"error_detail.oneOf.0.details","typeLabel":"object"}},"uniqueKey":"error_detail.oneOf.0","typeLabel":"object"},{"type":"object","required":["reason","message","retryable"],"properties":{"reason":{"type":"string","enum":["insufficient_staging_space","size_limit_exceeded","invalid_part_checksum","part_out_of_range","part_size_mismatch","whole_checksum_mismatch","upload_expired","upload_aborted","upload_already_completed","target_conflict","directory_extract_invalid_path","directory_extract_invalid_symlink","directory_extract_unsupported_entry","missing_parts"],"isRequired":true,"uniqueKey":"error_detail.oneOf.1.reason","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.1.message","typeLabel":"string"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"error_detail.oneOf.1.retryable","typeLabel":"boolean"},"upload_id":{"type":"string","uniqueKey":"error_detail.oneOf.1.upload_id","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error_detail.oneOf.1.request_id","typeLabel":"string"},"path":{"type":"string","description":"Normalized absolute machine path associated with the failed upload when available.","uniqueKey":"error_detail.oneOf.1.path","typeLabel":"string"},"part_number":{"type":"integer","format":"uint32","uniqueKey":"error_detail.oneOf.1.part_number","typeLabel":"integer\u003cuint32>"},"details":{"type":"object","additionalProperties":true,"description":"Additional failure diagnostics; keys depend on the failure reason, deliberately open.","uniqueKey":"error_detail.oneOf.1.details","typeLabel":"object"}},"uniqueKey":"error_detail.oneOf.1","typeLabel":"object"}],"uniqueKey":"error_detail","typeLabel":"object"},"request_id":{"type":"string","description":"Request correlation ID returned in the `x-request-id` header","uniqueKey":"request_id","typeLabel":"string"},"build_id":{"type":"string","description":"Template build ID when the error is associated with a tracked build","uniqueKey":"build_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"invalidRequest":{"title":"invalidRequest","value":{"error":"template name contains invalid characters","code":"invalid_request","request_id":"req_123"}},"emptyTags":{"title":"emptyTags","value":{"error":"template tags must not be empty","code":"invalid_request","request_id":"req_123"}},"fileUploadError":{"title":"fileUploadError","value":{"error":"blob preflight failed","code":"file_upload_error","request_id":"req_123","error_detail":{"code":"file_upload_error","message":"blob preflight failed","phase":"preflight","retryable":true,"suggested_action":"Re-preflight the build context and upload any missing blobs.","request_id":"req_123","details":{"reason":"missing_blob"}}}}},"exampleType":"examples"}},"exampleType":"examples"},"584a8b90-2835-46aa-b851-ac41c80da8db":{"description":"Missing or invalid bearer credential","content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code","enum":["invalid_request","machine_not_found","snapshot_not_found","template_not_found","template_build_not_found","template_name_claim_not_found","machine_not_ready","unauthorized","auth_failed","auth_locked","auth_proxy_error","auth_proxy_unavailable","invalid_auth_redirect","invalid_oauth_provider","captcha_required","captcha_failed","captcha_unavailable","disposable_email","signup_rate_limited","oauth_rate_limited","email_action_rate_limited","database_error","email_not_verified","account_deleted","operator_required","account_not_found","account_not_soft_deleted","account_hard_delete_active_resources","file_upload_error","build_error","exec_timeout","exec_failed","file_error","not_implemented","capacity_exceeded","QUOTA_EXCEEDED","feature_unavailable","snapshot_in_use","no_eligible_runtime_host","same_host_required","incompatible_snapshot","rebuild_required","rate_limit_exceeded","transition_in_progress","transition_conflict","agent_deployment_not_found","agent_deployment_version_not_found","agent_run_not_found","agent_service_instance_not_found","agent_deployment_name_conflict","agent_deployment_idempotency_mismatch","agent_deployment_invalid_config","agent_deployment_invalid_state","volume_beta_restriction","volume_invalid_mount_path","volume_overlapping_mounts","volume_backend_capability_unsupported","volume_quota_exceeded","volume_mount_credential_issue_failed","volume_backend_unavailable","volume_stale_revision","volume_busy","volume_read_only","volume_limit_exceeded","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error_detail":{"oneOf":[{"type":"object","required":["code","message","phase","retryable","suggested_action"],"properties":{"code":{"type":"string","enum":["unauthorized","file_upload_error","build_error","internal_error"],"isRequired":true,"uniqueKey":"error_detail.oneOf.0.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.0.message","typeLabel":"string"},"phase":{"type":"string","enum":["auth","preflight","blob_upload","prepare","build_step","readiness","snapshot","finalize","interrupted"],"isRequired":true,"uniqueKey":"error_detail.oneOf.0.phase","typeLabel":"enum\u003cstring>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"error_detail.oneOf.0.retryable","typeLabel":"boolean"},"suggested_action":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.0.suggested_action","typeLabel":"string"},"step_index":{"type":"integer","uniqueKey":"error_detail.oneOf.0.step_index","typeLabel":"integer"},"attempt":{"type":"integer","uniqueKey":"error_detail.oneOf.0.attempt","typeLabel":"integer"},"max_attempts":{"type":"integer","uniqueKey":"error_detail.oneOf.0.max_attempts","typeLabel":"integer"},"cache_subject":{"type":"string","uniqueKey":"error_detail.oneOf.0.cache_subject","typeLabel":"string"},"build_id":{"type":"string","uniqueKey":"error_detail.oneOf.0.build_id","typeLabel":"string"},"request_id":{"type":"string","description":"Present on terminal request-originated failures and blocking error responses.","uniqueKey":"error_detail.oneOf.0.request_id","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Stable failure metadata. Includes a `reason` key plus phase-specific fields such as `blob_id`, `path`, digest/size mismatch values, `command`, or `alias`.","uniqueKey":"error_detail.oneOf.0.details","typeLabel":"object"}},"uniqueKey":"error_detail.oneOf.0","typeLabel":"object"},{"type":"object","required":["reason","message","retryable"],"properties":{"reason":{"type":"string","enum":["insufficient_staging_space","size_limit_exceeded","invalid_part_checksum","part_out_of_range","part_size_mismatch","whole_checksum_mismatch","upload_expired","upload_aborted","upload_already_completed","target_conflict","directory_extract_invalid_path","directory_extract_invalid_symlink","directory_extract_unsupported_entry","missing_parts"],"isRequired":true,"uniqueKey":"error_detail.oneOf.1.reason","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.1.message","typeLabel":"string"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"error_detail.oneOf.1.retryable","typeLabel":"boolean"},"upload_id":{"type":"string","uniqueKey":"error_detail.oneOf.1.upload_id","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error_detail.oneOf.1.request_id","typeLabel":"string"},"path":{"type":"string","description":"Normalized absolute machine path associated with the failed upload when available.","uniqueKey":"error_detail.oneOf.1.path","typeLabel":"string"},"part_number":{"type":"integer","format":"uint32","uniqueKey":"error_detail.oneOf.1.part_number","typeLabel":"integer\u003cuint32>"},"details":{"type":"object","additionalProperties":true,"description":"Additional failure diagnostics; keys depend on the failure reason, deliberately open.","uniqueKey":"error_detail.oneOf.1.details","typeLabel":"object"}},"uniqueKey":"error_detail.oneOf.1","typeLabel":"object"}],"uniqueKey":"error_detail","typeLabel":"object"},"request_id":{"type":"string","description":"Request correlation ID returned in the `x-request-id` header","uniqueKey":"request_id","typeLabel":"string"},"build_id":{"type":"string","description":"Template build ID when the error is associated with a tracked build","uniqueKey":"build_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"unauthorized":{"title":"unauthorized","value":{"error":"Missing or invalid bearer credential","code":"unauthorized","request_id":"req_123"}}},"exampleType":"examples"}},"exampleType":"examples"},"c4b7a368-b4ee-4a96-92b0-edb557d85285":{"description":"Feature is unavailable in current deployment mode","content":{"application/json":{"schema":{"type":"object","required":["error","code"],"properties":{"error":{"type":"string","description":"Human-readable error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Machine-readable error code","enum":["invalid_request","machine_not_found","snapshot_not_found","template_not_found","template_build_not_found","template_name_claim_not_found","machine_not_ready","unauthorized","auth_failed","auth_locked","auth_proxy_error","auth_proxy_unavailable","invalid_auth_redirect","invalid_oauth_provider","captcha_required","captcha_failed","captcha_unavailable","disposable_email","signup_rate_limited","oauth_rate_limited","email_action_rate_limited","database_error","email_not_verified","account_deleted","operator_required","account_not_found","account_not_soft_deleted","account_hard_delete_active_resources","file_upload_error","build_error","exec_timeout","exec_failed","file_error","not_implemented","capacity_exceeded","QUOTA_EXCEEDED","feature_unavailable","snapshot_in_use","no_eligible_runtime_host","same_host_required","incompatible_snapshot","rebuild_required","rate_limit_exceeded","transition_in_progress","transition_conflict","agent_deployment_not_found","agent_deployment_version_not_found","agent_run_not_found","agent_service_instance_not_found","agent_deployment_name_conflict","agent_deployment_idempotency_mismatch","agent_deployment_invalid_config","agent_deployment_invalid_state","volume_beta_restriction","volume_invalid_mount_path","volume_overlapping_mounts","volume_backend_capability_unsupported","volume_quota_exceeded","volume_mount_credential_issue_failed","volume_backend_unavailable","volume_stale_revision","volume_busy","volume_read_only","volume_limit_exceeded","internal_error"],"isRequired":true,"uniqueKey":"code","typeLabel":"enum\u003cstring>"},"error_detail":{"oneOf":[{"type":"object","required":["code","message","phase","retryable","suggested_action"],"properties":{"code":{"type":"string","enum":["unauthorized","file_upload_error","build_error","internal_error"],"isRequired":true,"uniqueKey":"error_detail.oneOf.0.code","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.0.message","typeLabel":"string"},"phase":{"type":"string","enum":["auth","preflight","blob_upload","prepare","build_step","readiness","snapshot","finalize","interrupted"],"isRequired":true,"uniqueKey":"error_detail.oneOf.0.phase","typeLabel":"enum\u003cstring>"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"error_detail.oneOf.0.retryable","typeLabel":"boolean"},"suggested_action":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.0.suggested_action","typeLabel":"string"},"step_index":{"type":"integer","uniqueKey":"error_detail.oneOf.0.step_index","typeLabel":"integer"},"attempt":{"type":"integer","uniqueKey":"error_detail.oneOf.0.attempt","typeLabel":"integer"},"max_attempts":{"type":"integer","uniqueKey":"error_detail.oneOf.0.max_attempts","typeLabel":"integer"},"cache_subject":{"type":"string","uniqueKey":"error_detail.oneOf.0.cache_subject","typeLabel":"string"},"build_id":{"type":"string","uniqueKey":"error_detail.oneOf.0.build_id","typeLabel":"string"},"request_id":{"type":"string","description":"Present on terminal request-originated failures and blocking error responses.","uniqueKey":"error_detail.oneOf.0.request_id","typeLabel":"string"},"details":{"type":"object","additionalProperties":true,"description":"Stable failure metadata. Includes a `reason` key plus phase-specific fields such as `blob_id`, `path`, digest/size mismatch values, `command`, or `alias`.","uniqueKey":"error_detail.oneOf.0.details","typeLabel":"object"}},"uniqueKey":"error_detail.oneOf.0","typeLabel":"object"},{"type":"object","required":["reason","message","retryable"],"properties":{"reason":{"type":"string","enum":["insufficient_staging_space","size_limit_exceeded","invalid_part_checksum","part_out_of_range","part_size_mismatch","whole_checksum_mismatch","upload_expired","upload_aborted","upload_already_completed","target_conflict","directory_extract_invalid_path","directory_extract_invalid_symlink","directory_extract_unsupported_entry","missing_parts"],"isRequired":true,"uniqueKey":"error_detail.oneOf.1.reason","typeLabel":"enum\u003cstring>"},"message":{"type":"string","isRequired":true,"uniqueKey":"error_detail.oneOf.1.message","typeLabel":"string"},"retryable":{"type":"boolean","isRequired":true,"uniqueKey":"error_detail.oneOf.1.retryable","typeLabel":"boolean"},"upload_id":{"type":"string","uniqueKey":"error_detail.oneOf.1.upload_id","typeLabel":"string"},"request_id":{"type":"string","uniqueKey":"error_detail.oneOf.1.request_id","typeLabel":"string"},"path":{"type":"string","description":"Normalized absolute machine path associated with the failed upload when available.","uniqueKey":"error_detail.oneOf.1.path","typeLabel":"string"},"part_number":{"type":"integer","format":"uint32","uniqueKey":"error_detail.oneOf.1.part_number","typeLabel":"integer\u003cuint32>"},"details":{"type":"object","additionalProperties":true,"description":"Additional failure diagnostics; keys depend on the failure reason, deliberately open.","uniqueKey":"error_detail.oneOf.1.details","typeLabel":"object"}},"uniqueKey":"error_detail.oneOf.1","typeLabel":"object"}],"uniqueKey":"error_detail","typeLabel":"object"},"request_id":{"type":"string","description":"Request correlation ID returned in the `x-request-id` header","uniqueKey":"request_id","typeLabel":"string"},"build_id":{"type":"string","description":"Template build ID when the error is associated with a tracked build","uniqueKey":"build_id","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>","code":"invalid_request","error_detail":{"code":"unauthorized","message":"\u003cstring>","phase":"auth","retryable":true,"suggested_action":"\u003cstring>","step_index":123,"attempt":123,"max_attempts":123,"cache_subject":"\u003cstring>","build_id":"\u003cstring>","request_id":"\u003cstring>","details":{}},"request_id":"\u003cstring>","build_id":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"0074367e-5f75-43db-afc2-3b1ecac22146":{"bearerAuth":{"type":"http","scheme":"bearer","description":"API key passed as Bearer token","scopes":[]}}},"servers":{"f71276dc-ef86-4d4f-985f-09c832d1de19":{"url":"https://api.13-215-85-171.sslip.io","description":"Private beta"},"a0e428dc-322f-4ccd-9734-92e4de588316":{"url":"https://nullspace.example","description":"Self-hosted single-host owned-domain"},"749ab2a6-3532-4028-b71c-05bbf14deb12":{"url":"http://localhost","description":"Self-hosted single-host localhost/no-domain via Caddy"},"a433d02e-5c00-4042-8b8c-7e9096206976":{"url":"http://localhost:3000","description":"Local development direct API"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"API key passed as Bearer token","scopes":[]},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"API key passed as Bearer token","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"catamaranresearch","siteName":"Nullspace","title":"Start a background template build - Nullspace","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-21T17:43:31.513Z","originalFileLocation":"api-reference/templates/start-a-background-template-build.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}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=\"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned build_id is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through GET /v1/templates/builds/{build_id} using status=error, legacy error, and structured error_detail.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Nullspace\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Start a background template build - Nullspace\">\u003cmeta data-mint-head property=\"og:description\" content=\"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned build_id is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through GET /v1/templates/builds/{build_id} using status=error, legacy error, and structured error_detail.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Nullspace\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://catamaranresearch.mintlify.app/_mintlify/api/og/v2?division=Templates\u0026amp;title=Start+a+background+template+build\u0026amp;description=Firecracker-only+endpoint.+Starts+a+template+build+and+returns+the+canonical+build+handle+for+later+polling.+For+owned+custom-template+builds%2C+the+returned+%60bui\u0026amp;theme=09658a1c05675b16b601ee5f\u0026amp;signature=383712bc95a50ef6b917e0cc900fcfce9cbd4887608d3ba9d00b91dfc38cd89a\">\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 a background template build - Nullspace\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned build_id is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through GET /v1/templates/builds/{build_id} using status=error, legacy error, and structured error_detail.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://catamaranresearch.mintlify.app/_mintlify/api/og/v2?division=Templates\u0026amp;title=Start+a+background+template+build\u0026amp;description=Firecracker-only+endpoint.+Starts+a+template+build+and+returns+the+canonical+build+handle+for+later+polling.+For+owned+custom-template+builds%2C+the+returned+%60bui\u0026amp;theme=09658a1c05675b16b601ee5f\u0026amp;signature=383712bc95a50ef6b917e0cc900fcfce9cbd4887608d3ba9d00b91dfc38cd89a\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/catamaranresearch/u9xmdi3i1cKfEW81/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Nullspace\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1a1d23\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/templates/start-a-background-template-build.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ns.rocks/#organization\",\"name\":\"Nullspace\",\"url\":\"https://docs.ns.rocks\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/catamaranresearch/IKCWYZugMKgGJaLI/images/logo-light.svg?fit=max\u0026auto=format\u0026n=IKCWYZugMKgGJaLI\u0026q=85\u0026s=fbbc2f6e5c18d0cc912d4eb6bd3af8ca\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ns.rocks#website\",\"name\":\"Nullspace\",\"url\":\"https://docs.ns.rocks\",\"publisher\":{\"@id\":\"https://docs.ns.rocks/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build#webpage\",\"url\":\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build\",\"name\":\"Start a background template build\",\"description\":\"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned build_id is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through GET /v1/templates/builds/{build_id} using status=error, legacy error, and structured error_detail.\",\"dateModified\":\"2026-06-21T17:43:31.513Z\",\"isPartOf\":{\"@id\":\"https://docs.ns.rocks#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Endpoints\",\"item\":\"https://docs.ns.rocks/api-reference/health/process-liveness-check\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Templates\",\"item\":\"https://docs.ns.rocks/api-reference/templates/list-template-warm-pools\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Start a background template build\",\"item\":\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build#apireference\",\"headline\":\"Start a background template build\",\"name\":\"Start a background template build\",\"description\":\"Firecracker-only endpoint. Starts a template build and returns the canonical build handle for later polling. For owned custom-template builds, the returned build_id is scoped to the authenticated caller that created it; reconnect and polling must use the same caller context and deployment/base URL. Accepted builds later surface terminal failures through GET /v1/templates/builds/{build_id} using status=error, legacy error, and structured error_detail.\",\"url\":\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ns.rocks/api-reference/templates/start-a-background-template-build#webpage\"},\"dateModified\":\"2026-06-21T17:43:31.513Z\",\"publisher\":{\"@id\":\"https://docs.ns.rocks/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ns.rocks#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Nullspace\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Nullspace","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book-open","pages":[{"title":"Documentation","href":"/introduction"}]},{"tab":"Examples","icon":"code","pages":[{"title":"Examples","href":"/examples"}]},{"tab":"Agents","icon":"bot","pages":[{"title":"Agents","href":"/agents/overview"}]},{"tab":"Reference","icon":"terminal","pages":[{"title":"Reference","href":"/sdk-reference"}]},{"tab":"API Reference","icon":"braces","groups":[{"group":"Overview","icon":"compass","pages":[{"title":"API Reference","href":"/api-reference"},{"title":"API Reference Scope","href":"/reference/api-scope"}]},{"group":"Endpoints","icon":"braces","pages":[{"group":"Health","pages":[{"title":"Process liveness check","deprecated":null,"version":null,"openapi":"/openapi.yaml get /healthz","href":"/api-reference/health/process-liveness-check"}]},{"group":"Auth","pages":[{"title":"Create a Supabase Auth user through the gated abuse-controlled proxy","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/signup","href":"/api-reference/auth/create-a-supabase-auth-user-through-the-gated-abuse-controlled-proxy"},{"title":"Sign in through the gated failed-login lockout proxy","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/signin","href":"/api-reference/auth/sign-in-through-the-gated-failed-login-lockout-proxy"},{"title":"Start an explicitly enabled OAuth flow through the API proxy","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/oauth/start","href":"/api-reference/auth/start-an-explicitly-enabled-oauth-flow-through-the-api-proxy"},{"title":"Send a password reset email through the gated abuse-controlled proxy","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/password/reset","href":"/api-reference/auth/send-a-password-reset-email-through-the-gated-abuse-controlled-proxy"},{"title":"Resend signup verification through the gated abuse-controlled proxy","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/auth/verification/resend","href":"/api-reference/auth/resend-signup-verification-through-the-gated-abuse-controlled-proxy"}]},{"group":"API Keys","pages":[{"title":"List API keys for the authenticated user","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/keys","href":"/api-reference/api-keys/list-api-keys-for-the-authenticated-user"},{"title":"Create an API key for the authenticated user","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/keys","href":"/api-reference/api-keys/create-an-api-key-for-the-authenticated-user"},{"title":"Idempotently create the first runtime API key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/keys/default","href":"/api-reference/api-keys/idempotently-create-the-first-runtime-api-key"},{"title":"Revoke an API key","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/keys/{id}","href":"/api-reference/api-keys/revoke-an-api-key"},{"title":"Rotate an API key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/keys/{id}/rotate","href":"/api-reference/api-keys/rotate-an-api-key"}]},{"group":"Account","pages":[{"title":"Get the current account","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/account/me","href":"/api-reference/account/get-the-current-account"},{"title":"Update current account profile metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/account/me","href":"/api-reference/account/update-current-account-profile-metadata"},{"title":"Export account data","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/account/export","href":"/api-reference/account/export-account-data"},{"title":"Soft-delete the current account","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/account","href":"/api-reference/account/soft-delete-the-current-account"}]},{"group":"Admin","pages":[{"title":"Search self-serve users","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/admin/users","href":"/api-reference/admin/search-self-serve-users"},{"title":"Get operator account detail","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/admin/users/{user_id}","href":"/api-reference/admin/get-operator-account-detail"},{"title":"Hard-delete a soft-deleted account","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/admin/users/{user_id}","href":"/api-reference/admin/hard-delete-a-soft-deleted-account"},{"title":"Update a user's quota tier","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/admin/users/{user_id}/quota","href":"/api-reference/admin/update-a-users-quota-tier"},{"title":"Mint an operator beta key for a user","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/admin/users/{user_id}/keys","href":"/api-reference/admin/mint-an-operator-beta-key-for-a-user"},{"title":"List quota tiers for operator override UI","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/admin/quota-tiers","href":"/api-reference/admin/list-quota-tiers-for-operator-override-ui"}]},{"group":"Machines","pages":[{"title":"List all machines","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines","href":"/api-reference/machines/list-all-machines"},{"title":"Create a new machine","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines","href":"/api-reference/machines/create-a-new-machine"},{"title":"Get machine details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}","href":"/api-reference/machines/get-machine-details"},{"title":"Destroy a machine","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/machines/{id}","href":"/api-reference/machines/destroy-a-machine"},{"title":"Set machine timeout","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/timeout","href":"/api-reference/machines/set-machine-timeout"},{"title":"Update the egress policy of a running machine","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/machines/{id}/egress","href":"/api-reference/machines/update-the-egress-policy-of-a-running-machine"},{"title":"Get machine resource metrics","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/metrics","href":"/api-reference/machines/get-machine-resource-metrics"},{"title":"Execute a command in the machine","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/exec","href":"/api-reference/machines/execute-a-command-in-the-machine"},{"title":"List running processes in the machine","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/processes","href":"/api-reference/machines/list-running-processes-in-the-machine"},{"title":"Kill a process by PID","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/processes/{pid}/kill","href":"/api-reference/machines/kill-a-process-by-pid"},{"title":"Send data to a process's stdin","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/processes/{pid}/stdin","href":"/api-reference/machines/send-data-to-a-processs-stdin"},{"title":"Get process stdout/stderr logs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/processes/{pid}/logs","href":"/api-reference/machines/get-process-stdoutstderr-logs"},{"title":"Get host address for a forwarded port","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/host","href":"/api-reference/machines/get-host-address-for-a-forwarded-port"},{"title":"Create a default signed browser preview URL","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/ports/{port}/preview-url","href":"/api-reference/machines/create-a-default-signed-browser-preview-url"},{"title":"Create a signed browser preview URL","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/ports/{port}/signed-preview-url","href":"/api-reference/machines/create-a-signed-browser-preview-url"},{"title":"Create a custom preview proxy target","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/ports/{port}/preview-proxy-target","href":"/api-reference/machines/create-a-custom-preview-proxy-target"},{"title":"Check preview service readiness","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/ports/{port}/readiness","href":"/api-reference/machines/check-preview-service-readiness"},{"title":"List browser preview grants","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/preview-urls","href":"/api-reference/machines/list-browser-preview-grants"},{"title":"Revoke a browser preview grant","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/machines/{id}/preview-urls/{grant_id}","href":"/api-reference/machines/revoke-a-browser-preview-grant"},{"title":"Mint certificate-backed OpenSSH relay access","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/ssh-access","href":"/api-reference/machines/mint-certificate-backed-openssh-relay-access"},{"title":"Hibernate a machine","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/hibernate","href":"/api-reference/machines/hibernate-a-machine"},{"title":"Create a reusable snapshot","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/snapshots","href":"/api-reference/machines/create-a-reusable-snapshot"},{"title":"Resume paused machine state","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{snapshot_id}/resume","href":"/api-reference/machines/resume-paused-machine-state"},{"title":"Fork (clone) a running machine","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/fork","href":"/api-reference/machines/fork-clone-a-running-machine"},{"title":"List snapshots","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/snapshots","href":"/api-reference/machines/list-snapshots"},{"title":"Get snapshot metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/snapshots/{id}","href":"/api-reference/machines/get-snapshot-metadata"},{"title":"Delete a snapshot","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/snapshots/{id}","href":"/api-reference/machines/delete-a-snapshot"},{"title":"List lifecycle events","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lifecycle/events","href":"/api-reference/machines/list-lifecycle-events"},{"title":"List lifecycle events related to a machine","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/lifecycle","href":"/api-reference/machines/list-lifecycle-events-related-to-a-machine"},{"title":"List lifecycle events related to a snapshot","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/snapshots/{id}/lifecycle","href":"/api-reference/machines/list-lifecycle-events-related-to-a-snapshot"},{"title":"List lifecycle webhooks","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lifecycle/webhooks","href":"/api-reference/machines/list-lifecycle-webhooks"},{"title":"Create a lifecycle webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/lifecycle/webhooks","href":"/api-reference/machines/create-a-lifecycle-webhook"},{"title":"Get a lifecycle webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lifecycle/webhooks/{id}","href":"/api-reference/machines/get-a-lifecycle-webhook"},{"title":"Delete a lifecycle webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/lifecycle/webhooks/{id}","href":"/api-reference/machines/delete-a-lifecycle-webhook"},{"title":"Update a lifecycle webhook","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/lifecycle/webhooks/{id}","href":"/api-reference/machines/update-a-lifecycle-webhook"},{"title":"List lifecycle webhook deliveries","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lifecycle/webhooks/{id}/deliveries","href":"/api-reference/machines/list-lifecycle-webhook-deliveries"},{"title":"Get a lifecycle webhook delivery with attempts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lifecycle/webhooks/{id}/deliveries/{delivery_id}","href":"/api-reference/machines/get-a-lifecycle-webhook-delivery-with-attempts"}]},{"group":"Volumes","pages":[{"title":"List volume attachments for a machine","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/volumes","href":"/api-reference/volumes/list-volume-attachments-for-a-machine"},{"title":"Attach a volume to a running machine","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/volumes","href":"/api-reference/volumes/attach-a-volume-to-a-running-machine"},{"title":"Detach a volume from a running machine","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/machines/{id}/volumes/{attachment_id}","href":"/api-reference/volumes/detach-a-volume-from-a-running-machine"},{"title":"Refresh and return runtime health for a machine volume attachment","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/volumes/{attachment_id}/health","href":"/api-reference/volumes/refresh-and-return-runtime-health-for-a-machine-volume-attachment"},{"title":"Remount a machine volume attachment in place","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/volumes/{attachment_id}/remount","href":"/api-reference/volumes/remount-a-machine-volume-attachment-in-place"},{"title":"List volumes visible to the current user","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/volumes","href":"/api-reference/volumes/list-volumes-visible-to-the-current-user"},{"title":"Create a new persistent volume","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes","href":"/api-reference/volumes/create-a-new-persistent-volume"},{"title":"Get volume metadata by exact name","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/volumes/by-name/{name}","href":"/api-reference/volumes/get-volume-metadata-by-exact-name"},{"title":"Get volume metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/volumes/{id}","href":"/api-reference/volumes/get-volume-metadata"},{"title":"Delete an empty unattached volume","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/volumes/{id}","href":"/api-reference/volumes/delete-an-empty-unattached-volume"},{"title":"List machine attachments for a volume","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/volumes/{id}/attachments","href":"/api-reference/volumes/list-machine-attachments-for-a-volume"},{"title":"List files or directories in a volume path","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/volumes/{id}/files","href":"/api-reference/volumes/list-files-or-directories-in-a-volume-path"},{"title":"Read volume file contents","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/read","href":"/api-reference/volumes/read-volume-file-contents"},{"title":"Write content to a file in a volume","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/write","href":"/api-reference/volumes/write-content-to-a-file-in-a-volume"},{"title":"Check whether a file or directory exists in a volume","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/exists","href":"/api-reference/volumes/check-whether-a-file-or-directory-exists-in-a-volume"},{"title":"Get file or directory metadata from a volume","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/info","href":"/api-reference/volumes/get-file-or-directory-metadata-from-a-volume"},{"title":"Remove a file or directory from a volume","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/remove","href":"/api-reference/volumes/remove-a-file-or-directory-from-a-volume"},{"title":"Rename or move a file within a volume","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/rename","href":"/api-reference/volumes/rename-or-move-a-file-within-a-volume"},{"title":"Create a directory in a volume","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/mkdir","href":"/api-reference/volumes/create-a-directory-in-a-volume"},{"title":"Set volume file permissions","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/permissions","href":"/api-reference/volumes/set-volume-file-permissions"},{"title":"Search volume file contents by regex","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/find","href":"/api-reference/volumes/search-volume-file-contents-by-regex"},{"title":"Search volume files by glob pattern","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/search","href":"/api-reference/volumes/search-volume-files-by-glob-pattern"},{"title":"Replace text in volume files","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/replace","href":"/api-reference/volumes/replace-text-in-volume-files"},{"title":"Get a signed direct download URL for a volume file or directory archive","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/download-url","href":"/api-reference/volumes/get-a-signed-direct-download-url-for-a-volume-file-or-directory-archive"},{"title":"Get a signed direct upload URL for one volume file","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/files/upload-url","href":"/api-reference/volumes/get-a-signed-direct-upload-url-for-one-volume-file"},{"title":"Download a file or directory archive directly from a volume with a signed grant","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/volumes/{id}/file","href":"/api-reference/volumes/download-a-file-or-directory-archive-directly-from-a-volume-with-a-signed-grant"},{"title":"Upload one file directly into a volume with a signed grant","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v1/volumes/{id}/file","href":"/api-reference/volumes/upload-one-file-directly-into-a-volume-with-a-signed-grant"},{"title":"Upload one file directly into a volume with a signed multipart grant","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/file","href":"/api-reference/volumes/upload-one-file-directly-into-a-volume-with-a-signed-multipart-grant"},{"title":"Create a resumable volume upload session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/uploads","href":"/api-reference/volumes/create-a-resumable-volume-upload-session"},{"title":"Get resumable volume upload session status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/volumes/{id}/uploads/{upload_id}","href":"/api-reference/volumes/get-resumable-volume-upload-session-status"},{"title":"Abort and delete a resumable volume upload session","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/volumes/{id}/uploads/{upload_id}","href":"/api-reference/volumes/abort-and-delete-a-resumable-volume-upload-session"},{"title":"Upload one resumable volume-upload part","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v1/volumes/{id}/uploads/{upload_id}/parts/{part_number}","href":"/api-reference/volumes/upload-one-resumable-volume-upload-part"},{"title":"Complete and publish a resumable volume upload session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/volumes/{id}/uploads/{upload_id}/complete","href":"/api-reference/volumes/complete-and-publish-a-resumable-volume-upload-session"}]},{"group":"WebSocket","pages":[{"title":"Upgrade to a native lifecycle WebSocket stream","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/lifecycle/ws","href":"/api-reference/websocket/upgrade-to-a-native-lifecycle-websocket-stream"},{"title":"Upgrade to WebSocket for streaming exec/PTY","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/ws","href":"/api-reference/websocket/upgrade-to-websocket-for-streaming-execpty"},{"title":"Upgrade to WebSocket for direct volume watches","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/volumes/{id}/ws","href":"/api-reference/websocket/upgrade-to-websocket-for-direct-volume-watches"},{"title":"Upgrade to the monitor WebSocket stream","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/monitor/ws","href":"/api-reference/websocket/upgrade-to-the-monitor-websocket-stream"}]},{"group":"Files","pages":[{"title":"List directory contents","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/files","href":"/api-reference/files/list-directory-contents"},{"title":"Download a file as raw bytes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/file","href":"/api-reference/files/download-a-file-as-raw-bytes"},{"title":"Upload raw bytes to a file","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v1/machines/{id}/file","href":"/api-reference/files/upload-raw-bytes-to-a-file"},{"title":"Upload a file with multipart form data or a raw request body","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/file","href":"/api-reference/files/upload-a-file-with-multipart-form-data-or-a-raw-request-body"},{"title":"Create a resumable upload session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/uploads","href":"/api-reference/files/create-a-resumable-upload-session"},{"title":"Get resumable upload session status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/uploads/{upload_id}","href":"/api-reference/files/get-resumable-upload-session-status"},{"title":"Abort and delete a resumable upload session","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/machines/{id}/uploads/{upload_id}","href":"/api-reference/files/abort-and-delete-a-resumable-upload-session"},{"title":"Upload one resumable upload part","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v1/machines/{id}/uploads/{upload_id}/parts/{part_number}","href":"/api-reference/files/upload-one-resumable-upload-part"},{"title":"Complete and publish a resumable upload session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/uploads/{upload_id}/complete","href":"/api-reference/files/complete-and-publish-a-resumable-upload-session"},{"title":"Read file contents","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/read","href":"/api-reference/files/read-file-contents"},{"title":"Write content to a file","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/write","href":"/api-reference/files/write-content-to-a-file"},{"title":"Upload multiple files in one multipart request","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/batch-write","href":"/api-reference/files/upload-multiple-files-in-one-multipart-request"},{"title":"Check if a file or directory exists","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/exists","href":"/api-reference/files/check-if-a-file-or-directory-exists"},{"title":"Get file metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/info","href":"/api-reference/files/get-file-metadata"},{"title":"Remove a file or directory","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/remove","href":"/api-reference/files/remove-a-file-or-directory"},{"title":"Rename or move a file","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/rename","href":"/api-reference/files/rename-or-move-a-file"},{"title":"Create a directory (recursive)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/mkdir","href":"/api-reference/files/create-a-directory-recursive"},{"title":"Get a direct upload URL","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/upload-url","href":"/api-reference/files/get-a-direct-upload-url"},{"title":"Get a direct download URL","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/download-url","href":"/api-reference/files/get-a-direct-download-url"},{"title":"Set file permissions","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/permissions","href":"/api-reference/files/set-file-permissions"},{"title":"Search for a pattern inside file contents (grep)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/find","href":"/api-reference/files/search-for-a-pattern-inside-file-contents-grep"},{"title":"Search for files by name pattern (find)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/search","href":"/api-reference/files/search-for-files-by-name-pattern-find"},{"title":"Find and replace text in files (sed)","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/files/replace","href":"/api-reference/files/find-and-replace-text-in-files-sed"}]},{"group":"Git","pages":[{"title":"Clone a git repository into the machine","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/git/clone","href":"/api-reference/git/clone-a-git-repository-into-the-machine"},{"title":"Parsed working-tree status","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/git/status","href":"/api-reference/git/parsed-working-tree-status"},{"title":"Commit history","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/git/log","href":"/api-reference/git/commit-history"},{"title":"List branches","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/git/branch","href":"/api-reference/git/list-branches"},{"title":"Create or delete a branch","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/git/branch","href":"/api-reference/git/create-or-delete-a-branch"},{"title":"Check out a branch, tag, or commit","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/git/checkout","href":"/api-reference/git/check-out-a-branch-tag-or-commit"},{"title":"Stage changes","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/git/add","href":"/api-reference/git/stage-changes"},{"title":"Create a commit","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/git/commit","href":"/api-reference/git/create-a-commit"},{"title":"Pull from a remote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/git/pull","href":"/api-reference/git/pull-from-a-remote"},{"title":"Push to a remote","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/git/push","href":"/api-reference/git/push-to-a-remote"}]},{"group":"Desktop","pages":[{"title":"Take a full-screen screenshot","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/screenshot","href":"/api-reference/desktop/take-a-full-screen-screenshot"},{"title":"Take a screenshot of a region","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/screenshot/region","href":"/api-reference/desktop/take-a-screenshot-of-a-region"},{"title":"Take a screenshot with compression options","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/screenshot/compressed","href":"/api-reference/desktop/take-a-screenshot-with-compression-options"},{"title":"Click at coordinates","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/click","href":"/api-reference/desktop/click-at-coordinates"},{"title":"Move mouse to coordinates","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/move","href":"/api-reference/desktop/move-mouse-to-coordinates"},{"title":"Press and hold a mouse button","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/mouse/down","href":"/api-reference/desktop/press-and-hold-a-mouse-button"},{"title":"Release a mouse button","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/mouse/up","href":"/api-reference/desktop/release-a-mouse-button"},{"title":"Type text string","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/type","href":"/api-reference/desktop/type-text-string"},{"title":"Press a single key","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/key","href":"/api-reference/desktop/press-a-single-key"},{"title":"Drag from one point to another","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/drag","href":"/api-reference/desktop/drag-from-one-point-to-another"},{"title":"Scroll at coordinates","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/scroll","href":"/api-reference/desktop/scroll-at-coordinates"},{"title":"Press a hotkey combination (e.g. \"ctrl+c\")","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/hotkey","href":"/api-reference/desktop/press-a-hotkey-combination-eg-\"ctrl+c\""},{"title":"Press a key with optional modifiers","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/press","href":"/api-reference/desktop/press-a-key-with-optional-modifiers"},{"title":"Get screen dimensions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/screen_size","href":"/api-reference/desktop/get-screen-dimensions"},{"title":"Get current cursor position","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/cursor","href":"/api-reference/desktop/get-current-cursor-position"},{"title":"Get display information","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/display","href":"/api-reference/desktop/get-display-information"},{"title":"Get desktop automation capabilities","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/capabilities","href":"/api-reference/desktop/get-desktop-automation-capabilities"},{"title":"List open windows with metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/windows","href":"/api-reference/desktop/list-open-windows-with-metadata"},{"title":"Launch a desktop application using an explicit mode","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/launch","href":"/api-reference/desktop/launch-a-desktop-application-using-an-explicit-mode"},{"title":"Open a path, file URL, or URI with the desktop session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/open","href":"/api-reference/desktop/open-a-path-file-url-or-uri-with-the-desktop-session"},{"title":"Get text from the guest clipboard","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/clipboard","href":"/api-reference/desktop/get-text-from-the-guest-clipboard"},{"title":"Set text on the guest clipboard","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v1/machines/{id}/desktop/clipboard","href":"/api-reference/desktop/set-text-on-the-guest-clipboard"},{"title":"Get the current active window ID","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/window/current","href":"/api-reference/desktop/get-the-current-active-window-id"},{"title":"Get the title for a specific window","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/window/{window_id}/title","href":"/api-reference/desktop/get-the-title-for-a-specific-window"},{"title":"Get raw VNC connection info for advanced or operator use","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/stream","href":"/api-reference/desktop/get-raw-vnc-connection-info-for-advanced-or-operator-use"},{"title":"Start or rotate the preferred managed desktop viewer session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/stream/start","href":"/api-reference/desktop/start-or-rotate-the-preferred-managed-desktop-viewer-session"},{"title":"Stop the managed desktop viewer session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/stream/stop","href":"/api-reference/desktop/stop-the-managed-desktop-viewer-session"},{"title":"Get the active managed desktop viewer auth key and browser URL","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/stream/auth-key","href":"/api-reference/desktop/get-the-active-managed-desktop-viewer-auth-key-and-browser-url"},{"title":"Get the managed desktop viewer page","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/viewer","href":"/api-reference/desktop/get-the-managed-desktop-viewer-page"},{"title":"Renew the public managed desktop viewer session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/viewer/session","href":"/api-reference/desktop/renew-the-public-managed-desktop-viewer-session"},{"title":"Get text from the guest clipboard through the managed viewer auth token","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/viewer/clipboard","href":"/api-reference/desktop/get-text-from-the-guest-clipboard-through-the-managed-viewer-auth-token"},{"title":"Set text on the guest clipboard through the managed viewer auth token","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v1/machines/{id}/desktop/viewer/clipboard","href":"/api-reference/desktop/set-text-on-the-guest-clipboard-through-the-managed-viewer-auth-token"},{"title":"Get a managed desktop viewer asset","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/desktop/viewer-assets/{path}","href":"/api-reference/desktop/get-a-managed-desktop-viewer-asset"},{"title":"Upgrade to the managed desktop viewer websocket bridge","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/viewer/ws","href":"/api-reference/desktop/upgrade-to-the-managed-desktop-viewer-websocket-bridge"}]},{"group":"Recording","pages":[{"title":"Start screen recording","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/recording/start","href":"/api-reference/recording/start-screen-recording"},{"title":"Stop screen recording","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/desktop/recording/stop","href":"/api-reference/recording/stop-screen-recording"},{"title":"List all recordings","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/recording","href":"/api-reference/recording/list-all-recordings"},{"title":"Get recording details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/recording/{rid}","href":"/api-reference/recording/get-recording-details"},{"title":"Delete a recording","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/machines/{id}/desktop/recording/{rid}","href":"/api-reference/recording/delete-a-recording"},{"title":"Download recording video file","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/desktop/recording/{rid}/download","href":"/api-reference/recording/download-recording-video-file"}]},{"group":"PTY","pages":[{"title":"List PTY sessions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/pty","href":"/api-reference/pty/list-pty-sessions"},{"title":"Get PTY session info","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/pty/{sid}","href":"/api-reference/pty/get-pty-session-info"},{"title":"Kill a PTY session","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/machines/{id}/pty/{sid}","href":"/api-reference/pty/kill-a-pty-session"},{"title":"Resize a PTY session","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/pty/{sid}/resize","href":"/api-reference/pty/resize-a-pty-session"}]},{"group":"Templates","pages":[{"title":"List template warm pools","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/template-warm-pools","href":"/api-reference/templates/list-template-warm-pools"},{"title":"Create a template warm pool","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/template-warm-pools","href":"/api-reference/templates/create-a-template-warm-pool"},{"title":"Get a template warm pool","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/template-warm-pools/{warm_pool_id}","href":"/api-reference/templates/get-a-template-warm-pool"},{"title":"Delete a template warm pool","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/template-warm-pools/{warm_pool_id}","href":"/api-reference/templates/delete-a-template-warm-pool"},{"title":"Update a template warm pool","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/template-warm-pools/{warm_pool_id}","href":"/api-reference/templates/update-a-template-warm-pool"},{"title":"Get template warm-pool status counts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/template-warm-pools/{warm_pool_id}/status","href":"/api-reference/templates/get-template-warm-pool-status-counts"},{"title":"Enable a template warm pool","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/template-warm-pools/{warm_pool_id}/enable","href":"/api-reference/templates/enable-a-template-warm-pool"},{"title":"Disable a template warm pool","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/template-warm-pools/{warm_pool_id}/disable","href":"/api-reference/templates/disable-a-template-warm-pool"},{"title":"Drain a template warm pool","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/template-warm-pools/{warm_pool_id}/drain","href":"/api-reference/templates/drain-a-template-warm-pool"},{"title":"Reconcile a template warm pool","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/template-warm-pools/{warm_pool_id}/reconcile","href":"/api-reference/templates/reconcile-a-template-warm-pool"},{"title":"List templates accessible to the caller","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates","href":"/api-reference/templates/list-templates-accessible-to-the-caller"},{"title":"Create a template (deprecated blocking convenience)","deprecated":true,"version":null,"openapi":"/openapi.yaml post /v1/templates","href":"/api-reference/templates/create-a-template-deprecated-blocking-convenience"},{"title":"Get template details","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/{id}","href":"/api-reference/templates/get-template-details"},{"title":"Delete a template","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/templates/{id}","href":"/api-reference/templates/delete-a-template"},{"title":"Update logical template visibility","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/templates/{id}/visibility","href":"/api-reference/templates/update-logical-template-visibility"},{"title":"Rename a logical template","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/{id}/rename","href":"/api-reference/templates/rename-a-logical-template"},{"title":"List logical template aliases","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/{id}/aliases","href":"/api-reference/templates/list-logical-template-aliases"},{"title":"Remove a logical template alias","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/templates/{id}/aliases/{alias}","href":"/api-reference/templates/remove-a-logical-template-alias"},{"title":"Build a template with streaming logs","description":"Firecracker-only endpoint. Creates a template and streams canonical structured build log entries back as Server-Sent Events. Supports declarative builder steps (apt_install, pip_install, etc.) which are converted to a Dockerfile server-side. Request validation and build-context blob failures return HTTP errors before the stream begins. Accepted build pipeline failures are emitted as terminal SSE `kind=error` entries with `error_detail.code=build_error`.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/build","href":"/api-reference/templates/build-a-template-with-streaming-logs"},{"title":"Start a background template build","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/builds","href":"/api-reference/templates/start-a-background-template-build"},{"title":"Validate a template build request without starting a build","description":"Parses and normalizes a template build request, validates refs and build context descriptors, checks backend-compatible inputs, and returns structured validation errors without selecting a build executor.\n","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/validate","href":"/api-reference/templates/validate-a-template-build-request-without-starting-a-build"},{"title":"Return a backend-neutral template build plan without starting a build","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/plan","href":"/api-reference/templates/return-a-backend-neutral-template-build-plan-without-starting-a-build"},{"title":"Preflight template build-context blobs","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/blobs/preflight","href":"/api-reference/templates/preflight-template-build-context-blobs"},{"title":"Upload a preflighted template blob","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v1/templates/blobs/{blob_id}","href":"/api-reference/templates/upload-a-preflighted-template-blob"},{"title":"Poll template build status and incremental events","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/builds/{build_id}","href":"/api-reference/templates/poll-template-build-status-and-incremental-events"},{"title":"Stream reconnectable template build logs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/builds/{build_id}/logs","href":"/api-reference/templates/stream-reconnectable-template-build-logs"},{"title":"Cancel a queued or running template build","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/builds/{build_id}/cancel","href":"/api-reference/templates/cancel-a-queued-or-running-template-build"},{"title":"Retry a template build from its persisted definition","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/builds/{build_id}/retry","href":"/api-reference/templates/retry-a-template-build-from-its-persisted-definition"},{"title":"Promote a successful historical build to a tag","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/builds/{build_id}/promote","href":"/api-reference/templates/promote-a-successful-historical-build-to-a-tag"},{"title":"List the tag → build_id assignments for a template","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/{id}/tags","href":"/api-reference/templates/list-the-tag-→-build_id-assignments-for-a-template"},{"title":"Assign or promote tags for a template artifact","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/{id}/tags","href":"/api-reference/templates/assign-or-promote-tags-for-a-template-artifact"},{"title":"List build history for a template","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/{id}/builds","href":"/api-reference/templates/list-build-history-for-a-template"},{"title":"Remove a tag from a template artifact","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/templates/{id}/tags/{tag}","href":"/api-reference/templates/remove-a-tag-from-a-template-artifact"},{"title":"Get template details by canonical ref","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/refs/{ref}","href":"/api-reference/templates/get-template-details-by-canonical-ref"},{"title":"Delete a custom template by canonical ref","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/templates/refs/{ref}","href":"/api-reference/templates/delete-a-custom-template-by-canonical-ref"},{"title":"Reserve a template name claim","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/claims","href":"/api-reference/templates/reserve-a-template-name-claim"},{"title":"Release a template name claim","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/templates/claims/{claim_token}","href":"/api-reference/templates/release-a-template-name-claim"},{"title":"Update logical template visibility by canonical ref","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/templates/refs/{ref}/visibility","href":"/api-reference/templates/update-logical-template-visibility-by-canonical-ref"},{"title":"Rename a logical template by canonical ref","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/refs/{ref}/rename","href":"/api-reference/templates/rename-a-logical-template-by-canonical-ref"},{"title":"List active tag assignments for a custom template ref","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/refs/{ref}/tags","href":"/api-reference/templates/list-active-tag-assignments-for-a-custom-template-ref"},{"title":"Assign or promote tags for a custom template ref","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/templates/refs/{ref}/tags","href":"/api-reference/templates/assign-or-promote-tags-for-a-custom-template-ref"},{"title":"Get template namespace metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/namespaces/{slug}","href":"/api-reference/templates/get-template-namespace-metadata"},{"title":"List build history for a custom template ref","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/refs/{ref}/builds","href":"/api-reference/templates/list-build-history-for-a-custom-template-ref"},{"title":"List read-only aliases for a logical template","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/templates/refs/{ref}/aliases","href":"/api-reference/templates/list-read-only-aliases-for-a-logical-template"},{"title":"Remove a tag from a custom template ref","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/templates/refs/{ref}/tags/{tag}","href":"/api-reference/templates/remove-a-tag-from-a-custom-template-ref"},{"title":"Remove a read-only alias from a logical template","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/templates/refs/{ref}/aliases/{alias}","href":"/api-reference/templates/remove-a-read-only-alias-from-a-logical-template"}]},{"group":"Agent Deployments","pages":[{"title":"List agent deployments","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments","href":"/api-reference/agent-deployments/list-agent-deployments"},{"title":"Create an agent deployment","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent-deployments","href":"/api-reference/agent-deployments/create-an-agent-deployment"},{"title":"Get an agent deployment","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}","href":"/api-reference/agent-deployments/get-an-agent-deployment"},{"title":"Delete an agent deployment","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/agent-deployments/{deployment_id}","href":"/api-reference/agent-deployments/delete-an-agent-deployment"},{"title":"Update an agent deployment","deprecated":null,"version":null,"openapi":"/openapi.yaml patch /v1/agent-deployments/{deployment_id}","href":"/api-reference/agent-deployments/update-an-agent-deployment"},{"title":"List agent deployment events","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/events","href":"/api-reference/agent-deployments/list-agent-deployment-events"},{"title":"List agent deployment versions","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/versions","href":"/api-reference/agent-deployments/list-agent-deployment-versions"},{"title":"Create an agent deployment version","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent-deployments/{deployment_id}/versions","href":"/api-reference/agent-deployments/create-an-agent-deployment-version"},{"title":"Get an agent deployment version","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/versions/{version_id}","href":"/api-reference/agent-deployments/get-an-agent-deployment-version"},{"title":"Upload an agent deployment version bundle","deprecated":null,"version":null,"openapi":"/openapi.yaml put /v1/agent-deployments/{deployment_id}/versions/{version_id}/bundle","href":"/api-reference/agent-deployments/upload-an-agent-deployment-version-bundle"},{"title":"List agent runs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/runs","href":"/api-reference/agent-deployments/list-agent-runs"},{"title":"Create an agent run","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent-deployments/{deployment_id}/runs","href":"/api-reference/agent-deployments/create-an-agent-run"},{"title":"Get an agent run","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/runs/{run_id}","href":"/api-reference/agent-deployments/get-an-agent-run"},{"title":"Cancel an agent run","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent-deployments/{deployment_id}/runs/{run_id}/cancel","href":"/api-reference/agent-deployments/cancel-an-agent-run"},{"title":"List agent run logs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/runs/{run_id}/logs","href":"/api-reference/agent-deployments/list-agent-run-logs"},{"title":"Get agent run output metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/runs/{run_id}/outputs","href":"/api-reference/agent-deployments/get-agent-run-output-metadata"},{"title":"List agent service instances","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/services","href":"/api-reference/agent-deployments/list-agent-service-instances"},{"title":"Create an agent service instance","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent-deployments/{deployment_id}/services","href":"/api-reference/agent-deployments/create-an-agent-service-instance"},{"title":"Get an agent service instance","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/services/{service_id}","href":"/api-reference/agent-deployments/get-an-agent-service-instance"},{"title":"Restart an agent service instance","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent-deployments/{deployment_id}/services/{service_id}/restart","href":"/api-reference/agent-deployments/restart-an-agent-service-instance"},{"title":"Stop an agent service instance","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/agent-deployments/{deployment_id}/services/{service_id}/stop","href":"/api-reference/agent-deployments/stop-an-agent-service-instance"},{"title":"List agent service logs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/services/{service_id}/logs","href":"/api-reference/agent-deployments/list-agent-service-logs"},{"title":"Get agent service URL metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/agent-deployments/{deployment_id}/services/{service_id}/url","href":"/api-reference/agent-deployments/get-agent-service-url-metadata"}]},{"group":"Code","pages":[{"title":"Execute code in a Jupyter kernel","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/code/execute","href":"/api-reference/code/execute-code-in-a-jupyter-kernel"},{"title":"List async code runs","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/code/runs","href":"/api-reference/code/list-async-code-runs"},{"title":"Create an async code execution run","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/code/runs","href":"/api-reference/code/create-an-async-code-execution-run"},{"title":"Get async code run","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/code/runs/{run_id}","href":"/api-reference/code/get-async-code-run"},{"title":"Cancel async code run","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/code/runs/{run_id}/cancel","href":"/api-reference/code/cancel-async-code-run"},{"title":"List kernel contexts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/code/contexts","href":"/api-reference/code/list-kernel-contexts"},{"title":"Create a new kernel context","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/code/contexts","href":"/api-reference/code/create-a-new-kernel-context"},{"title":"Remove a kernel context","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/machines/{id}/code/contexts/{ctx_id}","href":"/api-reference/code/remove-a-kernel-context"},{"title":"Restart a kernel context","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/code/contexts/{ctx_id}/restart","href":"/api-reference/code/restart-a-kernel-context"},{"title":"Interrupt a running execution","deprecated":null,"version":null,"openapi":"/openapi.yaml post /v1/machines/{id}/code/contexts/{ctx_id}/interrupt","href":"/api-reference/code/interrupt-a-running-execution"},{"title":"List execution artifacts","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/code/artifacts","href":"/api-reference/code/list-execution-artifacts"},{"title":"Get artifact metadata","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/code/artifacts/{artifact_id}","href":"/api-reference/code/get-artifact-metadata"},{"title":"Delete an artifact","deprecated":null,"version":null,"openapi":"/openapi.yaml delete /v1/machines/{id}/code/artifacts/{artifact_id}","href":"/api-reference/code/delete-an-artifact"},{"title":"Download artifact bytes","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/code/artifacts/{artifact_id}/download","href":"/api-reference/code/download-artifact-bytes"},{"title":"Preview artifact content","deprecated":null,"version":null,"openapi":"/openapi.yaml get /v1/machines/{id}/code/artifacts/{artifact_id}/preview","href":"/api-reference/code/preview-artifact-content"}]}]}]}]},"title":"Start a background template build - Nullspace","buildId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","deploymentId":"dpl_2xiSHD9XEvLsPGPcfoMtkLTB3dy9","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DmVyH30O.js","utils-BHQqGGOd.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-CD-E4BIt.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Bp5Lq9Ds.js","snippetPresets-C4xAVCFP.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CgXVLxUC.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BF8I5oUf.js","shallow-Byd0lWnC.js","getApiPlaygroundDisplay-BGOZG1OK.js","CodeSnippet-CpvQL0CY.js","CodeSnippets-B8wkBKXa.js","Page-CBCH2P7b.js","getPastedJson-Ry3scI3Y.js","icon-D7a9HcdD.js","MethodPill-CJ8pmHhz.js","DuplicateIcon-rh1HJF0t.js","createIcon-DvGznqYs.js","DynamicMarkdown-Cc6AuSHS.js","SectionHeading-B4A0S-ep.js","axios-vUo_bRtp.js","Markdown-Cc16CX65.js","clsx-Cs6nMGht.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-zbf22OZA.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-C_fs-y5n.js"]}