Skip to main content
invalid_parameter means a usage request carried a time window, a ledger limit or a run id that OpenType cannot read. Read this page when a usage or reporting call fails with a 400.

What happened

Routes:
  • GET /v1/usage
  • GET /v1/usage/ledger
  • GET /v1/usage/daily
  • GET /v1/usage/runs/{run_id}
The message is the whole explanation; it has no prefix. These are every message: The accepted forms:
An unknown query parameter, or a value that is not a number where one is expected, is refused before these checks. The answer is a plain-text 400 whose body begins Failed to deserialize query string, not a JSON error. Fall back to the HTTP status when the body is not JSON.

How to fix

  1. Match the message in the table above.
  2. Format timestamps in UTC with a Z and no fractional seconds, for example 2026-09-01T00:00:00Z.
  3. Send start_at and end_at together, with start_at first in time.
  4. For daily series, split windows longer than 92 days into several calls.
  5. Use a run_id exactly as the API returned it.

Example

A usage request with a valid window: