Skip to main content
The Usage API returns your account’s usage: requests, Agent runs, successes, errors, success rate, bytes and cost. Request and run counts and success rates match the Usage page on the Nimble API, Nimble IP and Web Search Agents tabs. The Usage page does not show cost. Two endpoints:
  • GET /v2/usage returns usage rows and totals for a time range.
  • GET /v2/usage/catalog lists the services, products and configurations usage is reported under, with the keys to filter by.
The account comes from the API key. Any valid API key of the account works. No admin role is needed.
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.
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:00Z
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:00Z
string
default:"day"
Time bucket size for group_by=time. All buckets are UTC.Options:
  • hour: only for ranges of 48 hours or less
  • day: ranges up to 90 days
  • month: ranges up to 365 days
The range is widened to whole buckets. meta.start and meta.end report the range that was answered.
string[]
default:"service"
Dimensions to split usage by. At most 50 values.Options:
  • time: one row per granularity bucket
  • service, product, configuration: catalog keys. Grouping by configuration also returns its product.
  • api_key: the API key id
  • domain: the target domain. Only the top 100 domains are broken out. The rest are combined in one row with domain: null, and meta.domains_capped is true.
  • country: the target country, ISO 3166-1 alpha-2
string[]
Only usage of these services. Keys come from GET /v2/usage/catalog.Example: data
string[]
Only usage of these products. Keys come from GET /v2/usage/catalog.Example: extractApi
string[]
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.vx6
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.com
string[]
Only usage targeting these countries, ISO 3166-1 alpha-2. Matching is case-insensitive.Example: US
Some services cannot be split or filtered by api_key, domain or country. When you use one of these, those services are left out and listed in meta.excluded_services.
integer
default:"100"
Maximum number of rows returned, 1 to 200.
integer
default:"0"
Number of rows to skip. Page while offset + limit < meta.total.
Each repeatable parameter takes at most 50 values. Values of one parameter match any of them. Different parameters must all match.

Response

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.
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.
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
Response (trimmed):
A configuration’s 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

Read totals. It covers the whole range whatever limit is.

Daily chart

Group by time to get one row per day. Add service to get one series per service.
Each row carries the bucket start in timestamp:
For an hourly chart, use 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

Each row shows the product with the configuration:
Older usage under a name the catalog does not map shows with 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

Only the top 100 domains are broken out. The rest are combined in one row with 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 from GET /v2/usage/catalog. This returns daily Extract API VX6 usage:
Other examples: service=wsa for Agent runs only, or product=searchApi&product=extractApi for two products.

Usage of one API key

Find the key id with group_by=api_key, then filter on it:
Pass api_key=none for usage made without an API key.

Ask your agent

AI agents can read your usage through the Nimble MCP server at https://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:
A range that is too long says where to move 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.