{
"detail": {
"code": "public_port_not_allowed",
"message": "Choose a public port from 1024 to 21999 or 23000 to 29999. Ports the host itself uses are not available."
}
}
{
"code": "<string>",
"detail": "<string>"
}
{
"detail": {
"code": "virtual_machine_not_found",
"message": "Ornn could not find that virtual machine."
}
}
{
"detail": {
"code": "public_port_in_use",
"message": "Another VM on this host already uses this public port. Choose a different public port."
}
}
{
"code": "<string>",
"detail": "<string>"
}
Open a VM port
Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host’s public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM’s ports until its status is open, private, or failed.
{
"detail": {
"code": "public_port_not_allowed",
"message": "Choose a public port from 1024 to 21999 or 23000 to 29999. Ports the host itself uses are not available."
}
}
{
"code": "<string>",
"detail": "<string>"
}
{
"detail": {
"code": "virtual_machine_not_found",
"message": "Ornn could not find that virtual machine."
}
}
{
"detail": {
"code": "public_port_in_use",
"message": "Another VM on this host already uses this public port. Choose a different public port."
}
}
{
"code": "<string>",
"detail": "<string>"
}
On a public reservation the port is reachable from the internet on the host’s public IP. For the full flow, see Open ports on a VM.
opening until the host applies the change; open when published on the host's public IP; private while the reservation is private (reach the VM at its private_ip instead); failed with failure set.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Ornn","description":"Ornn: The Omnicloud for AI Workloads\nOrnn is an omnicloud for high-performance GPU compute. Reserve capacity, manage your reservations, and connect via VM, Bare Metal, Kubernetes, or Slurm.","colors":{"primary":"#000000","light":"#F3F3F3","dark":"#0B0B0C"},"logo":{"light":"https://mintcdn.com/ornn/kJ0iqH_E0L2Jw6j6/images/ornn-docs-logo-light.svg?fit=max\u0026auto=format\u0026n=kJ0iqH_E0L2Jw6j6\u0026q=85\u0026s=6f5b0c872f8bb7b4b5b6b8ab492dc2a6","dark":"https://mintcdn.com/ornn/kJ0iqH_E0L2Jw6j6/images/ornn-docs-logo-dark.svg?fit=max\u0026auto=format\u0026n=kJ0iqH_E0L2Jw6j6\u0026q=85\u0026s=518cd92bb74cb6eb82ac33e462421918","href":"https://ornn.com"},"favicon":"https://mintcdn.com/ornn/fNQRwmmR9H-yzza5/favicon.png?fit=max\u0026auto=format\u0026n=fNQRwmmR9H-yzza5\u0026q=85\u0026s=ae08364c28579651525833a71bd8ec7c","api":{"examples":{"languages":["curl","python","javascript","php","go","java","ruby"]}},"appearance":{"default":"dark","strict":true},"background":{"color":{"light":"#FFFFFF","dark":"#0B0B0C"}},"navbar":{"links":[{"href":"/changelog","label":"Changelog"}],"primary":{"type":"button","label":"Visit Ornn","href":"https://ornn.com"}},"footer":{"socials":{"x":"https://x.com/OrnnExchange","linkedin":"https://www.linkedin.com/company/ornn"}},"fonts":{"family":"PP Neue Montreal Regular","weight":400,"source":"fonts/PPNeueMontreal-Regular.woff2","format":"woff2"},"icons":{"library":"lucide"},"styling":{"eyebrows":"breadcrumbs","latex":true},"contextual":{"options":["copy","view","assistant","chatgpt","claude","perplexity","grok","aistudio","devin","windsurf","mcp","add-mcp","cursor","vscode","devin-mcp","download-spec"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ornn","hasAudioNarration":false,"actualSubdomain":"ornn","customDomains":["docs.ornn.com"],"gitSource":{"type":"github","owner":"ornn-ai","repo":"fabric","deployBranch":"main","contentDirectory":"docs-site","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ade7cc6d2e4fef472e10a97","collectionId":"af498dcf-a0bb-45e4-b140-e9a64ce3d61f","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ade7cc6d2e4fef472e10a97"},"feedback":{"thumbs":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ade87948a5fe482cc003fe3","clientVersion":"0.0.3966","searchFilterCounts":[{"language":"default","tag":"API reference","count":111},{"language":"default","tag":"Guides","count":28},{"language":"default","tag":"Storage","count":17},{"language":"default","tag":"VM and Bare Metal","count":13},{"language":"default","tag":"Private networks","count":12},{"language":"default","tag":"Order books","count":11},{"language":"default","tag":"Billing","count":9},{"language":"default","tag":"Monitoring","count":8},{"language":"default","tag":"Get Started","count":7},{"language":"default","tag":"Reserve","count":7}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"support@ornn.com","showHelpButton":true}},"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":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","href":"/_mintlify/custom/ornn/0ca437793353238f/style.css"}],"page":{"pagePath":"api-reference/virtual-machines/open-port","slug":"/api-reference/virtual-machines/open-port","pageMetadata":{"title":"Open a VM port","openapi":"openapi.yaml POST /v1/orchestrator/nodes/{node_id}/virtual-machines/{vm_id}/ports","description":"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host's public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM's ports until its status is open, private, or failed.","href":"/api-reference/virtual-machines/open-port"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host’s public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM’s ports until its status is open, private, or failed.\"\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{jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,p:`p`,..._provideComponents(),...props.components};return _jsxs(_components.p,{children:[`On a public reservation the port is reachable from the internet on the host’s public IP. For the full flow, see `,_jsx(_components.a,{href:`/guides/vm-access#open-ports-on-a-vm`,children:`Open ports on a VM`}),`.`]})}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":"Open a VM port","openapi":"openapi.yaml POST /v1/orchestrator/nodes/{node_id}/virtual-machines/{vm_id}/ports","description":"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host's public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM's ports until its status is open, private, or failed.","href":"/api-reference/virtual-machines/open-port"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/ornn/51d5a96cc0778150/region-picker.js","/_mintlify/custom/ornn/0f843ad695dae46a/toc-hatch.js","/_mintlify/custom/ornn/38a1cac05e624580/copy-page-label.js"],"openApiReferenceData":{"operation":{"summary":"Open a VM port","operationId":"accessOpenVirtualMachinePort","tags":["Virtual machines"],"description":"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host's public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM's ports until its status is open, private, or failed.","parameters":["4ffa33d1-3fe7-4edf-b124-2d6526325a9f","232b2ffa-efb2-41c3-a85e-c147d45852f1"],"requestBody":"bd9f4f46-4dac-4b78-b729-258b5e4934a0","responses":{"202":"eb52c529-0dd7-47e7-a4b8-6629a44eeb29","400":"6e7b6a5c-edf0-4142-993a-f05310544564","401":"73353994-e0a4-4dae-95fd-1778551cb7f0","404":"13b63bc1-b9b9-4d1a-9576-b3a561d152f8","409":"a8be3a55-5e4c-471c-af2c-4b0b936a2459","default":"673c0927-62b3-4fcc-aac9-2d5ec39da42a"},"method":"post","type":"path","servers":["44c1a685-3b9c-4169-aa9e-e593ad109927"],"security":["749cca98-0c4b-4104-9f69-95063655cb50"],"path":"/v1/orchestrator/nodes/{node_id}/virtual-machines/{vm_id}/ports","baseUrlOptions":["https://api.ornn.com"],"title":"Open a VM port","codeSamples":[],"requestExampleLanguages":["bash","python","javascript","php","go","java","ruby"],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"4ffa33d1-3fe7-4edf-b124-2d6526325a9f":{"name":"node_id","in":"path","required":true,"description":"The VM's node_id from the reservation's VM list.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"The VM's node_id from the reservation's VM list.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"example":"33333333-3333-4333-8333-333333333333"},"232b2ffa-efb2-41c3-a85e-c147d45852f1":{"name":"vm_id","in":"path","required":true,"description":"The VM's id from the reservation's VM list.","schema":{"type":"string","format":"uuid","isRequired":true,"description":"The VM's id from the reservation's VM list.","uniqueKey":"","typeLabel":"string\u003cuuid>"},"example":"66666666-6666-4666-8666-666666666666"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["guest_port"],"properties":{"guest_port":{"type":"integer","minimum":1,"maximum":65535,"isRequired":true,"uniqueKey":"guest_port","typeLabel":"integer"},"public_port":{"type":"integer","description":"Defaults to guest_port.","uniqueKey":"public_port","typeLabel":"integer"},"protocol":{"type":"string","enum":["tcp","udp"],"default":"tcp","uniqueKey":"protocol","typeLabel":"enum\u003cstring>"}},"uniqueKey":"","typeLabel":"object"},"example":{"guest_port":8443},"examples":{"Example":{"title":"Example","value":{"guest_port":8443}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"eb52c529-0dd7-47e7-a4b8-6629a44eeb29":{"description":"Port accepted. The body is the new port, opening.","content":{"application/json":{"schema":{"type":"object","required":["id","virtual_machine_id","node_id","protocol","public_port","guest_port","status","created_at"],"properties":{"id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"id","typeLabel":"string\u003cuuid>"},"virtual_machine_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"virtual_machine_id","typeLabel":"string\u003cuuid>"},"node_id":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"node_id","typeLabel":"string\u003cuuid>"},"protocol":{"type":"string","enum":["tcp","udp"],"isRequired":true,"uniqueKey":"protocol","typeLabel":"enum\u003cstring>"},"public_port":{"type":"integer","description":"The port on the host's public IP. Held for this VM while the reservation is private, so it opens again when the reservation switches back to public.","isRequired":true,"uniqueKey":"public_port","typeLabel":"integer"},"guest_port":{"type":"integer","description":"The port inside the VM that public_port forwards to.","isRequired":true,"uniqueKey":"guest_port","typeLabel":"integer"},"status":{"type":"string","enum":["opening","open","private","failed"],"description":"opening until the host applies the change; open when published on the host's public IP; private while the reservation is private (reach the VM at its private_ip instead); failed with failure set.","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"failure":{"oneOf":[{"type":"null","uniqueKey":"failure.oneOf.0","typeLabel":"null"},{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"port_in_use_on_host or port_forwarding_failed.","isRequired":true,"uniqueKey":"failure.oneOf.1.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"failure.oneOf.1.message","typeLabel":"string"}},"uniqueKey":"failure.oneOf.1","typeLabel":"object"}],"uniqueKey":"failure","typeLabel":"null | object"}},"uniqueKey":"","typeLabel":"object"},"example":{"id":"99999999-9999-4999-8999-999999999999","virtual_machine_id":"66666666-6666-4666-8666-666666666666","node_id":"33333333-3333-4333-8333-333333333333","protocol":"tcp","public_port":8443,"guest_port":8443,"status":"opening","failure":null,"created_at":"2026-10-22T18:00:00Z"},"examples":{"Example":{"title":"Example","value":{"id":"99999999-9999-4999-8999-999999999999","virtual_machine_id":"66666666-6666-4666-8666-666666666666","node_id":"33333333-3333-4333-8333-333333333333","protocol":"tcp","public_port":8443,"guest_port":8443,"status":"opening","failure":null,"created_at":"2026-10-22T18:00:00Z"}}},"exampleType":"examples"}},"exampleType":"examples"},"6e7b6a5c-edf0-4142-993a-f05310544564":{"description":"The VM port is not 1-65535, the public port is outside the allowed ranges, or the protocol is not tcp or udp (port_protocol_not_allowed).","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.message","typeLabel":"string"}},"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"example":{"detail":{"code":"public_port_not_allowed","message":"Choose a public port from 1024 to 21999 or 23000 to 29999. Ports the host itself uses are not available."}},"examples":{"Example":{"title":"Example","value":{"detail":{"code":"public_port_not_allowed","message":"Choose a public port from 1024 to 21999 or 23000 to 29999. Ports the host itself uses are not available."}}}},"exampleType":"examples"}},"exampleType":"examples"},"73353994-e0a4-4dae-95fd-1778551cb7f0":{"description":"The credential is missing, invalid, revoked, or no longer belongs to a current organization member. Check the HTTP status before parsing the body.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.message","typeLabel":"string"}},"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"\u003cstring>","detail":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"13b63bc1-b9b9-4d1a-9576-b3a561d152f8":{"description":"The VM, its node, or its reservation is absent or not owned by your organization.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.message","typeLabel":"string"}},"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"example":{"detail":{"code":"virtual_machine_not_found","message":"Ornn could not find that virtual machine."}},"examples":{"Example":{"title":"Example","value":{"detail":{"code":"virtual_machine_not_found","message":"Ornn could not find that virtual machine."}}}},"exampleType":"examples"}},"exampleType":"examples"},"a8be3a55-5e4c-471c-af2c-4b0b936a2459":{"description":"Another VM on this host holds the public port for that protocol (public_port_in_use), this VM already opens that VM port and protocol, the VM has 16 ports, the VM is not running, the reservation is switching networks (virtual_machine_busy), or its host needs a management update (port_forwarding_unavailable).","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.message","typeLabel":"string"}},"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"example":{"detail":{"code":"public_port_in_use","message":"Another VM on this host already uses this public port. Choose a different public port."}},"examples":{"Example":{"title":"Example","value":{"detail":{"code":"public_port_in_use","message":"Another VM on this host already uses this public port. Choose a different public port."}}}},"exampleType":"examples"}},"exampleType":"examples"},"673c0927-62b3-4fcc-aac9-2d5ec39da42a":{"description":"Unsuccessful request. Check HTTP status first. Errors may have detail.code/detail.message, a string detail and optional top-level code, or an empty/non-JSON body. 401: invalid credential; 403: access or approval required; 404: not visible or credentials not ready; 409: lifecycle conflict; 429: back off; 5xx: service failure. Inspect current state before retrying mutations.","content":{"application/json":{"schema":{"type":"object","properties":{"code":{"type":"string","uniqueKey":"code","typeLabel":"string"},"detail":{"oneOf":[{"type":"string","uniqueKey":"detail.oneOf.0","typeLabel":"string"},{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.code","typeLabel":"string"},"message":{"type":"string","isRequired":true,"uniqueKey":"detail.oneOf.1.message","typeLabel":"string"}},"uniqueKey":"detail.oneOf.1","typeLabel":"object"}],"uniqueKey":"detail","typeLabel":"string | object"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"code":"\u003cstring>","detail":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"749cca98-0c4b-4104-9f69-95063655cb50":{"OrnnApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ornn_sk_...","description":"Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.","scopes":[],"schemeName":"OrnnApiKey"}}},"servers":{"44c1a685-3b9c-4169-aa9e-e593ad109927":{"url":"https://api.ornn.com","description":"Production"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"ornn_sk_...","description":"Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.","scopes":[],"schemeName":"OrnnApiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Create an organization API key in Account Settings > Developer. Do not send this key to the Kubernetes API server.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"OrnnApiKey","name":"Authorization"}],"title":"OrnnApiKey"}]},"originalFileLocation":"openapi.yaml"},"subdomain":"ornn","siteName":"Ornn","title":"Open a VM port - Ornn","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-25T22:04:01.612Z","originalFileLocation":"api-reference/virtual-machines/open-port.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"dark\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"dark\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host\u0026#x27;s public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM\u0026#x27;s ports until its status is open, private, or failed.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Ornn\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ornn/xSbMvd8knxlcr1Zk/_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/ornn/xSbMvd8knxlcr1Zk/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ornn/xSbMvd8knxlcr1Zk/_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/ornn/xSbMvd8knxlcr1Zk/_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/ornn/xSbMvd8knxlcr1Zk/_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/ornn/xSbMvd8knxlcr1Zk/_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/ornn/xSbMvd8knxlcr1Zk/_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/ornn/xSbMvd8knxlcr1Zk/_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/ornn/xSbMvd8knxlcr1Zk/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Open a VM port - Ornn\">\u003cmeta data-mint-head property=\"og:description\" content=\"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host\u0026#x27;s public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM\u0026#x27;s ports until its status is open, private, or failed.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Ornn\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ornn.com/api-reference/virtual-machines/open-port\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ornn.mintlify.app/_mintlify/api/og/v2?division=VM+and+Bare+Metal\u0026amp;title=Open+a+VM+port\u0026amp;description=Opens+one+TCP+or+UDP+port+on+a+running+VM.+protocol+defaults+to+tcp.+public_port+defaults+to+guest_port+and+must+be+in+1024-21999+or+23000-29999%3B+ports+the+host\u0026amp;theme=31adf0fb1ec6851fb1f1fc02\u0026amp;signature=67654b9fde7371f515362fd9a1b3281df573a0e0250bdb4dabe0b109cad38948\">\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=\"Open a VM port - Ornn\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host\u0026#x27;s public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM\u0026#x27;s ports until its status is open, private, or failed.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ornn.mintlify.app/_mintlify/api/og/v2?division=VM+and+Bare+Metal\u0026amp;title=Open+a+VM+port\u0026amp;description=Opens+one+TCP+or+UDP+port+on+a+running+VM.+protocol+defaults+to+tcp.+public_port+defaults+to+guest_port+and+must+be+in+1024-21999+or+23000-29999%3B+ports+the+host\u0026amp;theme=31adf0fb1ec6851fb1f1fc02\u0026amp;signature=67654b9fde7371f515362fd9a1b3281df573a0e0250bdb4dabe0b109cad38948\">\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/ornn/xSbMvd8knxlcr1Zk/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Ornn\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#000000\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ornn.com/api-reference/virtual-machines/open-port\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/virtual-machines/open-port.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ornn.com/#organization\",\"name\":\"Ornn\",\"url\":\"https://docs.ornn.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ornn/kJ0iqH_E0L2Jw6j6/images/ornn-docs-logo-light.svg?fit=max\u0026auto=format\u0026n=kJ0iqH_E0L2Jw6j6\u0026q=85\u0026s=6f5b0c872f8bb7b4b5b6b8ab492dc2a6\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ornn.com#website\",\"name\":\"Ornn\",\"url\":\"https://docs.ornn.com\",\"publisher\":{\"@id\":\"https://docs.ornn.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ornn.com/api-reference/virtual-machines/open-port#webpage\",\"url\":\"https://docs.ornn.com/api-reference/virtual-machines/open-port\",\"name\":\"Open a VM port\",\"description\":\"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host's public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM's ports until its status is open, private, or failed.\",\"dateModified\":\"2026-10-25T22:04:01.612Z\",\"isPartOf\":{\"@id\":\"https://docs.ornn.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ornn.com/api-reference/virtual-machines/open-port#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ornn.com/api-reference/virtual-machines/open-port#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"VM and Bare Metal\",\"item\":\"https://docs.ornn.com/api-reference/virtual-machines/set-image\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Open a VM port\",\"item\":\"https://docs.ornn.com/api-reference/virtual-machines/open-port\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.ornn.com/api-reference/virtual-machines/open-port#apireference\",\"headline\":\"Open a VM port\",\"name\":\"Open a VM port\",\"description\":\"Opens one TCP or UDP port on a running VM. protocol defaults to tcp. public_port defaults to guest_port and must be in 1024-21999 or 23000-29999; ports the host itself serves are refused. A public port belongs to one VM per host and protocol, so a TCP port and a UDP port can share a number. A VM opens at most 16 ports. While the reservation is public the port is reachable from the internet on the host's public IP, so open only what the VM should serve publicly. A 202 response is acceptance: the port is opening until the host applies it. Poll the VM's ports until its status is open, private, or failed.\",\"url\":\"https://docs.ornn.com/api-reference/virtual-machines/open-port\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ornn.com/api-reference/virtual-machines/open-port#webpage\"},\"dateModified\":\"2026-10-25T22:04:01.612Z\",\"publisher\":{\"@id\":\"https://docs.ornn.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ornn.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Ornn\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Ornn","nav":{"global":null,"tabs":[{"tab":"Guides","pages":[{"title":"Guides","href":"/introduction"}]},{"tab":"API reference","groups":[{"group":"Start here","pages":[{"title":"Integrate with the Ornn REST API","sidebarTitle":"Overview","href":"/api-reference/overview"},{"title":"Check API authentication","openapi":"openapi.yaml GET /v1/auth/session","href":"/api-reference/session"}]},{"group":"Reserved capacity","pages":[{"title":"List reservations","openapi":"openapi.yaml GET /commerce/reservations","href":"/api-reference/reservations/list"},{"title":"Get a reservation","openapi":"openapi.yaml GET /commerce/reservations/{reservationId}","href":"/api-reference/reservations/get"},{"title":"List reserved GPU nodes","openapi":"openapi.yaml GET /v1/orchestrator/nodes","href":"/api-reference/nodes/list"}]},{"group":"VM and Bare Metal","pages":[{"title":"Choose a VM disk","openapi":"openapi.yaml PUT /commerce/reservations/{reservationId}/disk","href":"/api-reference/virtual-machines/set-image"},{"title":"Activate a reservation","openapi":"openapi.yaml POST /commerce/reservations/{reservationId}/activate","href":"/api-reference/virtual-machines/activate"},{"title":"Launch VM or Bare Metal access","openapi":"openapi.yaml POST /v1/orchestrator/nodes/reservations/{reservation_id}/launch","href":"/api-reference/virtual-machines/launch"},{"title":"List a reservation's VMs","openapi":"openapi.yaml GET /v1/orchestrator/reservations/{reservation_id}/virtual-machines","href":"/api-reference/virtual-machines/list"},{"title":"Reboot a VM","openapi":"openapi.yaml POST /v1/orchestrator/nodes/{node_id}/virtual-machines/{vm_id}/reboot","href":"/api-reference/virtual-machines/reboot"},{"title":"Reimage a VM","openapi":"openapi.yaml POST /v1/orchestrator/nodes/{node_id}/virtual-machines/{vm_id}/reimage","href":"/api-reference/virtual-machines/reimage"},{"title":"List a VM's ports","openapi":"openapi.yaml GET /v1/orchestrator/nodes/{node_id}/virtual-machines/{vm_id}/ports","description":"Lists the TCP and UDP ports opened on one VM, ordered by public port and then protocol. While the reservation is public, each open port forwards public_port on the host's public IP to guest_port in the VM over its protocol. While it is private, nothing is published on the host and every port is reachable at the VM's private_ip from your organization's private network.","href":"/api-reference/virtual-machines/list-ports"},{"title":"Open a VM port","openapi":"openapi.yaml POST /v1/orchestrator/nodes/{node_id}/virtual-machines/{vm_id}/ports","href":"/api-reference/virtual-machines/open-port"},{"title":"Close a VM port","openapi":"openapi.yaml DELETE /v1/orchestrator/nodes/{node_id}/virtual-machines/{vm_id}/ports/{port_id}","description":"Closes one port on a running VM and frees its public port number on the host. A 202 response is acceptance; the host stops forwarding the port shortly after.","href":"/api-reference/virtual-machines/close-port"},{"title":"Get a reserved node","openapi":"openapi.yaml GET /v1/orchestrator/nodes/{node_id}","href":"/api-reference/bare-metal/get-node"},{"title":"Reboot or hard reset a Bare Metal host","openapi":"openapi.yaml POST /v1/orchestrator/nodes/{node_id}/reboot","href":"/api-reference/bare-metal/reboot"},{"title":"Switch access mode or network","openapi":"openapi.yaml POST /v1/orchestrator/nodes/reservations/{reservation_id}/switch-access","href":"/api-reference/virtual-machines/switch-access"},{"title":"Stop a reservation","openapi":"openapi.yaml POST /commerce/reservations/{reservationId}/stop","href":"/api-reference/virtual-machines/stop"}]},{"group":"Clusters","pages":[{"title":"Create a cluster","openapi":"openapi.yaml POST /v1/orchestrator/controllers","href":"/api-reference/clusters/create"},{"title":"List clusters and workers","openapi":"openapi.yaml GET /v1/orchestrator/controllers","href":"/api-reference/clusters/list"},{"title":"Get cluster access","openapi":"openapi.yaml GET /v1/orchestrator/controllers/{controller_id}/access","href":"/api-reference/clusters/access"},{"title":"Tear down a cluster","openapi":"openapi.yaml POST /v1/orchestrator/controllers/{controller_id}/teardown","href":"/api-reference/clusters/teardown"}]},{"group":"Workers","pages":[{"title":"Add a physical worker","openapi":"openapi.yaml POST /v1/orchestrator/controllers/{controller_id}/nodes/{node_id}","href":"/api-reference/clusters/add-node"},{"title":"Remove a physical worker","openapi":"openapi.yaml DELETE /v1/orchestrator/controllers/{controller_id}/nodes/{node_id}","href":"/api-reference/clusters/remove-node"},{"title":"Add a VM worker","openapi":"openapi.yaml POST /v1/orchestrator/controllers/{controller_id}/virtual-machines/{virtual_machine_id}","href":"/api-reference/clusters/add-vm"},{"title":"Remove a VM worker","openapi":"openapi.yaml DELETE /v1/orchestrator/controllers/{controller_id}/virtual-machines/{virtual_machine_id}","href":"/api-reference/clusters/remove-vm"}]},{"group":"SSH keys","pages":[{"title":"List organization SSH keys","openapi":"openapi.yaml GET /v1/organizations/{organization_id}/ssh-keys","href":"/api-reference/ssh-keys/list"},{"title":"Add an organization SSH key","openapi":"openapi.yaml POST /v1/organizations/{organization_id}/ssh-keys","href":"/api-reference/ssh-keys/create"},{"title":"Revoke an organization SSH key","openapi":"openapi.yaml DELETE /v1/organizations/{organization_id}/ssh-keys/{key_id}","href":"/api-reference/ssh-keys/revoke"},{"title":"List a reservation's SSH keys","openapi":"openapi.yaml GET /v1/orchestrator/nodes/reservations/{reservation_id}/ssh-keys","href":"/api-reference/ssh-keys/reservation-list"},{"title":"Assign an SSH key to a reservation","openapi":"openapi.yaml POST /v1/orchestrator/nodes/reservations/{reservation_id}/ssh-keys","href":"/api-reference/ssh-keys/reservation-assign"},{"title":"Unassign an SSH key from a reservation","openapi":"openapi.yaml DELETE /v1/orchestrator/nodes/reservations/{reservation_id}/ssh-keys/{key_id}","href":"/api-reference/ssh-keys/reservation-unassign"},{"title":"Push SSH keys to a machine","openapi":"openapi.yaml POST /v1/orchestrator/nodes/{node_id}/push-keys","href":"/api-reference/ssh-keys/push"}]},{"group":"Storage","pages":[{"title":"List volumes","openapi":"openapi.yaml GET /v1/orchestrator/drives","href":"/api-reference/storage/list"},{"title":"Create a volume","openapi":"openapi.yaml POST /v1/orchestrator/drives","href":"/api-reference/storage/create"},{"title":"Get a volume","openapi":"openapi.yaml GET /v1/orchestrator/drives/{drive_id}","href":"/api-reference/storage/get"},{"title":"Attach or detach a volume","openapi":"openapi.yaml PATCH /v1/orchestrator/drives/{drive_id}","href":"/api-reference/storage/attach"},{"title":"Delete a volume","openapi":"openapi.yaml DELETE /v1/orchestrator/drives/{drive_id}","href":"/api-reference/storage/delete"},{"title":"List volume files","openapi":"openapi.yaml GET /v1/orchestrator/drives/{drive_id}/contents","href":"/api-reference/storage/files/list"},{"title":"Upload a small file","openapi":"openapi.yaml PUT /v1/orchestrator/drives/{drive_id}/files/{file_path}","href":"/api-reference/storage/files/upload"},{"title":"Start a staged upload","openapi":"openapi.yaml POST /v1/orchestrator/drives/{drive_id}/uploads","href":"/api-reference/storage/files/upload-start"},{"title":"Complete a staged upload","openapi":"openapi.yaml POST /v1/orchestrator/drives/{drive_id}/uploads/{upload_id}","href":"/api-reference/storage/files/upload-complete"},{"title":"Cancel a staged upload","openapi":"openapi.yaml DELETE /v1/orchestrator/drives/{drive_id}/uploads/{upload_id}","href":"/api-reference/storage/files/upload-cancel"},{"title":"Download a file","openapi":"openapi.yaml GET /v1/orchestrator/drives/{drive_id}/files/{file_path}","href":"/api-reference/storage/files/download"},{"title":"Download a volume as a ZIP archive","openapi":"openapi.yaml GET /v1/orchestrator/drives/{drive_id}/archive","href":"/api-reference/storage/files/archive"},{"title":"Delete a file","openapi":"openapi.yaml DELETE /v1/orchestrator/drives/{drive_id}/files/{file_path}","href":"/api-reference/storage/files/delete"},{"title":"Delete a folder","openapi":"openapi.yaml DELETE /v1/orchestrator/drives/{drive_id}/folders/{folder_path}","href":"/api-reference/storage/files/delete-folder"},{"title":"Delete all volume files","openapi":"openapi.yaml DELETE /v1/orchestrator/drives/{drive_id}/contents","href":"/api-reference/storage/files/clear"}]},{"group":"GitHub repositories","pages":[{"title":"List GitHub connections","openapi":"openapi.yaml GET /v1/orchestrator/github/connections","href":"/api-reference/storage/github/connections"},{"title":"List GitHub repositories","openapi":"openapi.yaml GET /v1/orchestrator/github/connections/{connection_id}/repositories","href":"/api-reference/storage/github/repositories"},{"title":"List repository branches","openapi":"openapi.yaml GET /v1/orchestrator/github/connections/{connection_id}/repositories/{repository_id}/branches","href":"/api-reference/storage/github/branches"},{"title":"Pull a repository into a volume","openapi":"openapi.yaml POST /v1/orchestrator/drives/{drive_id}/github","href":"/api-reference/storage/github/pull"},{"title":"Sync a repository","openapi":"openapi.yaml POST /v1/orchestrator/drives/{drive_id}/github/{folder}/sync","href":"/api-reference/storage/github/sync"},{"title":"Disconnect a GitHub account","openapi":"openapi.yaml DELETE /v1/orchestrator/github/connections/{connection_id}","href":"/api-reference/storage/github/disconnect"}]},{"group":"Private networks","pages":[{"title":"Private networks and WireGuard","sidebarTitle":"Overview","href":"/api-reference/networks/overview"},{"title":"List private networks","openapi":"openapi.yaml GET /v1/orchestrator/networks","href":"/api-reference/networks/list"},{"title":"Create a private network","openapi":"openapi.yaml POST /v1/orchestrator/networks","href":"/api-reference/networks/create"},{"title":"Get a private network","openapi":"openapi.yaml GET /v1/orchestrator/networks/{network_id}","href":"/api-reference/networks/get"},{"title":"Rename a private network","openapi":"openapi.yaml PATCH /v1/orchestrator/networks/{network_id}","href":"/api-reference/networks/rename"},{"title":"Delete a private network","openapi":"openapi.yaml DELETE /v1/orchestrator/networks/{network_id}","href":"/api-reference/networks/delete"},{"title":"List default-network WireGuard configs","openapi":"openapi.yaml GET /v1/orchestrator/networks/shared/peers","href":"/api-reference/networks/wireguard/default-list"},{"title":"Add a default-network WireGuard config","openapi":"openapi.yaml POST /v1/orchestrator/networks/shared/peers","href":"/api-reference/networks/wireguard/default-create"},{"title":"Remove a default-network WireGuard config","openapi":"openapi.yaml DELETE /v1/orchestrator/networks/shared/peers/{peer_id}","href":"/api-reference/networks/wireguard/default-delete"},{"title":"List network WireGuard configs","openapi":"openapi.yaml GET /v1/orchestrator/networks/{network_id}/peers","href":"/api-reference/networks/wireguard/list"},{"title":"Add a network WireGuard config","openapi":"openapi.yaml POST /v1/orchestrator/networks/{network_id}/peers","href":"/api-reference/networks/wireguard/create"},{"title":"Remove a network WireGuard config","openapi":"openapi.yaml DELETE /v1/orchestrator/networks/{network_id}/peers/{peer_id}","href":"/api-reference/networks/wireguard/delete"}]},{"group":"Monitoring","pages":[{"title":"Read machine metrics and console logs","sidebarTitle":"Overview","href":"/api-reference/monitoring/overview"},{"title":"Get latest node telemetry","openapi":"openapi.yaml GET /v1/observability/nodes/{node_id}/telemetry/latest","href":"/api-reference/monitoring/node-telemetry-latest"},{"title":"Query node telemetry history","openapi":"openapi.yaml GET /v1/observability/nodes/{node_id}/telemetry/query","href":"/api-reference/monitoring/node-telemetry-query"},{"title":"Get latest VM telemetry","openapi":"openapi.yaml GET /v1/observability/virtual-machines/{virtual_machine_id}/telemetry/latest","href":"/api-reference/monitoring/vm-telemetry-latest"},{"title":"Query VM telemetry history","openapi":"openapi.yaml GET /v1/observability/virtual-machines/{virtual_machine_id}/telemetry/query","href":"/api-reference/monitoring/vm-telemetry-query"},{"title":"Get latest telemetry for many machines","openapi":"openapi.yaml POST /v1/observability/nodes/telemetry/latest","href":"/api-reference/monitoring/telemetry-batch"},{"title":"Query node console logs","openapi":"openapi.yaml GET /v1/observability/nodes/{node_id}/logs/{stream}/query","href":"/api-reference/monitoring/node-logs"},{"title":"Query VM console logs","openapi":"openapi.yaml GET /v1/observability/virtual-machines/{virtual_machine_id}/logs/{stream}/query","href":"/api-reference/monitoring/vm-logs"}]},{"group":"Reserve","pages":[{"title":"List capacity listings","openapi":"openapi.yaml GET /commerce/v2/listings","href":"/api-reference/reserve/list-listings"},{"title":"Get a capacity listing","openapi":"openapi.yaml GET /commerce/v2/listings/{listingId}","href":"/api-reference/reserve/get-listing"},{"title":"List a listing's terms","openapi":"openapi.yaml GET /commerce/v2/listings/{listingId}/terms","href":"/api-reference/reserve/list-terms"},{"title":"Post a Reserve offer","openapi":"openapi.yaml POST /v1/markets/offers","href":"/api-reference/reserve/post-offer"},{"title":"List offers","openapi":"openapi.yaml GET /v1/markets/offers","href":"/api-reference/reserve/list-my-offers"},{"title":"Cancel an offer","openapi":"openapi.yaml DELETE /v1/markets/offers/{offerId}","href":"/api-reference/reserve/cancel-offer"},{"title":"Accept an offer on your listing","openapi":"openapi.yaml POST /v1/markets/offers/{offerId}/accept","href":"/api-reference/reserve/accept-offer"}]},{"group":"Market","pages":[{"title":"Get a listing's free capacity","openapi":"openapi.yaml GET /v1/markets/listings/{listingId}/availability","href":"/api-reference/market/availability"},{"title":"Buy Market windows","openapi":"openapi.yaml POST /v1/markets/bookings","href":"/api-reference/market/buy"},{"title":"List your bookings","openapi":"openapi.yaml GET /v1/markets/bookings","href":"/api-reference/market/list-bookings"},{"title":"Cancel a booking","openapi":"openapi.yaml DELETE /v1/markets/bookings/{bookingId}","href":"/api-reference/market/cancel-booking"}]},{"group":"Order books","pages":[{"title":"List order books","openapi":"openapi.yaml GET /v1/markets/books","href":"/api-reference/order-books/list-books"},{"title":"Get order book depth","openapi":"openapi.yaml GET /v1/markets/books/{gpuSlug}","href":"/api-reference/order-books/get-book"},{"title":"List recent trades","openapi":"openapi.yaml GET /v1/markets/books/{gpuSlug}/trades","href":"/api-reference/order-books/list-trades"},{"title":"Quote a bid","openapi":"openapi.yaml GET /v1/markets/books/{gpuSlug}/quote","href":"/api-reference/order-books/quote"},{"title":"Place a bid","openapi":"openapi.yaml POST /v1/markets/orders","href":"/api-reference/order-books/place-bid"},{"title":"List your orders","openapi":"openapi.yaml GET /v1/markets/orders","href":"/api-reference/order-books/list-orders"},{"title":"Get an order","openapi":"openapi.yaml GET /v1/markets/orders/{orderId}","href":"/api-reference/order-books/get-order"},{"title":"Cancel a bid","openapi":"openapi.yaml DELETE /v1/markets/orders/{orderId}","href":"/api-reference/order-books/cancel-order"},{"title":"List your fills","openapi":"openapi.yaml GET /v1/markets/fills","href":"/api-reference/order-books/list-fills"},{"title":"Get a fill","openapi":"openapi.yaml GET /v1/markets/fills/{fillId}","href":"/api-reference/order-books/get-fill"},{"title":"End a fill","openapi":"openapi.yaml POST /commerce/reservations/{reservationId}/stop","href":"/api-reference/order-books/end-fill"}]},{"group":"Relist","pages":[{"title":"Relist capacity from a reservation","openapi":"openapi.yaml POST /commerce/reservations/{reservationId}/relist","href":"/api-reference/relist/create"},{"title":"Pause, resume, or withdraw your listing","openapi":"openapi.yaml PATCH /commerce/v2/listings/{listingId}","href":"/api-reference/relist/update-listing"},{"title":"Delist your listing","openapi":"openapi.yaml POST /commerce/v2/listings/{listingId}/delist","href":"/api-reference/relist/delist"},{"title":"Add a term to your listing","openapi":"openapi.yaml POST /commerce/v2/listings/{listingId}/terms","href":"/api-reference/relist/add-term"},{"title":"Delete a term from your listing","openapi":"openapi.yaml DELETE /commerce/v2/listings/{listingId}/terms/{listingTermsId}","href":"/api-reference/relist/delete-term"},{"title":"List your listing's nodes","openapi":"openapi.yaml GET /commerce/v2/listings/{listingId}/nodes","href":"/api-reference/relist/list-nodes"}]},{"group":"Billing","pages":[{"title":"List invoices","openapi":"openapi.yaml GET /commerce/invoices","href":"/api-reference/billing/invoices-list"},{"title":"Get an invoice","openapi":"openapi.yaml GET /commerce/invoices/{invoiceId}","href":"/api-reference/billing/invoice-get"},{"title":"List a reservation's invoices","openapi":"openapi.yaml GET /commerce/reservations/{reservationId}/invoices","href":"/api-reference/billing/reservation-invoices"},{"title":"Get billing summary","openapi":"openapi.yaml GET /commerce/billing/summary","href":"/api-reference/billing/summary"},{"title":"Get GPU usage cost","openapi":"openapi.yaml GET /commerce/billing/showback","href":"/api-reference/billing/usage"},{"title":"Get billing contact","openapi":"openapi.yaml GET /commerce/billing/contact","href":"/api-reference/billing/contact"},{"title":"Check for a saved card","openapi":"openapi.yaml GET /commerce/billing/payment-method","href":"/api-reference/billing/payment-method"},{"title":"List account balances","openapi":"openapi.yaml GET /v1/ledger/accounts","href":"/api-reference/billing/credits"},{"title":"List account transactions","openapi":"openapi.yaml GET /v1/ledger/transactions","href":"/api-reference/billing/transactions"}]}]}]},"title":"Open a VM port - Ornn","buildId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","deploymentId":"dpl_cadrRc5H9XQiJQbDFN5mcYRs2PAj","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-DKJwRUt2.js","utils-CWD_VS3u.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-oFjciODD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C76WsxC3.js","snippetPresets-DvPMxpX_.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-CuNQfndH.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-BVFpVUoF.js","shallow-t59Jg5Kr.js","getApiPlaygroundDisplay-C_JZ4amX.js","CodeSnippet-CLRDnx_h.js","CodeSnippets-C2myU4kc.js","Page-7TwLLapg.js","getPastedJson-B-JaVXw7.js","icon-BA-iDhH3.js","MethodPill-D4qZABFp.js","DuplicateIcon-THIDKO1O.js","createIcon-CYYJwgFd.js","DynamicMarkdown-UGQuxDKp.js","SectionHeading-jYELb23h.js","axios-vUo_bRtp.js","Markdown-DKsLa3wy.js","clsx-CefdjKz2.js","lib--scc4DXi.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-BaREnp3o.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-sgx_0XzF.js"]}