OpenAPI Spec
Machine-readable spec for the Billing Usage API: beta/categories/billing_usage.json
Before you begin
Check out our general API overview to make sure you're ready to get started with specific endpoints.
The Billing Usage API is in beta. You must pin a beta revision (for example,
revision: 2026-07-15.pre) to call these endpoints. Beta endpoints may change before they reach general availability.
The Billing Usage API lets you read an account's current-period metered usage against its plan caps. For each product an account is billed for, the API reports how much has been consumed so far this period (usage_used), the plan limit (usage_max), the unit those values are denominated in, and the billing period the numbers cover. These are the same figures that populate the usage bars on the account's billing overview page.
Use cases
Here are example use cases supported by the Billing Usage API:
- Build an internal dashboard that tracks email sends and active profiles against plan limits across the billing period.
- Alert your team when consumption for a usage type approaches its cap.
- Retrieve a single usage type's current consumption to display in a customer-facing app.
Required scopes
To use Billing Usage API endpoints, your API key or OAuth app needs the following scope:
usage:read- required to read billing usage.
A key without usage:read receives a 403 response. See Troubleshooting.
Data model
The billing-usage resource represents one usage type's current-period consumption and cap. The resource id is the usage type key (for example, email_sends) - there is no separate opaque identifier.
Each billing-usage object has the following attributes:
-
usage_usedAmount consumed against this usage type in the current period, rounded to 4 decimal places.
-
usage_maxMaximum usage allowed for this usage type on the current plan.
-
unitThe unit
usage_usedandusage_maxare denominated in. One ofmessages,profiles,credits,USD,resolutions,conversations, ororders. -
period_startStart of the current billing period for this usage type, in UTC.
-
period_endExclusive end of the current billing period for this usage type, in UTC. Usage is counted up to but not including this instant.
-
as_ofWhen this
usage_usedvalue was last read, in UTC.
Usage types
An account only returns the usage types for the products it is billed for. A usage type appears once the corresponding product is released for the account and disappears when that plan is canceled. The following usage types are available:
| Product | Usage type id | unit |
|---|---|---|
email_sendsactive_profiles | messagesprofiles | |
| SMS | sms_credits | credits or USD |
| Composer | ai_credits | credits |
| Reviews | reviews_orders | orders |
| Helpdesk | helpdesk_conversations | conversations |
| AI agent | ai_resolutions | resolutions |
| CDP | total_profiles | profiles |
| Data warehouse sync | dw_sync_active_profiles | profiles |
| Customer hub | customer_hub_active_profiles | profiles |
| Advanced analytics | aa_active_profiles | profiles |
active_profilesis not updated in real time - it refreshes about twice a day. Use theas_ofattribute to see when a value was last read.
List billing usage
Use List Billing Usage to retrieve every usage type the account is billed for.
curl --request GET \
--url 'https://a.klaviyo.com/api/billing-usage' \
--header 'Authorization: Klaviyo-API-Key your-private-api-key' \
--header 'accept: application/json' \
--header 'revision: 2026-07-15.pre'
{
"data": [
{
"type": "billing-usage",
"id": "active_profiles",
"attributes": {
"usage_used": 12450.0,
"usage_max": 25000,
"unit": "profiles",
"period_start": "2026-07-01T04:00:00+00:00",
"period_end": "2026-08-01T04:00:00+00:00",
"as_of": "2026-07-09T18:30:04.769339+00:00"
},
"links": {
"self": "https://a.klaviyo.com/api/billing-usage/active_profiles/"
}
},
{
"type": "billing-usage",
"id": "email_sends",
"attributes": {
"usage_used": 84210.0,
"usage_max": 250000,
"unit": "messages",
"period_start": "2026-07-01T04:00:00+00:00",
"period_end": "2026-08-01T04:00:00+00:00",
"as_of": "2026-07-09T18:30:04.769364+00:00"
},
"links": {
"self": "https://a.klaviyo.com/api/billing-usage/email_sends/"
}
},
{
"type": "billing-usage",
"id": "ai_credits",
"attributes": {
"usage_used": 320.0,
"usage_max": 10000,
"unit": "credits",
"period_start": "2026-07-01T04:00:00+00:00",
"period_end": "2026-08-01T04:00:00+00:00",
"as_of": "2026-07-09T18:30:04.769400+00:00"
},
"links": {
"self": "https://a.klaviyo.com/api/billing-usage/ai_credits/"
}
}
],
"links": {
"self": "https://a.klaviyo.com/api/billing-usage/"
}
}
Get billing usage
Use Get Billing Usage to retrieve a single usage type by its id.
curl --request GET \
--url 'https://a.klaviyo.com/api/billing-usage/email_sends' \
--header 'Authorization: Klaviyo-API-Key your-private-api-key' \
--header 'accept: application/json' \
--header 'revision: 2026-07-15.pre'
{
"data": {
"type": "billing-usage",
"id": "email_sends",
"attributes": {
"usage_used": 84210.0,
"usage_max": 250000,
"unit": "messages",
"period_start": "2026-07-01T04:00:00+00:00",
"period_end": "2026-08-01T04:00:00+00:00",
"as_of": "2026-07-09T18:30:04.769364+00:00"
},
"links": {
"self": "https://a.klaviyo.com/api/billing-usage/email_sends/"
}
},
"links": {
"self": "https://a.klaviyo.com/api/billing-usage/email_sends"
}
}
If you request a usage type the account is not currently billed for - for example after the corresponding plan has been canceled - the endpoint returns 404:
{
"errors": [
{
"id": "c7f65136-f406-4b68-945f-84cc274d8437",
"status": 404,
"code": "not_found",
"title": "Not found.",
"detail": "No billing usage found for usage type 'email_sends' on this account.",
"source": {
"pointer": "/data/"
}
}
]
}
Querying billing usage
id is the only filterable field on this resource. Combine filters and sparse fieldsets to narrow both which usage types and which attributes are returned.
| Parameter | Description | Query example |
|---|---|---|
filter | Return a subset of usage types by id. Only the any operator on id is supported. Learn about the filter query parameter. | GET /api/billing-usage?filter=any(id,["email_sends","active_profiles"]) |
fields | Request only specified attributes on each usage type. Learn more about sparse fieldsets. | GET /api/billing-usage?fields[billing-usage]=usage_used,usage_max |
Usage type ids in a filter that the account is not billed for are silently skipped, and only the valid ids are returned. For example, filtering on any(id,["aa_active_profiles","active_profiles"]) for an account without advanced analytics returns only active_profiles.
Account families
For accounts in an account family, billing usage is reported at the family level. Both the parent and each child account return the same values:
usage_usedfor each usage type is the total across the whole account family.usage_max,period_start, andperiod_endmatch the parent's exactly.
A request to a child account returns the same figures as the parent - the response reflects family-wide usage, not the individual account's contribution.
Rate limits
Billing Usage API endpoints use the MEDIUM rate limit tier: 10 requests/second burst and 150 requests/minute steady. See rate limits for more information.
Troubleshooting
| Status code | Reasons |
|---|---|
| 400 | Invalid sparse fieldset (a fields[billing-usage] value that isn't a valid attribute). Filtering on a usage type id that isn't a recognized usage type. Filtering on a field other than id, or using an operator other than any. |
| 401 | Missing or invalid API credentials. |
| 403 | The API key or OAuth app is missing the required usage:read scope. |
| 404 | (Get Billing Usage only) The account is not currently billed for the requested usage type. |
| 429 | Rate limit exceeded. See rate limits. |