MethodPathSummaryAuth
GET/v1/admin/site-rolloutsList rollouts for one tenant scopeSession
POST/v1/admin/site-rollouts/reconciliationsRecord the configuration proven to be active after an uncertain deployment resultSession
GET/v1/admin/site-rollouts/{rollout_id}Get deterministic rollout progress for one tenant scopeSession
POST/v1/admin/site-rollouts/{rollout_id}/cancelCancel queued work in a rolloutSession
GET/v1/admin/site-rollouts/{rollout_id}/deploymentsList latest per-node deployment attemptsSession
POST/v1/admin/site-rollouts/{rollout_id}/pausePause a running progressive rolloutSession
POST/v1/admin/site-rollouts/{rollout_id}/resumeResume a paused progressive rolloutSession
POST/v1/admin/site-rollouts/{rollout_id}/retry-failedAppend attempts for retryable failed deploymentsSession
POST/v1/admin/site-rollouts/{rollout_id}/startStart a held progressive rolloutSession

Contract file:api/control-site-publications.openapi.yaml

Operation details

GET /v1/admin/site-rollouts

List rollouts for one tenant scope

operationId
listAdminSiteRollouts
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.read

Parameters

listAdminSiteRollouts Parameters
NameInTypeRequiredDescription
scope_idquerystring(uuid)YesPlatform route target tenant access-scope UUID.
limitqueryintegerNo—
cursorquerystringNoVersioned base64url HMAC-SHA256 envelope returned by the immediately preceding page. It is bound to audience, resolved tenant scope, resource kind, and the rollout ID for deployment pages. It cannot be reused across those boundaries or modified.

Responses

listAdminSiteRollouts Responses
StatusDescription
200Stable platform rollout page.

Fields:items: array<AdminRollout> next_cursor?: string

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/admin/site-rollouts/reconciliations

Record the configuration proven to be active after an uncertain deployment result

operationId
reconcileAdminNodeConfiguration
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.manage

Description (from the contract)

Clears the rollback_failed reconciliation gate only when the named node, tenant scope, source deployment attempt, and observed immutable config all match persisted facts. It also permits operator-confirmed recovery of a legacy failed apply only when the deployment artifact, previous identity, fresh mTLS heartbeat pointer chain, missing current/loaded identity, stopped conservative OpenResty projection, and absence of active deployments all agree. That recovery moves only the version pointers; the next healthy publication establishes the current immutable identity. The append-only reconciliation record, live IAM authorization, node-state update, and audit event commit atomically. Retrying with the same Idempotency-Key returns the same fact; changing the payload with that key returns 409.

Parameters

reconcileAdminNodeConfiguration Parameters
NameInTypeRequiredDescription
Idempotency-KeyheaderstringYesStable for the frozen business payload. Request, correlation, trace, and task identifiers may change on an identical retry.
X-Request-IDheaderstring(uuid)Yes—
TraceparentheaderstringYes—
X-Correlation-IDheaderstring(uuid)NoDefaults to X-Request-ID when omitted.
X-Task-IDheaderstringNo—

Request body

application/json · Required:Yes

reconcileAdminNodeConfiguration Request body
NameTypeRequiredDescription
configuration_scope_idstring(uuid)Yes—
node_idstring(uuid)Yes—
source_deployment_idstring(uuid)Yes—
source_deployment_attemptinteger(int32)Yes—
observed_config_version_idstring(uuid) | nullYes—
resolutionstring: agent_observed / operator_confirmedYes—
evidencestringYes—

Responses

reconcileAdminNodeConfiguration Responses
StatusDescription
201Created reconciliation fact, or the stored result of an identical retry.

Fields:id: string(uuid) node_id: string(uuid) configuration_scope_id: string(uuid) source_deployment_id: string(uuid) source_deployment_attempt: integer(int32) previous_config_version_id: string(uuid) | null current_config_version_id: string(uuid) | null resolution: string: agent_observed / operator_confirmed reconciliation_required: boolean reconciled_at: string(date-time)

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
404Resource is absent in the authorized tenant scope. Cross-tenant IDs use the same response.
409Idempotency, target snapshot, rollout state, active deployment, or retry conflict.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/admin/site-rollouts/{rollout_id}

Get deterministic rollout progress for one tenant scope

operationId
getAdminSiteRollout
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.read

Parameters

getAdminSiteRollout Parameters
NameInTypeRequiredDescription
rollout_idpathstring(uuid)Yes—
scope_idquerystring(uuid)YesPlatform route target tenant access-scope UUID.

Responses

getAdminSiteRollout Responses
StatusDescription
200Platform rollout detail derived from latest deployment attempts.

Fields:id: string(uuid) configuration_scope_id: string(uuid) config_version_id: string(uuid) action: string: apply / rollback state: string: queued / running / paused / succeeded / partial_failed / failed / cancelled revision: integer(int64) max_attempts: integer progress: RolloutProgress can_cancel: boolean can_retry: boolean can_start?: boolean can_pause?: boolean can_resume?: boolean rollout?: RolloutPolicyView pause_reason?: string: / operator / failure_threshold created_at: string(date-time) updated_at: string(date-time) replayed?: boolean

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
404Resource is absent in the authorized tenant scope. Cross-tenant IDs use the same response.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/admin/site-rollouts/{rollout_id}/cancel

Cancel queued work in a rollout

operationId
cancelSiteRollout
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.manage

Description (from the contract)

Progressive cancellation marks held or unclaimed commands and their queued deployment facts cancelled; already claimed or in-flight work may still report durable terminal facts. Legacy rollouts retain their all-pending precondition. Uses rollout revision CAS and idempotency.

Parameters

cancelSiteRollout Parameters
NameInTypeRequiredDescription
rollout_idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYesStable for the frozen business payload. Request, correlation, trace, and task identifiers may change on an identical retry.
X-Request-IDheaderstring(uuid)Yes—
TraceparentheaderstringYes—
X-Correlation-IDheaderstring(uuid)NoDefaults to X-Request-ID when omitted.
X-Task-IDheaderstringNo—

Request body

application/json · Required:Yes

cancelSiteRollout Request body
NameTypeRequiredDescription
configuration_scope_idstring(uuid)Yes—
expected_revisioninteger(int64)Yes—

Responses

cancelSiteRollout Responses
StatusDescription
200Updated rollout, or the stored result of an identical command retry.

Fields:id: string(uuid) configuration_scope_id: string(uuid) config_version_id: string(uuid) action: string: apply / rollback state: string: queued / running / paused / succeeded / partial_failed / failed / cancelled revision: integer(int64) max_attempts: integer progress: RolloutProgress can_cancel: boolean can_retry: boolean can_start?: boolean can_pause?: boolean can_resume?: boolean rollout?: RolloutPolicyView pause_reason?: string: / operator / failure_threshold created_at: string(date-time) updated_at: string(date-time) replayed?: boolean

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
404Resource is absent in the authorized tenant scope. Cross-tenant IDs use the same response.
409Idempotency, target snapshot, rollout state, active deployment, or retry conflict.
412The source or rollout expected revision is stale.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 412 The revision changed: read the latest ETag, decide again, then send the new If-Match.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

GET /v1/admin/site-rollouts/{rollout_id}/deployments

List latest per-node deployment attempts

operationId
listAdminSiteRolloutDeployments
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.read

Parameters

listAdminSiteRolloutDeployments Parameters
NameInTypeRequiredDescription
rollout_idpathstring(uuid)Yes—
scope_idquerystring(uuid)YesPlatform route target tenant access-scope UUID.
limitqueryintegerNo—
cursorquerystringNoVersioned base64url HMAC-SHA256 envelope returned by the immediately preceding page. It is bound to audience, resolved tenant scope, resource kind, and the rollout ID for deployment pages. It cannot be reused across those boundaries or modified.

Responses

listAdminSiteRolloutDeployments Responses
StatusDescription
200Latest deployment attempt for each targeted node.

Fields:items: array<AdminDeployment> next_cursor?: string

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
404Resource is absent in the authorized tenant scope. Cross-tenant IDs use the same response.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/admin/site-rollouts/{rollout_id}/pause

Pause a running progressive rollout

operationId
pauseSiteRollout
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.manage

Description (from the contract)

Re-holds commands in the released cohort that have not been claimed. Status reports already in flight remain durable facts but cannot release another cohort while the rollout is paused.

Parameters

pauseSiteRollout Parameters
NameInTypeRequiredDescription
rollout_idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYesStable for the frozen business payload. Request, correlation, trace, and task identifiers may change on an identical retry.
X-Request-IDheaderstring(uuid)Yes—
TraceparentheaderstringYes—
X-Correlation-IDheaderstring(uuid)NoDefaults to X-Request-ID when omitted.
X-Task-IDheaderstringNo—

Request body

application/json · Required:Yes

pauseSiteRollout Request body
NameTypeRequiredDescription
configuration_scope_idstring(uuid)Yes—
expected_revisioninteger(int64)Yes—

Responses

pauseSiteRollout Responses
StatusDescription
200Updated rollout, or the stored result of an identical command retry.

Fields:id: string(uuid) configuration_scope_id: string(uuid) config_version_id: string(uuid) action: string: apply / rollback state: string: queued / running / paused / succeeded / partial_failed / failed / cancelled revision: integer(int64) max_attempts: integer progress: RolloutProgress can_cancel: boolean can_retry: boolean can_start?: boolean can_pause?: boolean can_resume?: boolean rollout?: RolloutPolicyView pause_reason?: string: / operator / failure_threshold created_at: string(date-time) updated_at: string(date-time) replayed?: boolean

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
404Resource is absent in the authorized tenant scope. Cross-tenant IDs use the same response.
409Idempotency, target snapshot, rollout state, active deployment, or retry conflict.
412The source or rollout expected revision is stale.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 412 The revision changed: read the latest ETag, decide again, then send the new If-Match.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/admin/site-rollouts/{rollout_id}/resume

Resume a paused progressive rollout

operationId
resumeSiteRollout
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.manage

Description (from the contract)

Recomputes the current cohort under the rollout lock. If it is terminal, the next cohort alone is released or the rollout becomes terminal; otherwise remaining held commands in the current cohort are released.

Parameters

resumeSiteRollout Parameters
NameInTypeRequiredDescription
rollout_idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYesStable for the frozen business payload. Request, correlation, trace, and task identifiers may change on an identical retry.
X-Request-IDheaderstring(uuid)Yes—
TraceparentheaderstringYes—
X-Correlation-IDheaderstring(uuid)NoDefaults to X-Request-ID when omitted.
X-Task-IDheaderstringNo—

Request body

application/json · Required:Yes

resumeSiteRollout Request body
NameTypeRequiredDescription
configuration_scope_idstring(uuid)Yes—
expected_revisioninteger(int64)Yes—

Responses

resumeSiteRollout Responses
StatusDescription
200Updated rollout, or the stored result of an identical command retry.

Fields:id: string(uuid) configuration_scope_id: string(uuid) config_version_id: string(uuid) action: string: apply / rollback state: string: queued / running / paused / succeeded / partial_failed / failed / cancelled revision: integer(int64) max_attempts: integer progress: RolloutProgress can_cancel: boolean can_retry: boolean can_start?: boolean can_pause?: boolean can_resume?: boolean rollout?: RolloutPolicyView pause_reason?: string: / operator / failure_threshold created_at: string(date-time) updated_at: string(date-time) replayed?: boolean

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
404Resource is absent in the authorized tenant scope. Cross-tenant IDs use the same response.
409Idempotency, target snapshot, rollout state, active deployment, or retry conflict.
412The source or rollout expected revision is stale.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 412 The revision changed: read the latest ETag, decide again, then send the new If-Match.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/admin/site-rollouts/{rollout_id}/retry-failed

Append attempts for retryable failed deployments

operationId
retryFailedSiteRolloutDeployments
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.manage

Description (from the contract)

Only failed or rollback_failed latest attempts below max_attempts are retried. Existing attempts and artifact bindings remain immutable. The original rollout deadline remains authoritative; at or after that deadline can_retry is false and retry returns 409.

Parameters

retryFailedSiteRolloutDeployments Parameters
NameInTypeRequiredDescription
rollout_idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYesStable for the frozen business payload. Request, correlation, trace, and task identifiers may change on an identical retry.
X-Request-IDheaderstring(uuid)Yes—
TraceparentheaderstringYes—
X-Correlation-IDheaderstring(uuid)NoDefaults to X-Request-ID when omitted.
X-Task-IDheaderstringNo—

Request body

application/json · Required:Yes

retryFailedSiteRolloutDeployments Request body
NameTypeRequiredDescription
configuration_scope_idstring(uuid)Yes—
expected_revisioninteger(int64)Yes—

Responses

retryFailedSiteRolloutDeployments Responses
StatusDescription
200Updated rollout, or the stored result of an identical command retry.

Fields:id: string(uuid) configuration_scope_id: string(uuid) config_version_id: string(uuid) action: string: apply / rollback state: string: queued / running / paused / succeeded / partial_failed / failed / cancelled revision: integer(int64) max_attempts: integer progress: RolloutProgress can_cancel: boolean can_retry: boolean can_start?: boolean can_pause?: boolean can_resume?: boolean rollout?: RolloutPolicyView pause_reason?: string: / operator / failure_threshold created_at: string(date-time) updated_at: string(date-time) replayed?: boolean

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
404Resource is absent in the authorized tenant scope. Cross-tenant IDs use the same response.
409Idempotency, target snapshot, rollout state, active deployment, or retry conflict.
412The source or rollout expected revision is stale.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 412 The revision changed: read the latest ETag, decide again, then send the new If-Match.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list

POST /v1/admin/site-rollouts/{rollout_id}/start

Start a held progressive rollout

operationId
startSiteRollout
Auth
  • Session: the Bearer session of a signed-in control plane user, used by the customer in their own control plane; a plugin must never ask for it.
Required permissions

All of:edge_publications.manage

Description (from the contract)

Releases only frozen cohort zero. Target membership and cohort assignment were fixed at publication time by ascending UUID bytes; later inventory changes cannot alter the rollout. Uses rollout revision CAS and domain idempotency.

Parameters

startSiteRollout Parameters
NameInTypeRequiredDescription
rollout_idpathstring(uuid)Yes—
Idempotency-KeyheaderstringYesStable for the frozen business payload. Request, correlation, trace, and task identifiers may change on an identical retry.
X-Request-IDheaderstring(uuid)Yes—
TraceparentheaderstringYes—
X-Correlation-IDheaderstring(uuid)NoDefaults to X-Request-ID when omitted.
X-Task-IDheaderstringNo—

Request body

application/json · Required:Yes

startSiteRollout Request body
NameTypeRequiredDescription
configuration_scope_idstring(uuid)Yes—
expected_revisioninteger(int64)Yes—

Responses

startSiteRollout Responses
StatusDescription
200Updated rollout, or the stored result of an identical command retry.

Fields:id: string(uuid) configuration_scope_id: string(uuid) config_version_id: string(uuid) action: string: apply / rollback state: string: queued / running / paused / succeeded / partial_failed / failed / cancelled revision: integer(int64) max_attempts: integer progress: RolloutProgress can_cancel: boolean can_retry: boolean can_start?: boolean can_pause?: boolean can_resume?: boolean rollout?: RolloutPolicyView pause_reason?: string: / operator / failure_threshold created_at: string(date-time) updated_at: string(date-time) replayed?: boolean

400Invalid UUID, RFC3339 value, enum, cursor, header, query, or JSON body.
401Authentication is missing or invalid.
403Wrong audience, missing permission, or tenant scope override.
404Resource is absent in the authorized tenant scope. Cross-tenant IDs use the same response.
409Idempotency, target snapshot, rollout state, active deployment, or retry conflict.
412The source or rollout expected revision is stale.
503Storage, signing, cancellation, response validation, or another internal dependency is unavailable.

What to do on failure

  • 400 Fix the parameters or body per the field list; do not retry unchanged.
  • 401 Check the credential format and whether it expired or was rotated.
  • 403 Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.
  • 404 The resource does not exist or belongs to another tenant.
  • 409 Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.
  • 412 The revision changed: read the latest ETag, decide again, then send the new If-Match.
  • 503 A dependency is unavailable: retry later with the original Idempotency-Key.

↑ Back to list