POST /v1/admin/control-upgrade-checks
Check local control-plane upgrade eligibility
Description (from the contract)
Requires control.upgrades.check in a platform scope. The decision re-verifies the locally cached signed entitlement lease, checks its release channel and version range, then evaluates the current locally cached signed platform policy. The license service is not called by this request. Business denials return 200 with eligible=false and a stable reason; authentication, validation, and idempotency failures retain their normal HTTP status. An identical idempotent replay returns the original decision without appending another audit event.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
Idempotency-Key | header | string | Yes | — |
Request body
application/json · Required:Yes
| Name | Type | Required | Description |
|---|---|---|---|
component | string | Yes | — |
current_version | string | Yes | Canonical SemVer without a v prefix or build metadata. |
channel | string | Yes | — |
Responses
| Status | Description |
|---|---|
200 | Eligible or a stable business denial based only on verified local state. Fields: |
400 | The request body or parameters are invalid. |
401 | Authentication failed or the session is invalid. |
403 | The authenticated principal is not allowed to perform the action. |
409 | The requested state conflicts with an existing resource or idempotency fact. |
500 | The request could not be completed because of an internal failure. |
What to do on failure
400Fix the parameters or body per the field list; do not retry unchanged.401Check the credential format and whether it expired or was rotated.403Check the key scopes, the owner’s current permissions and the tenant scope; never switch to a more privileged account.409Read the current state first; a retry of the same operation keeps the original Idempotency-Key and body.500Outcome unknown: read back by ID or list first, then decide whether to retry with the original Idempotency-Key.