Skip to main content
GET
Use an API Key to query spending within a specified time range, filter by model, and group by model, calendar day, or both. This endpoint returns aggregated results directly; no task creation or task-status polling is required.

Authentication

string
required
Authenticate with the same API Key used for model calls, using a Bearer Token. Get a key from the API Key management page.
Queries are available even with a zero balance. This endpoint does not check the balance, but still checks API Key status, expiration, IP allowlists, and account status.

Endpoints

Both endpoints provide the same functionality and support CORS. Keep your API Key private; do not expose it in public frontend code.

Request parameters

All parameters are passed as URL query parameters.
integer | string
Inclusive start time. Accepts a Unix timestamp in seconds or an RFC3339 string with a timezone, such as 2026-09-01T00:00:00+08:00.Defaults to 24 hours before end when omitted. Timestamps use seconds, not milliseconds.
integer | string
Exclusive end time. Uses the same formats as start and defaults to the current time when omitted.Must be later than start, and end - start must not exceed 31 days.
string
Model names; all models are included when omitted. Separate multiple models with commas, up to 50 models.Exact, case-insensitive matching. Wildcards are not supported.Example: gpt-5.6-luna,sora-2
string
default:"none"
Grouping options:
  • none: totals only; items is an empty array
  • model: group by model
  • date: group by calendar day
  • model,date: group by both model and calendar day
string
default:"Asia/Shanghai"
IANA timezone name; defaults to Asia/Shanghai.Only affects calendar-day boundaries when group_by includes date; it does not change the query start or end instants. RFC3339 times are still parsed using their own timezone offsets.
string
default:"key"
Query scope:
  • key: only the current API Key (default)
  • account: all API Keys belonging to the account of the current API Key
The query interval is [start, end): inclusive start, exclusive end. Using the same boundary as one query’s end and the next query’s start avoids counting that boundary twice.When building URLs manually, encode the + in RFC3339 as %2B. The examples use cURL --data-urlencode, Python params, and JavaScript URLSearchParams to handle encoding automatically.

Request examples

Total spending for the current API Key over the last 24 hours

Omit query parameters to use the default time range, scope, and grouping:

Daily spending for a specified model across the account

Query spending from September 11 to September 18, 2026, in Beijing time, excluding September 18:

Group by model and calendar day

With this grouping, each items entry contains both model and date.

Response fields

boolean
Whether the query succeeded: true on success, false for usage-query errors.
object
On success, contains the query range, totals, and grouped details.
data.total and data.items[] share these statistics:
object
Returned for usage-query errors, with code, message, and type; type is usage_query_error. Authentication errors with HTTP 401 / 403 are returned by the authentication layer.

Rate limits and caching

  • Up to 60 queries per API Key per minute; global API rate limits also apply
  • Results with identical parameters are cached for 60 seconds; the X-Usage-Cache response header is hit or miss
  • Usage records are typically available within 1 second, but the last minute of data may be incomplete, with additional cache delay
  • Poll no more frequently than once a minute; do not use this endpoint as a real-time billing notification

Accounting rules

  • Uses successfully billed call records, the same data as the website dashboard
  • Failed calls and tasks refunded after failure are excluded; no manual offset is needed. Partially successful image batches are billed for the images actually delivered
  • Spending is attributed to the billing posting time. Asynchronous image/video tasks are posted at completion, not submission; tasks crossing midnight belong to the completion day
  • Deleting and recreating an API Key creates a new Key; querying scope=key with the new Key does not include the old Key’s history
  • Manual balance adjustments are not call spending and are excluded
  • Data after April 27, 2026, is available

Error handling

A 503 usage_unavailable response returns no amounts. It means the query is unavailable, not that spending is zero. Do not convert failed responses into zero amounts or overwrite a previous successful result.

Comparison with other endpoints

For remaining quota, use Query Token Balance or Query User Balance.