> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Query API Key Billing

## Request Headers

<ParamField header="Content-Type" type="string" required={true}>
  Enum: `application/json`
</ParamField>

<ParamField header="Authorization" type="string" required={true}>
  Bearer authentication format, for example: Bearer \{\{API Key}}.
</ParamField>

## Query Parameters

<ParamField query="cycleType" type="string" required={true}>
  Billing granularity. Options: `Day`, `Week`, `Month`.
</ParamField>

<ParamField query="category" type="string" required={false}>
  Product type or business category. Common values: `llm`, `gen_api`, `web_search`.
</ParamField>

<ParamField query="productName" type="string" required={false}>
  Product name. Supports fuzzy matching.
</ParamField>

<ParamField query="startTime" type="integer" required={true}>
  Query start time, Unix timestamp in seconds (int64). Must be greater than or equal to `2026-01-01 00:00:00`.
</ParamField>

<ParamField query="endTime" type="integer" required={true}>
  Query end time, Unix timestamp in seconds (int64). Must be greater than `startTime`.
</ParamField>

<Info>
  This endpoint only supports data after `2026-01-01 00:00:00`. It does not support pagination. Keep each query range within 31 days. For longer ranges, split requests by calendar month or calendar week.
</Info>

## Response Parameters

<ResponseField name="bills" type="object[]" required={true}>
  API Key bill list.

  <Expandable title="properties" defaultOpen={true}>
    <ResponseField name="userId" type="string" required={true}>
      User account ID.
    </ResponseField>

    <ResponseField name="startTime" type="string" required={true}>
      Bill start time, Unix timestamp in seconds.
    </ResponseField>

    <ResponseField name="endTime" type="string" required={true}>
      Bill end time, Unix timestamp in seconds.
    </ResponseField>

    <ResponseField name="billingMethod" type="int32" required={true}>
      Billing method: `1` (pay-as-you-go), `2` (subscription).
    </ResponseField>

    <ResponseField name="productName" type="string" required={true}>
      Product name.
    </ResponseField>

    <ResponseField name="category" type="string" required={true}>
      Product type or subcategory.
    </ResponseField>

    <ResponseField name="ownerID" type="string" required={true}>
      API Key ID.
    </ResponseField>

    <ResponseField name="apikeyName" type="string" required={true}>
      API Key name.
    </ResponseField>

    <ResponseField name="apikeyMask" type="string" required={true}>
      Masked API Key.
    </ResponseField>

    <ResponseField name="productId" type="string" required={true}>
      Product ID.
    </ResponseField>

    <ResponseField name="billNum0" type="string" required={true}>
      Usage field 0. For `llm`, this usually means input price per 1M tokens; GPU: price per card per hour; storage: price per GB per day.
    </ResponseField>

    <ResponseField name="billNum1" type="string" required={true}>
      Usage field 1. For `llm`, this usually means output tokens.
    </ResponseField>

    <ResponseField name="billNum2" type="string" required={true}>
      Usage field 2. For `llm`, this usually means read cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="billNum3" type="string" required={true}>
      Usage field 3. For `llm`, this usually means write 5-minute cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="billNum4" type="string" required={true}>
      Usage field 4. For `llm`, this usually means reasoning token price per 1M tokens.
    </ResponseField>

    <ResponseField name="billNum5" type="string" required={true}>
      Usage field 5. For `llm`, this usually means write 1-hour cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="billNum6" type="string" required={false}>
      Usage field 6.
    </ResponseField>

    <ResponseField name="billNum7" type="string" required={false}>
      Usage field 7.
    </ResponseField>

    <ResponseField name="billNum8" type="string" required={false}>
      Usage field 8.
    </ResponseField>

    <ResponseField name="billNum9" type="string" required={false}>
      Usage field 9.
    </ResponseField>

    <ResponseField name="billNum10" type="string" required={false}>
      Usage field 10.
    </ResponseField>

    <ResponseField name="billNum11" type="string" required={false}>
      Usage field 11.
    </ResponseField>

    <ResponseField name="billNum12" type="string" required={false}>
      Usage field 12.
    </ResponseField>

    <ResponseField name="billNum13" type="string" required={false}>
      Usage field 13.
    </ResponseField>

    <ResponseField name="billNum14" type="string" required={false}>
      Usage field 14.
    </ResponseField>

    <ResponseField name="billNum15" type="string" required={false}>
      Usage field 15.
    </ResponseField>

    <ResponseField name="basePrice0" type="string" required={true}>
      Original price field 0. For `llm`: input price per 1M tokens; GPU: price per card per hour; storage: price per GB per day.
    </ResponseField>

    <ResponseField name="basePrice1" type="string" required={true}>
      Original price field 1. For `llm`, output price per 1M tokens.
    </ResponseField>

    <ResponseField name="basePrice2" type="string" required={true}>
      Original price field 2. For `llm`, read cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="basePrice3" type="string" required={true}>
      Original price field 3. For `llm`, write 5-minute cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="basePrice4" type="string" required={true}>
      Original price field 4. For `llm`, reasoning token price per 1M tokens.
    </ResponseField>

    <ResponseField name="basePrice5" type="string" required={true}>
      Original price field 5. For `llm`, write 1-hour cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="discountPrice0" type="string" required={true}>
      Discounted price field 0. For `llm`, discounted input token price.
    </ResponseField>

    <ResponseField name="discountPrice1" type="string" required={true}>
      Discounted price field 1. For `llm`, discounted output token price.
    </ResponseField>

    <ResponseField name="discountPrice2" type="string" required={true}>
      Discounted price field 2. For `llm`, discounted read cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="discountPrice3" type="string" required={true}>
      Discounted price field 3. For `llm`, discounted write 5-minute cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="discountPrice4" type="string" required={true}>
      Discounted price field 4. For `llm`, discounted reasoning token price per 1M tokens.
    </ResponseField>

    <ResponseField name="discountPrice5" type="string" required={true}>
      Discounted price field 5. For `llm`, discounted write 1-hour cache price per 1M tokens.
    </ResponseField>

    <ResponseField name="amount" type="string" required={true}>
      Total amount, unit is 1/10000 USD.
    </ResponseField>

    <ResponseField name="voucherAmount" type="string" required={true}>
      Amount deducted by vouchers, unit is 1/10000 USD.
    </ResponseField>

    <ResponseField name="payAmount" type="string" required={true}>
      Cash payment amount, unit is 1/10000 USD.
    </ResponseField>

    <ResponseField name="payAmountDisplay" type="float" required={true}>
      Display value of cash payment amount, in USD.
    </ResponseField>

    <ResponseField name="pricePrecision" type="int32" required={true}>
      Price precision. Unit price (USD) = unit price / 10000 / `pricePrecision`.
    </ResponseField>

    <ResponseField name="llmSeries" type="string" required={false}>
      LLM series.
    </ResponseField>

    <ResponseField name="requestCount" type="string" required={false}>
      Request count.
    </ResponseField>

    <ResponseField name="multimodalPricing" type="object" required={false}>
      Multimodal model billing details.
    </ResponseField>

    <ResponseField name="tieredConfig" type="object" required={false}>
      Tiered billing configuration.
    </ResponseField>
  </Expandable>
</ResponseField>

<RequestExample>
  ```bash theme={"system"}
  curl --request GET \
    --url 'https://api.novita.ai/openapi/v1/billing/apikey/bill/list?cycleType=Day&category=llm&startTime=1767225600&endTime=1769817599' \
    --header 'Authorization: Bearer <API_KEY>'
  ```
</RequestExample>

<ResponseExample>
  ```json 200 theme={"system"}
  {
    "bills": [
      {
        "userId": "<string>",
        "startTime": "1767225600",
        "endTime": "1767311999",
        "billingMethod": 1,
        "productName": "<string>",
        "category": "llm",
        "ownerID": "<api_key_id>",
        "billNum0": "1000",
        "billNum1": "500",
        "basePrice0": "0",
        "basePrice1": "0",
        "discountPrice0": "0",
        "discountPrice1": "0",
        "amount": "10000",
        "voucherAmount": "0",
        "payAmount": "10000",
        "payAmountDisplay": 1,
        "pricePrecision": 1,
        "productId": "<string>",
        "apikeyName": "<string>",
        "apikeyMask": "sk-****"
      }
    ]
  }
  ```
</ResponseExample>
