remora/docs/api/openapi.yaml

2737 lines
76 KiB
YAML

openapi: 3.2.0
info:
title: Remora API
version: 1.0.0
description: Mutable implementation contract for public job management and service-authenticated worker operations.
tags: []
paths:
/internal/v1/attempts/{attempt_id}/activate:
post:
operationId: activateAttempt
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/ActivationResponse"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptActivateRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/checkpoint:
post:
operationId: persistAttemptCheckpoint
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"204":
description: There is no content to send for this request, but the headers may be useful.
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptCheckpointRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/outcome:
post:
operationId: reportAttemptOutcome
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/JobPhaseProjection"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptOutcomeRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/progress:
post:
operationId: reportAttemptProgress
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"204":
description: There is no content to send for this request, but the headers may be useful.
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptProgressRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/renew:
post:
operationId: renewAttempt
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/LeaseProjection"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptRenewRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/resolved-source:
post:
operationId: pinAttemptResolvedSource
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"204":
description: There is no content to send for this request, but the headers may be useful.
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptResolvedSourceRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/staging/multipart:
post:
operationId: registerAttemptStagingMultipart
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"204":
description: There is no content to send for this request, but the headers may be useful.
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptStagingMultipartRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/staging/object:
post:
operationId: registerAttemptStagingObject
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"204":
description: There is no content to send for this request, but the headers may be useful.
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptStagingObjectRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/staging/write-intent:
post:
operationId: registerAttemptStagingWriteIntent
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"204":
description: There is no content to send for this request, but the headers may be useful.
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptStagingWriteIntentRequest"
security:
- serviceAuth: []
/internal/v1/attempts/{attempt_id}/stop:
post:
operationId: stopAttempt
parameters:
- $ref: "#/components/parameters/Parameters.AttemptId"
responses:
"204":
description: There is no content to send for this request, but the headers may be useful.
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptStopRequest"
security:
- serviceAuth: []
/internal/v1/jobs/{job_id}/claim:
post:
operationId: claimJob
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/ClaimResponse"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/ClaimRequest"
security:
- serviceAuth: []
/v1/deletions/{operation_id}:
get:
operationId: getDeletionOperation
parameters:
- name: operation_id
in: path
required: true
schema:
$ref: "#/components/schemas/OpaqueId"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/DeletionOperation"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/event-tickets:
post:
operationId: createEventTicket
description: Creates an independent short-lived, single-use browser WebSocket credential bound to the authenticated principal and request origin. This ephemeral authentication exchange does not enter the public domain mutation idempotency ledger.
parameters: []
responses:
"201":
description: The request has succeeded and a new resource has been created as a result.
content:
application/json:
schema:
$ref: "#/components/schemas/EventTicket"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/events:
get:
operationId: connectEvents
parameters:
- name: ticket
in: query
required: false
description: Short-lived single-use browser credential created by createEventTicket. Native clients may use OIDC bearer authentication instead.
schema:
$ref: "#/components/schemas/OpaqueId"
- name: cursor
in: query
required: false
description: Opaque authorization-bound replay cursor from an HTTP snapshot or prior frame.
schema:
type: string
minLength: 16
maxLength: 2048
responses:
"101":
description: Informational
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
security:
- oidc: []
- eventTicket: []
/v1/jobs:
get:
operationId: listJobs
parameters:
- $ref: "#/components/parameters/Parameters.Cursor"
- $ref: "#/components/parameters/Parameters.Limit"
- name: include_deleted
in: query
required: false
schema:
type: boolean
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/JobPage"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
post:
operationId: submitJob
parameters:
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"202":
description: The request has been accepted for processing, but processing has not yet completed.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/Job"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/JobSubmission"
/v1/jobs/{job_id}:
get:
operationId: getJob
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/JobResource"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/attempts:
get:
operationId: listJobAttempts
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
- $ref: "#/components/parameters/Parameters.Cursor"
- $ref: "#/components/parameters/Parameters.Limit"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/AttemptPage"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/cancel:
post:
operationId: cancelJob
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"202":
description: The request has been accepted for processing, but processing has not yet completed.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/Job"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/hard-delete:
post:
operationId: hardDeleteJob
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"202":
description: The request has been accepted for processing, but processing has not yet completed.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/DeletionOperation"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/restore:
post:
operationId: restoreJob
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"200":
description: The request has succeeded.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/Job"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/result:
get:
operationId: getJobResult
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/ResultDescriptor"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/result/members:
get:
operationId: listJobResultMembers
description: Enumerates members only from the visible committed result.
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
- $ref: "#/components/parameters/Parameters.Cursor"
- $ref: "#/components/parameters/Parameters.Limit"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/ResultMemberPage"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/result/members/{member_id}/content:
get:
operationId: accessJobResultMember
description: Revalidates current authorization and returns a non-cacheable time-limited URL for the exact committed member identity.
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
- name: member_id
in: path
required: true
schema:
$ref: "#/components/schemas/OpaqueId"
responses:
"200":
description: The request has succeeded.
headers:
Cache-Control:
required: true
description: Prevents caching of the credential-bearing response.
schema:
type: string
enum:
- no-store
content:
application/json:
schema:
$ref: "#/components/schemas/ResultMemberAccess"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/revoke:
post:
operationId: revokeJobExecutionGrant
description: Administrator-only revocation of an accepted execution grant.
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"202":
description: The request has been accepted for processing, but processing has not yet completed.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/Job"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/jobs/{job_id}/soft-delete:
post:
operationId: softDeleteJob
parameters:
- $ref: "#/components/parameters/Parameters.JobId"
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"200":
description: The request has succeeded.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/Job"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/source-credentials:
get:
operationId: listSourceCredentials
parameters:
- $ref: "#/components/parameters/Parameters.Cursor"
- $ref: "#/components/parameters/Parameters.Limit"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/SourceCredentialPage"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
post:
operationId: createSourceCredential
parameters:
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"201":
description: The request has succeeded and a new resource has been created as a result.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/SourceCredential"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SourceCredentialCreate"
/v1/source-credentials/{credential_id}:
get:
operationId: getSourceCredential
parameters:
- $ref: "#/components/parameters/Parameters.CredentialIdParameter"
responses:
"200":
description: The request has succeeded.
content:
application/json:
schema:
$ref: "#/components/schemas/SourceCredential"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/source-credentials/{credential_id}/revoke:
post:
operationId: revokeSourceCredential
parameters:
- $ref: "#/components/parameters/Parameters.CredentialIdParameter"
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"200":
description: The request has succeeded.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/SourceCredential"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
/v1/source-credentials/{credential_id}/versions:
post:
operationId: rotateSourceCredential
parameters:
- $ref: "#/components/parameters/Parameters.CredentialIdParameter"
- $ref: "#/components/parameters/Parameters.IdempotencyKey"
responses:
"201":
description: The request has succeeded and a new resource has been created as a result.
headers:
Idempotency-Expires-At:
required: false
description: Earliest time at which the server may forget this key.
schema:
type: string
format: http-date
content:
application/json:
schema:
$ref: "#/components/schemas/SourceCredential"
"404":
description: The server cannot find the requested resource.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
"409":
description: The request conflicts with the current state of the server.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
default:
description: Structured error with user-safe detail only.
content:
application/problem+json:
schema:
$ref: "#/components/schemas/ApiError"
requestBody:
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/SourceCredentialRotate"
components:
parameters:
Parameters.AttemptId:
name: attempt_id
in: path
required: true
schema:
$ref: "#/components/schemas/OpaqueId"
Parameters.CredentialIdParameter:
name: credential_id
in: path
required: true
schema:
$ref: "#/components/schemas/CredentialId"
Parameters.Cursor:
name: cursor
in: query
required: false
schema:
type: string
minLength: 16
maxLength: 2048
Parameters.IdempotencyKey:
name: idempotency-key
in: header
required: true
description: Subject- and operation-scoped key retained for at least 24 hours.
schema:
type: string
pattern: ^[A-Za-z0-9._~-]{16,128}$
Parameters.JobId:
name: job_id
in: path
required: true
schema:
$ref: "#/components/schemas/OpaqueId"
Parameters.Limit:
name: limit
in: query
required: false
schema:
type: integer
minimum: 1
maximum: 200
default: 50
schemas:
ActivationResponse:
type: object
required:
- authority
- execution
- lease
properties:
authority:
$ref: "#/components/schemas/AttemptAuthority"
execution:
$ref: "#/components/schemas/ExecutionEnvelope"
lease:
$ref: "#/components/schemas/LeaseProjection"
ApiError:
type: object
required:
- code
- message
- request_id
properties:
code:
type: string
enum:
- invalid_request
- unauthenticated
- forbidden
- not_found
- idempotency_conflict
- precondition_failed
- cursor_invalid
- cursor_expired
- rate_limited
- unavailable
- internal
message:
type: string
maxLength: 500
request_id:
$ref: "#/components/schemas/OpaqueId"
fields:
type: array
items:
type: object
properties:
pointer:
type: string
maxLength: 500
code:
type: string
maxLength: 100
required:
- pointer
- code
maxItems: 100
AttemptActivateRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
AttemptAuthority:
type: object
required:
- attempt_id
- fence
- worker_incarnation
properties:
attempt_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
AttemptCheckpointRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
- checkpoint_ref
- resolved_source_id
- validated_bytes
- validated_members
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
checkpoint_ref:
$ref: "#/components/schemas/CheckpointDescriptorRef"
resolved_source_id:
$ref: "#/components/schemas/OpaqueId"
validated_bytes:
type: integer
minimum: 0
validated_members:
type: integer
minimum: 0
staging_multipart:
$ref: "#/components/schemas/StagingMultipartIdentity"
AttemptMutation:
type: object
required:
- operation_id
- fence
- worker_incarnation
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
AttemptOutcomeRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
- outcome
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
outcome:
oneOf:
- type: object
properties:
kind:
type: string
enum:
- success
result:
$ref: "#/components/schemas/ResultDescriptor"
required:
- kind
- result
- type: object
properties:
kind:
type: string
enum:
- failure
failure:
$ref: "#/components/schemas/AttemptRuntimeFailure"
required:
- kind
- failure
AttemptPage:
type: object
required:
- items
- next_cursor
properties:
items:
type: array
items:
$ref: "#/components/schemas/AttemptRecord"
next_cursor:
anyOf:
- type: string
- type: "null"
AttemptProgressRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
- progress
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
progress:
$ref: "#/components/schemas/ProgressValue"
AttemptRecord:
type: object
required:
- id
- fence
- worker_incarnation
- state
- progress
- result
- failure
- created_at
- updated_at
properties:
id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
state:
type: string
enum:
- AttemptAuthorized
- AttemptExecuting
- AttemptStopped
- AttemptCommitted
progress:
oneOf:
- $ref: "#/components/schemas/Progress"
- type: "null"
result:
oneOf:
- $ref: "#/components/schemas/ResultDescriptor"
- type: "null"
failure:
oneOf:
- $ref: "#/components/schemas/JobFailure"
- type: "null"
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
AttemptRenewRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
AttemptResolvedSourceRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
- resolved_source_ref
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
resolved_source_ref:
$ref: "#/components/schemas/ResolvedSourceDescriptorRef"
AttemptRuntimeFailure:
type: object
required:
- class
- message
properties:
class:
type: string
enum:
- authorization
- source_not_found
- source_changed
- transient_source
- transient_target
- integrity
- capacity
- internal
message:
type: string
maxLength: 500
safe_details:
type: object
unevaluatedProperties:
$ref: "#/components/schemas/SafeDetailValue"
AttemptStagingMultipartRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
- multipart
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
multipart:
$ref: "#/components/schemas/StagingMultipartIdentity"
AttemptStagingObjectRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
- object
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
object:
$ref: "#/components/schemas/StagingObjectIdentity"
completed_upload_id:
type: string
minLength: 1
AttemptStagingWriteIntentRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
- intent
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
intent:
$ref: "#/components/schemas/StagingWriteIntent"
AttemptStopRequest:
type: object
required:
- operation_id
- fence
- worker_incarnation
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
BasicAuthCredentialCreate:
type: object
required:
- label
- kind
- material
properties:
label:
type: string
minLength: 1
maxLength: 200
kind:
type: string
enum:
- basic_auth
material:
$ref: "#/components/schemas/BasicAuthMaterial"
BasicAuthMaterial:
type: object
required:
- username
- password
properties:
username:
type: string
minLength: 1
maxLength: 1024
password:
type: string
minLength: 1
maxLength: 16384
BearerTokenCredentialCreate:
type: object
required:
- label
- kind
- material
properties:
label:
type: string
minLength: 1
maxLength: 200
kind:
type: string
enum:
- bearer_token
material:
$ref: "#/components/schemas/TokenMaterial"
BucketName:
type: string
pattern: ^(?!.*\.\.)[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$
CheckpointDescriptorRef:
type: object
required:
- id
- kind
- schema_version
- byte_length
- checksum
properties:
id:
$ref: "#/components/schemas/OpaqueId"
kind:
type: string
enum:
- checkpoint
schema_version:
type: integer
minimum: 1
byte_length:
type: integer
minimum: 0
item_count:
type: integer
minimum: 0
checksum:
$ref: "#/components/schemas/Sha256Digest"
CheckpointProjection:
type: object
required:
- reusable
- validated_bytes
- validated_members
properties:
reusable:
type: boolean
validated_bytes:
type: integer
minimum: 0
validated_members:
type: integer
minimum: 0
ClaimRequest:
type: object
required:
- operation_id
- worker_incarnation
properties:
operation_id:
$ref: "#/components/schemas/OpaqueId"
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
ClaimResponse:
type: object
required:
- authority
- execution
properties:
authority:
$ref: "#/components/schemas/AttemptAuthority"
execution:
$ref: "#/components/schemas/ExecutionEnvelope"
CredentialGrantVersion:
type: object
required:
- credential_id
- version_id
properties:
credential_id:
$ref: "#/components/schemas/CredentialId"
version_id:
$ref: "#/components/schemas/CredentialVersionId"
CredentialId:
type: string
pattern: ^[A-Za-z0-9][A-Za-z0-9_-]{7,127}$
description: Owner-authorized source credential registry identifier.
CredentialMaterial:
oneOf:
- $ref: "#/components/schemas/BasicAuthMaterial"
- $ref: "#/components/schemas/TokenMaterial"
- $ref: "#/components/schemas/HttpHeadersMaterial"
- $ref: "#/components/schemas/ObjectStoreCredentialMaterial"
description: Write-only material whose closed shape must match the credential kind. Values are never returned or logged.
CredentialVersionId:
type: string
pattern: ^[A-Za-z0-9][A-Za-z0-9_-]{7,127}$
description: Immutable application credential-version identifier; backend secret-store coordinates are never exposed.
DeletionChanged:
type: object
required:
- kind
- job_id
- operation_id
- state
properties:
kind:
type: string
enum:
- deletion_changed
job_id:
$ref: "#/components/schemas/OpaqueId"
operation_id:
$ref: "#/components/schemas/OpaqueId"
state:
type: string
enum:
- queued
- running
- retry_wait
- blocked
- completed
allOf:
- $ref: "#/components/schemas/EventBase"
DeletionOperation:
type: object
required:
- id
- job_id
- state
- problem
- created_at
- updated_at
properties:
id:
$ref: "#/components/schemas/OpaqueId"
job_id:
$ref: "#/components/schemas/OpaqueId"
state:
type: string
enum:
- queued
- running
- retry_wait
- blocked
- completed
problem:
oneOf:
- $ref: "#/components/schemas/DeletionProblem"
- type: "null"
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
DeletionProblem:
type: object
required:
- class
- message
properties:
class:
type: string
enum:
- authorization
- target_unavailable
- configuration
- internal
message:
type: string
maxLength: 500
DurableDescriptorRef:
type: object
required:
- id
- kind
- schema_version
- byte_length
- checksum
properties:
id:
$ref: "#/components/schemas/OpaqueId"
kind:
type: string
enum:
- resolved_source
- checkpoint
schema_version:
type: integer
minimum: 1
byte_length:
type: integer
minimum: 0
item_count:
type: integer
minimum: 0
checksum:
$ref: "#/components/schemas/Sha256Digest"
EventAttempt:
type: object
required:
- attempt_id
- fence
properties:
attempt_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
EventBase:
type: object
required:
- schema_version
- event_id
- sequence
- cursor
- occurred_at
properties:
schema_version:
type: number
enum:
- 1
event_id:
$ref: "#/components/schemas/OpaqueId"
sequence:
type: integer
minimum: 1
cursor:
$ref: "#/components/schemas/EventCursor"
occurred_at:
type: string
format: date-time
EventCursor:
type: string
minLength: 16
maxLength: 2048
EventFrame:
type: object
oneOf:
- $ref: "#/components/schemas/JobChanged"
- $ref: "#/components/schemas/DeletionChanged"
- $ref: "#/components/schemas/ResyncRequired"
- $ref: "#/components/schemas/Heartbeat"
discriminator:
propertyName: kind
mapping:
job_changed: "#/components/schemas/JobChanged"
deletion_changed: "#/components/schemas/DeletionChanged"
resync_required: "#/components/schemas/ResyncRequired"
heartbeat: "#/components/schemas/Heartbeat"
EventProgress:
type: object
required:
- attempt_id
- fence
- completed_bytes
- completed_members
properties:
attempt_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
completed_bytes:
type: integer
minimum: 0
total_bytes:
anyOf:
- type: integer
- type: "null"
minimum: 0
completed_members:
type: integer
minimum: 0
total_members:
anyOf:
- type: integer
- type: "null"
minimum: 0
EventTicket:
type: object
required:
- ticket
- expires_at
properties:
ticket:
$ref: "#/components/schemas/OpaqueId"
expires_at:
type: string
format: date-time
ExecutionEnvelope:
type: object
required:
- id
- job_id
- attempt_id
- fence
- worker_incarnation
- source
- sensitive_source_ref
- credential_version
- resolved_source_ref
- target
- staging_target
- execution_grant_ref
- checkpoint_ref
properties:
id:
$ref: "#/components/schemas/OpaqueId"
job_id:
$ref: "#/components/schemas/OpaqueId"
attempt_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
worker_incarnation:
$ref: "#/components/schemas/OpaqueId"
source:
$ref: "#/components/schemas/SourceProjection"
sensitive_source_ref:
$ref: "#/components/schemas/OpaqueId"
description: Opaque grant-bound reference to the complete accepted source input; credential_version identifies any pinned credential separately.
credential_version:
oneOf:
- $ref: "#/components/schemas/CredentialGrantVersion"
- type: "null"
resolved_source_ref:
oneOf:
- $ref: "#/components/schemas/DurableDescriptorRef"
- type: "null"
target:
$ref: "#/components/schemas/Target"
staging_target:
$ref: "#/components/schemas/StagingTarget"
execution_grant_ref:
$ref: "#/components/schemas/OpaqueId"
checkpoint_ref:
oneOf:
- $ref: "#/components/schemas/DurableDescriptorRef"
- type: "null"
Heartbeat:
type: object
required:
- kind
properties:
kind:
type: string
enum:
- heartbeat
allOf:
- $ref: "#/components/schemas/EventBase"
HttpHeadersCredentialCreate:
type: object
required:
- label
- kind
- material
properties:
label:
type: string
minLength: 1
maxLength: 200
kind:
type: string
enum:
- http_headers
material:
$ref: "#/components/schemas/HttpHeadersMaterial"
HttpHeadersMaterial:
type: object
required:
- headers
properties:
headers:
type: object
unevaluatedProperties:
type: string
description: Canonical lowercase end-to-end headers. Connection-nominated and routing, framing, cookie, proxy, and authentication headers are rejected.
HttpSourceProjection:
type: object
required:
- kind
- display_url
- result_path
properties:
kind:
type: string
enum:
- http
display_url:
type: string
format: uri
maxLength: 8192
description: Sanitized URL without userinfo, sensitive query values, or fragments.
result_path:
$ref: "#/components/schemas/ResultPath"
credential_id:
$ref: "#/components/schemas/CredentialId"
HttpSourceSubmission:
type: object
required:
- kind
- url
- result_path
properties:
kind:
type: string
enum:
- http
url:
type: string
format: uri
maxLength: 8192
description: Sensitive execution input. Public projections expose only display_url.
result_path:
$ref: "#/components/schemas/ResultPath"
credential_id:
$ref: "#/components/schemas/CredentialId"
HuggingFaceCredentialCreate:
type: object
required:
- label
- kind
- material
properties:
label:
type: string
minLength: 1
maxLength: 200
kind:
type: string
enum:
- hugging_face
material:
$ref: "#/components/schemas/TokenMaterial"
HuggingFaceRepositoryId:
type: string
pattern: ^[A-Za-z0-9._-]+/[A-Za-z0-9._-]+$
HuggingFaceSelection:
type: object
properties:
paths:
type: array
items:
$ref: "#/components/schemas/ResultPath"
maxItems: 10000
prefixes:
type: array
items:
$ref: "#/components/schemas/ResultPath"
maxItems: 10000
HuggingFaceSourceProjection:
type: object
required:
- kind
- repository_type
- repository_id
- revision
properties:
kind:
type: string
enum:
- hugging_face
repository_type:
type: string
enum:
- model
- dataset
- space
repository_id:
$ref: "#/components/schemas/HuggingFaceRepositoryId"
revision:
type: string
minLength: 1
maxLength: 256
selection:
$ref: "#/components/schemas/HuggingFaceSelection"
credential_id:
$ref: "#/components/schemas/CredentialId"
HuggingFaceSourceSubmission:
type: object
required:
- kind
- repository_type
- repository_id
- revision
properties:
kind:
type: string
enum:
- hugging_face
repository_type:
type: string
enum:
- model
- dataset
- space
repository_id:
$ref: "#/components/schemas/HuggingFaceRepositoryId"
revision:
type: string
minLength: 1
maxLength: 256
selection:
$ref: "#/components/schemas/HuggingFaceSelection"
credential_id:
$ref: "#/components/schemas/CredentialId"
Job:
type: object
required:
- resource_kind
- id
- owner
- label
- revision
- phase
- lifecycle
- source
- target
- authoritative_attempt
- progress
- checkpoint
- result
- failure
- created_at
- updated_at
- event_cursor
properties:
resource_kind:
type: string
enum:
- job
id:
$ref: "#/components/schemas/OpaqueId"
owner:
$ref: "#/components/schemas/PrincipalId"
label:
anyOf:
- type: string
- type: "null"
minLength: 1
maxLength: 200
revision:
type: integer
minimum: 1
phase:
$ref: "#/components/schemas/JobPhase"
lifecycle:
$ref: "#/components/schemas/JobLifecycle"
source:
$ref: "#/components/schemas/SourceProjection"
target:
$ref: "#/components/schemas/Target"
authoritative_attempt:
oneOf:
- $ref: "#/components/schemas/AttemptAuthority"
- type: "null"
progress:
oneOf:
- $ref: "#/components/schemas/Progress"
- type: "null"
checkpoint:
oneOf:
- $ref: "#/components/schemas/CheckpointProjection"
- type: "null"
result:
oneOf:
- $ref: "#/components/schemas/ResultDescriptor"
- type: "null"
failure:
oneOf:
- $ref: "#/components/schemas/JobFailure"
- type: "null"
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
event_cursor:
type: string
minLength: 16
JobChanged:
type: object
required:
- kind
- job_id
- job_revision
- phase
- lifecycle
- authoritative_attempt
- progress
properties:
kind:
type: string
enum:
- job_changed
job_id:
$ref: "#/components/schemas/OpaqueId"
job_revision:
type: integer
minimum: 1
phase:
$ref: "#/components/schemas/JobPhase"
lifecycle:
$ref: "#/components/schemas/JobLifecycle"
authoritative_attempt:
oneOf:
- $ref: "#/components/schemas/EventAttempt"
- type: "null"
progress:
oneOf:
- $ref: "#/components/schemas/EventProgress"
- type: "null"
allOf:
- $ref: "#/components/schemas/EventBase"
JobFailure:
oneOf:
- $ref: "#/components/schemas/PermanentJobFailure"
- $ref: "#/components/schemas/RetryableJobFailure"
JobLifecycle:
type: string
enum:
- visible
- soft_deleted
- hard_deleting
- hard_deleted
JobPage:
type: object
required:
- items
- next_cursor
- event_cursor
- management_capabilities
properties:
items:
type: array
items:
$ref: "#/components/schemas/JobResource"
next_cursor:
anyOf:
- type: string
- type: "null"
event_cursor:
type: string
minLength: 16
management_capabilities:
$ref: "#/components/schemas/ManagementCapabilities"
JobPhase:
type: string
enum:
- Queued
- Running
- RetryWait
- Cancelling
- Succeeded
- Failed
- Cancelled
JobPhaseProjection:
type: object
required:
- phase
properties:
phase:
$ref: "#/components/schemas/JobPhase"
JobResource:
type: object
oneOf:
- $ref: "#/components/schemas/Job"
- $ref: "#/components/schemas/JobTombstone"
discriminator:
propertyName: resource_kind
mapping:
job: "#/components/schemas/Job"
tombstone: "#/components/schemas/JobTombstone"
JobSubmission:
type: object
required:
- source
properties:
source:
$ref: "#/components/schemas/SourceSubmission"
target:
$ref: "#/components/schemas/TargetOverride"
description: Fields omitted here are taken from the configured default target before authorization.
label:
type: string
minLength: 1
maxLength: 200
JobTombstone:
type: object
required:
- resource_kind
- id
- owner
- target
- terminal_phase
- deletion_operation_id
- created_at
- hard_delete_started_at
- updated_at
- event_cursor
properties:
resource_kind:
type: string
enum:
- tombstone
id:
$ref: "#/components/schemas/OpaqueId"
owner:
$ref: "#/components/schemas/PrincipalId"
target:
$ref: "#/components/schemas/Target"
terminal_phase:
$ref: "#/components/schemas/TerminalJobPhase"
deletion_operation_id:
$ref: "#/components/schemas/OpaqueId"
created_at:
type: string
format: date-time
hard_delete_started_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
event_cursor:
type: string
minLength: 16
LeaseProjection:
type: object
required:
- expires_at
- renew_after
properties:
expires_at:
type: string
format: date-time
description: Expiry of the exact coordination lease established for this authority.
renew_after:
type: string
format: date-time
description: Earliest recommended renewal time, strictly before expires_at.
ManagementCapabilities:
type: object
required:
- revoke_execution_grants
properties:
revoke_execution_grants:
type: boolean
description: Current caller may administratively revoke accepted execution grants.
ObjectIdentity:
type: object
required:
- store
- bucket
- key
- checksum
- size
properties:
store:
type: string
bucket:
type: string
key:
type: string
version_id:
type: string
checksum:
$ref: "#/components/schemas/Sha256Digest"
size:
type: integer
minimum: 0
ObjectStoreCredentialCreate:
type: object
required:
- label
- kind
- material
properties:
label:
type: string
minLength: 1
maxLength: 200
kind:
type: string
enum:
- object_store
material:
$ref: "#/components/schemas/ObjectStoreCredentialMaterial"
ObjectStoreCredentialMaterial:
type: object
required:
- access_key_id
- secret_access_key
properties:
access_key_id:
type: string
minLength: 1
maxLength: 1024
secret_access_key:
type: string
minLength: 1
maxLength: 16384
session_token:
type: string
minLength: 1
maxLength: 16384
ObjectStoreSourceProjection:
type: object
required:
- kind
- store
- bucket
- key
- result_path
properties:
kind:
type: string
enum:
- object_store
store:
type: string
minLength: 1
maxLength: 128
bucket:
type: string
minLength: 3
maxLength: 63
key:
type: string
minLength: 1
maxLength: 4096
version_id:
type: string
maxLength: 1024
result_path:
$ref: "#/components/schemas/ResultPath"
credential_id:
$ref: "#/components/schemas/CredentialId"
ObjectStoreSourceSubmission:
type: object
required:
- kind
- store
- bucket
- key
- result_path
properties:
kind:
type: string
enum:
- object_store
store:
type: string
minLength: 1
maxLength: 128
bucket:
type: string
minLength: 3
maxLength: 63
key:
type: string
minLength: 1
maxLength: 4096
version_id:
type: string
maxLength: 1024
result_path:
$ref: "#/components/schemas/ResultPath"
credential_id:
$ref: "#/components/schemas/CredentialId"
OpaqueId:
type: string
pattern: ^[A-Za-z0-9][A-Za-z0-9_-]{7,127}$
PermanentJobFailure:
type: object
required:
- class
- retryable
- message
properties:
class:
type: string
enum:
- validation
- authorization
- source_not_found
- source_changed
- cancelled
retryable:
type: boolean
enum:
- false
message:
type: string
maxLength: 500
safe_details:
type: object
unevaluatedProperties:
$ref: "#/components/schemas/SafeDetailValue"
PrincipalId:
type: string
pattern: ^[A-Za-z0-9][A-Za-z0-9_-]{7,127}$
description: Internal stable principal identifier mapped to one exact OIDC issuer and subject pair.
Progress:
type: object
required:
- attempt_id
- fence
- completed_bytes
- completed_members
- observed_at
properties:
attempt_id:
$ref: "#/components/schemas/OpaqueId"
fence:
type: integer
minimum: 1
completed_bytes:
type: integer
minimum: 0
total_bytes:
anyOf:
- type: integer
- type: "null"
minimum: 0
completed_members:
type: integer
minimum: 0
total_members:
anyOf:
- type: integer
- type: "null"
minimum: 0
observed_at:
type: string
format: date-time
ProgressValue:
type: object
required:
- completed_bytes
- completed_members
properties:
completed_bytes:
type: integer
minimum: 0
total_bytes:
anyOf:
- type: integer
- type: "null"
minimum: 0
completed_members:
type: integer
minimum: 0
total_members:
anyOf:
- type: integer
- type: "null"
minimum: 0
ResolvedSourceDescriptorRef:
type: object
required:
- id
- kind
- schema_version
- byte_length
- checksum
properties:
id:
$ref: "#/components/schemas/OpaqueId"
kind:
type: string
enum:
- resolved_source
schema_version:
type: integer
minimum: 1
byte_length:
type: integer
minimum: 0
item_count:
type: integer
minimum: 0
checksum:
$ref: "#/components/schemas/Sha256Digest"
ResultDescriptor:
type: object
required:
- kind
- manifest_id
- schema_version
- manifest
- member_count
- total_bytes
properties:
kind:
type: string
enum:
- manifest
manifest_id:
$ref: "#/components/schemas/OpaqueId"
schema_version:
type: integer
minimum: 1
manifest:
$ref: "#/components/schemas/ObjectIdentity"
member_count:
type: integer
minimum: 1
total_bytes:
type: integer
minimum: 0
ResultMember:
type: object
required:
- id
- path
- size
- object
properties:
id:
$ref: "#/components/schemas/OpaqueId"
path:
type: string
minLength: 1
maxLength: 4096
description: NFC-normalized relative POSIX path validated under architecture.md.
size:
type: integer
minimum: 0
object:
$ref: "#/components/schemas/ObjectIdentity"
ResultMemberAccess:
type: object
required:
- url
- expires_at
properties:
url:
type: string
format: uri
pattern: ^https?://
description: Sensitive time-limited HTTP(S) exact-object URL.
expires_at:
type: string
format: date-time
ResultMemberPage:
type: object
required:
- items
- next_cursor
properties:
items:
type: array
items:
$ref: "#/components/schemas/ResultMember"
next_cursor:
anyOf:
- type: string
- type: "null"
ResultPath:
type: string
minLength: 1
maxLength: 4096
description: NFC-normalized relative POSIX path validated under architecture.md.
ResyncRequired:
type: object
required:
- kind
- reason
properties:
kind:
type: string
enum:
- resync_required
reason:
type: string
enum:
- cursor_absent
- cursor_invalid
- cursor_expired
- authorization_changed
- history_unavailable
allOf:
- $ref: "#/components/schemas/EventBase"
RetryableJobFailure:
type: object
required:
- class
- retryable
- message
properties:
class:
type: string
enum:
- transient_source
- transient_target
- integrity
- capacity
- internal
- lost_attempt
retryable:
type: boolean
enum:
- true
message:
type: string
maxLength: 500
safe_details:
type: object
unevaluatedProperties:
$ref: "#/components/schemas/SafeDetailValue"
SafeDetailValue:
anyOf:
- type: string
- type: integer
format: int64
- type: boolean
- type: "null"
Sha256Digest:
type: string
pattern: ^sha256:[a-f0-9]{64}$
SourceCredential:
type: object
required:
- id
- owner
- label
- kind
- status
- active_version
- created_at
- updated_at
properties:
id:
$ref: "#/components/schemas/CredentialId"
owner:
$ref: "#/components/schemas/PrincipalId"
label:
type: string
minLength: 1
maxLength: 200
kind:
$ref: "#/components/schemas/SourceCredentialKind"
status:
type: string
enum:
- active
- revoked
active_version:
oneOf:
- $ref: "#/components/schemas/SourceCredentialVersion"
- type: "null"
created_at:
type: string
format: date-time
updated_at:
type: string
format: date-time
SourceCredentialCreate:
type: object
oneOf:
- $ref: "#/components/schemas/BasicAuthCredentialCreate"
- $ref: "#/components/schemas/BearerTokenCredentialCreate"
- $ref: "#/components/schemas/HttpHeadersCredentialCreate"
- $ref: "#/components/schemas/ObjectStoreCredentialCreate"
- $ref: "#/components/schemas/HuggingFaceCredentialCreate"
discriminator:
propertyName: kind
mapping:
basic_auth: "#/components/schemas/BasicAuthCredentialCreate"
bearer_token: "#/components/schemas/BearerTokenCredentialCreate"
http_headers: "#/components/schemas/HttpHeadersCredentialCreate"
object_store: "#/components/schemas/ObjectStoreCredentialCreate"
hugging_face: "#/components/schemas/HuggingFaceCredentialCreate"
SourceCredentialKind:
type: string
enum:
- basic_auth
- bearer_token
- http_headers
- object_store
- hugging_face
SourceCredentialPage:
type: object
required:
- items
- next_cursor
properties:
items:
type: array
items:
$ref: "#/components/schemas/SourceCredential"
next_cursor:
anyOf:
- type: string
- type: "null"
SourceCredentialRotate:
type: object
required:
- material
properties:
material:
$ref: "#/components/schemas/CredentialMaterial"
description: The material shape must match the stored credential kind; rotation never changes kind.
SourceCredentialVersion:
type: object
required:
- id
- created_at
properties:
id:
$ref: "#/components/schemas/CredentialVersionId"
created_at:
type: string
format: date-time
SourceProjection:
type: object
oneOf:
- $ref: "#/components/schemas/HttpSourceProjection"
- $ref: "#/components/schemas/ObjectStoreSourceProjection"
- $ref: "#/components/schemas/HuggingFaceSourceProjection"
discriminator:
propertyName: kind
mapping:
http: "#/components/schemas/HttpSourceProjection"
object_store: "#/components/schemas/ObjectStoreSourceProjection"
hugging_face: "#/components/schemas/HuggingFaceSourceProjection"
SourceSubmission:
type: object
oneOf:
- $ref: "#/components/schemas/HttpSourceSubmission"
- $ref: "#/components/schemas/ObjectStoreSourceSubmission"
- $ref: "#/components/schemas/HuggingFaceSourceSubmission"
discriminator:
propertyName: kind
mapping:
http: "#/components/schemas/HttpSourceSubmission"
object_store: "#/components/schemas/ObjectStoreSourceSubmission"
hugging_face: "#/components/schemas/HuggingFaceSourceSubmission"
StagingMultipartIdentity:
type: object
required:
- store
- bucket
- key
- upload_id
properties:
store:
type: string
minLength: 1
bucket:
type: string
minLength: 1
key:
type: string
minLength: 1
upload_id:
type: string
minLength: 1
StagingObjectIdentity:
type: object
required:
- store
- bucket
- key
properties:
store:
type: string
minLength: 1
bucket:
type: string
minLength: 1
key:
type: string
minLength: 1
version_id:
type: string
minLength: 1
StagingTarget:
type: object
required:
- store
- bucket
- prefix
properties:
store:
type: string
minLength: 1
maxLength: 128
bucket:
$ref: "#/components/schemas/BucketName"
prefix:
type: string
minLength: 1
maxLength: 1024
description: Exact attempt-scoped internal prefix selected by the service.
StagingWriteIntent:
type: object
required:
- store
- bucket
- key
properties:
store:
type: string
minLength: 1
bucket:
type: string
minLength: 1
key:
type: string
minLength: 1
Target:
type: object
required:
- store
- bucket
- prefix
properties:
store:
type: string
minLength: 1
maxLength: 128
bucket:
$ref: "#/components/schemas/BucketName"
prefix:
type: string
maxLength: 1024
description: NFC-normalized target segments; semantic validation follows architecture.md.
TargetOverride:
type: object
properties:
bucket:
$ref: "#/components/schemas/BucketName"
prefix:
type: string
maxLength: 1024
description: NFC-normalized target segments; semantic validation follows architecture.md.
TerminalJobPhase:
type: string
enum:
- Succeeded
- Failed
- Cancelled
TokenMaterial:
type: object
required:
- token
properties:
token:
type: string
minLength: 1
maxLength: 16384
securitySchemes:
oidc:
type: openIdConnect
openIdConnectUrl: https://identity.invalid/.well-known/openid-configuration
serviceAuth:
type: mutualTLS
eventTicket:
type: apiKey
in: query
name: ticket
servers:
- url: /api
variables: {}
security:
- oidc: []