---
title: "Retrieve a recorded primary request charge"
method: GET
path: "/v1/usage/requests/{request_id}"
tags: ["Account"]
---

# Retrieve a recorded primary request charge

`GET /v1/usage/requests/{request_id}`

## Request

- Base URL: `https://api.nano-gpt.com/api`
- URL: `https://api.nano-gpt.com/api/v1/usage/requests/{request_id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Look up one completed primary charge by captured X-Request-ID using the same inference API key. Uses database time and a rolling 24-hour window based on the charge accounting timestamp; no query parameters are accepted. Returns the exact recorded cost, currency, token usage and expiry. Refunds and separately billed extras are excluded; components already included in the primary amount remain included. Multiple eligible primary charges return 409 instead of selecting or summing attempts. No balance-collection or immutable net-cost guarantee is implied. A 404 never means zero cost: the charge may be delayed, expired, inaccessible or absent. All responses are private/no-store. Distributed quotas are 60/minute per key and 300/minute per trusted IP; required dependency failures return 503. Prefer a server-generated X-Request-ID captured from inference response headers. The ID is not an idempotency key; use a fresh ID for each inference execution, including retries. Make the first lookup after about two seconds; a 404 sends Retry-After: 30. Honor Retry-After on 404, 429 and 503, add jitter, stop on 200 or a permanent error, and stop retries no later than 24 hours after the original request. See https://docs.nano-gpt.com/api-reference/endpoint/request-billing for bounded polling.

## Path parameters

- `request_id` string, required

## Response `200`

One recorded primary charge from the last 24 hours. All responses use private/no-store and Vary: Authorization, x-api-key.

- RequestBilling
  - `object` 'request_billing', required
  - `request_id` string, required
  - `created_at` string, date-time, required: Ledger accounting timestamp; not necessarily insertion time.
  - `expires_at` string, date-time, required: 24 hours after the charge accounting timestamp. The record is unavailable at or after this instant; financial records are retained.
  - `as_of` string, date-time, required: Database statement snapshot time.
  - `cost` string, required: Exact nonnegative amount recorded on the primary charge. Does not subtract refunds or add separately billed extras; not proof of balance collection.
  - `currency` 'USD' | 'XNO', required
  - `cost_scope` 'primary_charge', required
  - `usage` object, required
    - `input_tokens` integer, nullable, required: Recorded accounting count, possibly estimated. Null preserves absent, invalid or unsafe-sized values.
    - `output_tokens` integer, nullable, required: Recorded accounting count, possibly estimated. Null preserves absent, invalid or unsafe-sized values.
    - `reasoning_tokens` integer, nullable, required: Recorded accounting count, possibly estimated. Null preserves absent, invalid or unsafe-sized values.

## Other responses

- `400`: Invalid request ID, unsupported query parameters, or conflicting credentials.
- `401`: Missing or invalid inference API key or originating account.
- `403`: API key policy rejects access.
- `404`: No eligible charge is visible to this key. It may be delayed, expired, inaccessible, or absent; never assume zero cost.
- `409`: Multiple eligible primary charges match: ambiguous_request_id. No charge is selected or summed.
- `429`: Lookup rate limit exceeded. Honor Retry-After.
- `503`: Billing lookup temporarily unavailable. Honor Retry-After.

## Changes

- **2026-11-03** `cc8b07d75689`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/nano-gpt/apis/nanogpt-api/changes/v1/usage/requests/:request_id/get.md)

---

[API](https://skmtc.dev/nano-gpt/apis/nanogpt-api.md) - [All operations](https://skmtc.dev/nano-gpt/apis/nanogpt-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nano-gpt/apis/nanogpt-api/revisions/cc8b07d75689?raw)
