GET /v2/usagereturns usage rows and totals for a time range.GET /v2/usage/cataloglists the services, products and configurations usage is reported under, with the keys to filter by.
The SDKs and the CLI do not have a usage method yet. Call the endpoints over
HTTP, as in the examples below.
cost_usd is the metered usage cost, not an invoice amount. On some
fixed-price plans spend is not shown, so cost_usd is null in rows and
totals. Handle null before doing arithmetic on it.Quick Start
Example Request
A call with no parameters returns the last 7 days, per service.Example Response
How it works
1
Pick a time range
Set
start and end, or leave them out for the last 7 days. The range can
be up to 90 days, or up to 365 days with granularity=month.2
Choose how to split the usage
group_by sets the dimensions of each row: time, service, product,
configuration, API key, domain or country. The default is one row per
service.3
Narrow it down with filters
Filter by service, product or configuration keys from
GET /v2/usage/catalog, or by API key, domain or country.4
Read rows, totals and meta
data holds the rows. totals covers the whole range and filters, across
every row and page. meta says which range was answered and whether the
figures are final. Figures for recent periods can still change.Parameters
All parameters are optional query parameters. Parameters marked repeatable take several values: repeat the parameter (group_by=time&group_by=service). A comma-separated list is not split: for group_by, service, product and configuration it returns 422, and for domain and country it is read as one value and matches nothing.
start
start
string
Start of the range, ISO 8601. UTC when no offset is given.Default:
end minus 7 days (24 hours for granularity=hour), rounded down to a whole bucket.Example: 2026-10-27T00:00:00Zend
end
string
End of the range, ISO 8601. UTC when no offset is given.
end - start can be at most 90 days, or 365 days with granularity=month, measured on the range as requested, before it is widened to whole buckets.Default: the end of the current granularity bucket in UTC: the next whole hour, midnight or month start.Example: 2026-11-03T00:00:00Zgranularity
granularity
string
default:"day"
Time bucket size for
group_by=time. All buckets are UTC.Options:hour: only for ranges of 48 hours or lessday: ranges up to 90 daysmonth: ranges up to 365 days
meta.start and meta.end report the range that was answered.group_by (repeatable)
group_by (repeatable)
string[]
default:"service"
Dimensions to split usage by. At most 50 values.Options:
time: one row pergranularitybucketservice,product,configuration: catalog keys. Grouping byconfigurationalso returns its product.api_key: the API key iddomain: the target domain. Only the top 100 domains are broken out. The rest are combined in one row withdomain: null, andmeta.domains_cappedistrue.country: the target country, ISO 3166-1 alpha-2
service, product, configuration (repeatable)
service, product, configuration (repeatable)
string[]
Only usage of these services. Keys come from
GET /v2/usage/catalog.Example: datastring[]
Only usage of these products. Keys come from
GET /v2/usage/catalog.Example: extractApistring[]
Only usage of these configurations, each written
<product key>.<configuration key>, because a configuration key is unique only within its product. Copy the filter value from GET /v2/usage/catalog.Example: extractApi.vx6api_key, domain, country (repeatable)
api_key, domain, country (repeatable)
string[]
Only usage made with these API key ids (32 lowercase hex characters), or
none for usage made without an API key.string[]
Only usage against these target domains. Matching is case-insensitive.
www. is not stripped, so use the exact host (www.example.com does not match example.com). A domain outside the top 100 returns no rows.Example: example.comstring[]
Only usage targeting these countries, ISO 3166-1 alpha-2. Matching is case-insensitive.Example:
USapi_key, domain or country. When you use one of these, those services are left out and listed in meta.excluded_services.Response
data
data
object[]
One row per combination of the
group_by dimensions. Rows are ordered oldest bucket first, and largest usage first within a bucket. Ties keep a fixed order, so paging with limit and offset is stable.totals
totals
object
Figures for the whole range and filters, across every row, whatever
limit and offset are. A metric a service does not measure is null, not 0.meta
meta
object
Usage catalog
GET /v2/usage/catalog lists every service, product and configuration usage is reported under. Use the keys as service, product and configuration filters. Keys never change. Names can change, so match on keys in code.
Retired configurations stay in the list, because past usage carries their keys.
cURL
status is one of:
active: on sale.deprecated: still billed, not sold to new customers.retired: no longer billed. Listed because past usage carries its key.
Common recipes
Totals for a date range
Readtotals. It covers the whole range whatever limit is.
Daily chart
Group bytime to get one row per day. Add service to get one series per service.
timestamp:
granularity=hour. With no start, it covers the last 24 hours. Use granularity=month for ranges longer than 90 days, up to 365.
A month of daily rows per service can exceed 100 rows. Raise limit up to 200, or page with offset while offset + limit < meta.total.
Breakdown by configuration
product: null and configuration.key: null. The configuration name is then the legacy name. When no name was recorded at all, configuration is null. That usage cannot be filtered by product or configuration.
Breakdown by domain, country or API key
domain: null, and meta.domains_capped is true.
Swap domain for country or api_key for the other breakdowns. Not every service records these dimensions. Check meta.excluded_services for the services left out of the result:
Filter by a catalog key
Copy keys fromGET /v2/usage/catalog. This returns daily Extract API VX6 usage:
service=wsa for Agent runs only, or product=searchApi&product=extractApi for two products.
Usage of one API key
Find the key id withgroup_by=api_key, then filter on it:
api_key=none for usage made without an API key.
Ask your agent
AI agents can read your usage through the Nimble MCP server athttps://mcp.nimbleway.com/mcp. Two tools wrap these endpoints:
The tools tell the agent to look up keys in the catalog before filtering, and to say so when
meta.partial means figures may still change. Example prompts:
- “How many requests did I make last week and what was my success rate?”
- “What did I spend on Nimble in October, broken down by product?”
- “Show my daily Agent runs for the last 30 days.”
- “Which domains had the most errors in the last 24 hours?”
Errors
Errors from the usage endpoints return a JSON body.detail.message says what was wrong and how to fix the call. detail.extra.error_type is a stable code to branch on.
A value of the wrong type, such as
granularity=week or limit=500, or an unknown query parameter, returns 422 with error_type validation_error and the failing fields in detail.extra.errors. A comma-separated group_by=time,service fails this way: repeat the parameter instead.
An unknown key lists the valid ones:
start:
Next Steps
MCP Server
Connect your AI client to Nimble and ask about your usage in plain language.
Pricing
See how each product and configuration is billed.
Rate Limits
Limits that apply to your account’s requests.
API Introduction
Authentication and the rest of the v2 API.