Scope
This public preview includes the following:- Usage quantities at hourly grain (for example, GPU-hours, GiB-hours, and IP-hours)
- Filters for time range, product family, cluster, and zone
- JSON and CSV response formats
- Pagination for large results
- Cost or dollar amounts. This release returns usage quantities only. Cost fields such as billed or effective cost are planned for a later release on the same schema.
- Project-level attribution or resource tags.
- Per-resource or per-node rows. Usage is aggregated. See Data grain.
null in this release: ChargeClass, ChargeDescription, and ResourceType.
Prerequisites
Before you call the API, make sure you have the following:- A CoreWeave API access token associated with a user or service account that has the Billing Viewer role. Store the token securely.
- FOCUS export enabled for your organization. If you receive a
403 Forbiddenresponse after assigning the Billing Viewer role, contact Support to request access.
Make your first request
The export endpoint is:Authorization header, pass your token. Replace [API-ACCESS-TOKEN] with your CoreWeave API access token:
Query parameters
All parameters are optional. Times use ISO 8601 in UTC.
The following constraints apply:
- The time range can’t exceed 90 days per request.
- Historical data begins with the January 2026 invoice month, at
2025-12-31T22:00:00Z(5:00 PM ET). Earlier window bounds are clamped to that timestamp. A window entirely before it returns an empty page.
Response
A successful response includes metadata and usage rows as JSON. When you setformat=csv, the response is a CSV file. The following sections describe the JSON envelope, the row schema, data grain, and pagination.
JSON envelope
A successful JSON response has this shape:Row schema
Each row is one hourly usage bucket. Columns follow FOCUS 1.0 naming. CoreWeave-specific columns use thex_ prefix per the FOCUS convention. The schema object identifies the row schema and column types.
Some fields may be
null during the public preview. If a field you need is empty, contact Support.
Data grain
The API offers the following mutually exclusive views. Usegroup_by to select one:
group_by=location(default): one row per(hour, zone, cluster, SKU). Location is a physical property of the usage.x_CapacityPlanandPricingCategoryarenullin this view.group_by=capacity_plan: one row per(hour, SKU, capacity plan). Capacity plan (On-Demand,Reservation,Spot, orFlex-Usage) is a rating-time property of your organization’s usage. It can’t be tied to a specific location, soAvailabilityZone,RegionId,RegionName,x_ClusterId, andx_ClusterNamearenullin this view.
PricingQuantity is identical across both views.
Pagination
The API paginates results (default 100 rows per page, maximum 1,000). A non-emptynext_page_token means more data exists. Pass that value back as page_token until the token is empty.
Keep the original time range, grouping, and filters unchanged between pages. You can change page_size or format. Use explicit timestamps while paging so the default time window doesn’t move between requests.
To fetch the next page:
- Replace
[PAGE-TOKEN]with thenext_page_tokenvalue from the previous response.
CSV format
When you setformat=csv, the API returns the following:
- The response
Content-Typeistext/csv; charset=utf-8, delivered as a file attachment. - The first row is a header that uses exact FOCUS column names. All columns appear in both views. Columns that don’t apply to the active view are left empty (not omitted), so the layout is stable.
- Fields that contain commas, quotes, or newlines are double-quoted per RFC 4180.
Errors
The following example shows a JSON error response:Related resources
For more information about billing usage and API access, see the following resources:- Billing insights: View the same billable usage in the Cloud Console.
- Manage API access tokens: Create and manage tokens for API authentication.
- Usage by Product and Zone: Grafana dashboards for cost and usage monitoring.
- FOCUS: The FinOps Open Cost and Usage Specification.