Rotation Schedule Without Cadence
URI: https://docs.ankatech.co/errors/rotation-schedule-without-cadence
HTTP Status: 422 Unprocessable Content
When you see this
A key's rotation schedule was written with autoRotationEnabled: true, no rotation interval applies to the key, and neither usage option is on. Nothing was stored: the key's schedule is unchanged.
A key's cadence is its own TIME_BASED trigger, else the tenant default, else the deployment default. Enabling automatic rotation needs something to rotate on: one of them carrying an interval, or rotateOnSoftUsageLimit or rotateOnUsageExhaustion set to true in the same request. Otherwise the key would be enabled with nothing that could ever rotate it.
A key enabled with a usage option and no interval is admitted: its state reads NO_CADENCE, it has no nextDueAt, and it rotates only when its usage reaches the limit the option names (Rotation on key usage*).
Response Example
{
"type": "https://docs.ankatech.co/errors/rotation-schedule-without-cadence",
"title": "Rotation Schedule Without Cadence",
"status": 422,
"detail": "Automatic rotation cannot be enabled: no interval applies to this key and no usage option is on. Send a TIME_BASED trigger for the key, turn on rotateOnSoftUsageLimit or rotateOnUsageExhaustion, or set a tenant or deployment default first.",
"instance": "/api/v3/admin/tenants/550e8400-e29b-41d4-a716-446655440000/keys/payments-data-key/rotation-schedule",
"timestamp": 1790000000,
"extensions": {
"requestId": "b81e4d27-3c9a-4f50-a6d2-9e7c1b0f3a58"
}
}
Content-Type: application/problem+json — the response follows RFC 9457 Problem Details.
How to Resolve
- Send the key's own cadence in the same request:
{"autoRotationEnabled": true, "triggers": [{"type": "TIME_BASED", "interval": "P90D"}]}. - Or set a tenant default (
PUT /api/v3/admin/tenants/{tenantId}/policies/rotation-schedule) or a deployment default, then enable the key with"triggers": nullto inherit it. - A key sent
"triggers": []has no cadence of its own by choice; send a trigger ornullinstead. - Or rotate the key on its usage alone: send
"rotateOnSoftUsageLimit": trueor"rotateOnUsageExhaustion": truewith the enablement. Each needs the matching usage limit on the key.
Operations that emit it
| Method | Endpoint |
|---|---|
| PUT | /api/v3/admin/tenants/{tenantId}/keys/{kid}/rotation-schedule |
Related Errors
- Rotation Interval Exceeds Its Ceiling (422) - the interval is longer than a bound the platform enforces
- Usage Rotation Without Soft Limit (422) - the usage option sent names a soft usage limit the key does not have
- Usage Rotation Without Usage Limit (422) - the usage option sent names a maximum usage limit the key does not have
For full schema definitions, examples, and interactive testing, see the Developer Hub Reference.