Usage Statement Coverage Unverifiable
URI: https://docs.ankatech.co/errors/usage-statement-coverage-unverifiable
HTTP Status: 409 Conflict
When you see this
You asked for a signed usage statement while the licence server cannot vouch for when this deployment was installed. Every month is refused while this lasts, and nothing is written.
Why no statement is issued
A statement's completeness declaration counts only the days whose rows the deployment's usage store holds, and the first of them is bounded by the day the deployment was installed. That day is read from the deployment trial sentinel, which the installer writes once and protects with an HMAC. When the sentinel is missing, unreadable, fails its integrity check, carries no canonical installation ID, or carries no installation instant, the bound is unknown.
Guessing it would put an invented date inside a signed, permanent artifact; declaring the whole month would count days on which the store may not have existed as days that recorded no usage. So nothing is issued. The telemetry read, under the same condition, publishes no rangeCompleteness.coveredFrom and counts no day — the same decision on a surface that can answer "nothing".
Why 409
Nothing about the request is wrong. What fails is the state of the deployment, and the same request succeeds once that state is repaired — which is what 409 says, as for usage-statement-not-finalizable. A 5xx would reach you through the Admin API's relay as the licence server being unreachable.
Response Example
{
"type": "https://docs.ankatech.co/errors/usage-statement-coverage-unverifiable",
"title": "Usage Statement Coverage Unverifiable",
"status": 409,
"detail": "A signed usage statement for 2026-09 cannot be issued: its completeness declaration is bounded by the day this deployment was installed, and the installation cannot be vouched for (the deployment trial sentinel is missing, unreadable, fails its integrity check, carries no canonical installation id, or carries no installation instant). No statement is issued rather than one whose completeness has no bound. Restore the deployment's sentinel, then issue again.",
"instance": "/api/v3/admin/usage/statements",
"extensions": {
"requestId": "9e2d4b71-5a08-4c3f-b1d6-7a8c20e5f943"
}
}
Content-Type: application/problem+json — the response follows RFC 9457 Problem Details. The detail names the month and nothing about the sentinel's contents.
How to Resolve
- Confirm the condition.
GET /api/v3/admin/usage/telemetrypublishes norangeCompleteness.coveredFromwhile it lasts, and the licence server logs the sentinel condition once per transition. - Restore the deployment trial sentinel from the deployment's backup — the one written when this deployment was installed. A backup restore carries it with the database, because a restore is the same deployment continuing. Do not write a new one: its installation instant would be a guess.
- Issue again. No restart is needed; the sentinel is re-read on every request.
Related
- Usage Statement Period Not Covered
- Usage Statement Not Finalizable
- Usage Telemetry, Exports and Signed Statements*
- Conflict
For full schema definitions, examples, and interactive testing, see the Developer Hub Reference.