Skip to content

Unmeterable Usage Event

URI: https://docs.ankatech.co/errors/unmeterable-usage-event
HTTP Status: 400 Bad Request

When you see this

A usage report was refused because it cannot be metered as submitted. The License Server does not record such a report with the offending field erased or substituted: a usage row whose subject or algorithm cannot be resolved cannot be reconciled, and a fabricated value is indistinguishable at rest from an operation the platform actually performed. The report is refused so it can be corrected and resubmitted — the error direction is deliberately safe, since a refused record can only ever under-bill, never over-bill.

Common Causes

  • tenantId is absent or is not a valid UUID, so the subject of the report cannot be identified.
  • The algorithm field named a value the platform's algorithm catalogue does not declare.
  • The named client belongs to a different tenant than the one the report claims — metering it would attribute one tenant's operation to another.

The detail names the field and never echoes the submitted value.

Response Example

{
  "type": "https://docs.ankatech.co/errors/unmeterable-usage-event",
  "title": "Unmeterable Usage Event",
  "status": 400,
  "detail": "the 'algorithm' field named an algorithm the platform's catalogue does not declare; the record is quarantined rather than metered with the value erased",
  "instance": "/api/licenses/report"
}

Content-Type: application/problem+json — the response follows RFC 9457 Problem Details.

How to Resolve

  1. Read the detail: it names the field that could not be resolved. The submitted value is not echoed, but the caller already has it.
  2. For a subject failure, send a tenantId that is a valid UUID and a clientId that belongs to that tenant.
  3. For an algorithm failure, send a name the platform's algorithm catalogue declares. Any accepted spelling resolves to the canonical name, so two spellings of one algorithm aggregate onto one billing line.
  4. Resubmit the corrected report. Nothing was recorded, so there is no partial row to clean up.

For full schema definitions, examples, and interactive testing, see the Developer Hub Reference.