# Code generated by cmd/openapi-gen. DO NOT EDIT. # Regenerate with: make doc-gen components: schemas: ArtifactDefinition: properties: annotations: $ref: '#/components/schemas/StringMap' createdAt: format: date-time type: string description: type: string displayName: type: string id: format: uuid type: string kind: enum: - model - image type: string labels: $ref: '#/components/schemas/StringMap' name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string spec: additionalProperties: {} type: object tenantName: type: string updatedAt: format: date-time type: string required: - createdAt - id - kind - name - namespace - tenantName - updatedAt type: object ArtifactDefinitionCreateRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 4096 type: string displayName: maxLength: 256 type: string labels: $ref: '#/components/schemas/StringMap' name: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string spec: additionalProperties: {} type: object required: - name type: object ArtifactDefinitionList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/ArtifactDefinition' type: array partial: type: boolean required: - count - items type: object ArtifactDefinitionPatchRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 4096 type: string displayName: maxLength: 256 type: string labels: $ref: '#/components/schemas/StringMap' spec: additionalProperties: {} type: object type: object ArtifactRef: properties: kind: enum: - image - model type: string name: type: string version: type: string required: - kind - name - version type: object ArtifactResolveResponse: properties: digest: type: string expiresAt: format: date-time type: string pullCredentials: additionalProperties: {} type: object storageKind: enum: - oci - s3 type: string uri: type: string required: - storageKind - uri type: object ArtifactSource: description: How an artifact version was added. enum: - webUpload - oras - dockerPush - external type: string ArtifactUpdateRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 4096 type: string displayName: maxLength: 256 type: string labels: $ref: '#/components/schemas/StringMap' type: object Backend: properties: config: additionalProperties: {} type: object engine: type: string name: enum: - native - kubeflow-trainer - kserve - custom type: string required: - engine - name type: object Condition: properties: lastTransitionTime: format: date-time type: string message: type: string reason: type: string status: enum: - "True" - "False" - Unknown type: string type: type: string required: - status - type type: object ConfigMapInit: properties: name: type: string sourceConfigMapRef: $ref: '#/components/schemas/ConfigMapSourceRef' required: - name - sourceConfigMapRef type: object ConfigMapSourceRef: properties: name: type: string namespace: type: string required: - name - namespace type: object EnvVar: properties: name: type: string value: type: string valueFrom: additionalProperties: {} type: object required: - name type: object Event: properties: count: minimum: 0 type: integer firstTimestamp: format: date-time type: string involvedObject: properties: kind: type: string name: type: string namespace: type: string type: object lastTimestamp: format: date-time type: string message: type: string reason: type: string source: type: string type: enum: - Normal - Warning type: string required: - lastTimestamp - message - reason - type type: object EventList: properties: count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Event' type: array required: - count - items type: object Experiment: properties: annotations: $ref: '#/components/schemas/StringMap' createdAt: format: date-time type: string description: type: string displayName: type: string id: format: uuid type: string labels: $ref: '#/components/schemas/StringMap' name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string spec: $ref: '#/components/schemas/JobSpec' tenantName: type: string updatedAt: format: date-time type: string required: - createdAt - id - name - namespace - owner - spec - tenantName - updatedAt type: object ExperimentCreateRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string displayName: maxLength: 100 type: string labels: $ref: '#/components/schemas/StringMap' name: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string spec: $ref: '#/components/schemas/JobSpec' required: - name - spec type: object ExperimentList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Experiment' type: array partial: type: boolean required: - count - items type: object ExperimentPatchRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string displayName: maxLength: 100 type: string labels: $ref: '#/components/schemas/StringMap' spec: $ref: '#/components/schemas/JobSpec' type: object HealthStatus: properties: components: additionalProperties: type: string type: object status: enum: - ok - degraded - unavailable type: string required: - status type: object Image: properties: createdAt: format: date-time type: string description: type: string digest: type: string displayName: type: string id: format: uuid type: string name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string readyAt: format: date-time nullable: true type: string sizeBytes: format: int64 type: integer source: $ref: '#/components/schemas/ArtifactSource' spec: $ref: '#/components/schemas/ImageSpec' status: $ref: '#/components/schemas/ImageStatus' tenantName: type: string updatedAt: format: date-time type: string uri: type: string version: type: string required: - createdAt - id - name - namespace - status - tenantName - version type: object ImageCompleteRequest: properties: digest: type: string required: - digest type: object ImageInitiateRequest: properties: description: type: string displayName: type: string source: $ref: '#/components/schemas/ArtifactSource' sourceImageRef: type: string spec: $ref: '#/components/schemas/ImageSpec' version: maxLength: 64 minLength: 1 type: string required: - spec - version type: object ImageInitiateResponse: properties: expiresAt: format: date-time type: string id: format: uuid type: string storageKind: enum: - oci - s3 type: string uploadCredentials: additionalProperties: {} type: object uri: type: string required: - id - uri type: object ImageList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Image' type: array partial: type: boolean required: - count - items type: object ImagePullSecretInit: properties: name: type: string sourceSecretRef: $ref: '#/components/schemas/SecretSourceRef' required: - name - sourceSecretRef type: object ImagePurpose: description: Image definition intended use (list filter). enum: - training - inference - workspace - custom type: string ImageSpec: additionalProperties: {} description: Artifact-side spec for kind=image; pass-through to artifacts. type: object ImageStatus: description: Mirrors artifacts ArtifactStatus for kind=image. enum: - Uploading - Ready - Failed - Deleting - Deleted type: string InitResources: properties: configMaps: items: $ref: '#/components/schemas/ConfigMapInit' type: array imagePullSecrets: items: $ref: '#/components/schemas/ImagePullSecretInit' type: array secrets: items: $ref: '#/components/schemas/SecretInit' type: array serviceAccounts: items: $ref: '#/components/schemas/ServiceAccountInit' type: array type: object Job: properties: annotations: $ref: '#/components/schemas/StringMap' createdAt: format: date-time type: string description: type: string displayName: type: string id: format: uuid type: string labels: $ref: '#/components/schemas/StringMap' name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string spec: $ref: '#/components/schemas/JobSpec' tenantName: type: string updatedAt: format: date-time type: string required: - createdAt - id - name - namespace - owner - spec - tenantName - updatedAt type: object JobCreateRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string displayName: maxLength: 100 type: string labels: $ref: '#/components/schemas/StringMap' name: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string spec: $ref: '#/components/schemas/JobSpec' required: - name - spec type: object JobList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Job' type: array partial: type: boolean required: - count - items type: object JobPatchRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string displayName: maxLength: 100 type: string labels: $ref: '#/components/schemas/StringMap' spec: $ref: '#/components/schemas/JobSpec' type: object JobSpec: properties: artifacts: items: $ref: '#/components/schemas/ArtifactRef' type: array backend: $ref: '#/components/schemas/Backend' poolName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string quota: type: string roles: items: $ref: '#/components/schemas/MLRunRole' minItems: 1 type: array runPolicy: $ref: '#/components/schemas/RunPolicy' unitName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string required: - backend - roles type: object LoginRequest: properties: password: format: password minLength: 1 type: string username: minLength: 1 type: string required: - password - username type: object LoginResponse: properties: expiresAt: format: date-time type: string jwt: type: string tenantRoles: items: $ref: '#/components/schemas/UserTenantRole' type: array user: $ref: '#/components/schemas/User' required: - jwt - tenantRoles - user type: object MLRunRole: properties: name: type: string replicas: minimum: 1 type: integer restartPolicy: enum: - Never - OnFailure - Always type: string template: $ref: '#/components/schemas/RoleTemplate' required: - name - template type: object MLRunRoleStatus: properties: activeReplicas: type: integer failedReplicas: type: integer name: type: string readyReplicas: type: integer replicas: type: integer restartPolicy: type: string succeededReplicas: type: integer template: $ref: '#/components/schemas/RoleTemplate' type: object MLRunSpec: properties: backend: $ref: '#/components/schemas/Backend' roles: items: $ref: '#/components/schemas/MLRunRole' type: array runPolicy: $ref: '#/components/schemas/RunPolicy' scheduling: additionalProperties: {} type: object type: object MLService: properties: accessUrl: type: string args: items: type: string type: array backend: $ref: '#/components/schemas/Backend' command: items: type: string type: array computeNamespace: type: string createdAt: format: date-time type: string description: type: string displayName: type: string env: items: $ref: '#/components/schemas/EnvVar' type: array id: format: uuid type: string image: type: string message: type: string modelName: type: string modelVersion: type: string name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string phase: $ref: '#/components/schemas/MLServicePhase' poolName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string ports: items: $ref: '#/components/schemas/ServicePort' type: array quota: type: string readyReplicas: minimum: 0 type: integer replicas: minimum: 0 type: integer resources: $ref: '#/components/schemas/ResourceMap' route: $ref: '#/components/schemas/MLServiceRoute' tenantDisplayName: type: string tenantName: type: string unitName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string updatedAt: format: date-time type: string required: - createdAt - id - name - namespace - owner - tenantName - updatedAt type: object MLServiceCreateRequest: properties: args: items: type: string type: array backend: $ref: '#/components/schemas/Backend' command: items: type: string type: array description: maxLength: 1000 type: string displayName: maxLength: 100 type: string env: items: $ref: '#/components/schemas/EnvVar' type: array image: type: string modelName: type: string modelVersion: type: string name: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string poolName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string ports: items: $ref: '#/components/schemas/ServicePort' minItems: 1 type: array quota: type: string replicas: minimum: 0 type: integer route: $ref: '#/components/schemas/MLServiceRoute' unitName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string required: - image - modelName - modelVersion - name - poolName - ports - replicas - unitName type: object MLServiceList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/MLService' type: array partial: type: boolean required: - count - items type: object MLServiceMetricName: enum: - request_rate - latency - error_rate - cpu_util - mem_util - gpu_util type: string MLServicePatchRequest: properties: description: maxLength: 1000 type: string displayName: maxLength: 100 type: string type: object MLServicePhase: enum: - Creating - Pending - Ready - Degraded - Failed - Stopped - Deleting - Deleted type: string MLServiceRoute: properties: enabled: type: boolean path: type: string type: object MLServiceScaleRequest: properties: replicas: minimum: 0 type: integer required: - replicas type: object MeResponse: properties: isSystemAdmin: type: boolean permissions: items: type: string type: array tenantRoles: items: $ref: '#/components/schemas/UserTenantRole' type: array user: $ref: '#/components/schemas/User' required: - isSystemAdmin - permissions - tenantRoles - user type: object Member: properties: addedAt: format: date-time type: string displayName: type: string email: format: email type: string roleName: $ref: '#/components/schemas/RoleName' userId: format: uuid type: string username: type: string required: - addedAt - roleName - userId - username type: object MemberCreateRequest: properties: account: type: string roleName: enum: - tenant-admin - user type: string required: - account - roleName type: object MemberList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Member' type: array required: - count - items type: object MemberPatchRequest: properties: roleName: enum: - tenant-admin - user type: string required: - roleName type: object MetricPoint: properties: timestamp: format: date-time type: string value: format: double type: number required: - timestamp - value type: object MetricSeries: properties: metric: type: string percentile: type: string range: type: string series: items: $ref: '#/components/schemas/MetricPoint' type: array step: type: string unit: type: string required: - metric - range - series type: object Model: properties: createdAt: format: date-time type: string description: type: string digest: type: string displayName: type: string id: format: uuid type: string name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string readyAt: format: date-time nullable: true type: string sizeBytes: format: int64 type: integer source: $ref: '#/components/schemas/ArtifactSource' spec: $ref: '#/components/schemas/ModelSpec' status: $ref: '#/components/schemas/ModelStatus' tenantName: type: string updatedAt: format: date-time type: string uri: type: string version: type: string required: - createdAt - id - name - namespace - status - tenantName - version type: object ModelCompleteRequest: properties: digest: type: string required: - digest type: object ModelInitiateRequest: properties: description: type: string displayName: type: string remoteSourceKind: $ref: '#/components/schemas/RemoteSourceKind' remoteUri: type: string source: $ref: '#/components/schemas/ArtifactSource' spec: $ref: '#/components/schemas/ModelSpec' version: maxLength: 64 minLength: 1 type: string required: - version type: object ModelInitiateResponse: properties: expiresAt: format: date-time type: string id: format: uuid type: string storageKind: enum: - oci - s3 type: string uploadCredentials: additionalProperties: {} type: object uri: type: string required: - id - uri type: object ModelList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Model' type: array partial: type: boolean required: - count - items type: object ModelSpec: additionalProperties: {} description: Artifact-side spec for kind=model; pass-through to artifacts. type: object ModelStatus: description: Mirrors artifacts ArtifactStatus for kind=model. enum: - Uploading - Ready - Failed - Deleting - Deleted type: string Pod: properties: exitCode: nullable: true type: integer finishedAt: format: date-time nullable: true type: string message: type: string name: type: string nodeName: type: string phase: enum: - Pending - Running - Succeeded - Failed - Unknown type: string replicaIndex: minimum: 0 type: integer restartCount: minimum: 0 type: integer role: type: string startedAt: format: date-time nullable: true type: string required: - name - phase type: object PodList: properties: count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Pod' type: array required: - count - items type: object Problem: properties: code: type: string detail: type: string errors: items: $ref: '#/components/schemas/ProblemFieldError' type: array instance: type: string status: maximum: 599 minimum: 100 type: integer title: type: string type: format: uri type: string type: object ProblemFieldError: properties: field: type: string message: type: string required: - field - message type: object Quota: properties: pool: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string units: items: $ref: '#/components/schemas/QuotaUnit' type: array required: - pool - units type: object QuotaCreateRequest: properties: pool: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string units: items: $ref: '#/components/schemas/QuotaUnit' type: array required: - pool - units type: object QuotaList: properties: count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Quota' type: array statuses: items: $ref: '#/components/schemas/QuotaStatus' type: array required: - count - items type: object QuotaPatchRequest: properties: units: items: $ref: '#/components/schemas/QuotaUnit' type: array required: - units type: object QuotaStatus: properties: pool: type: string units: items: $ref: '#/components/schemas/QuotaUnitStatus' type: array required: - pool type: object QuotaUnit: properties: quantity: minimum: 0 type: integer unitName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string required: - quantity - unitName type: object QuotaUnitStatus: properties: quantity: type: integer unitName: type: string used: type: integer required: - quantity - unitName type: object RefreshResponse: properties: expiresAt: format: date-time type: string jwt: type: string required: - jwt type: object RemoteSourceKind: description: Backing store of an externally-registered model version. enum: - s3 - oci - http - hf - custom type: string ResourceMap: additionalProperties: type: string description: 'Kubernetes-style resource quantity map (e.g., {"cpu": "100", "memory": "1Ti", "nvidia.com/gpu": "8"}).' type: object ResourcePool: properties: annotations: $ref: '#/components/schemas/StringMap' createdAt: format: date-time type: string description: type: string labels: $ref: '#/components/schemas/StringMap' name: type: string nodeCount: type: integer nodeSelector: $ref: '#/components/schemas/StringMap' resourceVersion: type: string tolerations: items: $ref: '#/components/schemas/Toleration' type: array units: items: $ref: '#/components/schemas/ResourceUnit' type: array updatedAt: format: date-time type: string required: - createdAt - name type: object ResourcePoolCreateRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string labels: $ref: '#/components/schemas/StringMap' name: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string nodeSelector: $ref: '#/components/schemas/StringMap' tolerations: items: $ref: '#/components/schemas/Toleration' type: array units: items: $ref: '#/components/schemas/ResourceUnitCreateRequest' type: array required: - name type: object ResourcePoolList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/ResourcePool' type: array required: - count - items type: object ResourcePoolPatchRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string labels: $ref: '#/components/schemas/StringMap' nodeSelector: $ref: '#/components/schemas/StringMap' tolerations: items: $ref: '#/components/schemas/Toleration' type: array type: object ResourceUnit: properties: annotations: $ref: '#/components/schemas/StringMap' description: type: string limits: $ref: '#/components/schemas/ResourceMap' name: type: string nodeSelector: $ref: '#/components/schemas/StringMap' requests: $ref: '#/components/schemas/ResourceMap' tolerations: items: $ref: '#/components/schemas/Toleration' type: array required: - limits - name - requests type: object ResourceUnitCreateRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string limits: $ref: '#/components/schemas/ResourceMap' name: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string nodeSelector: $ref: '#/components/schemas/StringMap' requests: $ref: '#/components/schemas/ResourceMap' tolerations: items: $ref: '#/components/schemas/Toleration' type: array required: - limits - name - requests type: object ResourceUnitList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/ResourceUnit' type: array required: - count - items type: object ResourceUnitPatchRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string limits: $ref: '#/components/schemas/ResourceMap' nodeSelector: $ref: '#/components/schemas/StringMap' requests: $ref: '#/components/schemas/ResourceMap' tolerations: items: $ref: '#/components/schemas/Toleration' type: array type: object RoleName: enum: - system-admin - tenant-admin - user type: string RoleTemplate: properties: args: items: type: string type: array command: items: type: string type: array env: items: $ref: '#/components/schemas/EnvVar' type: array image: type: string ports: items: additionalProperties: {} type: object type: array resources: $ref: '#/components/schemas/ResourceMap' volumeMounts: items: additionalProperties: {} type: object type: array volumes: items: additionalProperties: {} type: object type: array type: object Run: properties: backend: $ref: '#/components/schemas/Backend' computeNamespace: type: string createdAt: format: date-time type: string description: type: string displayName: type: string finishedAt: format: date-time nullable: true type: string id: format: uuid type: string jobName: type: string message: type: string name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string phase: $ref: '#/components/schemas/RunPhase' poolName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string quota: type: string resources: $ref: '#/components/schemas/ResourceMap' roles: items: $ref: '#/components/schemas/MLRunRoleStatus' type: array runNumber: type: integer runPolicy: $ref: '#/components/schemas/RunPolicy' spec: $ref: '#/components/schemas/MLRunSpec' startedAt: format: date-time nullable: true type: string tenantDisplayName: type: string tenantName: type: string unitName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string updatedAt: format: date-time type: string required: - backend - createdAt - name - namespace - owner - tenantName - updatedAt type: object RunList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Run' type: array partial: type: boolean required: - count - items type: object RunPhase: description: Run (compute MLRun) phase. The active (non-terminal) phases — Creating / Pending / Running / Canceling — block Job-definition deletion. enum: - Creating - Pending - Running - Succeeded - Failed - Canceling - Cancelled - Deleting - Deleted type: string RunPolicy: properties: activeDeadlineSeconds: minimum: 1 type: integer backoffLimit: minimum: 0 type: integer progressDeadlineSeconds: minimum: 1 type: integer ttlSecondsAfterFinished: minimum: 0 type: integer type: object RunTriggerRequest: properties: annotations: $ref: '#/components/schemas/StringMap' artifacts: items: $ref: '#/components/schemas/ArtifactRef' type: array displayName: maxLength: 100 type: string labels: $ref: '#/components/schemas/StringMap' poolName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string quota: type: string resources: $ref: '#/components/schemas/ResourceMap' roles: items: properties: args: items: type: string type: array env: items: $ref: '#/components/schemas/EnvVar' type: array name: type: string required: - name type: object type: array unitName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string type: object SecretInit: properties: name: type: string sourceSecretRef: $ref: '#/components/schemas/SecretSourceRef' type: type: string required: - name - sourceSecretRef type: object SecretSourceRef: properties: name: type: string namespace: type: string required: - name - namespace type: object ServiceAccountInit: properties: imagePullSecrets: items: type: string type: array name: type: string rbac: additionalProperties: {} type: object required: - name type: object ServicePort: properties: name: maxLength: 15 type: string port: maximum: 65535 minimum: 1 type: integer required: - name - port type: object SetPasswordRequest: properties: currentPassword: format: password type: string newPassword: format: password minLength: 8 type: string required: - newPassword type: object StringMap: additionalProperties: type: string type: object Tenant: properties: activeExperimentRuns: type: integer activeJobRuns: type: integer annotations: $ref: '#/components/schemas/StringMap' createdAt: format: date-time type: string description: type: string displayName: type: string identifier: type: string initResources: $ref: '#/components/schemas/InitResources' kubernetesNamespace: type: string labels: $ref: '#/components/schemas/StringMap' memberCount: type: integer onlineServices: type: integer owner: type: string phase: $ref: '#/components/schemas/TenantPhase' quotas: items: $ref: '#/components/schemas/Quota' type: array status: $ref: '#/components/schemas/TenantStatus' suspended: type: boolean updatedAt: format: date-time type: string required: - activeExperimentRuns - activeJobRuns - createdAt - displayName - identifier - kubernetesNamespace - memberCount - onlineServices - phase - suspended - updatedAt type: object TenantCreateRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string displayName: maxLength: 100 minLength: 1 type: string identifier: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string initResources: $ref: '#/components/schemas/InitResources' initialAdmin: type: string kubernetesNamespace: maxLength: 63 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string labels: $ref: '#/components/schemas/StringMap' quotas: items: $ref: '#/components/schemas/Quota' type: array required: - displayName - identifier - initialAdmin - kubernetesNamespace type: object TenantList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Tenant' type: array partial: type: boolean required: - count - items type: object TenantPatchRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string displayName: maxLength: 100 minLength: 1 type: string labels: $ref: '#/components/schemas/StringMap' type: object TenantPhase: enum: - Creating - Active - Suspended - Failed type: string TenantStatus: properties: conditions: items: $ref: '#/components/schemas/Condition' type: array message: type: string quotas: items: $ref: '#/components/schemas/QuotaStatus' type: array type: object TensorBoard: properties: createdAt: format: date-time type: string message: type: string name: type: string phase: $ref: '#/components/schemas/TensorBoardPhase' url: type: string required: - createdAt - name type: object TensorBoardPhase: enum: - Pending - Ready - Failed - Stopped type: string TensorBoardRequest: properties: runs: items: type: string type: array type: object Toleration: additionalProperties: {} description: Mirrors a Kubernetes corev1.Toleration. type: object TrafficPolicy: properties: accessUrl: type: string backends: items: $ref: '#/components/schemas/TrafficPolicyBackend' type: array canaryPercent: type: integer createdAt: format: date-time type: string description: type: string displayName: type: string endpoint: $ref: '#/components/schemas/TrafficPolicyEndpoint' id: format: uuid type: string message: type: string mode: $ref: '#/components/schemas/TrafficPolicyMode' name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string phase: $ref: '#/components/schemas/TrafficPolicyPhase' tenantDisplayName: type: string tenantName: type: string updatedAt: format: date-time type: string required: - backends - createdAt - id - mode - name - namespace - owner - tenantName - updatedAt type: object TrafficPolicyBackend: properties: actualPct: type: integer ready: type: boolean role: $ref: '#/components/schemas/TrafficPolicyBackendRole' serviceName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string weight: maximum: 100 minimum: 0 type: integer required: - serviceName - weight type: object TrafficPolicyBackendRole: enum: - stable - canary - member type: string TrafficPolicyBackendSpec: properties: role: $ref: '#/components/schemas/TrafficPolicyBackendRole' serviceName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string weight: maximum: 100 minimum: 0 type: integer required: - serviceName type: object TrafficPolicyCreateRequest: properties: backends: items: $ref: '#/components/schemas/TrafficPolicyBackendSpec' minItems: 1 type: array canaryPercent: maximum: 100 minimum: 0 type: integer description: maxLength: 1000 type: string displayName: maxLength: 100 type: string endpoint: $ref: '#/components/schemas/TrafficPolicyEndpoint' mode: $ref: '#/components/schemas/TrafficPolicyMode' name: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string required: - backends - mode - name type: object TrafficPolicyEndpoint: properties: hostname: type: string path: type: string type: object TrafficPolicyList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/TrafficPolicy' type: array partial: type: boolean required: - count - items type: object TrafficPolicyMode: enum: - weighted - canary type: string TrafficPolicyPatchRequest: properties: annotations: $ref: '#/components/schemas/StringMap' description: maxLength: 1000 type: string displayName: maxLength: 100 type: string labels: $ref: '#/components/schemas/StringMap' type: object TrafficPolicyPhase: enum: - Creating - Pending - Ready - Degraded - Failed - Deleting - Deleted type: string TrafficPolicySplitRequest: properties: backends: items: $ref: '#/components/schemas/TrafficPolicyBackendSpec' type: array canaryPercent: maximum: 100 minimum: 0 nullable: true type: integer type: object User: properties: createdAt: format: date-time type: string disabled: type: boolean displayName: type: string email: format: email type: string id: format: uuid type: string mustChangePassword: type: boolean updatedAt: format: date-time type: string username: type: string required: - createdAt - id - updatedAt - username type: object UserCreateRequest: properties: displayName: maxLength: 100 type: string email: format: email type: string password: format: password minLength: 8 type: string username: maxLength: 64 minLength: 1 type: string required: - password - username type: object UserPatchRequest: properties: disabled: nullable: true type: boolean displayName: maxLength: 100 type: string email: format: email type: string type: object UserSummary: properties: displayName: type: string email: format: email type: string id: format: uuid type: string username: type: string required: - id - username type: object UserSummaryList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/UserSummary' type: array required: - count - items type: object UserTenantRole: properties: roleName: $ref: '#/components/schemas/RoleName' tenantName: type: string required: - roleName - tenantName type: object WorkloadMetricName: description: Run / workload resource metric. enum: - cpu_util - mem_util - gpu_util type: string Workspace: properties: args: items: type: string type: array command: items: type: string type: array computeNamespace: type: string containerPort: maximum: 65535 minimum: 1 type: integer createdAt: format: date-time type: string description: type: string desiredState: $ref: '#/components/schemas/WorkspaceDesiredState' displayName: type: string endpoint: $ref: '#/components/schemas/WorkspaceEndpoint' env: items: $ref: '#/components/schemas/EnvVar' type: array id: format: uuid type: string image: type: string lastStartedAt: format: date-time nullable: true type: string lastStoppedAt: format: date-time nullable: true type: string lifecycle: $ref: '#/components/schemas/WorkspaceLifecycle' message: type: string name: type: string namespace: type: string owner: type: string ownerId: format: uuid type: string phase: $ref: '#/components/schemas/WorkspacePhase' poolName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string quota: type: string readyReplicas: minimum: 0 type: integer replicas: minimum: 0 type: integer resources: $ref: '#/components/schemas/ResourceMap' tenantDisplayName: type: string tenantName: type: string unitName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string updatedAt: format: date-time type: string volumes: items: $ref: '#/components/schemas/WorkspaceVolume' type: array required: - containerPort - createdAt - id - image - name - namespace - owner - tenantName - updatedAt type: object WorkspaceCreateRequest: properties: args: items: type: string type: array command: items: type: string type: array containerPort: maximum: 65535 minimum: 1 type: integer description: maxLength: 1000 type: string displayName: maxLength: 100 type: string env: items: $ref: '#/components/schemas/EnvVar' type: array image: type: string lifecycle: $ref: '#/components/schemas/WorkspaceLifecycle' name: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string poolName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string quota: type: string unitName: maxLength: 40 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string volumes: items: $ref: '#/components/schemas/WorkspaceVolume' type: array required: - image - name - poolName - unitName type: object WorkspaceDeleteRequest: properties: deletePvc: type: boolean type: object WorkspaceDesiredState: enum: - Running - Stopped type: string WorkspaceEndpoint: properties: accessUrl: type: string internalDns: type: string type: object WorkspaceLifecycle: properties: idleTimeoutSeconds: minimum: 0 type: integer type: object WorkspaceList: properties: continueToken: type: string count: minimum: 0 type: integer items: items: $ref: '#/components/schemas/Workspace' type: array partial: type: boolean required: - count - items type: object WorkspacePatchRequest: properties: description: maxLength: 1000 type: string displayName: maxLength: 100 type: string lifecycle: $ref: '#/components/schemas/WorkspaceLifecycle' type: object WorkspacePhase: description: Derived from compute service phase + replicas. Hoisted to the top of Workspace for B-tree filtering. enum: - Creating - Starting - Running - Degraded - Failed - Stopped - Deleting - Deleted - Pending type: string WorkspaceVolume: properties: mountPath: type: string name: type: string size: type: string storageClass: type: string used: type: string required: - mountPath type: object info: description: 'User-facing entrypoint to AxisML. Aggregates the internal services (cluster-manager / compute / artifacts) and adds platform-native features: identity, RBAC, workspace/job/experiment/service/traffic orchestration, the model/image artifact registry. All endpoints except POST /api/v1/auth/login require a bearer JWT issued by Platform; per-endpoint role requirements are noted in each operation. Errors use RFC 7807 application/problem+json bodies.' title: AxisML Platform API version: 0.1.0 openapi: 3.0.3 paths: /api/v1/auth/login: post: operationId: login requestBody: content: application/json: schema: $ref: '#/components/schemas/LoginRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/LoginResponse' description: Login succeeded; returns JWT and current user. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Exchange username + password for a bearer JWT tags: - Auth /api/v1/auth/logout: post: operationId: logout responses: "204": description: Session revoked. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Revoke the current bearer JWT tags: - Auth /api/v1/auth/me: get: operationId: getCurrentUser responses: "200": content: application/json: schema: $ref: '#/components/schemas/MeResponse' description: Current user view. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get the current user, tenant role bindings, and permissions tags: - Auth /api/v1/auth/refresh: post: operationId: refreshToken responses: "200": content: application/json: schema: $ref: '#/components/schemas/RefreshResponse' description: New JWT issued. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Refresh the current bearer JWT tags: - Auth /api/v1/experiments: get: operationId: listExperiments parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - description: Admin-only owner filter. in: query name: owner schema: type: string - description: Fuzzy keyword. in: query name: q schema: type: string - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ExperimentList' description: A page of experiments. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List experiments tags: - Experiments post: operationId: createExperiment parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ExperimentCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Experiment' description: Experiment created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create an experiment (training template) tags: - Experiments /api/v1/experiments/{name}: delete: operationId: deleteExperiment parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Experiment (and its terminal Runs) deleted. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete an experiment (cascade) tags: - Experiments get: operationId: getExperiment parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Experiment' description: Experiment detail. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get an experiment tags: - Experiments patch: operationId: updateExperiment parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ExperimentPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Experiment' description: Experiment updated. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Edit an experiment template / metadata tags: - Experiments /api/v1/experiments/{name}/runs: get: operationId: listExperimentRuns parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: query name: phase schema: $ref: '#/components/schemas/RunPhase' - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RunList' description: A page of Runs. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Runs of an experiment (live) tags: - Experiments post: operationId: triggerExperimentRun parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RunTriggerRequest' responses: "201": content: application/json: schema: $ref: '#/components/schemas/Run' description: Run triggered. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Trigger a Run from an experiment tags: - Experiments /api/v1/experiments/{name}/runs/{run}: delete: operationId: deleteExperimentRun parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Run deleted. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a Run tags: - Experiments get: operationId: getExperimentRun parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Run' description: Run detail. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a Run tags: - Experiments /api/v1/experiments/{name}/runs/{run}/cancel: post: operationId: cancelExperimentRun parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Run' description: Cancel request accepted. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Cancel a running Run tags: - Experiments /api/v1/experiments/{name}/runs/{run}/events: get: operationId: listExperimentRunEvents parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Run-level event list. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Run-level Kubernetes events tags: - Experiments /api/v1/experiments/{name}/runs/{run}/metrics: get: operationId: getExperimentRunMetrics parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: query name: metric required: true schema: $ref: '#/components/schemas/WorkloadMetricName' - description: ISO 8601 duration (5m, 1h, 24h). in: query name: range required: true schema: type: string - in: query name: step schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MetricSeries' description: Metric series. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. "502": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Upstream service (cluster-manager / compute / artifacts / Prometheus) failed. summary: Query resource metrics for a Run tags: - Experiments /api/v1/experiments/{name}/runs/{run}/pods: get: operationId: listExperimentRunPods parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PodList' description: Pod list. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Pods belonging to a Run tags: - Experiments /api/v1/experiments/{name}/runs/{run}/pods/{pod}/events: get: operationId: listExperimentRunPodEvents parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pod required: true schema: maxLength: 253 minLength: 1 type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Pod-scoped events. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List K8s events for one pod of a Run tags: - Experiments /api/v1/experiments/{name}/runs/{run}/pods/{pod}/logs: get: operationId: getExperimentRunPodLogs parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pod required: true schema: maxLength: 253 minLength: 1 type: string - in: query name: container schema: type: string - in: query name: tailLines schema: minimum: 1 type: integer - description: Stream logs as SSE. in: query name: follow schema: type: boolean - description: Read logs from the previous (crashed) container instance. in: query name: previous schema: type: boolean responses: "200": content: text/event-stream: schema: type: string text/plain: schema: type: string description: Log stream. text/plain for follow=false; text/event-stream for follow=true. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "410": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Target resource (e.g., a Pod log) is no longer retained. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Fetch or stream a Run pod's logs tags: - Experiments /api/v1/experiments/{name}/tensorboard: delete: operationId: stopTensorBoard parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: TensorBoard stopped. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Stop the experiment's TensorBoard tags: - Experiments get: operationId: getTensorBoard parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/TensorBoard' description: TensorBoard handle. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get the experiment's TensorBoard instance tags: - Experiments post: operationId: startTensorBoard parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/TensorBoardRequest' responses: "200": content: application/json: schema: $ref: '#/components/schemas/TensorBoard' description: TensorBoard started. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Start (or reuse) a TensorBoard for the experiment tags: - Experiments /api/v1/images: get: operationId: listImageDefinitions parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - description: Fuzzy keyword. in: query name: q schema: type: string - description: Filter by definition spec.purpose. in: query name: purpose schema: $ref: '#/components/schemas/ImagePurpose' - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinitionList' description: A page of image definitions. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List image definitions tags: - Images /api/v1/images/{tenant}/{name}: delete: operationId: deleteImageDefinition parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string responses: "204": description: Image definition and its versions deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a image definition (cascade) tags: - Images get: operationId: getImageDefinition parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinition' description: Image definition detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a image definition tags: - Images patch: operationId: updateImageDefinition parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinitionPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinition' description: Image definition updated. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Edit image definition metadata tags: - Images post: operationId: createImageDefinition parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinitionCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinition' description: Image definition created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a image definition tags: - Images /api/v1/images/{tenant}/{name}/versions: get: operationId: listImageVersions parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: query name: status schema: $ref: '#/components/schemas/ImageStatus' - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ImageList' description: A page of image versions. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List versions of a image definition (live) tags: - Images post: operationId: initiateImage parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ImageInitiateRequest' required: true responses: "202": content: application/json: schema: $ref: '#/components/schemas/ImageInitiateResponse' description: Upload initiated; returns credentials and a image handle. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Initiate a image version upload tags: - Images /api/v1/images/{tenant}/{name}/versions/{version}: delete: operationId: deleteImage parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string responses: "204": description: Image deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Soft-delete a image artifact tags: - Images get: operationId: getImage parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Image' description: Image detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "410": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Artifact has been soft-deleted; the tuple is permanently gone. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a image artifact tags: - Images patch: operationId: updateImage parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ArtifactUpdateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Image' description: Image updated. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update mutable image metadata tags: - Images /api/v1/images/{tenant}/{name}/versions/{version}/complete: post: operationId: completeImage parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ImageCompleteRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Image' description: Image finalized. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Mark a image upload complete tags: - Images /api/v1/images/{tenant}/{name}/versions/{version}/resolve: get: operationId: resolveImage parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ArtifactResolveResponse' description: Resolved download target. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "410": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Target resource (e.g., a Pod log) is no longer retained. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Resolve download credentials for a image version tags: - Images /api/v1/jobs: get: operationId: listJobs parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - description: Admin-only owner filter. in: query name: owner schema: type: string - description: Fuzzy keyword. in: query name: q schema: type: string - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/JobList' description: A page of Jobs. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Jobs tags: - Jobs post: operationId: createJob parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/JobCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Job' description: Job created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a Job (reusable template) tags: - Jobs /api/v1/jobs/{name}: delete: operationId: deleteJob parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Job (and its terminal Runs) deleted. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a Job (cascade) tags: - Jobs get: operationId: getJob parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Job' description: Job detail. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a Job tags: - Jobs patch: operationId: updateJob parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/JobPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Job' description: Job updated. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Edit a Job template / metadata tags: - Jobs /api/v1/jobs/{name}/runs: get: operationId: listRuns parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: query name: phase schema: $ref: '#/components/schemas/RunPhase' - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/RunList' description: A page of Runs. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Runs of a Job (live) tags: - Jobs post: operationId: triggerRun parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/RunTriggerRequest' responses: "201": content: application/json: schema: $ref: '#/components/schemas/Run' description: Run triggered. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Trigger a Run from a Job tags: - Jobs /api/v1/jobs/{name}/runs/{run}: delete: operationId: deleteRun parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Run deleted. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a Run tags: - Jobs get: operationId: getRun parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Run' description: Run detail. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a Run tags: - Jobs /api/v1/jobs/{name}/runs/{run}/cancel: post: operationId: cancelRun parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Run' description: Cancel request accepted. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Cancel a running Run tags: - Jobs /api/v1/jobs/{name}/runs/{run}/events: get: operationId: listRunEvents parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Job-level event list. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Run-level Kubernetes events tags: - Jobs /api/v1/jobs/{name}/runs/{run}/metrics: get: operationId: getRunMetrics parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: query name: metric required: true schema: $ref: '#/components/schemas/WorkloadMetricName' - description: ISO 8601 duration (5m, 1h, 24h). in: query name: range required: true schema: type: string - in: query name: step schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MetricSeries' description: Metric series. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. "502": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Upstream service (cluster-manager / compute / artifacts / Prometheus) failed. summary: Query resource metrics for a Run tags: - Jobs /api/v1/jobs/{name}/runs/{run}/pods: get: operationId: listRunPods parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PodList' description: Pod list. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Pods belonging to a Run tags: - Jobs /api/v1/jobs/{name}/runs/{run}/pods/{pod}/events: get: operationId: listRunPodEvents parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pod required: true schema: maxLength: 253 minLength: 1 type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Pod-scoped events. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List K8s events for one pod of a Run tags: - Jobs /api/v1/jobs/{name}/runs/{run}/pods/{pod}/logs: get: operationId: getRunPodLogs parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: run required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pod required: true schema: maxLength: 253 minLength: 1 type: string - in: query name: container schema: type: string - in: query name: tailLines schema: minimum: 1 type: integer - description: Stream logs as SSE. in: query name: follow schema: type: boolean - description: Read logs from the previous (crashed) container instance. in: query name: previous schema: type: boolean responses: "200": content: text/event-stream: schema: type: string text/plain: schema: type: string description: Log stream. text/plain for follow=false; text/event-stream for follow=true. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "410": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Target resource (e.g., a Pod log) is no longer retained. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Fetch or stream a Run pod's logs tags: - Jobs /api/v1/mlservices: get: operationId: listMLServices parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - description: Admin-only owner filter. in: query name: owner schema: type: string - in: query name: phase schema: $ref: '#/components/schemas/MLServicePhase' - description: Fuzzy keyword. in: query name: q schema: type: string - description: Filter by resource pool. in: query name: poolName schema: type: string - description: Only Ready services not bound to an active traffic policy (drives traffic-policy backend pickers). in: query name: eligibleForTraffic schema: type: boolean - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MLServiceList' description: A page of services. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List services tags: - MLServices post: operationId: createMLService parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/MLServiceCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/MLService' description: Service created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Deploy a new online inference service tags: - MLServices /api/v1/mlservices/{name}: delete: operationId: deleteMLService parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Service deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a service tags: - MLServices get: operationId: getMLService parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MLService' description: Service detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a service tags: - MLServices patch: operationId: updateMLService parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/MLServicePatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/MLService' description: Updated service. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update service display metadata tags: - MLServices /api/v1/mlservices/{name}/events: get: operationId: getMLServiceEvents parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Service-level event list. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List service-level Kubernetes events tags: - MLServices /api/v1/mlservices/{name}/metrics: get: operationId: getMLServiceMetrics parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: query name: metric required: true schema: $ref: '#/components/schemas/MLServiceMetricName' - description: ISO 8601 duration (5m, 15m, 1h, 6h, 24h). in: query name: range required: true schema: type: string - in: query name: step schema: type: string - description: Only for metric=latency. in: query name: percentile schema: enum: - p50 - p95 - p99 type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MetricSeries' description: Metric series. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. "502": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Upstream service (cluster-manager / compute / artifacts / Prometheus) failed. summary: Query Prometheus for service-level metrics tags: - MLServices /api/v1/mlservices/{name}/pods: get: operationId: listMLServicePods parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PodList' description: Pod list. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Pods backing a service tags: - MLServices /api/v1/mlservices/{name}/pods/{pod}/events: get: operationId: listMLServicePodEvents parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pod required: true schema: maxLength: 253 minLength: 1 type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Pod-scoped events. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List K8s events for one pod of a service tags: - MLServices /api/v1/mlservices/{name}/pods/{pod}/logs: get: operationId: getMLServicePodLogs parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pod required: true schema: maxLength: 253 minLength: 1 type: string - in: query name: container schema: type: string - in: query name: tailLines schema: minimum: 1 type: integer - description: Stream logs as SSE. in: query name: follow schema: type: boolean - description: Read logs from the previous (crashed) container instance. in: query name: previous schema: type: boolean responses: "200": content: text/event-stream: schema: type: string text/plain: schema: type: string description: Log stream. text/plain for follow=false; text/event-stream for follow=true. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "410": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Target resource (e.g., a Pod log) is no longer retained. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Fetch or stream a service pod's logs tags: - MLServices /api/v1/mlservices/{name}/scale: post: operationId: scaleMLService parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/MLServiceScaleRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/MLService' description: Scale request accepted. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Set the replica count for a service tags: - MLServices /api/v1/mlservices/{name}/start: post: operationId: startMLService parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MLService' description: Start request accepted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Start a stopped service tags: - MLServices /api/v1/mlservices/{name}/stop: post: operationId: stopMLService parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MLService' description: Stop request accepted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Stop a service (scale to 0) tags: - MLServices /api/v1/models: get: operationId: listModelDefinitions parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - description: Fuzzy keyword. in: query name: q schema: type: string - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinitionList' description: A page of model definitions. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List model definitions tags: - Models /api/v1/models/{tenant}/{name}: delete: operationId: deleteModelDefinition parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string responses: "204": description: Model definition and its versions deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a model definition (cascade) tags: - Models get: operationId: getModelDefinition parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinition' description: Model definition detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a model definition tags: - Models patch: operationId: updateModelDefinition parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinitionPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinition' description: Model definition updated. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Edit model definition metadata tags: - Models post: operationId: createModelDefinition parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinitionCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/ArtifactDefinition' description: Model definition created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a model definition tags: - Models /api/v1/models/{tenant}/{name}/versions: get: operationId: listModelVersions parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: query name: status schema: $ref: '#/components/schemas/ModelStatus' - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ModelList' description: A page of model versions. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List versions of a model definition (live) tags: - Models post: operationId: initiateModel parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ModelInitiateRequest' required: true responses: "202": content: application/json: schema: $ref: '#/components/schemas/ModelInitiateResponse' description: Upload initiated; returns credentials and a model handle. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Initiate a model version upload tags: - Models /api/v1/models/{tenant}/{name}/versions/{version}: delete: operationId: deleteModel parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string responses: "204": description: Model deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Soft-delete a model artifact tags: - Models get: operationId: getModel parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Model' description: Model detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "410": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Artifact has been soft-deleted; the tuple is permanently gone. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a model artifact tags: - Models patch: operationId: updateModel parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ArtifactUpdateRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Model' description: Model updated. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update mutable model metadata tags: - Models /api/v1/models/{tenant}/{name}/versions/{version}/complete: post: operationId: completeModel parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ModelCompleteRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Model' description: Model finalized. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Mark a model upload complete tags: - Models /api/v1/models/{tenant}/{name}/versions/{version}/resolve: get: operationId: resolveModel parameters: - in: path name: tenant required: true schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: name required: true schema: maxLength: 128 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9._]*[a-z0-9])?$ type: string - in: path name: version required: true schema: maxLength: 128 minLength: 1 pattern: ^[A-Za-z0-9_.-]{1,128}$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ArtifactResolveResponse' description: Resolved download target. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "410": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Target resource (e.g., a Pod log) is no longer retained. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Resolve download credentials for a model version tags: - Models /api/v1/resourcepools: get: operationId: listResourcePools parameters: - description: Fuzzy keyword. in: query name: q schema: type: string - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ResourcePoolList' description: A page of pools. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List resource pools tags: - ResourcePools post: operationId: createResourcePool requestBody: content: application/json: schema: $ref: '#/components/schemas/ResourcePoolCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/ResourcePool' description: Resource pool created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a resource pool tags: - ResourcePools /api/v1/resourcepools/{pool}: delete: operationId: deleteResourcePool parameters: - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Pool deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a resource pool tags: - ResourcePools get: operationId: getResourcePool parameters: - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ResourcePool' description: Pool detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a resource pool tags: - ResourcePools patch: operationId: updateResourcePool parameters: - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ResourcePoolPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ResourcePool' description: Updated pool. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update a resource pool tags: - ResourcePools /api/v1/resourcepools/{pool}/units: get: operationId: listResourceUnits parameters: - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ResourceUnitList' description: A page of resource units. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List resource units in a pool tags: - ResourceUnits post: operationId: createResourceUnit parameters: - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ResourceUnitCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/ResourceUnit' description: Resource unit created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a resource unit in a pool tags: - ResourceUnits /api/v1/resourcepools/{pool}/units/{unit}: delete: operationId: deleteResourceUnit parameters: - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: unit required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Resource unit deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a resource unit tags: - ResourceUnits get: operationId: getResourceUnit parameters: - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: unit required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/ResourceUnit' description: Resource unit detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a resource unit tags: - ResourceUnits patch: operationId: updateResourceUnit parameters: - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: unit required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/ResourceUnitPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/ResourceUnit' description: Updated resource unit. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update a resource unit tags: - ResourceUnits /api/v1/tenants: get: operationId: listTenants parameters: - description: Fuzzy keyword on name / displayName. in: query name: q schema: type: string - description: Filter by tenant status.phase. in: query name: phase schema: $ref: '#/components/schemas/TenantPhase' - description: Enrich each row with live workload roll-ups (member / active-run / online-service counts). Costs one compute-service call pair per tenant; omit for the cheap name-only listing. in: query name: stats schema: type: boolean - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/TenantList' description: A page of visible tenants. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List visible tenants tags: - Tenants post: operationId: createTenant requestBody: content: application/json: schema: $ref: '#/components/schemas/TenantCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Tenant' description: Tenant created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a tenant tags: - Tenants /api/v1/tenants/{name}: delete: operationId: deleteTenant parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Tenant deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a tenant tags: - Tenants get: operationId: getTenant parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Tenant' description: Tenant detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a tenant tags: - Tenants patch: operationId: updateTenant parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/TenantPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Tenant' description: Updated tenant. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update tenant display metadata tags: - Tenants /api/v1/tenants/{name}/members: get: operationId: listTenantMembers parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MemberList' description: Member list. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List members of a tenant tags: - Members post: operationId: addTenantMember parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/MemberCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Member' description: Member added. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Add a member to a tenant tags: - Members /api/v1/tenants/{name}/members/{userId}: delete: operationId: removeTenantMember parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: userId required: true schema: format: uuid type: string responses: "204": description: Member removed. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Remove a member from a tenant tags: - Members patch: operationId: updateTenantMember parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: userId required: true schema: format: uuid type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/MemberPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Member' description: Member updated. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Change a member's role tags: - Members /api/v1/tenants/{name}/quotas: get: operationId: listTenantQuotas parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/QuotaList' description: Quota list. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List per-pool quotas for a tenant tags: - Quotas post: operationId: createTenantQuota parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/QuotaCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Tenant' description: Quota set. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Set a pool's quota (system-admin only) tags: - Quotas /api/v1/tenants/{name}/quotas/{pool}: delete: operationId: deleteTenantQuota parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Quota removed. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Remove a pool quota (system-admin only) tags: - Quotas patch: operationId: updateTenantQuota parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pool required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/QuotaPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Tenant' description: Quota updated; returns the updated tenant. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update a pool quota (system-admin only) tags: - Quotas /api/v1/tenants/{name}/resume: post: operationId: resumeTenant parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Tenant' description: Tenant resumed. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Resume a suspended tenant tags: - Tenants /api/v1/tenants/{name}/suspend: post: operationId: suspendTenant parameters: - in: path name: name required: true schema: format: Tenant identifier and logical tenant scope; not a Kubernetes Namespace. maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Tenant' description: Tenant suspended. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Suspend a tenant (gates new-workload creation) tags: - Tenants /api/v1/trafficpolicies: get: operationId: listTrafficPolicies parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - description: Admin-only owner filter. in: query name: owner schema: type: string - description: Fuzzy keyword. in: query name: q schema: type: string - in: query name: mode schema: $ref: '#/components/schemas/TrafficPolicyMode' - in: query name: phase schema: $ref: '#/components/schemas/TrafficPolicyPhase' - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/TrafficPolicyList' description: A page of traffic policies. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List traffic policies tags: - TrafficPolicy post: operationId: createTrafficPolicy parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/TrafficPolicyCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/TrafficPolicy' description: Traffic policy created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a traffic policy tags: - TrafficPolicy /api/v1/trafficpolicies/{name}: delete: operationId: deleteTrafficPolicy parameters: - in: path name: name required: true schema: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "204": description: Traffic policy deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a traffic policy tags: - TrafficPolicy get: operationId: getTrafficPolicy parameters: - in: path name: name required: true schema: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/TrafficPolicy' description: Traffic policy detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a traffic policy tags: - TrafficPolicy patch: operationId: updateTrafficPolicy parameters: - in: path name: name required: true schema: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/TrafficPolicyPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/TrafficPolicy' description: Updated traffic policy. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update display metadata tags: - TrafficPolicy /api/v1/trafficpolicies/{name}/events: get: operationId: getTrafficPolicyEvents parameters: - in: path name: name required: true schema: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Event list. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List traffic-policy events tags: - TrafficPolicy /api/v1/trafficpolicies/{name}/metrics: get: operationId: getTrafficPolicyMetrics parameters: - in: path name: name required: true schema: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: query name: metric required: true schema: $ref: '#/components/schemas/MLServiceMetricName' - description: ISO 8601 duration (5m, 1h, 24h). in: query name: range required: true schema: type: string - in: query name: step schema: type: string - description: Scope to one member backend (service name). in: query name: backend schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/MetricSeries' description: Metric series. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. "502": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Upstream service (cluster-manager / compute / artifacts / Prometheus) failed. summary: Query per-backend metrics (grouped by backend) tags: - TrafficPolicy /api/v1/trafficpolicies/{name}/promote: post: operationId: promoteTrafficPolicy parameters: - in: path name: name required: true schema: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/TrafficPolicy' description: Promoted. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Promote the canary backend to stable (canary only) tags: - TrafficPolicy /api/v1/trafficpolicies/{name}/rollback: post: operationId: rollbackTrafficPolicy parameters: - in: path name: name required: true schema: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/TrafficPolicy' description: Rolled back. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Roll the canary back to the stable backend (canary only) tags: - TrafficPolicy /api/v1/trafficpolicies/{name}/split: post: operationId: splitTrafficPolicy parameters: - in: path name: name required: true schema: maxLength: 40 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/TrafficPolicySplitRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/TrafficPolicy' description: Split applied. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Adjust traffic distribution (weights / canary percent) tags: - TrafficPolicy /api/v1/users: get: operationId: listUsers parameters: - description: Fuzzy keyword. in: query name: q schema: type: string - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/UserSummaryList' description: A page of user summaries. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Search Platform users (system-admin only) tags: - Users post: operationId: createUser requestBody: content: application/json: schema: $ref: '#/components/schemas/UserCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/User' description: User created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a Platform user tags: - Users /api/v1/users/{id}: delete: operationId: deleteUser parameters: - in: path name: id required: true schema: format: uuid type: string responses: "204": description: User deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete (or disable) a user tags: - Users get: operationId: getUser parameters: - in: path name: id required: true schema: format: uuid type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/User' description: User detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a user by id (system-admin only) tags: - Users patch: operationId: updateUser parameters: - in: path name: id required: true schema: format: uuid type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/UserPatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/User' description: Updated user. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update a user's profile or disabled flag tags: - Users /api/v1/users/{id}/password: post: operationId: setUserPassword parameters: - in: path name: id required: true schema: format: uuid type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/SetPasswordRequest' required: true responses: "204": description: Password updated. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Set a user's password tags: - Users /api/v1/workspaces: get: operationId: listWorkspaces parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - description: Admin-only owner filter. in: query name: owner schema: type: string - in: query name: phase schema: $ref: '#/components/schemas/WorkspacePhase' - description: Keyword (matches displayName / image). in: query name: q schema: type: string - description: Page size (default 50, max 200). in: query name: limit schema: maximum: 200 minimum: 1 type: integer - description: Opaque continue token from the previous response. in: query name: continue schema: type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/WorkspaceList' description: A page of workspaces. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List workspaces tags: - Workspaces post: operationId: createWorkspace parameters: - description: Active tenant for the request (fallback for the axisml.tenant cookie). in: header name: X-Axisml-Tenant schema: maxLength: 40 minLength: 3 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/WorkspaceCreateRequest' required: true responses: "201": content: application/json: schema: $ref: '#/components/schemas/Workspace' description: Workspace created. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Create a workspace tags: - Workspaces /api/v1/workspaces/{name}: delete: operationId: deleteWorkspace parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/WorkspaceDeleteRequest' responses: "204": description: Workspace deleted. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Delete a workspace tags: - Workspaces get: operationId: getWorkspace parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Workspace' description: Workspace detail. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Get a workspace tags: - Workspaces patch: operationId: updateWorkspace parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string requestBody: content: application/json: schema: $ref: '#/components/schemas/WorkspacePatchRequest' required: true responses: "200": content: application/json: schema: $ref: '#/components/schemas/Workspace' description: Updated workspace. "400": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Malformed request (invalid syntax, missing required fields, immutable field, etc.). "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "422": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Semantically invalid request (e.g., cross-field violations). "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Update workspace display metadata tags: - Workspaces /api/v1/workspaces/{name}/events: get: operationId: getWorkspaceEvents parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Service-level event list. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List service-level Kubernetes events for the workspace tags: - Workspaces /api/v1/workspaces/{name}/pods: get: operationId: listWorkspacePods parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/PodList' description: Pod list. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List Pods backing the workspace tags: - Workspaces /api/v1/workspaces/{name}/pods/{pod}/events: get: operationId: listWorkspacePodEvents parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pod required: true schema: maxLength: 253 minLength: 1 type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/EventList' description: Pod-scoped events. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: List K8s events for one pod of the workspace tags: - Workspaces /api/v1/workspaces/{name}/pods/{pod}/logs: get: operationId: getWorkspacePodLogs parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string - in: path name: pod required: true schema: maxLength: 253 minLength: 1 type: string - in: query name: container schema: type: string - in: query name: tailLines schema: minimum: 1 type: integer - description: Stream logs as SSE. in: query name: follow schema: type: boolean - description: Read logs from the previous (crashed) container instance. in: query name: previous schema: type: boolean responses: "200": content: text/event-stream: schema: type: string text/plain: schema: type: string description: Log stream. text/plain for follow=false; text/event-stream for follow=true. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "410": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Target resource (e.g., a Pod log) is no longer retained. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Fetch or stream a workspace pod's logs tags: - Workspaces /api/v1/workspaces/{name}/start: post: operationId: startWorkspace parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Workspace' description: Workspace started. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Start a workspace (scale to 1 replica) tags: - Workspaces /api/v1/workspaces/{name}/stop: post: operationId: stopWorkspace parameters: - in: path name: name required: true schema: maxLength: 63 minLength: 1 pattern: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?$ type: string responses: "200": content: application/json: schema: $ref: '#/components/schemas/Workspace' description: Workspace stopped. "401": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Missing or invalid bearer JWT. "403": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Authenticated but insufficient role for the requested operation. "404": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Resource not found, OR the caller cannot see it. Platform deliberately conflates these for non-admins to avoid information leak. "409": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: 'Conflicts with a precondition: duplicate name, last-tenant-admin protection, in-use blocker, immutable transition, etc.' "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Stop a workspace (scale to 0 replicas) tags: - Workspaces /healthz: get: operationId: getHealthz responses: "200": content: application/json: schema: $ref: '#/components/schemas/HealthStatus' description: Process is alive. "500": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: Unexpected server error. summary: Liveness probe tags: - Health /readyz: get: operationId: getReadyz responses: "200": content: application/json: schema: $ref: '#/components/schemas/HealthStatus' description: Service is ready to accept traffic. "503": content: application/problem+json: schema: $ref: '#/components/schemas/Problem' description: One or more dependencies are unavailable. summary: Readiness probe tags: - Health servers: - description: Same-origin (behind the AxisML Infra Envoy Gateway) url: / tags: - description: Login, logout, session refresh, and "who am I" endpoints. name: Auth - description: Platform user accounts (the identities used for login). name: Users - description: Tenant lifecycle. Proxies cluster-manager with RBAC. name: Tenants - description: ElasticQuota sub-resources of a Tenant (per-pool, per-quota). name: Quotas - description: Per-tenant user ↔ role bindings. name: Members - description: Long-running interactive dev containers (jupyter / code-server / ...). name: Workspaces - description: Training-experiment templates (Platform-owned) and their Runs; isomorphic to Jobs, plus on-demand TensorBoard. name: Experiments - description: Reusable Job templates (Platform-owned definitions) and their Runs (compute MLRuns named -). name: Jobs - description: Long-running online inference services. name: MLServices - description: Traffic policies fanning one stable entry across member online services (weighted / canary). name: TrafficPolicy - description: Model definitions (Platform-owned); versions proxy artifacts (kind=model). name: Models - description: Image definitions (Platform-owned); versions proxy artifacts (kind=image). name: Images - description: Cluster-scoped resource pools (admin-only writes; read by all). name: ResourcePools - description: Per-pool resource unit specs (admin-only writes; read by all). name: ResourceUnits - description: Liveness and readiness probes. name: Health