Skip to main content
The FOCUS Billing Export API lets you pull your CoreWeave usage data in FinOps Open Cost and Usage Specification (FOCUS) format. Use it to load CoreWeave usage into a data warehouse or FinOps tool alongside exports from other cloud providers. This page shows you how to make a request, set query parameters, and interpret the JSON or CSV response. The API returns the same billable usage you see in Billing insights, at hourly grain, as JSON or CSV.
The FOCUS Billing Export API is in public preview. Schema details and behavior may change before general availability. If you receive unexpected values, numbers that don’t reconcile with Billing insights, errors, or slow responses, contact Support.In this public preview, the FOCUS Billing Export API returns usage for CoreWeave Kubernetes Service (CKS) only.

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
This public preview doesn’t include the following:
  • 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.
The following FOCUS fields are 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 Forbidden response after assigning the Billing Viewer role, contact Support to request access.
The token is scoped to your organization, so you don’t pass an organization identifier in the request. The API returns results for the account associated with the token.

Make your first request

The export endpoint is:
To confirm access and inspect the response shape, send a request to the export endpoint. This default example without any parameters returns the last seven days of usage grouped by location, as JSON. In the Authorization header, pass your token. Replace [API-ACCESS-TOKEN] with your CoreWeave API access token:
The following example requests a specific month, groups by capacity plan, and saves CSV output to a file:
A successful request returns FOCUS usage rows for the window you requested.

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 set format=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 the x_ 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. Use group_by to select one:
  • group_by=location (default): one row per (hour, zone, cluster, SKU). Location is a physical property of the usage. x_CapacityPlan and PricingCategory are null in this view.
  • group_by=capacity_plan: one row per (hour, SKU, capacity plan). Capacity plan (On-Demand, Reservation, Spot, or Flex-Usage) is a rating-time property of your organization’s usage. It can’t be tied to a specific location, so AvailabilityZone, RegionId, RegionName, x_ClusterId, and x_ClusterName are null in this view.
Usage quantities are summed across all nodes and resources in the bucket. The API never emits per-node rows. The two views are pivots of the same underlying usage. For any given hour and SKU, the total PricingQuantity is identical across both views.

Pagination

The API paginates results (default 100 rows per page, maximum 1,000). A non-empty next_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 the next_page_token value from the previous response.
The API returns response metadata in different locations for JSON and CSV:

CSV format

When you set format=csv, the API returns the following:
  • The response Content-Type is text/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:
For more information about billing usage and API access, see the following resources:
Last modified on October 5, 2026