---
title: "Get Inference Usage Attribution Rollup"
method: GET
path: "/api/v1/edges/inference/usage-attribution"
tags: ["Edge"]
---

# Get Inference Usage Attribution Rollup

`GET /api/v1/edges/inference/usage-attribution`

## Request

- Base URL: `https://example.conductor.one`
- URL: `https://example.conductor.one/api/v1/edges/inference/usage-attribution`
- Auth: HTTP bearer and OAuth 2
  - Client credentials
  - Token URL: `/auth/v1/token`

Returns inference request and token usage across the Edges the caller manages, grouped by the selected attribution dimension.

## Query parameters

- `dimension` 'TB_USAGE_ATTRIBUTION_DIMENSION_UNSPECIFIED' | 'TB_USAGE_ATTRIBUTION_DIMENSION_TEAM' | 'TB_USAGE_ATTRIBUTION_DIMENSION_APPLICATION' | 'TB_USAGE_ATTRIBUTION_DIMENSION_AGENT' | 'TB_USAGE_ATTRIBUTION_DIMENSION_COST_CENTER' | 'TB_USAGE_ATTRIBUTION_DIMENSION_USER' | 'TB_USAGE_ATTRIBUTION_DIMENSION_PROVIDER' | 'TB_USAGE_ATTRIBUTION_DIMENSION_MODEL' | 'TB_USAGE_ATTRIBUTION_DIMENSION_ROUTE' | 'TB_USAGE_ATTRIBUTION_DIMENSION_CALL_ROLE': The dimension field.
- `page_size` integer: The pageSize field.
- `since` string, int64: The since field.
- `until` string, int64: The until field.

## Response `200`

Successful response

- C1ApiEdgeV1EdgeServiceGetInferenceUsageAttributionRollupResponse: The EdgeServiceGetInferenceUsageAttributionRollupResponse message.
  - `edgeCount` integer: Number of authorized Edges included. Zero means the caller manages no Edges, as distinct from Edges that have no traffic yet.
  - `rows` C1ApiEdgeV1TBUsageAttributionRow[], nullable: Ordered by (input_tokens + output_tokens) descending, limited to page_size.
    - `attributionId` string: Empty string means unattributed for a user-facing attribution dimension. For PROVIDER it is the raw provider_id, and for MODEL it is the raw provider-native served model_name. Blank remains distinct from a literal "Unknown" ID; clients label it Unknown provider/model.
    - `cacheReadTokens` string, uint64: Observed provider-attempt cache usage, not inferred for missing attempts.
    - `cacheWriteTokens` string, uint64: The cacheWriteTokens field.
    - `costNanoUsd` string, int64: List-price estimate for observed usage in this group, in nano-USD. Provider/model usage is priced per served model; long-context rates use average input per observed attempt. Missing usage or an unpriced model makes this a lower bound, not an invoiced amount.
    - `deniedRequestCount` string, uint64: Logical requests denied by policy, counted in request_count. Set for the logical-request dimensions (not PROVIDER, MODEL or CALL_ROLE).
    - `inputTokens` string, uint64: PROVIDER and MODEL values include only provider-reported per-attempt usage.
    - `judgeAttemptCount` string, uint64: Judge (call_role auxiliary) provider attempts that reached a provider on behalf of this group's requests. Only set for the USER and ROUTE dimensions. Judge usage is extra usage on top of the answer: it is never included in input_tokens, output_tokens or cost_nano_usd above.
    - `judgeCostNanoUsd` string, int64: List-price estimate of the observed judge usage, in nano-USD; a lower bound when the judge model is unpriced or an attempt reported no usage.
    - `judgeInputTokens` string, uint64: Provider-reported judge usage; judge attempts with no reported usage are not counted here and make the judge totals a lower bound.
    - `judgeMissingUsageCount` string, uint64: Judge attempts that reported no token usage.
    - `judgeOutputTokens` string, uint64: The judgeOutputTokens field.
    - `missingUsageCallCount` string, uint64: Provider attempts with contact started but no observed token usage. Their cost is unknown even when the model has a list price.
    - `modelBreakdown` C1ApiEdgeV1TBUsageAttributionModelRow[], nullable: Complete breakdown of this provider's included models, only for PROVIDER. Parent counters include these children; do not sum both for scope totals.
      - `cacheReadTokens` string, uint64: The cacheReadTokens field.
      - `cacheWriteTokens` string, uint64: The cacheWriteTokens field.
      - `costNanoUsd` string, int64: The costNanoUsd field.
      - `inputTokens` string, uint64: The inputTokens field.
      - `missingUsageCallCount` string, uint64: The missingUsageCallCount field.
      - `modelName` string: The modelName field.
      - `outputTokens` string, uint64: The outputTokens field.
      - `requestCount` string, uint64: The requestCount field.
      - `unpricedRequestCount` string, uint64: The unpricedRequestCount field.
    - `outputTokens` string, uint64: The outputTokens field.
    - `requestCount` string, uint64: Logical root requests except for PROVIDER and MODEL, where this counts contacted provider attempts.
    - `retryAttemptCount` string, uint64: Provider attempts beyond the first for the same request and call role, ranked by event time rather than by the logged attempt ordinal. A judge attempt followed by its answer attempt is not a retry. Only set for the CALL_ROLE dimension.
    - `unpricedRequestCount` string, uint64: Observed requests or provider attempts whose model has no list price.

## Changes

- **2026-10-06** `918a4e749f56`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/conductorone/apis/c1-api/changes/api/v1/edges/inference/usage-attribution/get.md)

---

[API](https://skmtc.dev/conductorone/apis/c1-api.md) - [All operations](https://skmtc.dev/conductorone/apis/c1-api/llms.txt) - [OpenAPI document](https://skmtc.dev/conductorone/apis/c1-api/revisions/fe943bedf41b?raw)
