Terminal Application State
URI: https://docs.ankatech.co/errors/terminal-application-state
HTTP Status: 409 Conflict
When you see this
You updated an application (PATCH /api/v3/admin/tenants/{tenantId}/applications/{applicationId}) with status set to ACTIVE or SUSPENDED, and the application is DISABLED. DISABLED is terminal and irreversible: once an application is disabled, no status change ever leaves it, so it can never authenticate again.
The refusal comes before anything is written. No member of the patch is applied, including the members that do not touch status, and no status change is published to the cryptographic plane.
The same operation has two other 409s: application-name-conflict when the new applicationName is held by another live application, which another name resolves, and concurrent-modification when another write committed to the application after the request read it, which a re-read and a retry resolve. This one is resolved by no retry and no other value. Tell them apart on the type member, never by matching title or detail.
Common Causes
- The application was disabled earlier by an update that set
statustoDISABLED. - The tenant was closed, which disables every application it holds.
- A client re-sent a stored representation of the application after it was disabled.
Response Example
{
"type": "https://docs.ankatech.co/errors/terminal-application-state",
"title": "Terminal Application State",
"status": 409,
"detail": "Application is DISABLED, which is terminal and irreversible: its status cannot be changed to ACTIVE. Create a new application if the workload is still required.",
"instance": "/api/v3/admin/tenants/7b9c2d10-4e6f-4a21-9c33-0d1e5f7a8b42/applications/5c1f8e2a-3b74-4d09-a6e5-2f8d9c0b1a37",
"timestamp": 1790690531,
"extensions": {
"requestId": "4d8e1b62-7a39-4f05-b2c6-9e3a5f1d8c47"
}
}
Content-Type: application/problem+json. The response follows RFC 9457 Problem Details.
How to Resolve
- Do not retry. The application's state is irreversible, so every retry gets this same refusal.
- To edit the other members of a disabled application, send the patch without
status, or withstatusset toDISABLED. - If the workload is still required, create a new application. To pause an application without ending it, use
SUSPENDED, which an update withstatusset toACTIVEreverses.
For full schema definitions, examples, and interactive testing, see the Developer Hub Reference.