version is assigned server-side as max+1; the caller names the variant
with label. The new version is NOT made default: a fresh variant must
never silently redirect the traffic of callers who pin nothing.
This is the CI operation of the lane (a deploy authors the variant it just
built), so it takes the standard Idempotency-Key header: a retried
pipeline step with the same key and body replays the original version (200
instead of 201) rather than minting label-2. The same key with a different
body is a 409 idempotency_conflict.
POST
/
api
/
v1
/
environments
/
{environment_id}
/
versions
Create Environment Version
curl --request POST \ --url https://api.ishlabs.io/api/v1/environments/{environment_id}/versions \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "config": { "url": "https://pr-4821.staging.example.com/checkout" }, "description": "Checkout with the one-page layout behind the flag.", "label": "pr-4821"}'
Workspace API key as a bearer token: Authorization: Bearer ish_sk_live_.... Keys are workspace-scoped machine principals minted in Settings > Developers (shown once at mint). Scopes: sessions:run (create a session, submit turns, close), sessions:read (read the session and its decision trace), environments:read and environments:write (manage the workspace's registered environments), tasks:read and tasks:write (manage the workspace's registered tasks), people:read and people:write (the people the workspace can run a session for), and usage:read (the workspace's own consumption, spend limits and rate-limit budgets). A key is minted with sessions:run, sessions:read, and tasks:read by default; every other scope must be requested, people:read and usage:read included. An ish user access token also works on the same header for personal scripts.
version is assigned by the server as the next integer; you name the variant with label. is_default is absent on purpose: the default pointer moves only through the set-default operation, so authoring a variant never silently redirects the traffic of callers who pin nothing.
Replaces the environment's example actions for this variant. NON-AUTHORITATIVE: documentation and SDK scaffolding only, never read at turn time. Omit to inherit.
Response
Idempotent replay: the version created by a prior request with this Idempotency-Key and body, returned as is.
Set when the variant is archived. An archived version stays readable and comparable so its stored runs keep resolving, is hidden from the default list, refuses new sessions, and frees its label for reuse.
The config a run pinned to this version operates under: this version's config when set, otherwise the environment's. Provided so callers never re-implement the replace rule.
Whether a session that names this environment WITHOUT pinning a version resolves here. At most one live default per environment; an environment with no default resolves unversioned.
Monotonic per environment, server-assigned, and never reused, even after the variant is archived.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"ish","description":"Documentation for the ish CLI and MCP server. Simulate a visit and read the reactions before you ship.","colors":{"primary":"#C8623F","light":"#D87A55","dark":"#262220"},"logo":{"light":"https://mintcdn.com/ish/4MaJn6-B7_NnPAml/logo/light.svg?fit=max\u0026auto=format\u0026n=4MaJn6-B7_NnPAml\u0026q=85\u0026s=f0edab6b74c19bec95794ee94d7270c2","dark":"https://mintcdn.com/ish/4MaJn6-B7_NnPAml/logo/dark.svg?fit=max\u0026auto=format\u0026n=4MaJn6-B7_NnPAml\u0026q=85\u0026s=da9e886222890dc4edeaf5b77b455102"},"favicon":{"light":"https://mintcdn.com/ish/4MaJn6-B7_NnPAml/favicon.svg?fit=max\u0026auto=format\u0026n=4MaJn6-B7_NnPAml\u0026q=85\u0026s=871b7f0a040fb0e8c3293911bcbfd37d","dark":"https://mintcdn.com/ish/4MaJn6-B7_NnPAml/favicon-dark.svg?fit=max\u0026auto=format\u0026n=4MaJn6-B7_NnPAml\u0026q=85\u0026s=8915499d3e98ef136443c3c38b96e4b9"},"appearance":{"default":"system"},"background":{"color":{"light":"#FDFCFB","dark":"#1A1816"}},"navbar":{"links":[{"href":"https://app.ishlabs.io","label":"Sign in"}],"primary":{"type":"button","label":"Get ish free","href":"https://app.ishlabs.io"}},"footer":{"socials":{"github":"https://github.com/ishlabs"},"links":[{"header":"Product","items":[{"label":"ishlabs.io","href":"https://ishlabs.io"},{"label":"Pricing","href":"https://ishlabs.io/pricing"},{"label":"Sign in","href":"https://app.ishlabs.io"}]}]},"fonts":{"heading":{"family":"Inter"},"body":{"family":"Inter"}},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/ishlabs"},{"anchor":"ishlabs.io","icon":"globe","href":"https://ishlabs.io"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ish","hasAudioNarration":false,"actualSubdomain":"ish","customDomains":["docs.ishlabs.io"],"gitSource":{"type":"github","owner":"ishlabs","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":false},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af0209f0311aab340dbb5c0","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Guides","count":45},{"language":"default","tag":"API","count":42},{"language":"default","tag":"API reference","count":28},{"language":"default","tag":"CLI Reference","count":28},{"language":"default","tag":"Core concepts","count":26},{"language":"default","tag":"MCP Reference","count":21},{"language":"default","tag":"Commands","count":20},{"language":"default","tag":"Overview","count":15},{"language":"default","tag":"Tools","count":13},{"language":"default","tag":"How-to guides","count":9}]},"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":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"[data-component-part=\"card-icon\"] svg{background-color:#262220!important}html.dark [data-component-part=\"card-icon\"] svg{background-color:#e8e3de!important}html.dark img[src*=\"/logos/\"]{filter:invert(0.91) brightness(1.03)}#content-area a[href]>div:hover,.ish-card:hover{border-color:#d87a55;transition:border-color 0.15s ease, box-shadow 0.15s ease}"}],"page":{"pagePath":"api/reference/environments/create-environment-version","slug":"/api/reference/environments/create-environment-version","pageMetadata":{"title":"Create Environment Version","description":"Author a declared variant of this environment.\n\n`version` is assigned server-side as max+1; the caller names the variant\nwith `label`. The new version is NOT made default: a fresh variant must\nnever silently redirect the traffic of callers who pin nothing.\n\nThis is the CI operation of the lane (a deploy authors the variant it just\nbuilt), so it takes the standard `Idempotency-Key` header: a retried\npipeline step with the same key and body replays the original version (200\ninstead of 201) rather than minting `label-2`. The same key with a different\nbody is a 409 `idempotency_conflict`.","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/environments/{environment_id}/versions","href":"/api/reference/environments/create-environment-version","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsx(_components.p, {\n children: \"Author a declared variant of this environment.\"\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"version\"\n }), \" is assigned server-side as max+1; the caller names the variant\\nwith \", _jsx(_components.code, {\n children: \"label\"\n }), \". The new version is NOT made default: a fresh variant must\\nnever silently redirect the traffic of callers who pin nothing.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"This is the CI operation of the lane (a deploy authors the variant it just\\nbuilt), so it takes the standard \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" header: a retried\\npipeline step with the same key and body replays the original version (200\\ninstead of 201) rather than minting \", _jsx(_components.code, {\n children: \"label-2\"\n }), \". The same key with a different\\nbody is a 409 \", _jsx(_components.code, {\n children: \"idempotency_conflict\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Create Environment Version","description":"Author a declared variant of this environment.\n\n`version` is assigned server-side as max+1; the caller names the variant\nwith `label`. The new version is NOT made default: a fresh variant must\nnever silently redirect the traffic of callers who pin nothing.\n\nThis is the CI operation of the lane (a deploy authors the variant it just\nbuilt), so it takes the standard `Idempotency-Key` header: a retried\npipeline step with the same key and body replays the original version (200\ninstead of 201) rather than minting `label-2`. The same key with a different\nbody is a 409 `idempotency_conflict`.","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/environments/{environment_id}/versions","href":"/api/reference/environments/create-environment-version","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"description":"Author a declared variant of this environment.\n\n`version` is assigned server-side as max+1; the caller names the variant\nwith `label`. The new version is NOT made default: a fresh variant must\nnever silently redirect the traffic of callers who pin nothing.\n\nThis is the CI operation of the lane (a deploy authors the variant it just\nbuilt), so it takes the standard `Idempotency-Key` header: a retried\npipeline step with the same key and body replays the original version (200\ninstead of 201) rather than minting `label-2`. The same key with a different\nbody is a 409 `idempotency_conflict`.","operationId":"createEnvironmentVersion","parameters":["46f0820f-1793-4bfa-b479-37cc75102660","9603b58f-fdaa-44d8-bd2b-1d46d68b9b4b"],"requestBody":"03965d6d-8d53-415a-9b18-2778fc0c790b","responses":{"200":"2910ea71-6db4-4f49-a569-f67a30c59b00","201":"75da3dbe-5b92-41fd-a7cb-b5262e740e22","401":"15c6f392-7fd1-4038-9d97-062c1b2d79ae","403":"763153bd-d01f-4724-a223-4f45c4e52492","404":"69b60fe4-eaa3-4baa-913b-10b123868b41","409":"b4c1604e-6712-4915-84f3-77e2e813c62f","422":"dbcb69af-a8ef-4e1a-a2f7-9969e9f0a6f7","429":"6c5ad72e-068c-42e3-b8f0-7e798495b867"},"security":["e6af19bd-f490-4c83-acec-7fefc2edcb5c"],"summary":"Create Environment Version","tags":["environments"],"method":"post","type":"path","servers":["22c3a961-b6d9-4922-b5aa-d0aac292aa39"],"path":"/api/v1/environments/{environment_id}/versions","baseUrlOptions":["https://api.ishlabs.io"],"title":"Create Environment Version","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"46f0820f-1793-4bfa-b479-37cc75102660":{"in":"path","name":"environment_id","required":true,"schema":{"format":"uuid","title":"Environment Id","type":"string","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"}},"9603b58f-fdaa-44d8-bd2b-1d46d68b9b4b":{"in":"header","name":"Idempotency-Key","required":false,"schema":{"oneOf":[{"type":"string","title":"Idempotency-Key","uniqueKey":"oneOf.0","typeLabel":"string"},{"type":"null","title":"Idempotency-Key","uniqueKey":"oneOf.1","typeLabel":"null"}],"isRequired":false,"uniqueKey":"","typeLabel":"string | null"}}},"requestBody":{"content":{"application/json":{"examples":{"default":{"title":"default","value":{"config":{"url":"https://pr-4821.staging.example.com/checkout"},"description":"Checkout with the one-page layout behind the flag.","label":"pr-4821"}}},"schema":{"additionalProperties":false,"description":"Author a new declared version of an environment.\n\n`version` is assigned by the server as the next integer; you name the variant with `label`. `is_default` is absent on purpose: the default pointer moves only through the set-default operation, so authoring a variant never silently redirects the traffic of callers who pin nothing.","properties":{"label":{"description":"The human handle for this variant, unique per environment case-insensitively. Sessions pin to it by name.","maxLength":120,"minLength":1,"title":"Label","type":"string","isRequired":true,"uniqueKey":"label","typeLabel":"string"},"config":{"oneOf":[{"type":"object","title":"EnvironmentConfig","description":"REPLACES the environment's config for runs pinned to this version (never merged). Omit to inherit the environment's config.","properties":{"app_artifact":{"oneOf":[{"type":"string","title":"App Artifact","maxLength":2000,"minLength":1,"uniqueKey":"config.oneOf.0.app_artifact.oneOf.0","typeLabel":"string"},{"type":"null","title":"App Artifact","uniqueKey":"config.oneOf.0.app_artifact.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.app_artifact","typeLabel":"string | null"},"origins":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.oneOf.0.origins.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Origins","maxItems":50,"uniqueKey":"config.oneOf.0.origins.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Origins","uniqueKey":"config.oneOf.0.origins.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.origins","typeLabel":"string[] | null"},"url":{"oneOf":[{"type":"string","title":"Url","maxLength":2000,"uniqueKey":"config.oneOf.0.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"config.oneOf.0.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.url","typeLabel":"string | null"}},"additionalProperties":false,"uniqueKey":"config.oneOf.0","typeLabel":"EnvironmentConfig · object"},{"type":"null","description":"REPLACES the environment's config for runs pinned to this version (never merged). Omit to inherit the environment's config.","uniqueKey":"config.oneOf.1","typeLabel":"null"}],"uniqueKey":"config","typeLabel":"EnvironmentConfig · object | null"},"description":{"oneOf":[{"type":"string","title":"Description","maxLength":8000,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","uniqueKey":"description.oneOf.1","typeLabel":"null"}],"uniqueKey":"description","typeLabel":"string | null"},"example_actions":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"example_actions.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Example Actions","description":"Replaces the environment's example actions for this variant. NON-AUTHORITATIVE: documentation and SDK scaffolding only, never read at turn time. Omit to inherit.","uniqueKey":"example_actions.oneOf.0","typeLabel":"Example Actions · object[]"},{"type":"null","title":"Example Actions","description":"Replaces the environment's example actions for this variant. NON-AUTHORITATIVE: documentation and SDK scaffolding only, never read at turn time. Omit to inherit.","uniqueKey":"example_actions.oneOf.1","typeLabel":"null"}],"uniqueKey":"example_actions","typeLabel":"Example Actions · object[] | null"}},"required":["label"],"title":"CreateEnvironmentVersionRequest","type":"object","uniqueKey":"","typeLabel":"CreateEnvironmentVersionRequest · object"},"exampleType":"examples"}},"required":true,"exampleType":"examples"},"responses":{"2910ea71-6db4-4f49-a569-f67a30c59b00":{"content":{"application/json":{"schema":{"description":"A declared variant as the caller sees it.","properties":{"archived_at":{"oneOf":[{"type":"string","title":"Archived At","description":"Set when the variant is archived. An archived version stays readable and comparable so its stored runs keep resolving, is hidden from the default list, refuses new sessions, and frees its label for reuse.","format":"date-time","isRequired":true,"uniqueKey":"archived_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Archived At","description":"Set when the variant is archived. An archived version stays readable and comparable so its stored runs keep resolving, is hidden from the default list, refuses new sessions, and frees its label for reuse.","isRequired":true,"uniqueKey":"archived_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"archived_at","typeLabel":"string\u003cdate-time> | null"},"config":{"oneOf":[{"type":"object","title":"StoredEnvironmentConfig","description":"This variant's own config, or null when it inherits the environment's. Replaces (never merges with) the environment's.","properties":{"app_artifact":{"oneOf":[{"type":"string","title":"App Artifact","maxLength":2000,"minLength":1,"uniqueKey":"config.oneOf.0.app_artifact.oneOf.0","typeLabel":"string"},{"type":"null","title":"App Artifact","uniqueKey":"config.oneOf.0.app_artifact.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.app_artifact","typeLabel":"string | null"},"origins":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.oneOf.0.origins.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Origins","maxItems":50,"uniqueKey":"config.oneOf.0.origins.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Origins","uniqueKey":"config.oneOf.0.origins.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.origins","typeLabel":"string[] | null"},"url":{"oneOf":[{"type":"string","title":"Url","maxLength":2000,"uniqueKey":"config.oneOf.0.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"config.oneOf.0.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.url","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"config.oneOf.0","typeLabel":"StoredEnvironmentConfig · object"},{"type":"null","description":"This variant's own config, or null when it inherits the environment's. Replaces (never merges with) the environment's.","isRequired":true,"uniqueKey":"config.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"config","typeLabel":"StoredEnvironmentConfig · object | null"},"created_at":{"format":"date-time","title":"Created At","type":"string","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"description":{"oneOf":[{"type":"string","title":"Description","isRequired":true,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","isRequired":true,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"description","typeLabel":"string | null"},"effective_config":{"description":"The config a run pinned to this version operates under: this version's `config` when set, otherwise the environment's. Provided so callers never re-implement the replace rule.","properties":{"app_artifact":{"oneOf":[{"type":"string","title":"App Artifact","maxLength":2000,"minLength":1,"uniqueKey":"effective_config.app_artifact.oneOf.0","typeLabel":"string"},{"type":"null","title":"App Artifact","uniqueKey":"effective_config.app_artifact.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_config.app_artifact","typeLabel":"string | null"},"origins":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"effective_config.origins.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Origins","maxItems":50,"uniqueKey":"effective_config.origins.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Origins","uniqueKey":"effective_config.origins.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_config.origins","typeLabel":"string[] | null"},"url":{"oneOf":[{"type":"string","title":"Url","maxLength":2000,"uniqueKey":"effective_config.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"effective_config.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_config.url","typeLabel":"string | null"}},"title":"StoredEnvironmentConfig","type":"object","isRequired":true,"uniqueKey":"effective_config","typeLabel":"StoredEnvironmentConfig · object"},"environment_id":{"format":"uuid","title":"Environment Id","type":"string","isRequired":true,"uniqueKey":"environment_id","typeLabel":"string\u003cuuid>"},"example_actions":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"example_actions.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Example Actions","isRequired":true,"uniqueKey":"example_actions.oneOf.0","typeLabel":"Example Actions · object[]"},{"type":"null","title":"Example Actions","isRequired":true,"uniqueKey":"example_actions.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"example_actions","typeLabel":"Example Actions · object[] | null"},"id":{"format":"uuid","title":"Id","type":"string","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"is_default":{"description":"Whether a session that names this environment WITHOUT pinning a version resolves here. At most one live default per environment; an environment with no default resolves unversioned.","title":"Is Default","type":"boolean","isRequired":true,"uniqueKey":"is_default","typeLabel":"boolean"},"label":{"title":"Label","type":"string","isRequired":true,"uniqueKey":"label","typeLabel":"string"},"updated_at":{"format":"date-time","title":"Updated At","type":"string","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"version":{"description":"Monotonic per environment, server-assigned, and never reused, even after the variant is archived.","title":"Version","type":"integer","isRequired":true,"uniqueKey":"version","typeLabel":"integer"}},"required":["id","environment_id","version","label","description","config","effective_config","example_actions","is_default","archived_at","created_at","updated_at"],"title":"EnvironmentVersionResponse","type":"object","uniqueKey":"","typeLabel":"EnvironmentVersionResponse · object"},"examples":{"Example":{"title":"Example","value":{"archived_at":"2023-11-07T05:31:56Z","config":{"app_artifact":"\u003cstring>","origins":["\u003cstring>"],"url":"\u003cstring>"},"created_at":"2023-11-07T05:31:56Z","description":"\u003cstring>","effective_config":{"app_artifact":"\u003cstring>","origins":["\u003cstring>"],"url":"\u003cstring>"},"environment_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","example_actions":[{}],"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","is_default":true,"label":"\u003cstring>","updated_at":"2023-11-07T05:31:56Z","version":123}}},"exampleType":"generated"}},"description":"Idempotent replay: the version created by a prior request with this `Idempotency-Key` and body, returned as is.","headers":{"X-Request-Id":{"description":"Per-response correlation id, present on EVERY response (success and error). Error bodies echo it as `request_id`.","schema":{"type":"string"}},"x-ratelimit-limit":{"description":"Ceiling for the rate-limit window this request charged. Present on responses made with an API key against a rate-limited operation, including the `429` itself; absent for user access tokens (which carry no per-key budget) and when the rate-limit backend could not be read.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in that window AFTER this one was counted. Pace off this rather than waiting for a `429`.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"**Seconds from now** until that window resets (a delta, NOT a Unix timestamp). Measured when the response is written. Omitted on the rare occasion the reset instant could not be read, while `limit` and `remaining` are still published.","schema":{"type":"integer"}}},"exampleType":"generated"},"75da3dbe-5b92-41fd-a7cb-b5262e740e22":{"content":{"application/json":{"schema":{"description":"A declared variant as the caller sees it.","properties":{"archived_at":{"oneOf":[{"type":"string","title":"Archived At","description":"Set when the variant is archived. An archived version stays readable and comparable so its stored runs keep resolving, is hidden from the default list, refuses new sessions, and frees its label for reuse.","format":"date-time","isRequired":true,"uniqueKey":"archived_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","title":"Archived At","description":"Set when the variant is archived. An archived version stays readable and comparable so its stored runs keep resolving, is hidden from the default list, refuses new sessions, and frees its label for reuse.","isRequired":true,"uniqueKey":"archived_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"archived_at","typeLabel":"string\u003cdate-time> | null"},"config":{"oneOf":[{"type":"object","title":"StoredEnvironmentConfig","description":"This variant's own config, or null when it inherits the environment's. Replaces (never merges with) the environment's.","properties":{"app_artifact":{"oneOf":[{"type":"string","title":"App Artifact","maxLength":2000,"minLength":1,"uniqueKey":"config.oneOf.0.app_artifact.oneOf.0","typeLabel":"string"},{"type":"null","title":"App Artifact","uniqueKey":"config.oneOf.0.app_artifact.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.app_artifact","typeLabel":"string | null"},"origins":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"config.oneOf.0.origins.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Origins","maxItems":50,"uniqueKey":"config.oneOf.0.origins.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Origins","uniqueKey":"config.oneOf.0.origins.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.origins","typeLabel":"string[] | null"},"url":{"oneOf":[{"type":"string","title":"Url","maxLength":2000,"uniqueKey":"config.oneOf.0.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"config.oneOf.0.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"config.oneOf.0.url","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"config.oneOf.0","typeLabel":"StoredEnvironmentConfig · object"},{"type":"null","description":"This variant's own config, or null when it inherits the environment's. Replaces (never merges with) the environment's.","isRequired":true,"uniqueKey":"config.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"config","typeLabel":"StoredEnvironmentConfig · object | null"},"created_at":{"format":"date-time","title":"Created At","type":"string","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"description":{"oneOf":[{"type":"string","title":"Description","isRequired":true,"uniqueKey":"description.oneOf.0","typeLabel":"string"},{"type":"null","title":"Description","isRequired":true,"uniqueKey":"description.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"description","typeLabel":"string | null"},"effective_config":{"description":"The config a run pinned to this version operates under: this version's `config` when set, otherwise the environment's. Provided so callers never re-implement the replace rule.","properties":{"app_artifact":{"oneOf":[{"type":"string","title":"App Artifact","maxLength":2000,"minLength":1,"uniqueKey":"effective_config.app_artifact.oneOf.0","typeLabel":"string"},{"type":"null","title":"App Artifact","uniqueKey":"effective_config.app_artifact.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_config.app_artifact","typeLabel":"string | null"},"origins":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"effective_config.origins.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Origins","maxItems":50,"uniqueKey":"effective_config.origins.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Origins","uniqueKey":"effective_config.origins.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_config.origins","typeLabel":"string[] | null"},"url":{"oneOf":[{"type":"string","title":"Url","maxLength":2000,"uniqueKey":"effective_config.url.oneOf.0","typeLabel":"string"},{"type":"null","title":"Url","uniqueKey":"effective_config.url.oneOf.1","typeLabel":"null"}],"uniqueKey":"effective_config.url","typeLabel":"string | null"}},"title":"StoredEnvironmentConfig","type":"object","isRequired":true,"uniqueKey":"effective_config","typeLabel":"StoredEnvironmentConfig · object"},"environment_id":{"format":"uuid","title":"Environment Id","type":"string","isRequired":true,"uniqueKey":"environment_id","typeLabel":"string\u003cuuid>"},"example_actions":{"oneOf":[{"type":"array","items":{"additionalProperties":true,"type":"object","uniqueKey":"example_actions.oneOf.0.items.[INDEX]","typeLabel":"object"},"title":"Example Actions","isRequired":true,"uniqueKey":"example_actions.oneOf.0","typeLabel":"Example Actions · object[]"},{"type":"null","title":"Example Actions","isRequired":true,"uniqueKey":"example_actions.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"example_actions","typeLabel":"Example Actions · object[] | null"},"id":{"format":"uuid","title":"Id","type":"string","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"is_default":{"description":"Whether a session that names this environment WITHOUT pinning a version resolves here. At most one live default per environment; an environment with no default resolves unversioned.","title":"Is Default","type":"boolean","isRequired":true,"uniqueKey":"is_default","typeLabel":"boolean"},"label":{"title":"Label","type":"string","isRequired":true,"uniqueKey":"label","typeLabel":"string"},"updated_at":{"format":"date-time","title":"Updated At","type":"string","isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"version":{"description":"Monotonic per environment, server-assigned, and never reused, even after the variant is archived.","title":"Version","type":"integer","isRequired":true,"uniqueKey":"version","typeLabel":"integer"}},"required":["id","environment_id","version","label","description","config","effective_config","example_actions","is_default","archived_at","created_at","updated_at"],"title":"EnvironmentVersionResponse","type":"object","uniqueKey":"","typeLabel":"EnvironmentVersionResponse · object"},"examples":{"Example":{"title":"Example","value":{"archived_at":"2023-11-07T05:31:56Z","config":{"app_artifact":"\u003cstring>","origins":["\u003cstring>"],"url":"\u003cstring>"},"created_at":"2023-11-07T05:31:56Z","description":"\u003cstring>","effective_config":{"app_artifact":"\u003cstring>","origins":["\u003cstring>"],"url":"\u003cstring>"},"environment_id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","example_actions":[{}],"id":"3c90c3cc-0d44-4b50-8888-8dd25736052a","is_default":true,"label":"\u003cstring>","updated_at":"2023-11-07T05:31:56Z","version":123}}},"exampleType":"generated"}},"description":"Successful Response","headers":{"X-Request-Id":{"description":"Per-response correlation id, present on EVERY response (success and error). Error bodies echo it as `request_id`.","schema":{"type":"string"}},"x-ratelimit-limit":{"description":"Ceiling for the rate-limit window this request charged. Present on responses made with an API key against a rate-limited operation, including the `429` itself; absent for user access tokens (which carry no per-key budget) and when the rate-limit backend could not be read.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in that window AFTER this one was counted. Pace off this rather than waiting for a `429`.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"**Seconds from now** until that window resets (a delta, NOT a Unix timestamp). Measured when the response is written. Omitted on the rare occasion the reset instant could not be read, while `limit` and `remaining` are still published.","schema":{"type":"integer"}}},"exampleType":"generated"},"15c6f392-7fd1-4038-9d97-062c1b2d79ae":{"content":{"application/json":{"schema":{"description":"Generic error envelope for 4xx/5xx responses other than request-shape validation.","properties":{"detail":{"oneOf":[{"type":"string","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","additionalProperties":true,"isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"Detail · object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | Detail · object"},"request_id":{"description":"Correlation id; identical to the `X-Request-Id` response header. Quote it in support requests.","title":"Request Id","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"docs_url":{"description":"Link to this error's entry in the error catalog. Present whenever `detail` carries a registered `error_kind`; absent on unclassified errors.","title":"Docs Url","type":"string","uniqueKey":"docs_url","typeLabel":"string"}},"required":["detail","request_id"],"title":"Error","type":"object","uniqueKey":"","typeLabel":"Error · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>","request_id":"\u003cstring>","docs_url":"\u003cstring>"}}},"exampleType":"generated"}},"description":"The bearer token is missing, malformed, unknown, or revoked (`detail.error_kind = 'invalid_api_key'`). One kind covers all four deliberately: distinguishing them would confirm which guesses are real keys.","headers":{"X-Request-Id":{"description":"Per-response correlation id, present on EVERY response (success and error). Error bodies echo it as `request_id`.","schema":{"type":"string"}},"x-ratelimit-limit":{"description":"Ceiling for the rate-limit window this request charged. Present on responses made with an API key against a rate-limited operation, including the `429` itself; absent for user access tokens (which carry no per-key budget) and when the rate-limit backend could not be read.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in that window AFTER this one was counted. Pace off this rather than waiting for a `429`.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"**Seconds from now** until that window resets (a delta, NOT a Unix timestamp). Measured when the response is written. Omitted on the rare occasion the reset instant could not be read, while `limit` and `remaining` are still published.","schema":{"type":"integer"}}},"exampleType":"generated"},"763153bd-d01f-4724-a223-4f45c4e52492":{"content":{"application/json":{"schema":{"description":"Generic error envelope for 4xx/5xx responses other than request-shape validation.","properties":{"detail":{"oneOf":[{"type":"string","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","additionalProperties":true,"isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"Detail · object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | Detail · object"},"request_id":{"description":"Correlation id; identical to the `X-Request-Id` response header. Quote it in support requests.","title":"Request Id","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"docs_url":{"description":"Link to this error's entry in the error catalog. Present whenever `detail` carries a registered `error_kind`; absent on unclassified errors.","title":"Docs Url","type":"string","uniqueKey":"docs_url","typeLabel":"string"}},"required":["detail","request_id"],"title":"Error","type":"object","uniqueKey":"","typeLabel":"Error · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>","request_id":"\u003cstring>","docs_url":"\u003cstring>"}}},"exampleType":"generated"}},"description":"The API key lacks the `environments:write` scope (`detail.error_kind = 'insufficient_scope'`, with `detail.required_scope = 'environments:write'`). Mint a key that includes it; an ish user access token is unconstrained by scopes.","headers":{"X-Request-Id":{"description":"Per-response correlation id, present on EVERY response (success and error). Error bodies echo it as `request_id`.","schema":{"type":"string"}},"x-ratelimit-limit":{"description":"Ceiling for the rate-limit window this request charged. Present on responses made with an API key against a rate-limited operation, including the `429` itself; absent for user access tokens (which carry no per-key budget) and when the rate-limit backend could not be read.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in that window AFTER this one was counted. Pace off this rather than waiting for a `429`.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"**Seconds from now** until that window resets (a delta, NOT a Unix timestamp). Measured when the response is written. Omitted on the rare occasion the reset instant could not be read, while `limit` and `remaining` are still published.","schema":{"type":"integer"}}},"exampleType":"generated"},"69b60fe4-eaa3-4baa-913b-10b123868b41":{"content":{"application/json":{"schema":{"description":"Generic error envelope for 4xx/5xx responses other than request-shape validation.","properties":{"detail":{"oneOf":[{"type":"string","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","additionalProperties":true,"isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"Detail · object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | Detail · object"},"request_id":{"description":"Correlation id; identical to the `X-Request-Id` response header. Quote it in support requests.","title":"Request Id","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"docs_url":{"description":"Link to this error's entry in the error catalog. Present whenever `detail` carries a registered `error_kind`; absent on unclassified errors.","title":"Docs Url","type":"string","uniqueKey":"docs_url","typeLabel":"string"}},"required":["detail","request_id"],"title":"Error","type":"object","uniqueKey":"","typeLabel":"Error · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>","request_id":"\u003cstring>","docs_url":"\u003cstring>"}}},"exampleType":"generated"}},"description":"The environment was not found, or is not reachable with this credential. `detail.error_kind` is `environment_not_found`.","headers":{"X-Request-Id":{"description":"Per-response correlation id, present on EVERY response (success and error). Error bodies echo it as `request_id`.","schema":{"type":"string"}},"x-ratelimit-limit":{"description":"Ceiling for the rate-limit window this request charged. Present on responses made with an API key against a rate-limited operation, including the `429` itself; absent for user access tokens (which carry no per-key budget) and when the rate-limit backend could not be read.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in that window AFTER this one was counted. Pace off this rather than waiting for a `429`.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"**Seconds from now** until that window resets (a delta, NOT a Unix timestamp). Measured when the response is written. Omitted on the rare occasion the reset instant could not be read, while `limit` and `remaining` are still published.","schema":{"type":"integer"}}},"exampleType":"generated"},"b4c1604e-6712-4915-84f3-77e2e813c62f":{"content":{"application/json":{"schema":{"description":"Generic error envelope for 4xx/5xx responses other than request-shape validation.","properties":{"detail":{"oneOf":[{"type":"string","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","additionalProperties":true,"isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"Detail · object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | Detail · object"},"request_id":{"description":"Correlation id; identical to the `X-Request-Id` response header. Quote it in support requests.","title":"Request Id","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"docs_url":{"description":"Link to this error's entry in the error catalog. Present whenever `detail` carries a registered `error_kind`; absent on unclassified errors.","title":"Docs Url","type":"string","uniqueKey":"docs_url","typeLabel":"string"}},"required":["detail","request_id"],"title":"Error","type":"object","uniqueKey":"","typeLabel":"Error · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>","request_id":"\u003cstring>","docs_url":"\u003cstring>"}}},"exampleType":"generated"}},"description":"`detail.error_kind` is `environment_version_label_taken` when the label collides with another LIVE version of this environment (`detail.existing_version_id` carries it), `environment_archived` when the environment itself is archived, `idempotency_conflict` when the `Idempotency-Key` was reused with a different request body, or `environment_version_conflict` when a concurrent create took the next version number, which succeeds on a retry.","headers":{"X-Request-Id":{"description":"Per-response correlation id, present on EVERY response (success and error). Error bodies echo it as `request_id`.","schema":{"type":"string"}},"x-ratelimit-limit":{"description":"Ceiling for the rate-limit window this request charged. Present on responses made with an API key against a rate-limited operation, including the `429` itself; absent for user access tokens (which carry no per-key budget) and when the rate-limit backend could not be read.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in that window AFTER this one was counted. Pace off this rather than waiting for a `429`.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"**Seconds from now** until that window resets (a delta, NOT a Unix timestamp). Measured when the response is written. Omitted on the rare occasion the reset instant could not be read, while `limit` and `remaining` are still published.","schema":{"type":"integer"}}},"exampleType":"generated"},"dbcb69af-a8ef-4e1a-a2f7-9969e9f0a6f7":{"content":{"application/json":{"schema":{"oneOf":[{"type":"object","title":"ValidationError","description":"Request body / parameter validation failure (HTTP 422). A field-level envelope so callers can pinpoint the offending field, value, and allowed values without parsing prose.","required":["error","error_code","status","retryable","detail","errors"],"properties":{"detail":{"title":"Detail","type":"string","isRequired":true,"uniqueKey":"oneOf.0.detail","typeLabel":"string"},"error":{"title":"Error","type":"string","isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"string"},"error_code":{"description":"Stable machine code, e.g. `validation_error`.","title":"Error Code","type":"string","isRequired":true,"uniqueKey":"oneOf.0.error_code","typeLabel":"string"},"errors":{"items":{"description":"One field-level entry in a ValidationError envelope.","properties":{"loc":{"description":"Path to the offending field.","items":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.errors.items.[INDEX].loc.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"integer","uniqueKey":"oneOf.0.errors.items.[INDEX].loc.items.[INDEX].oneOf.1","typeLabel":"integer"}],"uniqueKey":"oneOf.0.errors.items.[INDEX].loc.items.[INDEX]","typeLabel":"string | integer"},"title":"Location","type":"array","isRequired":true,"uniqueKey":"oneOf.0.errors.items.[INDEX].loc","typeLabel":"(string | integer)[]"},"msg":{"title":"Message","type":"string","isRequired":true,"uniqueKey":"oneOf.0.errors.items.[INDEX].msg","typeLabel":"string"},"type":{"title":"Error Type","type":"string","isRequired":true,"uniqueKey":"oneOf.0.errors.items.[INDEX].type","typeLabel":"string"},"allowed_values":{"description":"For enum/literal failures, the accepted values.","items":{"oneOf":[{}],"uniqueKey":"oneOf.0.errors.items.[INDEX].allowed_values.items.[INDEX]","typeLabel":"any"},"title":"Allowed Values","type":"array","uniqueKey":"oneOf.0.errors.items.[INDEX].allowed_values","typeLabel":"any[]"},"input":{"oneOf":[{"type":"string","title":"Input","description":"Offending value (truncated); omitted for containers.","uniqueKey":"oneOf.0.errors.items.[INDEX].input.oneOf.0","typeLabel":"string"},{"type":"number","title":"Input","description":"Offending value (truncated); omitted for containers.","uniqueKey":"oneOf.0.errors.items.[INDEX].input.oneOf.1","typeLabel":"number"},{"type":"boolean","title":"Input","description":"Offending value (truncated); omitted for containers.","uniqueKey":"oneOf.0.errors.items.[INDEX].input.oneOf.2","typeLabel":"boolean"},{"type":"null","title":"Input","description":"Offending value (truncated); omitted for containers.","uniqueKey":"oneOf.0.errors.items.[INDEX].input.oneOf.3","typeLabel":"null"}],"uniqueKey":"oneOf.0.errors.items.[INDEX].input","typeLabel":"string | number | boolean | null"}},"required":["loc","msg","type"],"title":"FieldError","type":"object","uniqueKey":"oneOf.0.errors.items.[INDEX]","typeLabel":"FieldError · object"},"title":"Errors","type":"array","isRequired":true,"uniqueKey":"oneOf.0.errors","typeLabel":"FieldError · object[]"},"retryable":{"title":"Retryable","type":"boolean","isRequired":true,"uniqueKey":"oneOf.0.retryable","typeLabel":"boolean"},"status":{"title":"Status","type":"integer","isRequired":true,"uniqueKey":"oneOf.0.status","typeLabel":"integer"},"suggestions":{"items":{"type":"string","uniqueKey":"oneOf.0.suggestions.items.[INDEX]","typeLabel":"string"},"title":"Suggestions","type":"array","uniqueKey":"oneOf.0.suggestions","typeLabel":"string[]"}},"uniqueKey":"oneOf.0","typeLabel":"ValidationError · object"},{"type":"object","title":"Error","description":"Generic error envelope for 4xx/5xx responses other than request-shape validation.","required":["detail","request_id"],"properties":{"detail":{"oneOf":[{"type":"string","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","isRequired":true,"uniqueKey":"oneOf.1.detail.oneOf.0","typeLabel":"string"},{"type":"object","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","additionalProperties":true,"isRequired":true,"uniqueKey":"oneOf.1.detail.oneOf.1","typeLabel":"Detail · object"}],"isRequired":true,"uniqueKey":"oneOf.1.detail","typeLabel":"string | Detail · object"},"request_id":{"description":"Correlation id; identical to the `X-Request-Id` response header. Quote it in support requests.","title":"Request Id","type":"string","isRequired":true,"uniqueKey":"oneOf.1.request_id","typeLabel":"string"},"docs_url":{"description":"Link to this error's entry in the error catalog. Present whenever `detail` carries a registered `error_kind`; absent on unclassified errors.","title":"Docs Url","type":"string","uniqueKey":"oneOf.1.docs_url","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"Error · object"}],"uniqueKey":"","typeLabel":"ValidationError · object | Error · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>","error":"\u003cstring>","error_code":"\u003cstring>","errors":[{"loc":["\u003cstring>"],"msg":"\u003cstring>","type":"\u003cstring>","allowed_values":["\u003cunknown>"],"input":"\u003cstring>"}],"retryable":true,"status":123,"suggestions":["\u003cstring>"]}}},"exampleType":"generated"}},"description":"Validation error. A request-shape failure uses the `ValidationError` envelope; a handler-raised domain-validation refusal uses the `Error` envelope.","headers":{"X-Request-Id":{"description":"Per-response correlation id, present on EVERY response (success and error). Error bodies echo it as `request_id`.","schema":{"type":"string"}},"x-ratelimit-limit":{"description":"Ceiling for the rate-limit window this request charged. Present on responses made with an API key against a rate-limited operation, including the `429` itself; absent for user access tokens (which carry no per-key budget) and when the rate-limit backend could not be read.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in that window AFTER this one was counted. Pace off this rather than waiting for a `429`.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"**Seconds from now** until that window resets (a delta, NOT a Unix timestamp). Measured when the response is written. Omitted on the rare occasion the reset instant could not be read, while `limit` and `remaining` are still published.","schema":{"type":"integer"}}},"exampleType":"generated"},"6c5ad72e-068c-42e3-b8f0-7e798495b867":{"content":{"application/json":{"schema":{"description":"Generic error envelope for 4xx/5xx responses other than request-shape validation.","properties":{"detail":{"oneOf":[{"type":"string","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","isRequired":true,"uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","title":"Detail","description":"A human-readable message, OR a structured object carrying a machine-readable `error_kind` (e.g. `idempotency_conflict`, `turn_index_mismatch`, `decision_invalid`).","additionalProperties":true,"isRequired":true,"uniqueKey":"detail.oneOf.1","typeLabel":"Detail · object"}],"isRequired":true,"uniqueKey":"detail","typeLabel":"string | Detail · object"},"request_id":{"description":"Correlation id; identical to the `X-Request-Id` response header. Quote it in support requests.","title":"Request Id","type":"string","isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"docs_url":{"description":"Link to this error's entry in the error catalog. Present whenever `detail` carries a registered `error_kind`; absent on unclassified errors.","title":"Docs Url","type":"string","uniqueKey":"docs_url","typeLabel":"string"}},"required":["detail","request_id"],"title":"Error","type":"object","uniqueKey":"","typeLabel":"Error · object"},"examples":{"Example":{"title":"Example","value":{"detail":"\u003cstring>","request_id":"\u003cstring>","docs_url":"\u003cstring>"}}},"exampleType":"generated"}},"description":"The API key's request rate limit is exceeded (`detail.error_kind = 'rate_limited'`). Transient: retry after the `Retry-After` interval, also echoed as `detail.retry_after_seconds`. Not applied to user access tokens.","headers":{"X-Request-Id":{"description":"Per-response correlation id, present on EVERY response (success and error). Error bodies echo it as `request_id`.","schema":{"type":"string"}},"x-ratelimit-limit":{"description":"Ceiling for the rate-limit window this request charged. Present on responses made with an API key against a rate-limited operation, including the `429` itself; absent for user access tokens (which carry no per-key budget) and when the rate-limit backend could not be read.","schema":{"type":"integer"}},"x-ratelimit-remaining":{"description":"Requests left in that window AFTER this one was counted. Pace off this rather than waiting for a `429`.","schema":{"type":"integer"}},"x-ratelimit-reset":{"description":"**Seconds from now** until that window resets (a delta, NOT a Unix timestamp). Measured when the response is written. Omitted on the rare occasion the reset instant could not be read, while `limit` and `remaining` are still published.","schema":{"type":"integer"}}},"exampleType":"generated"}},"security":{"e6af19bd-f490-4c83-acec-7fefc2edcb5c":{"bearerAuth":{"description":"Workspace API key as a bearer token: `Authorization: Bearer ish_sk_live_...`. Keys are workspace-scoped machine principals minted in Settings > Developers (shown once at mint). Scopes: `sessions:run` (create a session, submit turns, close), `sessions:read` (read the session and its decision trace), `environments:read` and `environments:write` (manage the workspace's registered environments), `tasks:read` and `tasks:write` (manage the workspace's registered tasks), `people:read` and `people:write` (the people the workspace can run a session for), and `usage:read` (the workspace's own consumption, spend limits and rate-limit budgets). A key is minted with `sessions:run`, `sessions:read`, and `tasks:read` by default; every other scope must be requested, `people:read` and `usage:read` included. An ish user access token also works on the same header for personal scripts.","scheme":"bearer","type":"http","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"22c3a961-b6d9-4922-b5aa-d0aac292aa39":{"description":"Production","url":"https://api.ishlabs.io"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"description":"Workspace API key as a bearer token: `Authorization: Bearer ish_sk_live_...`. Keys are workspace-scoped machine principals minted in Settings > Developers (shown once at mint). Scopes: `sessions:run` (create a session, submit turns, close), `sessions:read` (read the session and its decision trace), `environments:read` and `environments:write` (manage the workspace's registered environments), `tasks:read` and `tasks:write` (manage the workspace's registered tasks), `people:read` and `people:write` (the people the workspace can run a session for), and `usage:read` (the workspace's own consumption, spend limits and rate-limit budgets). A key is minted with `sessions:run`, `sessions:read`, and `tasks:read` by default; every other scope must be requested, `people:read` and `usage:read` included. An ish user access token also works on the same header for personal scripts.","scheme":"bearer","type":"http","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Workspace API key as a bearer token: `Authorization: Bearer ish_sk_live_...`. Keys are workspace-scoped machine principals minted in Settings > Developers (shown once at mint). Scopes: `sessions:run` (create a session, submit turns, close), `sessions:read` (read the session and its decision trace), `environments:read` and `environments:write` (manage the workspace's registered environments), `tasks:read` and `tasks:write` (manage the workspace's registered tasks), `people:read` and `people:write` (the people the workspace can run a session for), and `usage:read` (the workspace's own consumption, spend limits and rate-limit budgets). A key is minted with `sessions:run`, `sessions:read`, and `tasks:read` by default; every other scope must be requested, `people:read` and `usage:read` included. An ish user access token also works on the same header for personal scripts.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"api/openapi.public.json"},"subdomain":"ish","siteName":"ish","title":"Create Environment Version - ish","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-08T15:42:21.225Z","originalFileLocation":"api/reference/environments/create-environment-version.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=\"Author a declared variant of this environment. version is assigned server-side as max+1; the caller names the variant with label. The new version is NOT made default: a fresh variant must never silently redirect the traffic of callers who pin nothing. This is the CI operation of the lane (a deploy authors the variant it just built), so it takes the standard Idempotency-Key header: a retried pipeline step with the same key and body replays the original version (200 instead of 201) rather than minting label-2. The same key with a different body is a 409 idempotency_conflict.\">\u003cmeta data-mint-head name=\"application-name\" content=\"ish\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ish/pQaVEm2sa1ahpXnl/_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/ish/pQaVEm2sa1ahpXnl/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ish/pQaVEm2sa1ahpXnl/_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/ish/pQaVEm2sa1ahpXnl/_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/ish/pQaVEm2sa1ahpXnl/_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/ish/pQaVEm2sa1ahpXnl/_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/ish/pQaVEm2sa1ahpXnl/_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/ish/pQaVEm2sa1ahpXnl/_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/ish/pQaVEm2sa1ahpXnl/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create Environment Version - ish\">\u003cmeta data-mint-head property=\"og:description\" content=\"Author a declared variant of this environment. version is assigned server-side as max+1; the caller names the variant with label. The new version is NOT made default: a fresh variant must never silently redirect the traffic of callers who pin nothing. This is the CI operation of the lane (a deploy authors the variant it just built), so it takes the standard Idempotency-Key header: a retried pipeline step with the same key and body replays the original version (200 instead of 201) rather than minting label-2. The same key with a different body is a 409 idempotency_conflict.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"ish\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ishlabs.io/api/reference/environments/create-environment-version\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ish.mintlify.site/_mintlify/api/og/v2?division=API+reference\u0026amp;title=Create+Environment+Version\u0026amp;description=Author+a+declared+variant+of+this+environment.%0A%0A%60version%60+is+assigned+server-side+as+max%2B1%3B+the+caller+names+the+variant%0Awith+%60label%60.+The+new+version+is+NOT+ma\u0026amp;theme=e052e8dabadef59794361480\u0026amp;signature=beb8449aec2c991c293d0f64f91ffec5f8c9d204f7734f0cf65e221ecc1de1b9\">\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=\"Create Environment Version - ish\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Author a declared variant of this environment. version is assigned server-side as max+1; the caller names the variant with label. The new version is NOT made default: a fresh variant must never silently redirect the traffic of callers who pin nothing. This is the CI operation of the lane (a deploy authors the variant it just built), so it takes the standard Idempotency-Key header: a retried pipeline step with the same key and body replays the original version (200 instead of 201) rather than minting label-2. The same key with a different body is a 409 idempotency_conflict.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ish.mintlify.site/_mintlify/api/og/v2?division=API+reference\u0026amp;title=Create+Environment+Version\u0026amp;description=Author+a+declared+variant+of+this+environment.%0A%0A%60version%60+is+assigned+server-side+as+max%2B1%3B+the+caller+names+the+variant%0Awith+%60label%60.+The+new+version+is+NOT+ma\u0026amp;theme=e052e8dabadef59794361480\u0026amp;signature=beb8449aec2c991c293d0f64f91ffec5f8c9d204f7734f0cf65e221ecc1de1b9\">\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/ish/pQaVEm2sa1ahpXnl/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"ish\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#C8623F\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ishlabs.io/api/reference/environments/create-environment-version\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/reference/environments/create-environment-version.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ishlabs.io/#organization\",\"name\":\"ish\",\"url\":\"https://docs.ishlabs.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ish/4MaJn6-B7_NnPAml/logo/light.svg?fit=max\u0026auto=format\u0026n=4MaJn6-B7_NnPAml\u0026q=85\u0026s=f0edab6b74c19bec95794ee94d7270c2\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ishlabs.io#website\",\"name\":\"ish\",\"url\":\"https://docs.ishlabs.io\",\"publisher\":{\"@id\":\"https://docs.ishlabs.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ishlabs.io/api/reference/environments/create-environment-version#webpage\",\"url\":\"https://docs.ishlabs.io/api/reference/environments/create-environment-version\",\"name\":\"Create Environment Version\",\"description\":\"Author a declared variant of this environment. version is assigned server-side as max+1; the caller names the variant with label. The new version is NOT made default: a fresh variant must never silently redirect the traffic of callers who pin nothing. This is the CI operation of the lane (a deploy authors the variant it just built), so it takes the standard Idempotency-Key header: a retried pipeline step with the same key and body replays the original version (200 instead of 201) rather than minting label-2. The same key with a different body is a 409 idempotency_conflict.\",\"dateModified\":\"2026-10-08T15:42:21.225Z\",\"isPartOf\":{\"@id\":\"https://docs.ishlabs.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ishlabs.io/api/reference/environments/create-environment-version#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ishlabs.io/api/reference/environments/create-environment-version#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API reference\",\"item\":\"https://docs.ishlabs.io/api/reference/introduction\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Create Environment Version\",\"item\":\"https://docs.ishlabs.io/api/reference/environments/create-environment-version\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.ishlabs.io/api/reference/environments/create-environment-version#apireference\",\"headline\":\"Create Environment Version\",\"name\":\"Create Environment Version\",\"description\":\"Author a declared variant of this environment. version is assigned server-side as max+1; the caller names the variant with label. The new version is NOT made default: a fresh variant must never silently redirect the traffic of callers who pin nothing. This is the CI operation of the lane (a deploy authors the variant it just built), so it takes the standard Idempotency-Key header: a retried pipeline step with the same key and body replays the original version (200 instead of 201) rather than minting label-2. The same key with a different body is a 409 idempotency_conflict.\",\"url\":\"https://docs.ishlabs.io/api/reference/environments/create-environment-version\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ishlabs.io/api/reference/environments/create-environment-version#webpage\"},\"dateModified\":\"2026-10-08T15:42:21.225Z\",\"publisher\":{\"@id\":\"https://docs.ishlabs.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ishlabs.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"ish\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"ish","nav":{"global":{"anchors":[{"anchor":"GitHub","icon":"github","href":"https://github.com/ishlabs"},{"anchor":"ishlabs.io","icon":"globe","href":"https://ishlabs.io"}]},"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":""}]},{"tab":"CLI Reference","pages":[{"title":"CLI Reference","href":"/cli/overview"}]},{"tab":"MCP Reference","pages":[{"title":"MCP Reference","href":"/mcp/overview"}]},{"tab":"API","groups":[{"group":"Get started","pages":[{"title":"The ish API","mode":"explanation","href":"/api/overview"},{"title":"Quickstart","mode":"tutorial","href":"/api/quickstart"},{"title":"Authentication","mode":"how-to","href":"/api/authentication"}]},{"group":"Core concepts","pages":[{"title":"Sessions and turns","mode":"explanation","href":"/api/concepts/sessions-and-turns"},{"title":"Observations","mode":"explanation","href":"/api/concepts/observations"},{"title":"The decide-only loop","mode":"explanation","href":"/api/concepts/decide-only-loop"},{"title":"Intent and resolution","mode":"explanation","href":"/api/concepts/intent-and-resolution"},{"title":"People","mode":"explanation","href":"/api/concepts/people"}]},{"group":"Guides","pages":[{"title":"Run the session loop","mode":"how-to","href":"/api/guides/session-loop"},{"title":"Author your environment","mode":"how-to","href":"/api/guides/environment-authoring"},{"title":"Score outcomes","mode":"how-to","href":"/api/guides/scoring-outcomes"},{"title":"Search people","mode":"how-to","href":"/api/guides/people-search"}]},{"group":"API reference","pages":[{"title":"API reference","mode":"reference","href":"/api/reference/introduction"},{"title":"Errors","mode":"reference","href":"/api/errors"},{"title":"Create Session","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/workspaces/{workspace_id}/sessions","href":"/api/reference/sessions/create-session"},{"title":"List Sessions","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/workspaces/{workspace_id}/sessions","href":"/api/reference/sessions/list-sessions"},{"title":"Submit Turn","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/sessions/{session_id}/turns","href":"/api/reference/sessions/submit-turn"},{"title":"Get Session","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/sessions/{session_id}","href":"/api/reference/sessions/get-session"},{"title":"Close Session","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/sessions/{session_id}/close","href":"/api/reference/sessions/close-session"},{"title":"Create Environment","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/workspaces/{workspace_id}/environments","href":"/api/reference/environments/create-environment"},{"title":"List Environments","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/workspaces/{workspace_id}/environments","href":"/api/reference/environments/list-environments"},{"title":"Get Environment","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/environments/{environment_id}","href":"/api/reference/environments/get-environment"},{"title":"Update Environment","deprecated":null,"version":null,"openapi":"/api/openapi.public.json patch /api/v1/environments/{environment_id}","href":"/api/reference/environments/update-environment"},{"title":"Delete Environment","description":"Retire an environment.\n\nIt stops appearing in the list but stays readable by id, and every session that ran in it keeps resolving, so a decision trace never points at a dangling reference. Its name and address are freed for reuse immediately. Idempotent.","deprecated":null,"version":null,"openapi":"/api/openapi.public.json delete /api/v1/environments/{environment_id}","href":"/api/reference/environments/delete-environment"},{"title":"Create Environment Version","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/environments/{environment_id}/versions","href":"/api/reference/environments/create-environment-version"},{"title":"List Environment Versions","description":"Every declared version of this environment, oldest first.\n\nAn environment with no versions returns an empty list, which is the normal resting state: versions are never created automatically, so zero here means nobody has authored one.","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/environments/{environment_id}/versions","href":"/api/reference/environments/list-environment-versions"},{"title":"Get Environment Version","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/environment-versions/{version_id}","href":"/api/reference/environments/get-environment-version"},{"title":"Update Environment Version","deprecated":null,"version":null,"openapi":"/api/openapi.public.json patch /api/v1/environment-versions/{version_id}","href":"/api/reference/environments/update-environment-version"},{"title":"Delete Environment Version","deprecated":null,"version":null,"openapi":"/api/openapi.public.json delete /api/v1/environment-versions/{version_id}","href":"/api/reference/environments/delete-environment-version"},{"title":"Set Default Environment Version","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/environment-versions/{version_id}/set-default","href":"/api/reference/environments/set-default-environment-version"},{"title":"Create Task","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/workspaces/{workspace_id}/tasks","href":"/api/reference/tasks/create-task"},{"title":"List Tasks","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/workspaces/{workspace_id}/tasks","href":"/api/reference/tasks/list-tasks"},{"title":"Get Task","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/tasks/{task_id}","href":"/api/reference/tasks/get-task"},{"title":"Update Task","deprecated":null,"version":null,"openapi":"/api/openapi.public.json patch /api/v1/tasks/{task_id}","href":"/api/reference/tasks/update-task"},{"title":"Delete Task","deprecated":null,"version":null,"openapi":"/api/openapi.public.json delete /api/v1/tasks/{task_id}","href":"/api/reference/tasks/delete-task"},{"title":"List People","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/workspaces/{workspace_id}/people","href":"/api/reference/people/list-people"},{"title":"Search People","deprecated":null,"version":null,"openapi":"/api/openapi.public.json post /api/v1/workspaces/{workspace_id}/people/search","href":"/api/reference/people/search-people"},{"title":"Get Person","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/workspaces/{workspace_id}/people/{person_id}","href":"/api/reference/people/get-person"},{"title":"Get People Counts","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/workspaces/{workspace_id}/people/counts","href":"/api/reference/people/get-people-counts"},{"title":"Get People Schema","deprecated":null,"version":null,"openapi":"/api/openapi.public.json get /api/v1/workspaces/{workspace_id}/people/schema","href":"/api/reference/people/get-people-schema"}]},{"group":"Versioning and changes","pages":[{"title":"Versioning and deprecation","mode":"reference","href":"/api/versioning"},{"title":"Changelog","mode":"reference","href":"/api/changelog"}]}]},{"tab":"Help","pages":[{"title":"Help","href":"/help/troubleshooting"}]}]},"basePath":"","title":"Create Environment Version - ish","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}