{
"error": {
"message": "Your API key has been disabled due to insufficient credits. Visit https://app.sailresearch.com/billing to add credits.",
"type": "billing_error",
"param": null,
"code": "credits_exhausted",
"billing_url": "https://app.sailresearch.com/billing"
}
}
{
"error": {
"message": "sailboxes require an organization-scoped API key",
"type": "permission_error",
"param": null,
"code": null
}
}
{
"error": {
"message": "idempotent request still in flight",
"type": "server_error",
"param": null,
"code": null
}
}
Lifecycle
Create a Sailbox
Creates a Sailbox and waits for startup to finish, which can take a few minutes. image has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK.
Send an Idempotency-Key so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read Retrying safely before you retry one.
{
"error": {
"message": "Your API key has been disabled due to insufficient credits. Visit https://app.sailresearch.com/billing to add credits.",
"type": "billing_error",
"param": null,
"code": "credits_exhausted",
"billing_url": "https://app.sailresearch.com/billing"
}
}
{
"error": {
"message": "sailboxes require an organization-scoped API key",
"type": "permission_error",
"param": null,
"code": null
}
}
Makes the request retry-safe. Sail remembers the answer it sent under a key, including a 400 or a 409, and replays it with Idempotent-Replayed: true for a retry that repeats the key, the method, the path, and the body. Bodies are compared byte for byte. Reusing a key for a different request returns 409, so send a corrected request under a new key. A key that is blank or only spaces is ignored, and the request runs without idempotency.
Any string of up to 255 bytes works, and characters outside ASCII count for more than one. A UUID is a good default. Keys are remembered for at least 24 hours and scoped to the API key that sent them.
A server error, or a failure to record the answer, can leave a key unsettled, and creating a Sailbox is where that matters. See Retrying safely.
Human-readable name for the new Sailbox. Names are not unique, so keep hold of the returned sailbox_id. It is stored as you send it, surrounding spaces included, so trim it yourself if you compare names later. Control characters are not allowed.
Describes the environment the Sailbox boots into. Start from a Sail base image with base, bring your own image from a public registry with oci, or build your own Dockerfile with dockerfile; give exactly one. A base image on its own is ready to boot. Adding build steps, environment variables, a Python version, or systemd on BASE_IMAGE_DEBIAN describes an image that has to be built before a Sailbox can start from it. A registry image or a Dockerfile always has to be built first too. Building an image takes an SDK.
Terminate this Sailbox after this many wall-clock seconds from creation, including time spent waiting for capacity, sleeping, or paused. Image preparation happens before creation. Omit or pass null for unlimited lifetime. The deadline cannot be extended. Expiration is checked periodically, so termination can occur after the deadline. A new Sailbox started from a checkpoint gets its own limit; it does not inherit the source Sailbox's deadline.
Deprecated; set vcpu_count instead. s stands for 1 vCPU, m for 4, and l for 8, and a limit left out takes the value the size used to carry. Sizes will be unsupported in future SDK versions.
org lets anyone in your organization operate the Sailbox. private restricts that to the user whose key created it, so it needs a user-scoped key. An organization admin can still pause, resume, sleep, schedule a wake, upgrade, reboot, set limits, or terminate it by sending X-Sail-Owner-Override-Reason.
Environment variables for every command in the Sailbox. They override the image's variables. A variable set for one command overrides them, and so does a variable of the same name in the egress policy's env. They cannot change after create, and a Sailbox forked or started from a checkpoint keeps them. Names cannot start with SAILBOX_, and values cannot hold control characters. Values are not secret: anyone who can run commands in the Sailbox can read them. Give a Sailbox a secret with the env of its egress policy. https://docs.sailresearch.com/sailbox-sdk#create-env
Automatic-sleep preference for the new Sailbox. Omit it to let Sail sleep the Sailbox automatically with its default wait. You can change it later with POST /sailboxes/{sailbox_id}/auto_sleep.
Which hosts the new Sailbox may connect to and what happens to the HTTPS requests it sends: the id of a saved egress policy, or a policy document written inline. Omit it to allow every host. An inline document cannot use secrets; save it as a policy first. "no_network": true cannot be combined with ingress_ports. A Sailbox created from a checkpoint keeps the policy of the one it came from. Change the policy later with PUT /sailboxes/{sailbox_id}/egress-policy.
Current state of the Sailbox. Values in use today are creating, running, paused, sleeping, terminating, terminated, failed, create_failed, interrupted_restorable, and interrupted_unsafe_to_retry. New values can appear over time, so treat this as an open set.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Sail Research","colors":{"primary":"#2c4681","light":"#8ba2dd","dark":"#2c4681"},"logo":{"light":"https://mintcdn.com/sailresearch/X8kOeTTR9DVS13DJ/logo/solo.svg?fit=max\u0026auto=format\u0026n=X8kOeTTR9DVS13DJ\u0026q=85\u0026s=45e472c8b5c89f0235ef55e4953f7075","dark":"https://mintcdn.com/sailresearch/X8kOeTTR9DVS13DJ/logo/solo-white.svg?fit=max\u0026auto=format\u0026n=X8kOeTTR9DVS13DJ\u0026q=85\u0026s=aa38acb72785fa2780f0b79c8ec247af"},"favicon":"https://mintcdn.com/sailresearch/aahfB_XYfgCoK57N/favicon.svg?fit=max\u0026auto=format\u0026n=aahfB_XYfgCoK57N\u0026q=85\u0026s=fa6a1adfca07b5313cfb218d6c30687d","appearance":{"default":"system"},"navbar":{"primary":{"type":"button","label":"Dashboard","href":"https://app.sailresearch.com"}},"footer":{"socials":{"x":"https://x.com/sailresearchco","github":"https://github.com/sailresearchco","slack":"https://join.slack.com/t/sailresearchcrew/shared_invite/zt-41pdcym9j-UU0Ey~A~r6n2H0DQVQsQHQ","linkedin":"https://www.linkedin.com/company/sailresearch"}},"search":{"prompt":"Search (⌘K)"},"seo":{"metatags":{"og:image":"/images/og.png"}},"fonts":{"heading":{"family":"Geist"},"body":{"family":"Geist"}},"integrations":{"telemetry":{"enabled":false}},"contextual":{"options":["copy","chatgpt","claude","cursor","mcp"],"display":"header"},"interaction":{"drilldown":false},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"sailresearch","hasAudioNarration":false,"actualSubdomain":"sailresearch","customDomains":["docs.sailresearch.com"],"gitSource":{"type":"github","owner":"sailresearchco","repo":"sail","deployBranch":"main","contentDirectory":"docs","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae92d952991873336bca85f","collectionId":"2df0ab0d-0ee5-458d-be67-b2a0c9d3dc1d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae92d952991873336bca85f"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"REMOVE_BRANDING":{"status":"ENABLED"},"CONTEXTUAL_FEEDBACK":{"status":"ENABLED"},"CODE_SNIPPET_FEEDBACK":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ae92d952991873336bca85f","clientVersion":"0.0.4045","searchFilterCounts":[{"language":"default","tag":"Reference","count":100},{"language":"default","tag":"Sailbox","count":82},{"language":"default","tag":"HTTP API","count":77},{"language":"default","tag":"Documentation","count":44},{"language":"default","tag":"Lifecycle","count":16},{"language":"default","tag":"Sailboxes","count":15},{"language":"default","tag":"Inference","count":13},{"language":"default","tag":"Volumes","count":13},{"language":"default","tag":"Inference APIs","count":11},{"language":"default","tag":"Features","count":10}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@sailresearch.com","showHelpButton":false}},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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":"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":"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":"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":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":true},"customCss":[{"filePath":"style.css","href":"/_mintlify/custom/sailresearch/7ff4d405a5104e99/style.css"}],"page":{"pagePath":"api-reference/lifecycle/create-a-sailbox","slug":"/api-reference/lifecycle/create-a-sailbox","pageMetadata":{"title":"Create a Sailbox","description":"Creates a Sailbox and waits for startup to finish, which can take a few minutes. `image` has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK.\n\nSend an `Idempotency-Key` so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read [Retrying safely](/sailboxes-http-api#retrying-safely) before you retry one.","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes","href":"/api-reference/lifecycle/create-a-sailbox","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 a: \"a\",\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Creates a Sailbox and waits for startup to finish, which can take a few minutes. \", _jsx(_components.code, {\n children: \"image\"\n }), \" has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Send an \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read \", _jsx(_components.a, {\n href: \"/sailboxes-http-api#retrying-safely\",\n children: \"Retrying safely\"\n }), \" before you retry one.\"]\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 a Sailbox","description":"Creates a Sailbox and waits for startup to finish, which can take a few minutes. `image` has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK.\n\nSend an `Idempotency-Key` so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read [Retrying safely](/sailboxes-http-api#retrying-safely) before you retry one.","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes","href":"/api-reference/lifecycle/create-a-sailbox","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/sailresearch/53cdab3a0f4c571b/navbar-auth.js","/_mintlify/custom/sailresearch/d891ac7bd4b17796/cost-calculator-data.js","/_mintlify/custom/sailresearch/1bd7165bcfbd1e54/cost-calculator.js","/_mintlify/custom/sailresearch/7593358cae5a220f/one-shot-prompt.js","/_mintlify/custom/sailresearch/19a656aba0175d42/posthog-events.js","/_mintlify/custom/sailresearch/ee32dacc45e6eb1f/reference-fold.js","/_mintlify/custom/sailresearch/605beaca210d6425/cursor-setup.js","/_mintlify/custom/sailresearch/9d8daa962b50520f/price-comparison-data.js","/_mintlify/custom/sailresearch/74da3abd3a623529/price-comparison.js","/_mintlify/custom/sailresearch/3756b4c1fcdcbfd0/zdr-navigation.js"],"openApiReferenceData":{"operation":{"operationId":"createSailbox","tags":["Lifecycle"],"summary":"Create a Sailbox","description":"Creates a Sailbox and waits for startup to finish, which can take a few minutes. `image` has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK.\n\nSend an `Idempotency-Key` so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read [Retrying safely](/sailboxes-http-api#retrying-safely) before you retry one.","parameters":["83145b56-c038-4872-a74b-3b0a3226d334"],"requestBody":"a20b0238-0fa5-46c0-9b87-ff9353da5c92","responses":{"200":"3f82b90f-1ef9-41bb-b506-4d6ee609b55d","400":"2fc596e6-1fd3-4265-8f97-20479e626823","401":"76697461-fecd-48f8-9f09-d5d4cf3e62e1","402":"e1a5dfc6-4c1d-4939-ba8e-9f62dbd16746","403":"1b6b85c7-3a67-4440-8a9b-4c8f46eb230a","404":"9f5fa04f-25e2-46e0-a914-b44e16288368","409":"b60cf423-c94d-4106-8a5d-2e39681bf58e","413":"7fcccd8f-49b5-4c75-9127-4c68b684da8e","429":"3ff7452a-fd67-48a8-88b8-1ad4e2f9f396","500":"7827850a-bc03-4b2e-a088-c68bb77f6cfc","503":"cefbbf2e-93a7-4a95-91ac-17a7c233fdec","504":"21afb11a-f88c-4a6e-bf76-5777fdd96075"},"method":"post","type":"path","servers":["ea6a777d-11b2-4262-a9f6-85ca1c08b647"],"security":["bb4dd6da-eb94-44b9-bdc2-d57f2d651bf0"],"path":"/sailboxes","baseUrlOptions":["https://sailbox-api.sailresearch.com/v1"],"title":"Create a Sailbox","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"83145b56-c038-4872-a74b-3b0a3226d334":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255,"isRequired":false,"description":"Makes the request retry-safe. Sail remembers the answer it sent under a key, including a 400 or a 409, and replays it with `Idempotent-Replayed: true` for a retry that repeats the key, the method, the path, and the body. Bodies are compared byte for byte. Reusing a key for a different request returns 409, so send a corrected request under a new key. A key that is blank or only spaces is ignored, and the request runs without idempotency.\n\nAny string of up to 255 bytes works, and characters outside ASCII count for more than one. A UUID is a good default. Keys are remembered for at least 24 hours and scoped to the API key that sent them.\n\nA server error, or a failure to record the answer, can leave a key unsettled, and creating a Sailbox is where that matters. See [Retrying safely](/sailboxes-http-api#retrying-safely).","uniqueKey":"","typeLabel":"string"},"description":"Makes the request retry-safe. Sail remembers the answer it sent under a key, including a 400 or a 409, and replays it with `Idempotent-Replayed: true` for a retry that repeats the key, the method, the path, and the body. Bodies are compared byte for byte. Reusing a key for a different request returns 409, so send a corrected request under a new key. A key that is blank or only spaces is ignored, and the request runs without idempotency.\n\nAny string of up to 255 bytes works, and characters outside ASCII count for more than one. A UUID is a good default. Keys are remembered for at least 24 hours and scoped to the API key that sent them.\n\nA server error, or a failure to record the answer, can leave a key unsettled, and creating a Sailbox is where that matters. See [Retrying safely](/sailboxes-http-api#retrying-safely)."}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["name","app_id","image"],"properties":{"name":{"type":"string","minLength":1,"pattern":"\\S","maxLength":128,"description":"Human-readable name for the new Sailbox. Names are not unique, so keep hold of the returned `sailbox_id`. It is stored as you send it, surrounding spaces included, so trim it yourself if you compare names later. Control characters are not allowed.","isRequired":true,"uniqueKey":"name","typeLabel":"string"},"app_id":{"type":"string","minLength":1,"pattern":"\\S","description":"Id of the app that will own the Sailbox. Use `POST /apps/find` to look one up by name.","isRequired":true,"uniqueKey":"app_id","typeLabel":"string"},"image":{"oneOf":[{"type":"object","description":"Describes the environment the Sailbox boots into. Start from a Sail base image with `base`, bring your own image from a public registry with `oci`, or build your own Dockerfile with `dockerfile`; give exactly one. A base image on its own is ready to boot. Adding build steps, environment variables, a Python version, or systemd on `BASE_IMAGE_DEBIAN` describes an image that has to be built before a Sailbox can start from it. A registry image or a Dockerfile always has to be built first too. Building an image takes an SDK.","required":["base"],"properties":{"base":{"type":"string","enum":["BASE_IMAGE_DEBIAN","BASE_IMAGE_DEVBOX"],"description":"Starting point for the image. `BASE_IMAGE_DEBIAN` is a plain Debian base you can build on. `BASE_IMAGE_DEVBOX` is a prebuilt development environment that accepts no build steps, environment variables, or Python version. It runs systemd, which starts Docker when the Sailbox boots and restarts it if it crashes. Docker keeps running across sleeps and can take a few seconds to accept commands right after boot.","isRequired":true,"uniqueKey":"image.oneOf.0.base","typeLabel":"enum\u003cstring>"},"oci":{"type":"object","additionalProperties":false,"required":["ref"],"description":"Your own image as the Sailbox root filesystem. Sail pulls the image and layers everything a Sailbox needs on top; build steps and `env` compose on it like on a base image. The image must be Debian- or Ubuntu-based. Its environment variables, working directory, and `USER` become the defaults for commands run in the Sailbox, and its `ENTRYPOINT` and `CMD` are not run.","properties":{"ref":{"type":"string","description":"Image reference on a supported public registry: `docker.io`, `ghcr.io`, `public.ecr.aws`, or `quay.io`, written out in full. Pass a tag, a `@sha256:...` digest, or just the name, which means the `latest` tag. A tag is pinned for your organization once an image has been built from it: later builds keep getting that version, even if the tag moves upstream. Use `force_build` in an SDK to look the tag up again and move the pin for your whole organization. A digest names exactly one image, so it never moves.","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+(:[a-zA-Z0-9._\\-]+|@sha256:[0-9a-f]{64})?$","examples":["docker.io/library/python:3.13"],"isRequired":true,"uniqueKey":"image.oneOf.0.oci.ref","typeLabel":"string"}},"uniqueKey":"image.oneOf.0.oci","typeLabel":"object"},"dockerfile":{"type":"object","additionalProperties":false,"required":["dockerfile"],"description":"Your own Dockerfile built into the Sailbox root filesystem. Sail builds it and layers everything a Sailbox needs on top; build steps and `env` compose on the result like on a base image. Every image a `FROM` or `COPY --from` names must live on a supported public registry: `docker.io`, `ghcr.io`, `public.ecr.aws`, or `quay.io`. Short names work the way Docker reads them, so `python:3.12` means `docker.io/library/python:3.12`. A Dockerfile may name at most 25 distinct external images across its `FROM` and `COPY --from` instructions. The image the Dockerfile produces must be Debian- or Ubuntu-based. Its environment variables, working directory, and `USER` become the defaults for commands run in the Sailbox, and its `ENTRYPOINT` and `CMD` are not run. Multi-stage Dockerfiles work. A `RUN --mount` of type `cache`, `secret`, or `ssh` is rejected; `tmpfs` mounts work, and `bind` mounts work when they read from the build context or another build stage. Mount options must be literal text, and `ONBUILD` is not supported, in the Dockerfile or in an image a `FROM` names. Each image a `FROM` or `COPY --from` names is pinned to the version its tag pointed at on your organization's first use, and later builds keep using it after the tag moves; use `force_build` in an SDK to look tags up again.","properties":{"dockerfile":{"type":"string","minLength":1,"pattern":"\\S","maxLength":524288,"description":"Full text of the Dockerfile. The length limit is in bytes, so characters outside ASCII count for more than one.","examples":["FROM python:3.12\nRUN pip install requests\n"],"isRequired":true,"uniqueKey":"image.oneOf.0.dockerfile.dockerfile","typeLabel":"string"},"context_files":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One file within an `add_local_dir` step or a `dockerfile` build context.","required":["relative_path","content_sha256"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path within the copied directory or build context. No leading or trailing `/`, and no empty, `.`, or `..` segment. The limit is 1024 bytes, and characters outside ASCII count for more than one.","examples":["src/main.py"],"isRequired":true,"uniqueKey":"image.oneOf.0.dockerfile.context_files.items.[INDEX].relative_path","typeLabel":"string"},"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.0.dockerfile.context_files.items.[INDEX].content_sha256","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.0.dockerfile.context_files.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.0.dockerfile.context_files.items.[INDEX]","typeLabel":"object"},"description":"The build context: the files the Dockerfile's `COPY` and `ADD` instructions read. Their contents are uploaded while the image is built. Leave it empty when the Dockerfile copies nothing. Every `relative_path` has to be distinct across files, directories, and symbolic links, and the three lists together may hold at most 50000 entries.","uniqueKey":"image.oneOf.0.dockerfile.context_files","typeLabel":"object[]"},"context_dirs":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One directory within a `dockerfile` build context. Send one for every directory the context contains, including empty ones, so `COPY` of a directory behaves the way it does locally.","required":["relative_path"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path of the directory within the build context. The same rules as a context file's `relative_path`.","examples":["src"],"isRequired":true,"uniqueKey":"image.oneOf.0.dockerfile.context_dirs.items.[INDEX].relative_path","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the directory, as a number. Omit it, or send `0`, for `493` (`rwxr-xr-x`).","uniqueKey":"image.oneOf.0.dockerfile.context_dirs.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.0.dockerfile.context_dirs.items.[INDEX]","typeLabel":"object"},"description":"The build context's directories, empty ones included. A file whose parent directories are not listed still creates them with default permissions.","uniqueKey":"image.oneOf.0.dockerfile.context_dirs","typeLabel":"object[]"},"context_symlinks":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One symbolic link within a `dockerfile` build context. The link is recreated as a link in the staged context, exactly as `docker build` sends one.","required":["relative_path","target"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path of the link within the build context. The same rules as a context file's `relative_path`. No other context entry may sit at or beneath this path.","examples":["current"],"isRequired":true,"uniqueKey":"image.oneOf.0.dockerfile.context_symlinks.items.[INDEX].relative_path","typeLabel":"string"},"target":{"type":"string","minLength":1,"maxLength":1024,"description":"The link's target, exactly as the link stores it. It may be relative or absolute and is resolved only inside the built image, never while staging the context.","examples":["releases/v2"],"isRequired":true,"uniqueKey":"image.oneOf.0.dockerfile.context_symlinks.items.[INDEX].target","typeLabel":"string"}},"uniqueKey":"image.oneOf.0.dockerfile.context_symlinks.items.[INDEX]","typeLabel":"object"},"description":"The build context's symbolic links. No file, directory, or other link may sit at or beneath a link's path.","uniqueKey":"image.oneOf.0.dockerfile.context_symlinks","typeLabel":"object[]"},"pinned_from":{"type":"array","maxItems":25,"items":{"type":"object","additionalProperties":false,"description":"What one image named by a Dockerfile's `FROM` or `COPY --from` resolved to when an image was built.","required":["reference","digest_ref"],"properties":{"reference":{"type":"string","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+(:[a-zA-Z0-9._\\-]+|@sha256:[0-9a-f]{64})?$","description":"The image reference as the Dockerfile names it, fully qualified.","examples":["docker.io/library/python:3.12"],"isRequired":true,"uniqueKey":"image.oneOf.0.dockerfile.pinned_from.items.[INDEX].reference","typeLabel":"string"},"digest_ref":{"type":"string","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+@sha256:[0-9a-f]{64}$","description":"The digest-pinned form of the same reference the build used. It must be in the reference's own repository.","examples":["docker.io/library/python@sha256:0000000000000000000000000000000000000000000000000000000000000000"],"isRequired":true,"uniqueKey":"image.oneOf.0.dockerfile.pinned_from.items.[INDEX].digest_ref","typeLabel":"string"}},"uniqueKey":"image.oneOf.0.dockerfile.pinned_from.items.[INDEX]","typeLabel":"object"},"description":"Digest pins carried from a completed build of this Dockerfile, as its build reported them. When present, the build uses exactly these versions instead of looking the references up, so the spec keeps naming the image that build produced even after a forced build moves your organization's pins. The set must cover exactly the images the Dockerfile names. Leave it out to resolve through your organization's pins; a forced build ignores it.","uniqueKey":"image.oneOf.0.dockerfile.pinned_from","typeLabel":"object[]"},"build_args":{"type":"object","maxProperties":64,"propertyNames":{"pattern":"^(?!BUILDKIT_)[A-Za-z_][A-Za-z0-9_]*$","maxLength":128},"additionalProperties":{"type":"string","maxLength":4096,"pattern":"^[^\\n\\r\\x00]*$","uniqueKey":"image.oneOf.0.dockerfile.build_args.additionalProperties","typeLabel":"string"},"description":"Build arguments, matched to the Dockerfile's `ARG` instructions. A name must start with a letter or `_` and contain only letters, numbers, and `_`; names starting with `BUILDKIT_` are reserved for the build system, and Docker's proxy names (`HTTP_PROXY`, `HTTPS_PROXY`, `FTP_PROXY`, `NO_PROXY`, `ALL_PROXY`, in any letter case) are rejected. Values may not contain newlines or NUL. Name and value limits (128 and 4096) are in bytes, so characters outside ASCII count for more than one.","uniqueKey":"image.oneOf.0.dockerfile.build_args","typeLabel":"object"}},"uniqueKey":"image.oneOf.0.dockerfile","typeLabel":"object"},"build_steps":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"One build step. Set exactly one field per step. Steps run in order.","minProperties":1,"maxProperties":1,"properties":{"apt_install":{"type":"object","additionalProperties":false,"required":["packages"],"properties":{"packages":{"type":"array","minItems":1,"items":{"type":"string","minLength":1,"pattern":"\\S","uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].apt_install.packages.items.[INDEX]","typeLabel":"string"},"description":"Package names to install.","isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].apt_install.packages","typeLabel":"string[]"}},"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].apt_install","typeLabel":"object"},"pip_install":{"type":"object","additionalProperties":false,"required":["packages"],"properties":{"packages":{"type":"array","minItems":1,"items":{"type":"string","minLength":1,"pattern":"\\S","uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].pip_install.packages.items.[INDEX]","typeLabel":"string"},"description":"Package names to install.","isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].pip_install.packages","typeLabel":"string[]"}},"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].pip_install","typeLabel":"object"},"run_command":{"type":"object","additionalProperties":false,"required":["command"],"properties":{"command":{"type":"string","minLength":1,"pattern":"\\S","description":"Shell command to run while building the image.","isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].run_command.command","typeLabel":"string"}},"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].run_command","typeLabel":"object"},"add_local_file":{"type":"object","additionalProperties":false,"description":"Copies one file into the image. Its contents are uploaded while the image is built.","required":["content_sha256","remote_path"],"properties":{"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_file.content_sha256","typeLabel":"string"},"remote_path":{"type":"string","pattern":"^/","description":"Absolute path the file lands on inside the image. No trailing `/` and no `..` segment. A space, `$`, `\"`, or `\\` anywhere in the path is rejected.","examples":["/opt/app/entrypoint.sh"],"isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_file.remote_path","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_file.mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_file","typeLabel":"object"},"add_local_dir":{"type":"object","additionalProperties":false,"description":"Copies a directory of files into the image. Their contents are uploaded while the image is built.","required":["remote_path","files"],"properties":{"remote_path":{"type":"string","pattern":"^/","description":"Absolute directory the files land in inside the image. It cannot be `/`. No trailing `/` and no `..` segment. A space, `$`, `\"`, or `\\` anywhere in the path is rejected.","examples":["/opt/app"],"isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_dir.remote_path","typeLabel":"string"},"files":{"type":"array","minItems":1,"maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One file within an `add_local_dir` step or a `dockerfile` build context.","required":["relative_path","content_sha256"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path within the copied directory or build context. No leading or trailing `/`, and no empty, `.`, or `..` segment. The limit is 1024 bytes, and characters outside ASCII count for more than one.","examples":["src/main.py"],"isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].relative_path","typeLabel":"string"},"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].content_sha256","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX]","typeLabel":"object"},"description":"The files to copy. Every `relative_path` has to be distinct.","isRequired":true,"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_dir.files","typeLabel":"object[]"}},"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX].add_local_dir","typeLabel":"object"}},"uniqueKey":"image.oneOf.0.build_steps.items.[INDEX]","typeLabel":"object"},"description":"Steps applied to the image source, in order.","uniqueKey":"image.oneOf.0.build_steps","typeLabel":"object[]"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","uniqueKey":"image.oneOf.0.env.additionalProperties","typeLabel":"string"},"description":"Environment variables baked into the image and present in every process. A variable name must start with a letter or `_` and contain only letters, numbers, and `_`.","uniqueKey":"image.oneOf.0.env","typeLabel":"object"},"architecture":{"type":"string","enum":["IMAGE_ARCHITECTURE_AMD64","IMAGE_ARCHITECTURE_ARM64"],"description":"CPU architecture to build for. With `base` or `dockerfile`, leaving this unset builds for `IMAGE_ARCHITECTURE_AMD64`. With `oci`, leaving it unset builds for whichever architecture the registry image was built for, and for `IMAGE_ARCHITECTURE_AMD64` when it was built for both. Naming one makes it a requirement: a registry image that was not built for it is rejected.","uniqueKey":"image.oneOf.0.architecture","typeLabel":"enum\u003cstring>"},"python_version":{"type":"string","pattern":"^([0-9]+\\.[0-9]+\\.[0-9]+)?$","description":"Python version to install as `python3`. Give the full patch version, such as `3.12.13`; `3.12` is rejected. Not accepted with `oci` or `dockerfile`: a pinned interpreter would shadow the Python the image was built around.","examples":["3.12.13"],"uniqueKey":"image.oneOf.0.python_version","typeLabel":"string"},"systemd":{"type":"boolean","description":"Run systemd as the init system in Sailboxes created from this image. The build installs systemd before the build steps run, so a step can enable a service with `systemctl enable`. Enabled services start when a Sailbox is created from the image, and one may still be starting when the create request returns. Leaving it unset means the image does not run systemd. `BASE_IMAGE_DEVBOX` always runs systemd, so the field changes nothing there.","uniqueKey":"image.oneOf.0.systemd","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"image.oneOf.0","typeLabel":"object"},{"type":"object","description":"Describes the environment the Sailbox boots into. Start from a Sail base image with `base`, bring your own image from a public registry with `oci`, or build your own Dockerfile with `dockerfile`; give exactly one. A base image on its own is ready to boot. Adding build steps, environment variables, a Python version, or systemd on `BASE_IMAGE_DEBIAN` describes an image that has to be built before a Sailbox can start from it. A registry image or a Dockerfile always has to be built first too. Building an image takes an SDK.","required":["oci"],"properties":{"oci":{"type":"object","additionalProperties":false,"required":["ref"],"description":"Your own image as the Sailbox root filesystem. Sail pulls the image and layers everything a Sailbox needs on top; build steps and `env` compose on it like on a base image. The image must be Debian- or Ubuntu-based. Its environment variables, working directory, and `USER` become the defaults for commands run in the Sailbox, and its `ENTRYPOINT` and `CMD` are not run.","properties":{"ref":{"type":"string","description":"Image reference on a supported public registry: `docker.io`, `ghcr.io`, `public.ecr.aws`, or `quay.io`, written out in full. Pass a tag, a `@sha256:...` digest, or just the name, which means the `latest` tag. A tag is pinned for your organization once an image has been built from it: later builds keep getting that version, even if the tag moves upstream. Use `force_build` in an SDK to look the tag up again and move the pin for your whole organization. A digest names exactly one image, so it never moves.","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+(:[a-zA-Z0-9._\\-]+|@sha256:[0-9a-f]{64})?$","examples":["docker.io/library/python:3.13"],"isRequired":true,"uniqueKey":"image.oneOf.1.oci.ref","typeLabel":"string"}},"isRequired":true,"uniqueKey":"image.oneOf.1.oci","typeLabel":"object"},"base":{"type":"string","enum":["BASE_IMAGE_DEBIAN","BASE_IMAGE_DEVBOX"],"description":"Starting point for the image. `BASE_IMAGE_DEBIAN` is a plain Debian base you can build on. `BASE_IMAGE_DEVBOX` is a prebuilt development environment that accepts no build steps, environment variables, or Python version. It runs systemd, which starts Docker when the Sailbox boots and restarts it if it crashes. Docker keeps running across sleeps and can take a few seconds to accept commands right after boot.","uniqueKey":"image.oneOf.1.base","typeLabel":"enum\u003cstring>"},"dockerfile":{"type":"object","additionalProperties":false,"required":["dockerfile"],"description":"Your own Dockerfile built into the Sailbox root filesystem. Sail builds it and layers everything a Sailbox needs on top; build steps and `env` compose on the result like on a base image. Every image a `FROM` or `COPY --from` names must live on a supported public registry: `docker.io`, `ghcr.io`, `public.ecr.aws`, or `quay.io`. Short names work the way Docker reads them, so `python:3.12` means `docker.io/library/python:3.12`. A Dockerfile may name at most 25 distinct external images across its `FROM` and `COPY --from` instructions. The image the Dockerfile produces must be Debian- or Ubuntu-based. Its environment variables, working directory, and `USER` become the defaults for commands run in the Sailbox, and its `ENTRYPOINT` and `CMD` are not run. Multi-stage Dockerfiles work. A `RUN --mount` of type `cache`, `secret`, or `ssh` is rejected; `tmpfs` mounts work, and `bind` mounts work when they read from the build context or another build stage. Mount options must be literal text, and `ONBUILD` is not supported, in the Dockerfile or in an image a `FROM` names. Each image a `FROM` or `COPY --from` names is pinned to the version its tag pointed at on your organization's first use, and later builds keep using it after the tag moves; use `force_build` in an SDK to look tags up again.","properties":{"dockerfile":{"type":"string","minLength":1,"pattern":"\\S","maxLength":524288,"description":"Full text of the Dockerfile. The length limit is in bytes, so characters outside ASCII count for more than one.","examples":["FROM python:3.12\nRUN pip install requests\n"],"isRequired":true,"uniqueKey":"image.oneOf.1.dockerfile.dockerfile","typeLabel":"string"},"context_files":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One file within an `add_local_dir` step or a `dockerfile` build context.","required":["relative_path","content_sha256"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path within the copied directory or build context. No leading or trailing `/`, and no empty, `.`, or `..` segment. The limit is 1024 bytes, and characters outside ASCII count for more than one.","examples":["src/main.py"],"isRequired":true,"uniqueKey":"image.oneOf.1.dockerfile.context_files.items.[INDEX].relative_path","typeLabel":"string"},"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.1.dockerfile.context_files.items.[INDEX].content_sha256","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.1.dockerfile.context_files.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.1.dockerfile.context_files.items.[INDEX]","typeLabel":"object"},"description":"The build context: the files the Dockerfile's `COPY` and `ADD` instructions read. Their contents are uploaded while the image is built. Leave it empty when the Dockerfile copies nothing. Every `relative_path` has to be distinct across files, directories, and symbolic links, and the three lists together may hold at most 50000 entries.","uniqueKey":"image.oneOf.1.dockerfile.context_files","typeLabel":"object[]"},"context_dirs":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One directory within a `dockerfile` build context. Send one for every directory the context contains, including empty ones, so `COPY` of a directory behaves the way it does locally.","required":["relative_path"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path of the directory within the build context. The same rules as a context file's `relative_path`.","examples":["src"],"isRequired":true,"uniqueKey":"image.oneOf.1.dockerfile.context_dirs.items.[INDEX].relative_path","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the directory, as a number. Omit it, or send `0`, for `493` (`rwxr-xr-x`).","uniqueKey":"image.oneOf.1.dockerfile.context_dirs.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.1.dockerfile.context_dirs.items.[INDEX]","typeLabel":"object"},"description":"The build context's directories, empty ones included. A file whose parent directories are not listed still creates them with default permissions.","uniqueKey":"image.oneOf.1.dockerfile.context_dirs","typeLabel":"object[]"},"context_symlinks":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One symbolic link within a `dockerfile` build context. The link is recreated as a link in the staged context, exactly as `docker build` sends one.","required":["relative_path","target"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path of the link within the build context. The same rules as a context file's `relative_path`. No other context entry may sit at or beneath this path.","examples":["current"],"isRequired":true,"uniqueKey":"image.oneOf.1.dockerfile.context_symlinks.items.[INDEX].relative_path","typeLabel":"string"},"target":{"type":"string","minLength":1,"maxLength":1024,"description":"The link's target, exactly as the link stores it. It may be relative or absolute and is resolved only inside the built image, never while staging the context.","examples":["releases/v2"],"isRequired":true,"uniqueKey":"image.oneOf.1.dockerfile.context_symlinks.items.[INDEX].target","typeLabel":"string"}},"uniqueKey":"image.oneOf.1.dockerfile.context_symlinks.items.[INDEX]","typeLabel":"object"},"description":"The build context's symbolic links. No file, directory, or other link may sit at or beneath a link's path.","uniqueKey":"image.oneOf.1.dockerfile.context_symlinks","typeLabel":"object[]"},"pinned_from":{"type":"array","maxItems":25,"items":{"type":"object","additionalProperties":false,"description":"What one image named by a Dockerfile's `FROM` or `COPY --from` resolved to when an image was built.","required":["reference","digest_ref"],"properties":{"reference":{"type":"string","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+(:[a-zA-Z0-9._\\-]+|@sha256:[0-9a-f]{64})?$","description":"The image reference as the Dockerfile names it, fully qualified.","examples":["docker.io/library/python:3.12"],"isRequired":true,"uniqueKey":"image.oneOf.1.dockerfile.pinned_from.items.[INDEX].reference","typeLabel":"string"},"digest_ref":{"type":"string","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+@sha256:[0-9a-f]{64}$","description":"The digest-pinned form of the same reference the build used. It must be in the reference's own repository.","examples":["docker.io/library/python@sha256:0000000000000000000000000000000000000000000000000000000000000000"],"isRequired":true,"uniqueKey":"image.oneOf.1.dockerfile.pinned_from.items.[INDEX].digest_ref","typeLabel":"string"}},"uniqueKey":"image.oneOf.1.dockerfile.pinned_from.items.[INDEX]","typeLabel":"object"},"description":"Digest pins carried from a completed build of this Dockerfile, as its build reported them. When present, the build uses exactly these versions instead of looking the references up, so the spec keeps naming the image that build produced even after a forced build moves your organization's pins. The set must cover exactly the images the Dockerfile names. Leave it out to resolve through your organization's pins; a forced build ignores it.","uniqueKey":"image.oneOf.1.dockerfile.pinned_from","typeLabel":"object[]"},"build_args":{"type":"object","maxProperties":64,"propertyNames":{"pattern":"^(?!BUILDKIT_)[A-Za-z_][A-Za-z0-9_]*$","maxLength":128},"additionalProperties":{"type":"string","maxLength":4096,"pattern":"^[^\\n\\r\\x00]*$","uniqueKey":"image.oneOf.1.dockerfile.build_args.additionalProperties","typeLabel":"string"},"description":"Build arguments, matched to the Dockerfile's `ARG` instructions. A name must start with a letter or `_` and contain only letters, numbers, and `_`; names starting with `BUILDKIT_` are reserved for the build system, and Docker's proxy names (`HTTP_PROXY`, `HTTPS_PROXY`, `FTP_PROXY`, `NO_PROXY`, `ALL_PROXY`, in any letter case) are rejected. Values may not contain newlines or NUL. Name and value limits (128 and 4096) are in bytes, so characters outside ASCII count for more than one.","uniqueKey":"image.oneOf.1.dockerfile.build_args","typeLabel":"object"}},"uniqueKey":"image.oneOf.1.dockerfile","typeLabel":"object"},"build_steps":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"One build step. Set exactly one field per step. Steps run in order.","minProperties":1,"maxProperties":1,"properties":{"apt_install":{"type":"object","additionalProperties":false,"required":["packages"],"properties":{"packages":{"type":"array","minItems":1,"items":{"type":"string","minLength":1,"pattern":"\\S","uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].apt_install.packages.items.[INDEX]","typeLabel":"string"},"description":"Package names to install.","isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].apt_install.packages","typeLabel":"string[]"}},"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].apt_install","typeLabel":"object"},"pip_install":{"type":"object","additionalProperties":false,"required":["packages"],"properties":{"packages":{"type":"array","minItems":1,"items":{"type":"string","minLength":1,"pattern":"\\S","uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].pip_install.packages.items.[INDEX]","typeLabel":"string"},"description":"Package names to install.","isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].pip_install.packages","typeLabel":"string[]"}},"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].pip_install","typeLabel":"object"},"run_command":{"type":"object","additionalProperties":false,"required":["command"],"properties":{"command":{"type":"string","minLength":1,"pattern":"\\S","description":"Shell command to run while building the image.","isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].run_command.command","typeLabel":"string"}},"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].run_command","typeLabel":"object"},"add_local_file":{"type":"object","additionalProperties":false,"description":"Copies one file into the image. Its contents are uploaded while the image is built.","required":["content_sha256","remote_path"],"properties":{"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_file.content_sha256","typeLabel":"string"},"remote_path":{"type":"string","pattern":"^/","description":"Absolute path the file lands on inside the image. No trailing `/` and no `..` segment. A space, `$`, `\"`, or `\\` anywhere in the path is rejected.","examples":["/opt/app/entrypoint.sh"],"isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_file.remote_path","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_file.mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_file","typeLabel":"object"},"add_local_dir":{"type":"object","additionalProperties":false,"description":"Copies a directory of files into the image. Their contents are uploaded while the image is built.","required":["remote_path","files"],"properties":{"remote_path":{"type":"string","pattern":"^/","description":"Absolute directory the files land in inside the image. It cannot be `/`. No trailing `/` and no `..` segment. A space, `$`, `\"`, or `\\` anywhere in the path is rejected.","examples":["/opt/app"],"isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_dir.remote_path","typeLabel":"string"},"files":{"type":"array","minItems":1,"maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One file within an `add_local_dir` step or a `dockerfile` build context.","required":["relative_path","content_sha256"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path within the copied directory or build context. No leading or trailing `/`, and no empty, `.`, or `..` segment. The limit is 1024 bytes, and characters outside ASCII count for more than one.","examples":["src/main.py"],"isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].relative_path","typeLabel":"string"},"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].content_sha256","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX]","typeLabel":"object"},"description":"The files to copy. Every `relative_path` has to be distinct.","isRequired":true,"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_dir.files","typeLabel":"object[]"}},"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX].add_local_dir","typeLabel":"object"}},"uniqueKey":"image.oneOf.1.build_steps.items.[INDEX]","typeLabel":"object"},"description":"Steps applied to the image source, in order.","uniqueKey":"image.oneOf.1.build_steps","typeLabel":"object[]"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","uniqueKey":"image.oneOf.1.env.additionalProperties","typeLabel":"string"},"description":"Environment variables baked into the image and present in every process. A variable name must start with a letter or `_` and contain only letters, numbers, and `_`.","uniqueKey":"image.oneOf.1.env","typeLabel":"object"},"architecture":{"type":"string","enum":["IMAGE_ARCHITECTURE_AMD64","IMAGE_ARCHITECTURE_ARM64"],"description":"CPU architecture to build for. With `base` or `dockerfile`, leaving this unset builds for `IMAGE_ARCHITECTURE_AMD64`. With `oci`, leaving it unset builds for whichever architecture the registry image was built for, and for `IMAGE_ARCHITECTURE_AMD64` when it was built for both. Naming one makes it a requirement: a registry image that was not built for it is rejected.","uniqueKey":"image.oneOf.1.architecture","typeLabel":"enum\u003cstring>"},"python_version":{"type":"string","pattern":"^([0-9]+\\.[0-9]+\\.[0-9]+)?$","description":"Python version to install as `python3`. Give the full patch version, such as `3.12.13`; `3.12` is rejected. Not accepted with `oci` or `dockerfile`: a pinned interpreter would shadow the Python the image was built around.","examples":["3.12.13"],"uniqueKey":"image.oneOf.1.python_version","typeLabel":"string"},"systemd":{"type":"boolean","description":"Run systemd as the init system in Sailboxes created from this image. The build installs systemd before the build steps run, so a step can enable a service with `systemctl enable`. Enabled services start when a Sailbox is created from the image, and one may still be starting when the create request returns. Leaving it unset means the image does not run systemd. `BASE_IMAGE_DEVBOX` always runs systemd, so the field changes nothing there.","uniqueKey":"image.oneOf.1.systemd","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"image.oneOf.1","typeLabel":"object"},{"type":"object","description":"Describes the environment the Sailbox boots into. Start from a Sail base image with `base`, bring your own image from a public registry with `oci`, or build your own Dockerfile with `dockerfile`; give exactly one. A base image on its own is ready to boot. Adding build steps, environment variables, a Python version, or systemd on `BASE_IMAGE_DEBIAN` describes an image that has to be built before a Sailbox can start from it. A registry image or a Dockerfile always has to be built first too. Building an image takes an SDK.","required":["dockerfile"],"properties":{"dockerfile":{"type":"object","additionalProperties":false,"required":["dockerfile"],"description":"Your own Dockerfile built into the Sailbox root filesystem. Sail builds it and layers everything a Sailbox needs on top; build steps and `env` compose on the result like on a base image. Every image a `FROM` or `COPY --from` names must live on a supported public registry: `docker.io`, `ghcr.io`, `public.ecr.aws`, or `quay.io`. Short names work the way Docker reads them, so `python:3.12` means `docker.io/library/python:3.12`. A Dockerfile may name at most 25 distinct external images across its `FROM` and `COPY --from` instructions. The image the Dockerfile produces must be Debian- or Ubuntu-based. Its environment variables, working directory, and `USER` become the defaults for commands run in the Sailbox, and its `ENTRYPOINT` and `CMD` are not run. Multi-stage Dockerfiles work. A `RUN --mount` of type `cache`, `secret`, or `ssh` is rejected; `tmpfs` mounts work, and `bind` mounts work when they read from the build context or another build stage. Mount options must be literal text, and `ONBUILD` is not supported, in the Dockerfile or in an image a `FROM` names. Each image a `FROM` or `COPY --from` names is pinned to the version its tag pointed at on your organization's first use, and later builds keep using it after the tag moves; use `force_build` in an SDK to look tags up again.","properties":{"dockerfile":{"type":"string","minLength":1,"pattern":"\\S","maxLength":524288,"description":"Full text of the Dockerfile. The length limit is in bytes, so characters outside ASCII count for more than one.","examples":["FROM python:3.12\nRUN pip install requests\n"],"isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile.dockerfile","typeLabel":"string"},"context_files":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One file within an `add_local_dir` step or a `dockerfile` build context.","required":["relative_path","content_sha256"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path within the copied directory or build context. No leading or trailing `/`, and no empty, `.`, or `..` segment. The limit is 1024 bytes, and characters outside ASCII count for more than one.","examples":["src/main.py"],"isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile.context_files.items.[INDEX].relative_path","typeLabel":"string"},"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile.context_files.items.[INDEX].content_sha256","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.2.dockerfile.context_files.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.2.dockerfile.context_files.items.[INDEX]","typeLabel":"object"},"description":"The build context: the files the Dockerfile's `COPY` and `ADD` instructions read. Their contents are uploaded while the image is built. Leave it empty when the Dockerfile copies nothing. Every `relative_path` has to be distinct across files, directories, and symbolic links, and the three lists together may hold at most 50000 entries.","uniqueKey":"image.oneOf.2.dockerfile.context_files","typeLabel":"object[]"},"context_dirs":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One directory within a `dockerfile` build context. Send one for every directory the context contains, including empty ones, so `COPY` of a directory behaves the way it does locally.","required":["relative_path"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path of the directory within the build context. The same rules as a context file's `relative_path`.","examples":["src"],"isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile.context_dirs.items.[INDEX].relative_path","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the directory, as a number. Omit it, or send `0`, for `493` (`rwxr-xr-x`).","uniqueKey":"image.oneOf.2.dockerfile.context_dirs.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.2.dockerfile.context_dirs.items.[INDEX]","typeLabel":"object"},"description":"The build context's directories, empty ones included. A file whose parent directories are not listed still creates them with default permissions.","uniqueKey":"image.oneOf.2.dockerfile.context_dirs","typeLabel":"object[]"},"context_symlinks":{"type":"array","maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One symbolic link within a `dockerfile` build context. The link is recreated as a link in the staged context, exactly as `docker build` sends one.","required":["relative_path","target"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path of the link within the build context. The same rules as a context file's `relative_path`. No other context entry may sit at or beneath this path.","examples":["current"],"isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile.context_symlinks.items.[INDEX].relative_path","typeLabel":"string"},"target":{"type":"string","minLength":1,"maxLength":1024,"description":"The link's target, exactly as the link stores it. It may be relative or absolute and is resolved only inside the built image, never while staging the context.","examples":["releases/v2"],"isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile.context_symlinks.items.[INDEX].target","typeLabel":"string"}},"uniqueKey":"image.oneOf.2.dockerfile.context_symlinks.items.[INDEX]","typeLabel":"object"},"description":"The build context's symbolic links. No file, directory, or other link may sit at or beneath a link's path.","uniqueKey":"image.oneOf.2.dockerfile.context_symlinks","typeLabel":"object[]"},"pinned_from":{"type":"array","maxItems":25,"items":{"type":"object","additionalProperties":false,"description":"What one image named by a Dockerfile's `FROM` or `COPY --from` resolved to when an image was built.","required":["reference","digest_ref"],"properties":{"reference":{"type":"string","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+(:[a-zA-Z0-9._\\-]+|@sha256:[0-9a-f]{64})?$","description":"The image reference as the Dockerfile names it, fully qualified.","examples":["docker.io/library/python:3.12"],"isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile.pinned_from.items.[INDEX].reference","typeLabel":"string"},"digest_ref":{"type":"string","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+@sha256:[0-9a-f]{64}$","description":"The digest-pinned form of the same reference the build used. It must be in the reference's own repository.","examples":["docker.io/library/python@sha256:0000000000000000000000000000000000000000000000000000000000000000"],"isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile.pinned_from.items.[INDEX].digest_ref","typeLabel":"string"}},"uniqueKey":"image.oneOf.2.dockerfile.pinned_from.items.[INDEX]","typeLabel":"object"},"description":"Digest pins carried from a completed build of this Dockerfile, as its build reported them. When present, the build uses exactly these versions instead of looking the references up, so the spec keeps naming the image that build produced even after a forced build moves your organization's pins. The set must cover exactly the images the Dockerfile names. Leave it out to resolve through your organization's pins; a forced build ignores it.","uniqueKey":"image.oneOf.2.dockerfile.pinned_from","typeLabel":"object[]"},"build_args":{"type":"object","maxProperties":64,"propertyNames":{"pattern":"^(?!BUILDKIT_)[A-Za-z_][A-Za-z0-9_]*$","maxLength":128},"additionalProperties":{"type":"string","maxLength":4096,"pattern":"^[^\\n\\r\\x00]*$","uniqueKey":"image.oneOf.2.dockerfile.build_args.additionalProperties","typeLabel":"string"},"description":"Build arguments, matched to the Dockerfile's `ARG` instructions. A name must start with a letter or `_` and contain only letters, numbers, and `_`; names starting with `BUILDKIT_` are reserved for the build system, and Docker's proxy names (`HTTP_PROXY`, `HTTPS_PROXY`, `FTP_PROXY`, `NO_PROXY`, `ALL_PROXY`, in any letter case) are rejected. Values may not contain newlines or NUL. Name and value limits (128 and 4096) are in bytes, so characters outside ASCII count for more than one.","uniqueKey":"image.oneOf.2.dockerfile.build_args","typeLabel":"object"}},"isRequired":true,"uniqueKey":"image.oneOf.2.dockerfile","typeLabel":"object"},"base":{"type":"string","enum":["BASE_IMAGE_DEBIAN","BASE_IMAGE_DEVBOX"],"description":"Starting point for the image. `BASE_IMAGE_DEBIAN` is a plain Debian base you can build on. `BASE_IMAGE_DEVBOX` is a prebuilt development environment that accepts no build steps, environment variables, or Python version. It runs systemd, which starts Docker when the Sailbox boots and restarts it if it crashes. Docker keeps running across sleeps and can take a few seconds to accept commands right after boot.","uniqueKey":"image.oneOf.2.base","typeLabel":"enum\u003cstring>"},"oci":{"type":"object","additionalProperties":false,"required":["ref"],"description":"Your own image as the Sailbox root filesystem. Sail pulls the image and layers everything a Sailbox needs on top; build steps and `env` compose on it like on a base image. The image must be Debian- or Ubuntu-based. Its environment variables, working directory, and `USER` become the defaults for commands run in the Sailbox, and its `ENTRYPOINT` and `CMD` are not run.","properties":{"ref":{"type":"string","description":"Image reference on a supported public registry: `docker.io`, `ghcr.io`, `public.ecr.aws`, or `quay.io`, written out in full. Pass a tag, a `@sha256:...` digest, or just the name, which means the `latest` tag. A tag is pinned for your organization once an image has been built from it: later builds keep getting that version, even if the tag moves upstream. Use `force_build` in an SDK to look the tag up again and move the pin for your whole organization. A digest names exactly one image, so it never moves.","maxLength":512,"pattern":"^[a-z0-9.\\-]+(/[a-zA-Z0-9._\\-]+)+(:[a-zA-Z0-9._\\-]+|@sha256:[0-9a-f]{64})?$","examples":["docker.io/library/python:3.13"],"isRequired":true,"uniqueKey":"image.oneOf.2.oci.ref","typeLabel":"string"}},"uniqueKey":"image.oneOf.2.oci","typeLabel":"object"},"build_steps":{"type":"array","items":{"type":"object","additionalProperties":false,"description":"One build step. Set exactly one field per step. Steps run in order.","minProperties":1,"maxProperties":1,"properties":{"apt_install":{"type":"object","additionalProperties":false,"required":["packages"],"properties":{"packages":{"type":"array","minItems":1,"items":{"type":"string","minLength":1,"pattern":"\\S","uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].apt_install.packages.items.[INDEX]","typeLabel":"string"},"description":"Package names to install.","isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].apt_install.packages","typeLabel":"string[]"}},"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].apt_install","typeLabel":"object"},"pip_install":{"type":"object","additionalProperties":false,"required":["packages"],"properties":{"packages":{"type":"array","minItems":1,"items":{"type":"string","minLength":1,"pattern":"\\S","uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].pip_install.packages.items.[INDEX]","typeLabel":"string"},"description":"Package names to install.","isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].pip_install.packages","typeLabel":"string[]"}},"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].pip_install","typeLabel":"object"},"run_command":{"type":"object","additionalProperties":false,"required":["command"],"properties":{"command":{"type":"string","minLength":1,"pattern":"\\S","description":"Shell command to run while building the image.","isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].run_command.command","typeLabel":"string"}},"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].run_command","typeLabel":"object"},"add_local_file":{"type":"object","additionalProperties":false,"description":"Copies one file into the image. Its contents are uploaded while the image is built.","required":["content_sha256","remote_path"],"properties":{"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_file.content_sha256","typeLabel":"string"},"remote_path":{"type":"string","pattern":"^/","description":"Absolute path the file lands on inside the image. No trailing `/` and no `..` segment. A space, `$`, `\"`, or `\\` anywhere in the path is rejected.","examples":["/opt/app/entrypoint.sh"],"isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_file.remote_path","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_file.mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_file","typeLabel":"object"},"add_local_dir":{"type":"object","additionalProperties":false,"description":"Copies a directory of files into the image. Their contents are uploaded while the image is built.","required":["remote_path","files"],"properties":{"remote_path":{"type":"string","pattern":"^/","description":"Absolute directory the files land in inside the image. It cannot be `/`. No trailing `/` and no `..` segment. A space, `$`, `\"`, or `\\` anywhere in the path is rejected.","examples":["/opt/app"],"isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_dir.remote_path","typeLabel":"string"},"files":{"type":"array","minItems":1,"maxItems":50000,"items":{"type":"object","additionalProperties":false,"description":"One file within an `add_local_dir` step or a `dockerfile` build context.","required":["relative_path","content_sha256"],"properties":{"relative_path":{"type":"string","maxLength":1024,"pattern":"^[^/]","description":"Path within the copied directory or build context. No leading or trailing `/`, and no empty, `.`, or `..` segment. The limit is 1024 bytes, and characters outside ASCII count for more than one.","examples":["src/main.py"],"isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].relative_path","typeLabel":"string"},"content_sha256":{"type":"string","pattern":"^[0-9a-f]{64}$","description":"SHA-256 of the file contents, lowercase hex.","isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].content_sha256","typeLabel":"string"},"mode":{"type":"integer","minimum":0,"maximum":511,"description":"Permission bits for the file, as a number. `493` is `rwxr-xr-x`. Omit it, or send `0`, for `420` (`rw-r--r--`).","uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX].mode","typeLabel":"integer"}},"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_dir.files.items.[INDEX]","typeLabel":"object"},"description":"The files to copy. Every `relative_path` has to be distinct.","isRequired":true,"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_dir.files","typeLabel":"object[]"}},"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX].add_local_dir","typeLabel":"object"}},"uniqueKey":"image.oneOf.2.build_steps.items.[INDEX]","typeLabel":"object"},"description":"Steps applied to the image source, in order.","uniqueKey":"image.oneOf.2.build_steps","typeLabel":"object[]"},"env":{"type":"object","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$"},"additionalProperties":{"type":"string","uniqueKey":"image.oneOf.2.env.additionalProperties","typeLabel":"string"},"description":"Environment variables baked into the image and present in every process. A variable name must start with a letter or `_` and contain only letters, numbers, and `_`.","uniqueKey":"image.oneOf.2.env","typeLabel":"object"},"architecture":{"type":"string","enum":["IMAGE_ARCHITECTURE_AMD64","IMAGE_ARCHITECTURE_ARM64"],"description":"CPU architecture to build for. With `base` or `dockerfile`, leaving this unset builds for `IMAGE_ARCHITECTURE_AMD64`. With `oci`, leaving it unset builds for whichever architecture the registry image was built for, and for `IMAGE_ARCHITECTURE_AMD64` when it was built for both. Naming one makes it a requirement: a registry image that was not built for it is rejected.","uniqueKey":"image.oneOf.2.architecture","typeLabel":"enum\u003cstring>"},"python_version":{"type":"string","pattern":"^([0-9]+\\.[0-9]+\\.[0-9]+)?$","description":"Python version to install as `python3`. Give the full patch version, such as `3.12.13`; `3.12` is rejected. Not accepted with `oci` or `dockerfile`: a pinned interpreter would shadow the Python the image was built around.","examples":["3.12.13"],"uniqueKey":"image.oneOf.2.python_version","typeLabel":"string"},"systemd":{"type":"boolean","description":"Run systemd as the init system in Sailboxes created from this image. The build installs systemd before the build steps run, so a step can enable a service with `systemctl enable`. Enabled services start when a Sailbox is created from the image, and one may still be starting when the create request returns. Leaving it unset means the image does not run systemd. `BASE_IMAGE_DEVBOX` always runs systemd, so the field changes nothing there.","uniqueKey":"image.oneOf.2.systemd","typeLabel":"boolean"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"image.oneOf.2","typeLabel":"object"}],"isRequired":true,"uniqueKey":"image","typeLabel":"object"},"max_lifetime_seconds":{"oneOf":[{"type":"integer","minimum":1,"maximum":4294967295,"description":"Terminate this Sailbox after this many wall-clock seconds from creation, including time spent waiting for capacity, sleeping, or paused. Image preparation happens before creation. Omit or pass null for unlimited lifetime. The deadline cannot be extended. Expiration is checked periodically, so termination can occur after the deadline. A new Sailbox started from a checkpoint gets its own limit; it does not inherit the source Sailbox's deadline.","uniqueKey":"max_lifetime_seconds.oneOf.0","typeLabel":"integer"},{"type":"null","minimum":1,"maximum":4294967295,"description":"Terminate this Sailbox after this many wall-clock seconds from creation, including time spent waiting for capacity, sleeping, or paused. Image preparation happens before creation. Omit or pass null for unlimited lifetime. The deadline cannot be extended. Expiration is checked periodically, so termination can occur after the deadline. A new Sailbox started from a checkpoint gets its own limit; it does not inherit the source Sailbox's deadline.","uniqueKey":"max_lifetime_seconds.oneOf.1","typeLabel":"null"}],"uniqueKey":"max_lifetime_seconds","typeLabel":"integer | null"},"vcpu_count":{"oneOf":[{"type":"integer","description":"Virtual CPUs, 1 to 8. Omit it for 8.","const":0,"uniqueKey":"vcpu_count.oneOf.0","typeLabel":"integer"},{"type":"integer","description":"Virtual CPUs, 1 to 8. Omit it for 8.","maximum":8,"minimum":1,"uniqueKey":"vcpu_count.oneOf.1","typeLabel":"integer"}],"uniqueKey":"vcpu_count","typeLabel":"integer"},"size":{"type":"string","enum":["s","m","l",""],"deprecated":true,"description":"Deprecated; set `vcpu_count` instead. `s` stands for 1 vCPU, `m` for 4, and `l` for 8, and a limit left out takes the value the size used to carry. Sizes will be unsupported in future SDK versions.","uniqueKey":"size","typeLabel":"enum\u003cstring>"},"memory_limit_gib":{"oneOf":[{"type":"integer","description":"Memory limit in GiB, up to 256. The minimum follows the vCPU count: 2 with 1 vCPU, 8 with 2 to 4, and 16 with 5 to 8. Omit it for 256.","const":0,"uniqueKey":"memory_limit_gib.oneOf.0","typeLabel":"integer"},{"type":"integer","description":"Memory limit in GiB, up to 256. The minimum follows the vCPU count: 2 with 1 vCPU, 8 with 2 to 4, and 16 with 5 to 8. Omit it for 256.","maximum":256,"minimum":2,"uniqueKey":"memory_limit_gib.oneOf.1","typeLabel":"integer"}],"uniqueKey":"memory_limit_gib","typeLabel":"integer"},"state_disk_limit_gib":{"oneOf":[{"type":"integer","description":"Disk limit in GiB, 8 to 1024. Omit it for 1024.","const":0,"uniqueKey":"state_disk_limit_gib.oneOf.0","typeLabel":"integer"},{"type":"integer","description":"Disk limit in GiB, 8 to 1024. Omit it for 1024.","maximum":1024,"minimum":8,"uniqueKey":"state_disk_limit_gib.oneOf.1","typeLabel":"integer"}],"uniqueKey":"state_disk_limit_gib","typeLabel":"integer"},"ingress_ports":{"type":"array","items":{"type":"object","required":["guest_port"],"properties":{"guest_port":{"type":"integer","minimum":1,"maximum":65535,"description":"Port your process listens on inside the Sailbox. Ports 10000, 10001, 15001, and 15002 are reserved and cannot be published on any protocol. Port 22 is reserved on `http` and available on `tcp`, which is what SSH needs.\n\nA guest port can have a `tcp` listener and a `udp` listener at once. They share one public host and port, and each has its own allowlist. Publishing a port again under the same protocol replaces that listener's allowlist. Publishing `http` on a port with a `tcp` or `udp` listener, or the reverse, is refused.","isRequired":true,"uniqueKey":"ingress_ports.items.[INDEX].guest_port","typeLabel":"integer"},"protocol":{"type":"string","enum":["http","tcp","udp",""],"default":"http","description":"`http` publishes an HTTPS URL. `tcp` publishes a host and port for raw TCP, which is what SSH and database clients need. `udp` publishes a host and port for raw UDP. See [UDP ports](https://docs.sailresearch.com/sailboxes-access-control#udp-ports).","uniqueKey":"ingress_ports.items.[INDEX].protocol","typeLabel":"enum\u003cstring>"},"allowlist":{"type":"array","items":{"type":"string","uniqueKey":"ingress_ports.items.[INDEX].allowlist.items.[INDEX]","typeLabel":"string"},"description":"Restricts who can reach the listener. An address or a range, such as `203.0.113.0/24`, lets matching source IPs in, and works on every protocol. An app name, which lets Sailboxes in that app call this one, works on `http` only and is rejected on `tcp` and `udp`.\n\nAn app name must not look like an address or a range, and must not contain a `/`. Every entry that reads as an address or a range is taken as one, and any other entry holding a `/` is refused as a malformed range. An address must not carry an IPv6 zone, such as `fe80::1%eth0`, which names an interface on one machine rather than a source.\n\nEntries come back canonicalized: a range is reported by its network address, a bare address as a single-address range, and blank or repeated entries are dropped.\n\nLeaving it empty makes the listener reachable by anyone who has the address. That is refused on a `tcp` listener for a well-known unauthenticated service port such as 5432 or 6379, and on a `udp` listener for a well-known amplification port such as 53 or 123: publish those with an explicit allowlist, using `0.0.0.0/0` and `::/0` if you do want the whole internet.","uniqueKey":"ingress_ports.items.[INDEX].allowlist","typeLabel":"string[]"}},"uniqueKey":"ingress_ports.items.[INDEX]","typeLabel":"object"},"description":"Ports to publish. You can also publish ports later without restarting.","uniqueKey":"ingress_ports","typeLabel":"object[]"},"volume_mounts":{"type":"array","items":{"type":"object","required":["volume_id","mount_path"],"properties":{"volume_id":{"type":"string","minLength":1,"pattern":"\\S","description":"Id of a volume you created earlier.","isRequired":true,"uniqueKey":"volume_mounts.items.[INDEX].volume_id","typeLabel":"string"},"mount_path":{"type":"string","pattern":"^\\s*/.","description":"Absolute path inside the Sailbox where the volume appears. Repeated slashes and `.`/`..` segments are resolved first, and the result cannot be `/`. Two mounts in one request cannot nest inside each other. A new mount requires an absent or empty directory, including in the image. See the [volume guide](https://docs.sailresearch.com/sailbox-sdk#volumes).","examples":["/mnt/shared"],"isRequired":true,"uniqueKey":"volume_mounts.items.[INDEX].mount_path","typeLabel":"string"},"read_only":{"type":"boolean","default":false,"description":"Mount the volume read-only, fixed for the Sailbox's life. Writes through the mount fail with `EROFS`, even as root. One Sailbox cannot mount the same volume both read-only and writable. See [Volumes](/sailbox-sdk#volumes).","uniqueKey":"volume_mounts.items.[INDEX].read_only","typeLabel":"boolean"},"cache_seconds":{"type":"integer","minimum":0,"maximum":3600,"default":0,"description":"How long, in seconds, this mount may reuse what it has already read about the volume before checking for changes. Files and their contents on this mount can lag changes made through other mounts by up to about twice this value. Only time the Sailbox is running counts, so after it resumes from being paused or asleep the mount can show older files for as long as was left when it stopped. After more than a day paused or asleep, reading a file that changed in the meantime can fail for that same remaining time. Longer values make repeated reads faster. Requires `read_only: true`. The default, 0, picks up changes within about a second.","uniqueKey":"volume_mounts.items.[INDEX].cache_seconds","typeLabel":"integer"}},"uniqueKey":"volume_mounts.items.[INDEX]","typeLabel":"object"},"description":"Volumes to mount into the Sailbox. A Sailbox can mount at most four volumes; one volume at several paths counts once.","uniqueKey":"volume_mounts","typeLabel":"object[]"},"visibility":{"type":"string","enum":["org","private",""],"default":"org","description":"`org` lets anyone in your organization operate the Sailbox. `private` restricts that to the user whose key created it, so it needs a user-scoped key. An organization admin can still pause, resume, sleep, schedule a wake, upgrade, reboot, set limits, or terminate it by sending `X-Sail-Owner-Override-Reason`.","uniqueKey":"visibility","typeLabel":"enum\u003cstring>"},"env":{"type":"object","maxProperties":100,"propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]{0,127}$"},"additionalProperties":{"type":"string","maxLength":4096,"uniqueKey":"env.additionalProperties","typeLabel":"string"},"description":"Environment variables for every command in the Sailbox. They override the image's variables. A variable set for one command overrides them, and so does a variable of the same name in the egress policy's `env`. They cannot change after create, and a Sailbox forked or started from a checkpoint keeps them. Names cannot start with `SAILBOX_`, and values cannot hold control characters. Values are not secret: anyone who can run commands in the Sailbox can read them. Give a Sailbox a secret with the `env` of its egress policy. https://docs.sailresearch.com/sailbox-sdk#create-env","uniqueKey":"env","typeLabel":"object"},"auto_sleep":{"type":"object","description":"Automatic-sleep preference for the new Sailbox. Omit it to let Sail sleep the Sailbox automatically with its default wait. You can change it later with `POST /sailboxes/{sailbox_id}/auto_sleep`.","properties":{"automatic":{"type":"boolean","default":true,"description":"`true` lets Sail sleep the Sailbox automatically when that is safe, which is the default. `false` turns automatic sleeping off. Omitting it when you write means `true`. Reads always include it.","uniqueKey":"auto_sleep.automatic","typeLabel":"boolean"},"min_seconds_before_sleep":{"type":"integer","minimum":0,"maximum":3600,"description":"The idle window to use instead of Sail's default. Whole-second values from 1 through 3600 are accepted; 0 restores Sail's default, and other numeric values are rejected. Once the window passes, Sail may sleep the Sailbox only when it is fully idle. Send it only with `automatic: true`; sent alongside `automatic: false` the request is rejected, because a caller who meant to set a wait would otherwise have silently turned automatic sleeping off. Reads leave it out when Sail's default is in effect.","examples":[30,300],"uniqueKey":"auto_sleep.min_seconds_before_sleep","typeLabel":"integer"}},"uniqueKey":"auto_sleep","typeLabel":"object"},"egress_policy":{"oneOf":[{"type":"string","description":"Which hosts the new Sailbox may connect to and what happens to the HTTPS requests it sends: the id of a saved egress policy, or a policy document written inline. Omit it to allow every host. An inline document cannot use secrets; save it as a policy first. `\"no_network\": true` cannot be combined with `ingress_ports`. A Sailbox created from a checkpoint keeps the policy of the one it came from. Change the policy later with `PUT /sailboxes/{sailbox_id}/egress-policy`.","pattern":"^(?:ep|hp)_[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","uniqueKey":"egress_policy.oneOf.0","typeLabel":"string"},{"type":"object","description":"Which hosts the new Sailbox may connect to and what happens to the HTTPS requests it sends: the id of a saved egress policy, or a policy document written inline. Omit it to allow every host. An inline document cannot use secrets; save it as a policy first. `\"no_network\": true` cannot be combined with `ingress_ports`. A Sailbox created from a checkpoint keeps the policy of the one it came from. Change the policy later with `PUT /sailboxes/{sailbox_id}/egress-policy`.","properties":{"no_network":{"type":"boolean","description":"Remove all network access, inbound included; no other field may be set beside it. Leave it out (or send `false`) otherwise. https://docs.sailresearch.com/reference/egress-policy#no-network","uniqueKey":"egress_policy.oneOf.1.no_network","typeLabel":"boolean"},"allowlist":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"egress_policy.oneOf.1.allowlist.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"The destinations the Sailbox may connect to. Leave it out (or send `null`) to allow every destination; an empty list allows none. https://docs.sailresearch.com/reference/egress-policy#entries","maxItems":128,"uniqueKey":"egress_policy.oneOf.1.allowlist.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"The destinations the Sailbox may connect to. Leave it out (or send `null`) to allow every destination; an empty list allows none. https://docs.sailresearch.com/reference/egress-policy#entries","uniqueKey":"egress_policy.oneOf.1.allowlist.oneOf.1","typeLabel":"null"}],"uniqueKey":"egress_policy.oneOf.1.allowlist","typeLabel":"string[] | null"},"blocked":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"egress_policy.oneOf.1.blocked.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Destinations removed from what the Sailbox may otherwise reach. Leave it out, or send `null` or `[]`, to block nothing. https://docs.sailresearch.com/reference/egress-policy#blocked","maxItems":128,"uniqueKey":"egress_policy.oneOf.1.blocked.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"Destinations removed from what the Sailbox may otherwise reach. Leave it out, or send `null` or `[]`, to block nothing. https://docs.sailresearch.com/reference/egress-policy#blocked","uniqueKey":"egress_policy.oneOf.1.blocked.oneOf.1","typeLabel":"null"}],"uniqueKey":"egress_policy.oneOf.1.blocked","typeLabel":"string[] | null"},"rules":{"type":"object","maxProperties":100,"propertyNames":{"pattern":"^[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:\\*(?:\\.(?![0-9A-Za-z.\\u0130\\u212A-]{254})[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?(?:\\.[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?)*)?|(?![0-9A-Za-z.\\u0130\\u212A-]{254})[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?(?:\\.[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?)*)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","additionalProperties":false,"description":"One rule. Rules run in order and the first match decides the result. Only the last rule may omit `match`. Use `respond` by itself, or combine `forward` and `request` as needed.","properties":{"match":{"oneOf":[{"type":"object","description":"Conditions tested against the request before any changes are made. At least one condition is required.","required":["method"],"properties":{"method":{"oneOf":[{"type":"string","description":"One or more case-sensitive HTTP methods, such as `GET`, as a single string or a nonempty list of strings.","maxLength":4096,"pattern":"^[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~]+$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.method.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~]+$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.method.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One or more case-sensitive HTTP methods, such as `GET`, as a single string or a nonempty list of strings.","minItems":1,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.method.oneOf.1","typeLabel":"string[]"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.method","typeLabel":"string | string[]"},"path":{"oneOf":[{"type":"string","description":"Matches an absolute request path. Each value must start with `/`.","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.path","typeLabel":"string · object · object · object"},"headers":{"type":"array","maxItems":100,"items":{"oneOf":[{"type":"object","minProperties":1,"required":["name"],"properties":{"name":{"oneOf":[{"type":"string","description":"Matches the header name.","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the header name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.name","typeLabel":"string · object · object · object"},"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.value","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","minProperties":1,"required":["value"],"properties":{"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.value","typeLabel":"string · object · object · object"},"name":{"oneOf":[{"type":"string","description":"Matches the header name.","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the header name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.name","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers.items.[INDEX]","typeLabel":"object"},"description":"Header conditions. Every entry must match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.headers","typeLabel":"object[]"},"query":{"type":"array","maxItems":100,"items":{"oneOf":[{"type":"object","minProperties":1,"required":["name"],"properties":{"name":{"oneOf":[{"type":"string","description":"Matches the query parameter name.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the query parameter name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.name","typeLabel":"string · object · object · object"},"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.value","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","minProperties":1,"required":["value"],"properties":{"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.value","typeLabel":"string · object · object · object"},"name":{"oneOf":[{"type":"string","description":"Matches the query parameter name.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the query parameter name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.name","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query.items.[INDEX]","typeLabel":"object"},"description":"Query parameter conditions. Every entry must match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0.query","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.0","typeLabel":"object"},{"type":"object","description":"Conditions tested against the request before any changes are made. At least one condition is required.","required":["path"],"properties":{"path":{"oneOf":[{"type":"string","description":"Matches an absolute request path. Each value must start with `/`.","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.path","typeLabel":"string · object · object · object"},"method":{"oneOf":[{"type":"string","description":"One or more case-sensitive HTTP methods, such as `GET`, as a single string or a nonempty list of strings.","maxLength":4096,"pattern":"^[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~]+$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.method.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~]+$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.method.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One or more case-sensitive HTTP methods, such as `GET`, as a single string or a nonempty list of strings.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.method.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.method","typeLabel":"string | string[]"},"headers":{"type":"array","maxItems":100,"items":{"oneOf":[{"type":"object","minProperties":1,"required":["name"],"properties":{"name":{"oneOf":[{"type":"string","description":"Matches the header name.","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the header name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.name","typeLabel":"string · object · object · object"},"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.value","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","minProperties":1,"required":["value"],"properties":{"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.value","typeLabel":"string · object · object · object"},"name":{"oneOf":[{"type":"string","description":"Matches the header name.","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the header name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.name","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers.items.[INDEX]","typeLabel":"object"},"description":"Header conditions. Every entry must match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.headers","typeLabel":"object[]"},"query":{"type":"array","maxItems":100,"items":{"oneOf":[{"type":"object","minProperties":1,"required":["name"],"properties":{"name":{"oneOf":[{"type":"string","description":"Matches the query parameter name.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the query parameter name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.name","typeLabel":"string · object · object · object"},"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.value","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","minProperties":1,"required":["value"],"properties":{"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.value","typeLabel":"string · object · object · object"},"name":{"oneOf":[{"type":"string","description":"Matches the query parameter name.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the query parameter name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.name","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query.items.[INDEX]","typeLabel":"object"},"description":"Query parameter conditions. Every entry must match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1.query","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.1","typeLabel":"object"},{"type":"object","description":"Conditions tested against the request before any changes are made. At least one condition is required.","required":["headers"],"properties":{"headers":{"type":"array","items":{"oneOf":[{"type":"object","minProperties":1,"required":["name"],"properties":{"name":{"oneOf":[{"type":"string","description":"Matches the header name.","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the header name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.name","typeLabel":"string · object · object · object"},"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.value","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","minProperties":1,"required":["value"],"properties":{"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.value","typeLabel":"string · object · object · object"},"name":{"oneOf":[{"type":"string","description":"Matches the header name.","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the header name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.name","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers.items.[INDEX]","typeLabel":"object"},"description":"Header conditions. Every entry must match.","maxItems":100,"minItems":1,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.headers","typeLabel":"object[]"},"method":{"oneOf":[{"type":"string","description":"One or more case-sensitive HTTP methods, such as `GET`, as a single string or a nonempty list of strings.","maxLength":4096,"pattern":"^[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~]+$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.method.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~]+$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.method.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One or more case-sensitive HTTP methods, such as `GET`, as a single string or a nonempty list of strings.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.method.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.method","typeLabel":"string | string[]"},"path":{"oneOf":[{"type":"string","description":"Matches an absolute request path. Each value must start with `/`.","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.path","typeLabel":"string · object · object · object"},"query":{"type":"array","maxItems":100,"items":{"oneOf":[{"type":"object","minProperties":1,"required":["name"],"properties":{"name":{"oneOf":[{"type":"string","description":"Matches the query parameter name.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the query parameter name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.name","typeLabel":"string · object · object · object"},"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.value","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","minProperties":1,"required":["value"],"properties":{"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.value","typeLabel":"string · object · object · object"},"name":{"oneOf":[{"type":"string","description":"Matches the query parameter name.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the query parameter name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.name","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query.items.[INDEX]","typeLabel":"object"},"description":"Query parameter conditions. Every entry must match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2.query","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.2","typeLabel":"object"},{"type":"object","description":"Conditions tested against the request before any changes are made. At least one condition is required.","required":["query"],"properties":{"query":{"type":"array","items":{"oneOf":[{"type":"object","minProperties":1,"required":["name"],"properties":{"name":{"oneOf":[{"type":"string","description":"Matches the query parameter name.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the query parameter name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.name","typeLabel":"string · object · object · object"},"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.value","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","minProperties":1,"required":["value"],"properties":{"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.value","typeLabel":"string · object · object · object"},"name":{"oneOf":[{"type":"string","description":"Matches the query parameter name.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the query parameter name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the query parameter name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.name","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query.items.[INDEX]","typeLabel":"object"},"description":"Query parameter conditions. Every entry must match.","maxItems":100,"minItems":1,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.query","typeLabel":"object[]"},"method":{"oneOf":[{"type":"string","description":"One or more case-sensitive HTTP methods, such as `GET`, as a single string or a nonempty list of strings.","maxLength":4096,"pattern":"^[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~]+$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.method.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~]+$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.method.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One or more case-sensitive HTTP methods, such as `GET`, as a single string or a nonempty list of strings.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.method.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.method","typeLabel":"string | string[]"},"path":{"oneOf":[{"type":"string","description":"Matches an absolute request path. Each value must start with `/`.","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches an absolute request path. Each value must start with `/`.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.path","typeLabel":"string · object · object · object"},"headers":{"type":"array","maxItems":100,"items":{"oneOf":[{"type":"object","minProperties":1,"required":["name"],"properties":{"name":{"oneOf":[{"type":"string","description":"Matches the header name.","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the header name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.name","typeLabel":"string · object · object · object"},"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.value","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","minProperties":1,"required":["value"],"properties":{"value":{"oneOf":[{"type":"string","description":"Matches its value.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches its value.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches its value.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value.oneOf.3","typeLabel":"object"}],"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.value","typeLabel":"string · object · object · object"},"name":{"oneOf":[{"type":"string","description":"Matches the header name.","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name.oneOf.0","typeLabel":"string"},{"type":"object","description":"Matches the header name.","required":["equals"],"properties":{"equals":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name.oneOf.1.equals","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name.oneOf.1","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["prefix"],"properties":{"prefix":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name.oneOf.2.prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name.oneOf.2","typeLabel":"object"},{"type":"object","description":"Matches the header name.","required":["one_of"],"properties":{"one_of":{"type":"array","minItems":1,"items":{"type":"string","maxLength":4096,"pattern":"^(?!(?:[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg])$)(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name.oneOf.3.one_of.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name.oneOf.3.one_of","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.name","typeLabel":"string · object · object · object"},"present":{"type":"boolean","description":"Set to `false` with `name` to match when that name is absent. When omitted or true, each name or value condition you provide must be present and match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1.present","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX].oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers.items.[INDEX]","typeLabel":"object"},"description":"Header conditions. Every entry must match.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3.headers","typeLabel":"object[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match.oneOf.3","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].match","typeLabel":"object"},"respond":{"type":"object","description":"A response Sail returns in place of the destination. The request is not sent on.","required":["status"],"properties":{"status":{"type":"integer","minimum":200,"maximum":599,"description":"HTTP status code to return.","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].respond.status","typeLabel":"integer"},"headers":{"type":"object","propertyNames":{"pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$(?!\\{))*|(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].respond.headers.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$(?!\\{))*|(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].respond.headers.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].respond.headers.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].respond.headers.additionalProperties","typeLabel":"string | string[]"},"description":"Headers to return. Secret references are not allowed here. Sail-managed headers such as `host` and `content-length` cannot be set, and a header name is at most 128 characters.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].respond.headers","typeLabel":"object"},"body":{"type":"string","maxLength":65536,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","description":"Response body, up to 64 KiB as UTF-8. Secret references are not allowed here.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].respond.body","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].respond","typeLabel":"object"},"forward":{"type":"object","additionalProperties":false,"required":["host"],"description":"Another HTTPS host to send the request to.","properties":{"host":{"type":"string","pattern":"^[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?![0-9A-Za-z.\\u0130\\u212A-]{254})[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?(?:\\.[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?)*[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$","description":"Exact hostname, without a scheme, port, or wildcard. At most 253 characters after surrounding whitespace is trimmed.","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].forward.host","typeLabel":"string"},"port":{"type":"integer","minimum":0,"maximum":65535,"description":"HTTPS port. Omit it, or send `0`, to use 443.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].forward.port","typeLabel":"integer"}},"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].forward","typeLabel":"object"},"request":{"type":"object","additionalProperties":false,"minProperties":1,"description":"Changes to make before sending the request. A header, query parameter, path, or body field can be targeted only once in a rule, and a rule edits a JSON body or a form body, not both.","properties":{"set":{"oneOf":[{"type":"object","description":"Values to replace or create. At least one of `path`, `headers`, `query`, `json`, or `form` must name a target.","required":["path"],"properties":{"path":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","description":"Replacement absolute path. Secret references are not allowed here.","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.path","typeLabel":"string"},"headers":{"type":"object","propertyNames":{"pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.headers.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.headers.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.headers.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.headers.additionalProperties","typeLabel":"string | string[]"},"description":"Headers to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`. Sail-managed headers such as `host` and `content-length` cannot be set, and a header name is at most 128 characters.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.headers","typeLabel":"object"},"query":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.query.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.query.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.query.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.query.additionalProperties","typeLabel":"string | string[]"},"description":"Query parameters to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.query","typeLabel":"object"},"json":{"type":"object","propertyNames":{"maxLength":4096,"pattern":"^(?:/(?:[^~/]|~[01])*)+$"},"additionalProperties":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.json.additionalProperties","typeLabel":"string"},"description":"String values to set in a JSON request body, keyed by JSON Pointer. Missing parent objects are created. Values may include `${secrets.NAME}`. The request must have a JSON body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.json","typeLabel":"object"},"form":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.form.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.form.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.form.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.form.additionalProperties","typeLabel":"string | string[]"},"description":"Fields to set in a form-encoded request body. Values may include `${secrets.NAME}`. The request must have a form-encoded body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0.form","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.0","typeLabel":"object"},{"type":"object","description":"Values to replace or create. At least one of `path`, `headers`, `query`, `json`, or `form` must name a target.","required":["headers"],"properties":{"headers":{"type":"object","description":"Headers to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`. Sail-managed headers such as `host` and `content-length` cannot be set, and a header name is at most 128 characters.","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.headers.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.headers.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.headers.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.headers.additionalProperties","typeLabel":"string | string[]"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.headers","typeLabel":"object"},"path":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","description":"Replacement absolute path. Secret references are not allowed here.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.path","typeLabel":"string"},"query":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.query.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.query.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.query.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.query.additionalProperties","typeLabel":"string | string[]"},"description":"Query parameters to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.query","typeLabel":"object"},"json":{"type":"object","propertyNames":{"maxLength":4096,"pattern":"^(?:/(?:[^~/]|~[01])*)+$"},"additionalProperties":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.json.additionalProperties","typeLabel":"string"},"description":"String values to set in a JSON request body, keyed by JSON Pointer. Missing parent objects are created. Values may include `${secrets.NAME}`. The request must have a JSON body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.json","typeLabel":"object"},"form":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.form.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.form.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.form.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.form.additionalProperties","typeLabel":"string | string[]"},"description":"Fields to set in a form-encoded request body. Values may include `${secrets.NAME}`. The request must have a form-encoded body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1.form","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.1","typeLabel":"object"},{"type":"object","description":"Values to replace or create. At least one of `path`, `headers`, `query`, `json`, or `form` must name a target.","required":["query"],"properties":{"query":{"type":"object","description":"Query parameters to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`.","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.query.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.query.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.query.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.query.additionalProperties","typeLabel":"string | string[]"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.query","typeLabel":"object"},"path":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","description":"Replacement absolute path. Secret references are not allowed here.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.path","typeLabel":"string"},"headers":{"type":"object","propertyNames":{"pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.headers.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.headers.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.headers.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.headers.additionalProperties","typeLabel":"string | string[]"},"description":"Headers to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`. Sail-managed headers such as `host` and `content-length` cannot be set, and a header name is at most 128 characters.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.headers","typeLabel":"object"},"json":{"type":"object","propertyNames":{"maxLength":4096,"pattern":"^(?:/(?:[^~/]|~[01])*)+$"},"additionalProperties":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.json.additionalProperties","typeLabel":"string"},"description":"String values to set in a JSON request body, keyed by JSON Pointer. Missing parent objects are created. Values may include `${secrets.NAME}`. The request must have a JSON body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.json","typeLabel":"object"},"form":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.form.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.form.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.form.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.form.additionalProperties","typeLabel":"string | string[]"},"description":"Fields to set in a form-encoded request body. Values may include `${secrets.NAME}`. The request must have a form-encoded body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2.form","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.2","typeLabel":"object"},{"type":"object","description":"Values to replace or create. At least one of `path`, `headers`, `query`, `json`, or `form` must name a target.","required":["json"],"properties":{"json":{"type":"object","description":"String values to set in a JSON request body, keyed by JSON Pointer. Missing parent objects are created. Values may include `${secrets.NAME}`. The request must have a JSON body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","minProperties":1,"additionalProperties":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.json.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.json","typeLabel":"object"},"path":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","description":"Replacement absolute path. Secret references are not allowed here.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.path","typeLabel":"string"},"headers":{"type":"object","propertyNames":{"pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.headers.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.headers.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.headers.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.headers.additionalProperties","typeLabel":"string | string[]"},"description":"Headers to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`. Sail-managed headers such as `host` and `content-length` cannot be set, and a header name is at most 128 characters.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.headers","typeLabel":"object"},"query":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.query.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.query.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.query.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.query.additionalProperties","typeLabel":"string | string[]"},"description":"Query parameters to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.query","typeLabel":"object"},"form":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.form.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.form.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.form.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.form.additionalProperties","typeLabel":"string | string[]"},"description":"Fields to set in a form-encoded request body. Values may include `${secrets.NAME}`. The request must have a form-encoded body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3.form","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.3","typeLabel":"object"},{"type":"object","description":"Values to replace or create. At least one of `path`, `headers`, `query`, `json`, or `form` must name a target.","required":["form"],"properties":{"form":{"type":"object","description":"Fields to set in a form-encoded request body. Values may include `${secrets.NAME}`. The request must have a form-encoded body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.form.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.form.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.form.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.form.additionalProperties","typeLabel":"string | string[]"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.form","typeLabel":"object"},"path":{"type":"string","maxLength":4096,"pattern":"^/(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","description":"Replacement absolute path. Secret references are not allowed here.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.path","typeLabel":"string"},"headers":{"type":"object","propertyNames":{"pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.headers.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.headers.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.headers.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.headers.additionalProperties","typeLabel":"string | string[]"},"description":"Headers to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`. Sail-managed headers such as `host` and `content-length` cannot be set, and a header name is at most 128 characters.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.headers","typeLabel":"object"},"query":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.query.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.query.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.query.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.query.additionalProperties","typeLabel":"string | string[]"},"description":"Query parameters to set. Values may include `${secrets.NAME}` for a secret that already exists in your organization. Write a literal dollar sign as `$$`.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.query","typeLabel":"object"},"json":{"type":"object","propertyNames":{"maxLength":4096,"pattern":"^(?:/(?:[^~/]|~[01])*)+$"},"additionalProperties":{"type":"string","maxLength":4096,"pattern":"^(?:[^$\\r\\n]|\\$\\$|\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\})*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.json.additionalProperties","typeLabel":"string"},"description":"String values to set in a JSON request body, keyed by JSON Pointer. Missing parent objects are created. Values may include `${secrets.NAME}`. The request must have a JSON body of at most 8 MiB with no Content-Encoding, or it fails with status 502. https://docs.sailresearch.com/reference/egress-policy#request-bodies","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4.json","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set.oneOf.4","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.set","typeLabel":"object"},"add":{"oneOf":[{"type":"object","description":"Values to append. Secret references are not allowed here. At least one of the two maps must be nonempty.","required":["headers"],"properties":{"headers":{"type":"object","description":"Headers to append. Sail-managed headers such as `host` and `content-length` cannot be changed, and a header name is at most 128 characters.","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$(?!\\{))*|(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.headers.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$(?!\\{))*|(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.headers.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.headers.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.headers.additionalProperties","typeLabel":"string | string[]"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.headers","typeLabel":"object"},"query":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.query.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.query.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.query.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.query.additionalProperties","typeLabel":"string | string[]"},"description":"Query parameters to append.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0.query","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.0","typeLabel":"object"},{"type":"object","description":"Values to append. Secret references are not allowed here. At least one of the two maps must be nonempty.","required":["query"],"properties":{"query":{"type":"object","description":"Query parameters to append.","minProperties":1,"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.query.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.query.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.query.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.query.additionalProperties","typeLabel":"string | string[]"},"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.query","typeLabel":"object"},"headers":{"type":"object","propertyNames":{"pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"oneOf":[{"type":"string","description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","maxLength":4096,"pattern":"^(?:(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$(?!\\{))*|(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.headers.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","maxLength":4096,"pattern":"^(?:(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$(?!\\{))*|(?:[^\\u0000-\\u0008\\u000A-\\u001F\\u007F$]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.headers.additionalProperties.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One string or a nonempty list of strings. Each string is limited to 4096 bytes of UTF-8.","minItems":1,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.headers.additionalProperties.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.headers.additionalProperties","typeLabel":"string | string[]"},"description":"Headers to append. Sail-managed headers such as `host` and `content-length` cannot be changed, and a header name is at most 128 characters.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1.headers","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add.oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.add","typeLabel":"object"},"remove":{"oneOf":[{"type":"object","description":"Header and query parameter names to remove. At least one of the two lists must be nonempty.","required":["headers"],"properties":{"headers":{"type":"array","items":{"type":"string","pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.0.headers.items.[INDEX]","typeLabel":"string"},"description":"Header names to remove. Sail-managed headers such as `host` and `content-length` cannot be changed, and a header name is at most 128 characters.","minItems":1,"uniqueItems":true,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.0.headers","typeLabel":"string[]"},"query":{"type":"array","uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.0.query.items.[INDEX]","typeLabel":"string"},"description":"Query parameter names to remove.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.0.query","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.0","typeLabel":"object"},{"type":"object","description":"Header and query parameter names to remove. At least one of the two lists must be nonempty.","required":["query"],"properties":{"query":{"type":"array","items":{"type":"string","minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.1.query.items.[INDEX]","typeLabel":"string"},"description":"Query parameter names to remove.","minItems":1,"uniqueItems":true,"isRequired":true,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.1.query","typeLabel":"string[]"},"headers":{"type":"array","uniqueItems":true,"items":{"type":"string","pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.1.headers.items.[INDEX]","typeLabel":"string"},"description":"Header names to remove. Sail-managed headers such as `host` and `content-length` cannot be changed, and a header name is at most 128 characters.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.1.headers","typeLabel":"string[]"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove.oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.remove","typeLabel":"object"},"replace":{"type":"object","additionalProperties":false,"minProperties":1,"description":"Request fields mapped to the `env` secret whose placeholder they may carry. A field holding exactly that placeholder, or a header holding a scheme and the placeholder, is sent with the secret in its place. https://docs.sailresearch.com/reference/egress-policy#env","properties":{"headers":{"type":"object","propertyNames":{"pattern":"^(?![\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Cc][Oo][Nn][Tt][Ee][Nn][Tt]-[Ll][Ee][Nn][Gg][Tt][Hh]|[Hh][Oo][Ss][Tt]|[Kk\\u212A][Ee][Ee][Pp]-[Aa][Ll][Ii\\u0130][Vv][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Ee][Nn][Tt][Ii\\u0130][Cc][Aa][Tt][Ee]|[Pp][Rr][Oo][Xx][Yy]-[Aa][Uu][Tt][Hh][Oo][Rr][Ii\\u0130][Zz][Aa][Tt][Ii\\u0130][Oo][Nn]|[Pp][Rr][Oo][Xx][Yy]-[Cc][Oo][Nn][Nn][Ee][Cc][Tt][Ii\\u0130][Oo][Nn]|[Tt][Ee]|[Tt][Rr][Aa][Ii\\u0130][Ll][Ee][Rr]|[Tt][Rr][Aa][Nn][Ss][Ff][Ee][Rr]-[Ee][Nn][Cc][Oo][Dd][Ii\\u0130][Nn][Gg]|[Uu][Pp][Gg][Rr][Aa][Dd][Ee])[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*[0-9A-Za-z!#$%\u0026'*+\\-.^_`|~\\u0130\\u212A]{1,128}[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace.headers.additionalProperties","typeLabel":"string"},"description":"Header names.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace.headers","typeLabel":"object"},"query":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace.query.additionalProperties","typeLabel":"string"},"description":"Query parameter names.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace.query","typeLabel":"object"},"json":{"type":"object","propertyNames":{"maxLength":4096,"pattern":"^(?:/(?:[^~/]|~[01])*)+$"},"additionalProperties":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace.json.additionalProperties","typeLabel":"string"},"description":"JSON Pointers into a JSON request body.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace.json","typeLabel":"object"},"form":{"type":"object","propertyNames":{"minLength":1,"maxLength":4096,"pattern":"^(?:(?:[^$]|\\$(?!\\{))*|(?:[^$\\r\\n]|\\$\\$)*)$"},"additionalProperties":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace.form.additionalProperties","typeLabel":"string"},"description":"Field names in a form-encoded request body.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace.form","typeLabel":"object"}},"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request.replace","typeLabel":"object"}},"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX].request","typeLabel":"object"}},"not":{"anyOf":[{"required":["respond","forward"]},{"required":["respond","request"]}]},"uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties.items.[INDEX]","typeLabel":"object"},"description":"Rules for this host, in the order Sail tests them.","uniqueKey":"egress_policy.oneOf.1.rules.additionalProperties","typeLabel":"object[]"},"description":"What happens to the HTTPS requests sent to each host: change the request, forward it, or answer it. Leave it out to apply no rules. https://docs.sailresearch.com/reference/egress-policy#rules","uniqueKey":"egress_policy.oneOf.1.rules","typeLabel":"object"},"missing_alpn":{"type":"object","propertyNames":{"pattern":"^[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?![0-9A-Za-z.\\u0130\\u212A-]{254})[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?(?:\\.[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?)*[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"type":"string","enum":["http/1.1"],"uniqueKey":"egress_policy.oneOf.1.missing_alpn.additionalProperties","typeLabel":"enum\u003cstring>"},"description":"Rarely needed: the HTTP version to assume for an exact host under `rules` when a client on a port other than 443 does not announce one. https://docs.sailresearch.com/reference/egress-policy#missing-alpn","uniqueKey":"egress_policy.oneOf.1.missing_alpn","typeLabel":"object"},"env":{"type":"object","maxProperties":100,"propertyNames":{"pattern":"^(?![Ss][Aa][Ii][Ll][Bb][Oo][Xx]_)[A-Za-z_][A-Za-z0-9_]{0,127}$"},"additionalProperties":{"oneOf":[{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$","uniqueKey":"egress_policy.oneOf.1.env.additionalProperties.oneOf.0","typeLabel":"string"},{"type":"object","required":["secret"],"properties":{"secret":{"type":"string","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,127}$","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.env.additionalProperties.oneOf.1.secret","typeLabel":"string"},"placeholder_prefix":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,16}$","description":"Text the placeholder starts with. Defaults to `sail_ph_`.","uniqueKey":"egress_policy.oneOf.1.env.additionalProperties.oneOf.1.placeholder_prefix","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.env.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.env.additionalProperties","typeLabel":"string | object"},"description":"Environment variables every command in the Sailbox gets, each holding a placeholder for the named secret. Every secret here must be named by a `request.replace`, and the reverse. Saved policies only. https://docs.sailresearch.com/reference/egress-policy#env","uniqueKey":"egress_policy.oneOf.1.env","typeLabel":"object"},"oidc_identity_tokens":{"type":"array","maxItems":10,"items":{"type":"object","additionalProperties":false,"required":["audience","path"],"properties":{"audience":{"type":"string","pattern":"^[!-~]{1,512}$","description":"The token's `aud` claim.","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.oidc_identity_tokens.items.[INDEX].audience","typeLabel":"string"},"path":{"type":"string","pattern":"^/run/sailbox/oidc/[A-Za-z0-9][A-Za-z0-9._-]{0,63}$","description":"The file in the Sailbox that holds the token. It must be directly in `/run/sailbox/oidc/`, and no two tokens may share it.","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.oidc_identity_tokens.items.[INDEX].path","typeLabel":"string"}},"uniqueKey":"egress_policy.oneOf.1.oidc_identity_tokens.items.[INDEX]","typeLabel":"object"},"description":"Identity tokens Sail signs for the Sailbox. Each token is in the file at its `path`, which Sail rewrites before the token expires. Saved policies only. https://docs.sailresearch.com/sailboxes-identity-tokens","uniqueKey":"egress_policy.oneOf.1.oidc_identity_tokens","typeLabel":"object[]"},"tls_config":{"type":"object","maxProperties":100,"propertyNames":{"pattern":"^[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*(?:\\*(?:\\.(?![0-9A-Za-z.\\u0130\\u212A-]{254})[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?(?:\\.[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?)*)?|(?![0-9A-Za-z.\\u0130\\u212A-]{254})[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?(?:\\.[A-Za-z0-9\\u0130\\u212A](?:[A-Za-z0-9\\u0130\\u212A-]{0,61}[A-Za-z0-9\\u0130\\u212A])?)*)[\\t-\\r\\u0020\\u0085\\u00A0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000]*$"},"additionalProperties":{"oneOf":[{"type":"object","description":"How Sail connects to a host over HTTPS.","required":["trusted_cas"],"properties":{"trusted_cas":{"type":"string","description":"PEM CA certificates. Sail trusts only these for the host, in place of the public CAs.","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties.oneOf.0.trusted_cas","typeLabel":"string"},"client_certificate":{"type":"string","description":"PEM client certificate, leaf first, then any intermediates. Sail presents it when the host asks for one.","uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties.oneOf.0.client_certificate","typeLabel":"string"},"client_key":{"type":"string","pattern":"^\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\}$","description":"`${secrets.NAME}`: the secret holding the client certificate's PEM private key.","uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties.oneOf.0.client_key","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties.oneOf.0","typeLabel":"object"},{"type":"object","description":"How Sail connects to a host over HTTPS.","required":["client_certificate"],"properties":{"client_certificate":{"type":"string","description":"PEM client certificate, leaf first, then any intermediates. Sail presents it when the host asks for one.","isRequired":true,"uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties.oneOf.1.client_certificate","typeLabel":"string"},"trusted_cas":{"type":"string","description":"PEM CA certificates. Sail trusts only these for the host, in place of the public CAs.","uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties.oneOf.1.trusted_cas","typeLabel":"string"},"client_key":{"type":"string","pattern":"^\\$\\{secrets\\.[A-Za-z0-9][A-Za-z0-9_-]{0,127}\\}$","description":"`${secrets.NAME}`: the secret holding the client certificate's PEM private key.","uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties.oneOf.1.client_key","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties.oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy.oneOf.1.tls_config.additionalProperties","typeLabel":"object"},"description":"Host patterns, written as under `rules`, mapped to the CAs Sail trusts and the client certificate it presents when connecting to them. https://docs.sailresearch.com/reference/egress-policy#tls-config","uniqueKey":"egress_policy.oneOf.1.tls_config","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"egress_policy.oneOf.1","typeLabel":"object"}],"uniqueKey":"egress_policy","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"example":{"name":"worker-1","app_id":"app_0f6a2c31-8b4d-4e7a-9c15-2d8e6f4a1b03","vcpu_count":4,"image":{"base":"BASE_IMAGE_DEBIAN"},"ingress_ports":[{"guest_port":8000,"protocol":"http","allowlist":["203.0.113.0/24"]}]},"examples":{"Example":{"title":"Example","value":{"name":"worker-1","app_id":"app_0f6a2c31-8b4d-4e7a-9c15-2d8e6f4a1b03","vcpu_count":4,"image":{"base":"BASE_IMAGE_DEBIAN"},"ingress_ports":[{"guest_port":8000,"protocol":"http","allowlist":["203.0.113.0/24"]}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"3f82b90f-1ef9-41bb-b506-4d6ee609b55d":{"description":"Check `status`: `running` means the Sailbox is ready, and `failed` means it did not start, with `error_message` saying why.","content":{"application/json":{"schema":{"type":"object","properties":{"sailbox_id":{"type":"string","description":"Id of the new Sailbox.","isRequired":true,"uniqueKey":"sailbox_id","typeLabel":"string"},"status":{"type":"string","description":"Current state of the Sailbox. Values in use today are `creating`, `running`, `paused`, `sleeping`, `terminating`, `terminated`, `failed`, `create_failed`, `interrupted_restorable`, and `interrupted_unsafe_to_retry`. New values can appear over time, so treat this as an open set.","isRequired":true,"uniqueKey":"status","typeLabel":"string"},"error_message":{"type":"string","description":"Why the Sailbox failed to start, when it did.","uniqueKey":"error_message","typeLabel":"string"}},"required":["sailbox_id","status"],"uniqueKey":"","typeLabel":"object"},"example":{"sailbox_id":"sb_9c8f1e2a-3b4d-4f5a-8c7e-1d2f3a4b5c6d","status":"running"},"examples":{"Example":{"title":"Example","value":{"sailbox_id":"sb_9c8f1e2a-3b4d-4f5a-8c7e-1d2f3a4b5c6d","status":"running"}}},"exampleType":"examples"}},"headers":{"Idempotent-Replayed":{"description":"`true` when this response is the stored answer to an earlier request that sent the same `Idempotency-Key`. Absent when the request ran for the first time.","schema":{"type":"string","enum":["true"]}}},"exampleType":"examples"},"2fc596e6-1fd3-4265-8f97-20479e626823":{"description":"The request was rejected. See the error message for the offending field.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"memory_limit_gib must be between 8 and 256 for 4 vCPUs","type":"invalid_request_error","param":null,"code":null}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"memory_limit_gib must be between 8 and 256 for 4 vCPUs","type":"invalid_request_error","param":null,"code":null}}}},"exampleType":"examples"}},"headers":{"Idempotent-Replayed":{"description":"`true` when this response is the stored answer to an earlier request that sent the same `Idempotency-Key`. Absent when the request ran for the first time.","schema":{"type":"string","enum":["true"]}}},"exampleType":"examples"},"76697461-fecd-48f8-9f09-d5d4cf3e62e1":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"Invalid API key","type":"authentication_error","param":null,"code":"invalid_api_key"}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"Invalid API key","type":"authentication_error","param":null,"code":"invalid_api_key"}}}},"exampleType":"examples"}},"exampleType":"examples"},"e1a5dfc6-4c1d-4939-ba8e-9f62dbd16746":{"description":"The organization is out of credits. The error carries a `billing_url` pointing at the page where you add them. Retry once you have.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"Your API key has been disabled due to insufficient credits. Visit https://app.sailresearch.com/billing to add credits.","type":"billing_error","param":null,"code":"credits_exhausted","billing_url":"https://app.sailresearch.com/billing"}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"Your API key has been disabled due to insufficient credits. Visit https://app.sailresearch.com/billing to add credits.","type":"billing_error","param":null,"code":"credits_exhausted","billing_url":"https://app.sailresearch.com/billing"}}}},"exampleType":"examples"}},"exampleType":"examples"},"1b6b85c7-3a67-4440-8a9b-4c8f46eb230a":{"description":"The API key is not allowed to perform this operation.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"sailboxes require an organization-scoped API key","type":"permission_error","param":null,"code":null}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"sailboxes require an organization-scoped API key","type":"permission_error","param":null,"code":null}}}},"exampleType":"examples"}},"exampleType":"examples"},"9f5fa04f-25e2-46e0-a914-b44e16288368":{"description":"No app with that `app_id` exists in your organization, or a volume named in `volume_mounts` does not.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"sailbox \"sb_9c8f1e2a-3b4d-4f5a-8c7e-1d2f3a4b5c6d\" not found","type":"not_found_error","param":null,"code":null}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"sailbox \"sb_9c8f1e2a-3b4d-4f5a-8c7e-1d2f3a4b5c6d\" not found","type":"not_found_error","param":null,"code":null}}}},"exampleType":"examples"}},"headers":{"Idempotent-Replayed":{"description":"`true` when this response is the stored answer to an earlier request that sent the same `Idempotency-Key`. Absent when the request ran for the first time.","schema":{"type":"string","enum":["true"]}}},"exampleType":"examples"},"b60cf423-c94d-4106-8a5d-2e39681bf58e":{"description":"The request cannot be served as written: `image` names an image that has not been built, `visibility` is `private` on a key that carries no user, or a requested `tcp` port is not available. An `Idempotency-Key` reused for a different request lands here too.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"idempotency key reused with a different request body","type":"conflict_error","param":null,"code":null}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"idempotency key reused with a different request body","type":"conflict_error","param":null,"code":null}}}},"exampleType":"examples"}},"headers":{"Idempotent-Replayed":{"description":"`true` when this response is the stored answer to an earlier request that sent the same `Idempotency-Key`. Absent when the request ran for the first time.","schema":{"type":"string","enum":["true"]}}},"exampleType":"examples"},"7fcccd8f-49b5-4c75-9127-4c68b684da8e":{"description":"The request body is larger than the 256 MiB this endpoint accepts.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"request body too large","type":"invalid_request_error","param":null,"code":null}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"request body too large","type":"invalid_request_error","param":null,"code":null}}}},"exampleType":"examples"}},"exampleType":"examples"},"3ff7452a-fd67-48a8-88b8-1ad4e2f9f396":{"description":"Too many requests in flight, or the organization is at a limit. A `Retry-After` header means the request never started, so retry it unchanged after that delay. Without one, the request ran and hit the limit `message` names. Some of those clear on their own, such as a shortage of public ports; others need you to free something up first. Send the request again once the cause is gone. If you sent an `Idempotency-Key`, use a new one, because the old key now replays this answer.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"Too many concurrent requests. Please retry after some of your organization's in-flight requests complete.","type":"rate_limit_error","param":null,"code":"rate_limited"}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"Too many concurrent requests. Please retry after some of your organization's in-flight requests complete.","type":"rate_limit_error","param":null,"code":"rate_limited"}}}},"exampleType":"examples"}},"headers":{"Retry-After":{"description":"How many seconds to wait before retrying. On a 429 it also means the request never started, so the retry can reuse the same `Idempotency-Key`.","schema":{"type":"integer","minimum":0}},"Idempotent-Replayed":{"description":"`true` when this response is the stored answer to an earlier request that sent the same `Idempotency-Key`. Absent when the request ran for the first time.","schema":{"type":"string","enum":["true"]}}},"exampleType":"examples"},"7827850a-bc03-4b2e-a088-c68bb77f6cfc":{"description":"Server error.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"failed to fetch sailbox","type":"server_error","param":null,"code":null}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"failed to fetch sailbox","type":"server_error","param":null,"code":null}}}},"exampleType":"examples"}},"exampleType":"examples"},"cefbbf2e-93a7-4a95-91ac-17a7c233fdec":{"description":"Sail is momentarily unavailable. Retry after the delay in the `Retry-After` header when one is present, and with backoff otherwise.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"Authentication service unavailable","type":"server_error","param":null,"code":null}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"Authentication service unavailable","type":"server_error","param":null,"code":null}}}},"exampleType":"examples"}},"headers":{"Retry-After":{"description":"How many seconds to wait before retrying. On a 429 it also means the request never started, so the retry can reuse the same `Idempotency-Key`.","schema":{"type":"integer","minimum":0}}},"exampleType":"examples"},"21afb11a-f88c-4a6e-bf76-5777fdd96075":{"description":"The operation outran its deadline, or a retry sent with the same `Idempotency-Key` waited about 30 seconds and the original request was still going. The new Sailbox can exist even though the call failed, so list your Sailboxes before you retry.","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","param","code"],"properties":{"message":{"type":"string","description":"Human-readable description of what went wrong.","isRequired":true,"uniqueKey":"error.message","typeLabel":"string"},"type":{"type":"string","description":"Error category: `invalid_request_error`, `authentication_error`, `permission_error`, `billing_error`, `not_found_error`, `conflict_error`, `rate_limit_error`, `quota_exceeded_error`, `not_implemented_error`, or `server_error`.","isRequired":true,"uniqueKey":"error.type","typeLabel":"string"},"param":{"oneOf":[{"type":"string","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.0","typeLabel":"string"},{"type":"null","description":"The request field the error refers to, when the error is about one field.","isRequired":true,"uniqueKey":"error.param.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.param","typeLabel":"string | null"},"code":{"oneOf":[{"type":"string","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.0","typeLabel":"string"},{"type":"integer","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.1","typeLabel":"integer"},{"type":"null","description":"Stable short code for the error, when one applies. Errors relayed from the Sailbox runtime carry its status token, for example `already_exists` or `failed_precondition` on a 409, which the HTTP status alone does not distinguish.","isRequired":true,"uniqueKey":"error.code.oneOf.2","typeLabel":"null"}],"isRequired":true,"uniqueKey":"error.code","typeLabel":"string | integer | null"},"billing_url":{"type":"string","format":"uri","description":"Page where you add credits. Sent with a 402.","uniqueKey":"error.billing_url","typeLabel":"string\u003curi>"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"error","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"error":{"message":"idempotent request still in flight","type":"server_error","param":null,"code":null}},"examples":{"Example":{"title":"Example","value":{"error":{"message":"idempotent request still in flight","type":"server_error","param":null,"code":null}}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"bb4dd6da-eb94-44b9-bdc2-d57f2d651bf0":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"API Key","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"ea6a777d-11b2-4262-a9f6-85ca1c08b647":{"url":"https://sailbox-api.sailresearch.com/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"API Key","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"sailbox-openapi.json"},"subdomain":"sailresearch","siteName":"Sail Research","title":"Create a Sailbox - Sail Research","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-29T02:21:15.612Z","originalFileLocation":"api-reference/lifecycle/create-a-sailbox.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=\"Creates a Sailbox and waits for startup to finish, which can take a few minutes. image has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK. Send an Idempotency-Key so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read Retrying safely before you retry one.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Sail Research\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/sailresearch/BWUDTf48u3tNnszQ/_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/sailresearch/BWUDTf48u3tNnszQ/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/sailresearch/BWUDTf48u3tNnszQ/_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/sailresearch/BWUDTf48u3tNnszQ/_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/sailresearch/BWUDTf48u3tNnszQ/_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/sailresearch/BWUDTf48u3tNnszQ/_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/sailresearch/BWUDTf48u3tNnszQ/_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/sailresearch/BWUDTf48u3tNnszQ/_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/sailresearch/BWUDTf48u3tNnszQ/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Create a Sailbox - Sail Research\">\u003cmeta data-mint-head property=\"og:description\" content=\"Creates a Sailbox and waits for startup to finish, which can take a few minutes. image has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK. Send an Idempotency-Key so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read Retrying safely before you retry one.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Sail Research\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://sailresearch.mintlify.app/images/og.png\">\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 a Sailbox - Sail Research\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Creates a Sailbox and waits for startup to finish, which can take a few minutes. image has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK. Send an Idempotency-Key so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read Retrying safely before you retry one.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://sailresearch.mintlify.app/images/og.png\">\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/sailresearch/BWUDTf48u3tNnszQ/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Sail Research\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2c4681\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/lifecycle/create-a-sailbox.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.sailresearch.com/#organization\",\"name\":\"Sail Research\",\"url\":\"https://docs.sailresearch.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/sailresearch/X8kOeTTR9DVS13DJ/logo/solo.svg?fit=max\u0026auto=format\u0026n=X8kOeTTR9DVS13DJ\u0026q=85\u0026s=45e472c8b5c89f0235ef55e4953f7075\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.sailresearch.com#website\",\"name\":\"Sail Research\",\"url\":\"https://docs.sailresearch.com\",\"publisher\":{\"@id\":\"https://docs.sailresearch.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox#webpage\",\"url\":\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox\",\"name\":\"Create a Sailbox\",\"description\":\"Creates a Sailbox and waits for startup to finish, which can take a few minutes. image has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK. Send an Idempotency-Key so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read Retrying safely before you retry one.\",\"dateModified\":\"2026-10-29T02:21:15.612Z\",\"isPartOf\":{\"@id\":\"https://docs.sailresearch.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Sailbox\",\"item\":\"https://docs.sailresearch.com/sailbox-sdk\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"HTTP API\",\"item\":\"https://docs.sailresearch.com/api-reference/identity/whoami\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Lifecycle\",\"item\":\"https://docs.sailresearch.com/api-reference/lifecycle/list-sailboxes\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Create a Sailbox\",\"item\":\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox#apireference\",\"headline\":\"Create a Sailbox\",\"name\":\"Create a Sailbox\",\"description\":\"Creates a Sailbox and waits for startup to finish, which can take a few minutes. image has to describe an image that is ready to boot: a base image on its own, or one already built from that same spec through an SDK. Send an Idempotency-Key so a network retry replays this answer instead of starting a second Sailbox. A server error can still arrive once the Sailbox exists, so read Retrying safely before you retry one.\",\"url\":\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox\",\"mainEntityOfPage\":{\"@id\":\"https://docs.sailresearch.com/api-reference/lifecycle/create-a-sailbox#webpage\"},\"image\":\"https://docs.sailresearch.com/images/og.png\",\"dateModified\":\"2026-10-29T02:21:15.612Z\",\"publisher\":{\"@id\":\"https://docs.sailresearch.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.sailresearch.com#website\"}}]}\u003c/script>","siteName":"Sail Research","nav":{"global":null,"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"Reference","groups":[{"group":"Inference APIs","pages":[{"group":"Models API","pages":[{"title":"List supported models","deprecated":null,"version":null,"openapi":"/openapi.json get /models","href":"/api-reference/models-api/list-supported-models"}]},{"group":"Responses API","pages":[{"title":"Create a response","deprecated":null,"version":null,"openapi":"/openapi.json post /responses","href":"/api-reference/responses-api/create-a-response"},{"title":"Retrieve a response","deprecated":null,"version":null,"openapi":"/openapi.json get /responses/{response_id}","href":"/api-reference/responses-api/retrieve-a-response"}]},{"group":"Chat Completions API","pages":[{"title":"Create a chat completion","deprecated":null,"version":null,"openapi":"/openapi.json post /chat/completions","href":"/api-reference/chat-completions-api/create-a-chat-completion"}]},{"group":"Messages API","pages":[{"title":"Create an Anthropic message","deprecated":null,"version":null,"openapi":"/openapi.json post /messages","href":"/api-reference/messages-api/create-an-anthropic-message"},{"title":"Retrieve a message","deprecated":null,"version":null,"openapi":"/openapi.json get /messages/{messageID}","href":"/api-reference/messages-api/retrieve-a-message"},{"title":"Count tokens for an Anthropic message","deprecated":null,"version":null,"openapi":"/openapi.json post /messages/count_tokens","href":"/api-reference/messages-api/count-tokens-for-an-anthropic-message"}]},{"group":"Batches API","pages":[{"title":"List batches","deprecated":null,"version":null,"openapi":"/openapi.json get /batches","href":"/api-reference/batches-api/list-batches"},{"title":"Create a batch","deprecated":null,"version":null,"openapi":"/openapi.json post /batches","href":"/api-reference/batches-api/create-a-batch"},{"title":"Get batch status and results","deprecated":null,"version":null,"openapi":"/openapi.json get /batches/{batch_id}","href":"/api-reference/batches-api/get-batch-status-and-results"},{"title":"Get batch request result","deprecated":null,"version":null,"openapi":"/openapi.json get /batches/{batch_id}/{custom_id}","href":"/api-reference/batches-api/get-batch-request-result"}]},{"group":"Web Search API","pages":[]}]},{"group":"Usage API","pages":[{"title":"Overview","href":"/usage"},{"title":"Usage API endpoints","href":"/usage-endpoints"}]},{"group":"Sailbox","pages":[{"title":"Sailboxes","href":"/sailbox-sdk"},{"title":"Images \u0026 Functions","href":"/sailbox-sdk-images"},{"title":"Apps","href":"/sailbox-sdk-apps"},{"title":"Egress policy reference","sidebarTitle":"Egress policy","href":"/reference/egress-policy"},{"title":"Errors","href":"/sailbox-sdk-errors"},{"group":"HTTP API","pages":[{"group":"Identity","pages":[{"title":"whoami","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /whoami","href":"/api-reference/identity/whoami"}]},{"group":"Apps","pages":[{"title":"Find or create an app","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /apps/find","href":"/api-reference/apps/find-or-create-an-app"},{"title":"List apps","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /apps","href":"/api-reference/apps/list-apps"}]},{"group":"Secrets","pages":[{"title":"List secrets","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /secrets","href":"/api-reference/secrets/list-secrets"},{"title":"Get a secret","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /secrets/{name}","href":"/api-reference/secrets/get-a-secret"},{"title":"Set a secret","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json put /secrets/{name}","href":"/api-reference/secrets/set-a-secret"},{"title":"Delete a secret","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json delete /secrets/{name}","href":"/api-reference/secrets/delete-a-secret"},{"title":"List policies using a secret","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /secrets/{name}/references","href":"/api-reference/secrets/list-policies-using-a-secret"}]},{"group":"Egress policies","pages":[{"title":"List egress policies","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /egress-policies","href":"/api-reference/egress-policies/list-egress-policies"},{"title":"Create an egress policy","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /egress-policies","href":"/api-reference/egress-policies/create-an-egress-policy"},{"title":"Get an egress policy","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /egress-policies/{policy_id}","href":"/api-reference/egress-policies/get-an-egress-policy"},{"title":"Delete an egress policy","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json delete /egress-policies/{policy_id}","href":"/api-reference/egress-policies/delete-an-egress-policy"},{"title":"Rename an egress policy","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json patch /egress-policies/{policy_id}","href":"/api-reference/egress-policies/rename-an-egress-policy"},{"title":"Get a Sailbox's egress policy","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/egress-policy","href":"/api-reference/egress-policies/get-a-sailboxs-egress-policy"},{"title":"Set a Sailbox's egress policy","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json put /sailboxes/{sailbox_id}/egress-policy","href":"/api-reference/egress-policies/set-a-sailboxs-egress-policy"}]},{"group":"Lifecycle","pages":[{"title":"List Sailboxes","description":"Returns Sailboxes in your organization, most recently active first. Terminated Sailboxes stay in the list, so filter by `status` if you only want live ones.","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes","href":"/api-reference/lifecycle/list-sailboxes"},{"title":"Create a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes","href":"/api-reference/lifecycle/create-a-sailbox"},{"title":"Retrieve a Sailbox","description":"Returns one Sailbox, including its latest observed resource usage.","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}","href":"/api-reference/lifecycle/retrieve-a-sailbox"},{"title":"Pause a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/pause","href":"/api-reference/lifecycle/pause-a-sailbox"},{"title":"Sleep a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/sleep","href":"/api-reference/lifecycle/sleep-a-sailbox"},{"title":"Resume a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/resume","href":"/api-reference/lifecycle/resume-a-sailbox"},{"title":"Schedule a wake","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/wake_at","href":"/api-reference/lifecycle/schedule-a-wake"},{"title":"List cron jobs","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/cron","href":"/api-reference/lifecycle/list-cron-jobs"},{"title":"Add a cron job","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/cron","href":"/api-reference/lifecycle/add-a-cron-job"},{"title":"Remove a cron job","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json delete /sailboxes/{sailbox_id}/cron/{cron_job_id}","href":"/api-reference/lifecycle/remove-a-cron-job"},{"title":"Set the automatic-sleep preference","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/auto_sleep","href":"/api-reference/lifecycle/set-the-automatic-sleep-preference"},{"title":"Change who can operate a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/visibility","href":"/api-reference/lifecycle/change-who-can-operate-a-sailbox"},{"title":"Upgrade a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/upgrade","href":"/api-reference/lifecycle/upgrade-a-sailbox"},{"title":"Reboot a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/reboot","href":"/api-reference/lifecycle/reboot-a-sailbox"},{"title":"Set a Sailbox's limits","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/set-limits","href":"/api-reference/lifecycle/set-a-sailboxs-limits"},{"title":"Terminate a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/terminate","href":"/api-reference/lifecycle/terminate-a-sailbox"}]},{"group":"Exec","pages":[{"title":"Snapshot recent executions","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/executions","href":"/api-reference/exec/snapshot-recent-executions"},{"title":"Snapshot execution output","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/logs","href":"/api-reference/exec/snapshot-execution-output"},{"title":"Run a command","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/exec","href":"/api-reference/exec/run-a-command"},{"title":"Wait for an exec","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/exec/{exec_id}/wait","href":"/api-reference/exec/wait-for-an-exec"},{"title":"Write exec stdin","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json put /sailboxes/{sailbox_id}/exec/{exec_id}/stdin","href":"/api-reference/exec/write-exec-stdin"},{"title":"Stream exec stdin","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/exec/{exec_id}/stdin/stream","href":"/api-reference/exec/stream-exec-stdin"},{"title":"Cancel an exec","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/exec/{exec_id}/cancel","href":"/api-reference/exec/cancel-an-exec"},{"title":"Resize an exec PTY","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/exec/{exec_id}/resize","href":"/api-reference/exec/resize-an-exec-pty"},{"title":"Resync an exec PTY","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/exec/{exec_id}/resync","href":"/api-reference/exec/resync-an-exec-pty"},{"title":"Set the clipboard","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json put /sailboxes/{sailbox_id}/clipboard","href":"/api-reference/exec/set-the-clipboard"}]},{"group":"Files","pages":[{"title":"Read a file","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/files","href":"/api-reference/files/read-a-file"},{"title":"Write a file","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json put /sailboxes/{sailbox_id}/files","href":"/api-reference/files/write-a-file"},{"title":"Mint a download URL for a file","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/files/download-url","href":"/api-reference/files/mint-a-download-url-for-a-file"},{"title":"Fetch a file through its download URL","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/files/download","href":"/api-reference/files/fetch-a-file-through-its-download-url"},{"title":"Get a download URL's headers","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json head /sailboxes/{sailbox_id}/files/download","href":"/api-reference/files/get-a-download-urls-headers"}]},{"group":"Networking","pages":[{"title":"Tunnel to a port","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/tunnel","href":"/api-reference/networking/tunnel-to-a-port"},{"title":"List published ports","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/listeners","href":"/api-reference/networking/list-published-ports"},{"title":"Publish a port","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/listeners","href":"/api-reference/networking/publish-a-port"},{"title":"Retrieve a published port","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/listeners/{guest_port}","href":"/api-reference/networking/retrieve-a-published-port"},{"title":"Unpublish a port","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json delete /sailboxes/{sailbox_id}/listeners/{guest_port}","href":"/api-reference/networking/unpublish-a-port"},{"title":"Get custom-domain DNS targets","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /custom-domains","href":"/api-reference/networking/get-custom-domain-dns-targets"},{"title":"List custom domains","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/domains","href":"/api-reference/networking/list-custom-domains"},{"title":"Add a custom domain","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/domains","href":"/api-reference/networking/add-a-custom-domain"},{"title":"Remove a custom domain","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json delete /sailboxes/{sailbox_id}/domains/{domain}","href":"/api-reference/networking/remove-a-custom-domain"}]},{"group":"Checkpoints","pages":[{"title":"Checkpoint a Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/{sailbox_id}/checkpoint","href":"/api-reference/checkpoints/checkpoint-a-sailbox"},{"title":"Start a Sailbox from a checkpoint","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailboxes/from_checkpoint","href":"/api-reference/checkpoints/start-a-sailbox-from-a-checkpoint"},{"title":"List checkpoints","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailbox-checkpoints","href":"/api-reference/checkpoints/list-checkpoints"},{"title":"Get a checkpoint","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailbox-checkpoints/{checkpoint_id}","href":"/api-reference/checkpoints/get-a-checkpoint"},{"title":"Delete a checkpoint","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json delete /sailbox-checkpoints/{checkpoint_id}","href":"/api-reference/checkpoints/delete-a-checkpoint"}]},{"group":"Volumes","pages":[{"title":"Mount a volume on a running Sailbox","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json put /sailboxes/{sailbox_id}/volume-mounts","href":"/api-reference/volumes/mount-a-volume-on-a-running-sailbox"},{"title":"List volumes","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailbox-volumes","href":"/api-reference/volumes/list-volumes"},{"title":"Create a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailbox-volumes","href":"/api-reference/volumes/create-a-volume"},{"title":"Delete a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json delete /sailbox-volumes/{volume_id}","href":"/api-reference/volumes/delete-a-volume"},{"title":"Read a file on a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailbox-volumes/{volume_id}/files","href":"/api-reference/volumes/read-a-file-on-a-volume"},{"title":"Write a file on a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json put /sailbox-volumes/{volume_id}/files","href":"/api-reference/volumes/write-a-file-on-a-volume"},{"title":"List a directory on a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailbox-volumes/{volume_id}/directories","href":"/api-reference/volumes/list-a-directory-on-a-volume"},{"title":"Create a directory on a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailbox-volumes/{volume_id}/directories","href":"/api-reference/volumes/create-a-directory-on-a-volume"},{"title":"Look up a path on a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailbox-volumes/{volume_id}/paths","href":"/api-reference/volumes/look-up-a-path-on-a-volume"},{"title":"Move a path within a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /sailbox-volumes/{volume_id}/paths","href":"/api-reference/volumes/move-a-path-within-a-volume"},{"title":"Remove a path on a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json delete /sailbox-volumes/{volume_id}/paths","href":"/api-reference/volumes/remove-a-path-on-a-volume"},{"title":"Download a directory from a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailbox-volumes/{volume_id}/archives","href":"/api-reference/volumes/download-a-directory-from-a-volume"},{"title":"Upload a directory to a volume","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json put /sailbox-volumes/{volume_id}/archives","href":"/api-reference/volumes/upload-a-directory-to-a-volume"}]},{"group":"SSH access","pages":[{"title":"Get your SSH certificate authority","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /ssh/ca","href":"/api-reference/ssh-access/get-your-ssh-certificate-authority"},{"title":"Issue an SSH certificate","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json post /ssh/certificate","href":"/api-reference/ssh-access/issue-an-ssh-certificate"}]},{"group":"Usage","pages":[{"title":"Get resource usage over time","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/{sailbox_id}/metrics","href":"/api-reference/usage/get-resource-usage-over-time"},{"title":"Get Sailbox spend","deprecated":null,"version":null,"openapi":"/sailbox-openapi.json get /sailboxes/spend","href":"/api-reference/usage/get-sailbox-spend"}]}]}]},{"group":"Tinker","pages":[{"title":"Tinker","href":"/sdk-tinker"}]},{"group":"SDKs","pages":[{"title":"Python SDK","href":"/reference/python-sdk"},{"title":"TypeScript SDK","href":"/reference/typescript-sdk"},{"title":"Rust SDK","href":"/reference/rust-sdk"},{"title":"Configuration","href":"/reference/sdk-configuration"}]}]}]},"basePath":"","title":"Create a Sailbox - Sail Research","buildId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","deploymentId":"dpl_36EDyZCDfRuoUD9af5CH4M1bqY2h","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DCDCdBVX.js","utils-ME8dDnLe.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-0e84ACsd.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-wgRBj-ia.js","snippetPresets-C11Sgb-o.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-C0lapOpP.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-ZeRQV8fF.js","shallow-BupWh095.js","getApiPlaygroundDisplay-BnYQO2Ss.js","CodeSnippet-RKKOc8c_.js","CodeSnippets-Drf_m8wS.js","Page-Bevw23-4.js","getPastedJson-u6QiPzNZ.js","icon-Bb-CBSxO.js","MethodPill-F7l5AI7V.js","DuplicateIcon-IiAXkdSg.js","createIcon-FliI8EBc.js","DynamicMarkdown-B62XqCSI.js","SectionHeading-Dj31pT03.js","axios-vUo_bRtp.js","Markdown-BOgQCTwD.js","clsx-BIWXJmsZ.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-DKZWslLH.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-UDqbR6xh.js"]}