---
title: "Get pod billing history"
method: GET
path: "/v2/billing/pods"
tags: ["Billing"]
---

# Get pod billing history

`GET /v2/billing/pods`

Returns pod-only billing detail for the authenticated user, split into time buckets by startTime/endTime with bucketSize or by lastN recent buckets. Use podId to narrow the response to one GPU or CPU pod; without it, records are emitted per pod per bucket. Each record includes podId, GPU, CPU, disk, and total amounts, while metadata echoes the resolved query and totals across the pod records. Use listBilling when you need aggregate spend across every billable resource family.

## Query parameters

- `startTime` string, date-time
- `endTime` string, date-time
- `bucketSize` 'hour' | 'day' | 'week' | 'month' | 'year' — Length of each billing time bucket.
- `lastN` integer
- `podId` string

## Response `200`

OK

- ListPodBillingResponse — Billing records for pods.
  - `records` PodBillingRecord[], required
    - `startTime` string, date-time, required — Start of the range, inclusive (RFC 3339).
    - `endTime` string, date-time, required — End of the range, exclusive (RFC 3339).
    - `totalAmount` number, double, required — Total pod cost in USD for the bucket.
    - `gpuAmount` number, double, required — GPU pod compute cost in USD for the bucket.
    - `cpuAmount` number, double, required — CPU pod compute cost in USD for the bucket.
    - `diskAmount` number, double, required — Pod disk cost in USD for the bucket.
    - `podId` string, required — The pod this record bills. When the podId filter is set every record carries that id; otherwise one record is emitted per pod per bucket.
  - `metadata` PodBillingMetadata, required
    - `query` PodBillingQuery, required — Half-open time range [startTime, endTime) in RFC 3339. On a record it is the time bucket; on a query echo it is the resolved window.
      - `startTime` string, date-time, required — Start of the range, inclusive (RFC 3339).
      - `endTime` string, date-time, required — End of the range, exclusive (RFC 3339).
      - `bucketSize` 'hour' | 'day' | 'week' | 'month' | 'year', required — Length of each billing time bucket.
      - `podId` string, nullable — The podId filter applied, if any.
    - `recordCount` integer, required — Number of records returned (buckets times distinct pods).
    - `uniquePodCount` integer, required — Number of distinct pods the records span.
    - `totals` PodBillingAmounts, required — Pod cost components covering both GPU and CPU pods. Backs a record's amounts and the metadata totals.
      - `totalAmount` number, double, required — Total pod cost in USD for the bucket.
      - `gpuAmount` number, double, required — GPU pod compute cost in USD for the bucket.
      - `cpuAmount` number, double, required — CPU pod compute cost in USD for the bucket.
      - `diskAmount` number, double, required — Pod disk cost in USD for the bucket.

## Other responses

- `401` — Authentication failed because the bearer token is missing, malformed, expired, or invalid.
- `403` — The bearer token is valid, but it does not grant access to the requested resource or action.
- `429` — The caller exceeded its per-user rate limit. The response identifies the window that was exceeded and how long to wait. The `RateLimit` and `RateLimit-Policy` headers (per the IETF ratelimit-headers draft) also accompany successful responses, so clients can track quota before a 429.
- `default` — Error

---

[API](https://skmtc.net/runpod/apis/runpod-rest-api.md) · [All operations](https://skmtc.net/runpod/apis/runpod-rest-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/runpod/runpod-rest-api/versions/504cd0394ed6/schema)
