Expose Sandbox Port
Publishes a sandbox port on an isolated preview URL and records it on the sandbox; idempotent per port. port must be 1-65535, and 53, 80 and 443 are refused because the egress capture owns them (InvalidArgument). Only AUTH_SIGNED_URL returns an access token (embedded in the URL); FORWARD_AUTH and PUBLIC are resolved at access time. Unimplemented when no preview domain is configured.
Access: namespace OPERATOR or above (write)
Authorization
BearerAuth A namespace-scoped API key (cpk_…) for machines, or a Xeonr Auth OIDC
token for humans. The key's namespace and role are pinned server-side.
In: header
Header Parameters
Define the version of the Connect protocol
Define the timeout, in ms
Request Body
application/json
1 <= length <= 641-65535; 53, 80 and 443 are reserved by the egress capture and refused.
1 <= value <= 65535enum.defined_only = true
"AUTH_UNSPECIFIED" | "AUTH_SIGNED_URL" | "AUTH_FORWARD_AUTH" | "AUTH_PUBLIC"Response Body
application/json
application/json
curl -X POST "https://containers.xeonr.io/containers.api.v1.SandboxService/ExposePort" \ -H "Connect-Protocol-Version: 1" \ -H "Connect-Timeout-Ms: 1000" \ -H "Content-Type: application/json" \ -d '{}'{
"port": {
"port": 0,
"url": "string",
"accessToken": "string",
"auth": "AUTH_UNSPECIFIED"
}
}{
"code": "not_found",
"message": "string",
"details": [
{
"type": "string",
"value": "string",
"debug": {}
}
]
}Exec In Sandbox POST
Bidirectional stream running an argv (never shell-joined) in a RUNNING sandbox. The first client message must be the ExecSpec; later messages are stdin chunks or stdin_close. The server streams stdout/stderr frames then a final exit whose code/termination is status-derived; a timeout_sec deadline yields TERMINATION_TIMEOUT with code -1. Keeps the idle-suspend clock fresh for the session. Rejects an empty argv and wait=EXEC_WAIT_PROCESS combined with tty (InvalidArgument), and a sandbox that is not running (FailedPrecondition). **Access:** namespace OPERATOR or above (write)
Get Sandbox POST
Returns one sandbox. Egress fields are filled from the live egress binding, so they show what the proxy enforces now (expired grants are omitted). NotFound for an unknown id. **Access:** namespace VIEWER or above (read)