Xeonr Developer Docs
API SpecificationApps

CreateAppVersion

POST
/containers.api.v1.AppService/CreateAppVersion

Versions. An App is long-lived; a version is one immutable (image, port, workspace) triple beneath it. Promotion is a pointer flip, which is what makes rollback free.

Authorization

BearerAuth
AuthorizationBearer <token>

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

Connect-Protocol-Version*number

Define the version of the Connect protocol

Value in1
Connect-Timeout-Ms?number

Define the timeout, in ms

Request Body

application/json

appId?string
environmentId?string
port?integer
workspace?Deprecated

Deprecated: use workspaces. Treated as a single-element list when set.

label?string
promote?boolean

promote makes this the active version as soon as it is created, which is what an ordinary deploy wants. False creates it dormant, for staging a version before cutting traffic to it.

workspaces?

Filesystems every replica of this version sees. Supersedes workspace; setting both is an error rather than a merge.

workingDir?string

Where the workload starts. Absolute; empty selects the default, which differs by primitive on purpose:

sandbox the first read-write mount — an interactive user has to land somewhere writable job the first read-write mount — inputs are already staged there app the IMAGE'S OWN WORKDIR. An App runs an image built elsewhere and that WORKDIR is part of its contract, so the platform does not override it just because the version happens to declare a writable mount.

Set it explicitly when the default is wrong: a monorepo mounted at /workspace whose build runs in /workspace/apps/web has no other way to say so, and relying on the default couples the working directory to the ORDER of the mount list, which is not something a caller expects to matter.

[key: string]?never

Response Body

application/json

application/json

curl -X POST "https://containers.xeonr.io/containers.api.v1.AppService/CreateAppVersion" \  -H "Connect-Protocol-Version: 1" \  -H "Content-Type: application/json" \  -d '{}'
{
  "version": {
    "versionId": "string",
    "appId": "string",
    "environmentId": "string",
    "port": 0,
    "workspace": {
      "snapshotId": "string",
      "mountPath": "string",
      "readOnly": true,
      "workspaceId": "string",
      "ephemeral": true,
      "ephemeralFromSnapshotId": "string"
    },
    "state": "APP_VERSION_STATE_UNSPECIFIED",
    "label": "string",
    "createdAtUnix": 0,
    "workspaces": [
      {
        "snapshotId": "string",
        "mountPath": "string",
        "readOnly": true,
        "workspaceId": "string",
        "ephemeral": true,
        "ephemeralFromSnapshotId": "string"
      }
    ],
    "workingDir": "string"
  },
  "app": {
    "appId": "string",
    "namespace": "string",
    "label": "string",
    "scaling": {
      "minInstances": 0,
      "maxInstances": 0,
      "concurrency": 0,
      "idleTimeoutSec": 0,
      "activationTimeoutSec": 0
    },
    "resources": {
      "cpuMillis": 0,
      "memoryMb": 0,
      "ephemeralMb": 0,
      "pids": 0
    },
    "env": {
      "property1": "string",
      "property2": "string"
    },
    "egress": {
      "egressPolicyId": "string"
    },
    "state": "APP_STATE_UNSPECIFIED",
    "createdAtUnix": 0,
    "updatedAtUnix": 0,
    "hostname": "string",
    "activeVersionId": "string",
    "autoStart": true,
    "access": "APP_ACCESS_UNSPECIFIED",
    "key": "string"
  }
}
{
  "code": "not_found",
  "message": "string",
  "details": [
    {
      "type": "string",
      "value": "string",
      "debug": {}
    }
  ]
}