Step-by-step setup instructions for each supported AI supplier integration.
Overview
To connect an AI supplier to Tropic, you create an API key in that supplier’s platform and add it under Integrations in Tropic. The specific key type and who can create it varies by supplier - each section below covers what you need and how to get it. For an overview of what Tropic tracks once connected, see Tracking AI Consumption in Tropic.
In This Guide
OpenAI Platform
Tropic uses an OpenAI Admin API key to call OpenAI’s Usage and Costs APIs. Admin keys are separate from the standard API keys your developers use and can only be created by an Organization Owner.
Create the Key
- Sign in at platform.openai.com with an Organization Owner account.
- Open the Admin Keys page: click the Settings (gear) icon, then Organization Settings, then Admin keys - or go directly to platform.openai.com/settings/organization/admin-keys.
- Click Create new admin key.
- Name the key so its purpose is clear - for example, Tropic – usage reporting.
- Select the Read-Only permission.
- Click Create, then copy the key immediately (it begins with sk-admin-) and store it securely. OpenAI will not show it again.
|
Don’t see the Admin keys page? Only Organization Owners can access the Admin Keys page. Ask an Owner (listed under Settings - Organization - Members) to create the key or promote your role. |
Connect in Tropic
- In Tropic, navigate to Integrations.
- Select the integration and click Connect.
- Enter or paste the API key you created and click Save.
Tropic validates the key and begins fetching data. The initial import can take some time depending on data volume. After the initial import, Tropic refreshes data daily.
Endpoints & Fields Fetched
| Endpoint | Field | Stored | What it feeds |
| GET /v1/organization/usage/completions | start_time_iso (bucket) | Yes | The day a row belongs to. Drives every timeframe filter and Spend vs Usage chart buckets. |
| model | Yes | Model breakdown rows. | |
| user_id | Yes | User breakdown rows, resolved to a name via /users. | |
| api_key_id | Yes | API key breakdown rows, resolved via /projects/{id}/api_keys. | |
| project_id | Yes | Project rows in the User breakdown. | |
| input_uncached_tokens | Yes | Input card, and the denominator of Avg $/1M. | |
| output_tokens | Yes | Output card, and the denominator of Avg $/1M. | |
| input_cached_tokens | Yes | Cached token usage. | |
| input_tokens | Yes | Stored as the provider's own total. Not surfaced directly. | |
| batch | Yes | Batch token tier in the breakdown tables. | |
| service_tier, num_model_requests | Yes | Not surfaced today. | |
| text / audio / image token splits | Yes | Not surfaced today. Available if we ever break down by modality. | |
| input_cache_write_tokens | Yes | Cache write tokens. | |
| object | No | Response metadata. | |
| GET /v1/organization/costs | start_time (bucket) | Yes | The day a cost row belongs to. |
| amount.value / amount.currency | Yes | Total Spend, the Cost column, and the spend bars on Spend vs Usage. | |
| line_item | Yes | Parsed into model and token type, which makes billable vs cached cost separable. | |
| api_key_id | Yes | Cost per API key. Only present from the org's cut-off date onwards. | |
| project_id, user_id | Yes | Cost attribution for the project and user breakdowns. | |
| quantity | Yes | Not surfaced today. | |
| organization_id, organization_name, project_name, user_email | No | Resolved from the users and projects endpoints instead. | |
| GET /v1/organization/users | id, name, email, role, added_at | Yes | Names and emails on the User breakdown. |
| GET /v1/organization/projects | id, name, status, created_at, archived_at | Yes | Project labels; archived state is used to skip dead projects on sync. |
| GET /v1/organization/projects/{id}/api_keys | id, name, redacted_value, owner, status, created_at, last_used_at | Yes | Key names on the API key breakdown. |
| GET /v1/organization/admin_api_keys | (nothing) | No | Called with limit=1 purely to validate the key at connect time. |
Anthropic Claude Developer Platform
Tropic uses a Claude Admin API key to call the Usage and Cost Admin API. Only organization members with the Admin role can create Admin API keys. Note: this covers Claude API (Developer Platform) consumption only - usage from Claude.ai apps on an Enterprise plan requires a separate Analytics API key covered in the next section.
Create the Key
- Sign in to the Claude Console at platform.claude.com with an Admin account.
- Go to Organization Settings - Admin keys, or go directly to platform.claude.com/settings/admin-keys.
- Click Create Admin Key.
- Enter a name (for example, Tropic – usage reporting) and choose an expiration. If you set one, calendar a reminder to rotate the key in Tropic before it expires.
- Click Create, then copy the key immediately (it begins with sk-ant-admin01-) and store it securely. It is shown only once.
Connect in Tropic
- In Tropic, navigate to Integrations.
- Select the integration and click Connect.
- Enter or paste the API key you created and click Save.
Tropic validates the key and begins fetching data. The initial import can take some time depending on data volume. After the initial import, Tropic refreshes data daily.
Endpoints & Fields Fetched
| Endpoint | Field | Stored | What it feeds |
| GET /v1/organizations/usage_report/messages | starting_at (bucket) | Yes | The day a row belongs to. |
| model | Yes | Model breakdown rows. | |
| account_id | Yes | User breakdown rows, resolved via /users. | |
| api_key_id | Yes | API key breakdown rows, resolved via /api_keys. | |
| workspace_id | Yes | Connector and workspace grouping, and the workspace remainder row. | |
| uncached_input_tokens | Yes | Input card, and the denominator of Avg $/1M. | |
| output_tokens | Yes | Output card, and the denominator of Avg $/1M. | |
| cache_read_input_tokens | Yes | Cache card. | |
| cache_creation.ephemeral_5m / _1h | Yes | Cache card, added to cache reads. The only provider that splits writes by TTL. | |
| server_tool_use.web_search_requests | Yes | Not surfaced today. | |
| service_account_id, service_tier, context_window, inference_geo | Yes | Not surfaced today. | |
| GET /v1/organizations/cost_report | starting_at (bucket) | Yes | The day a cost row belongs to. |
| amount | Yes | Total Spend, the Cost column, and the spend bars. | |
| token_type | Yes | Splits cost into on-demand, cached and cache write. This is what makes the billable rate possible. | |
| workspace_id, description | Yes | Connector attribution. Description is also where model-less spend like web search shows up. | |
| cost_type, model, context_window, service_tier, inference_geo | Yes | Model is used for the Model breakdown's cost column; the rest are not surfaced. | |
| currency | No | Taken from the amount object instead. | |
| GET /v1/organizations/usage_report/claude_code | date, actor, core_metrics, model_breakdown, tool_actions, customer_type, subscription_type, terminal_type | Yes | Claude Code usage reporting, separate from the consumption breakdowns. |
| GET /v1/organizations/users | id, name, email, role, added_at | Yes | Names and emails on the User breakdown. |
| GET /v1/organizations/api_keys | id, name, partial_key_hint, status, workspace_id, created_by, created_at | Yes | Key names on the API key breakdown. |
| expires_at, principal | No | Not needed today. | |
| GET /v1/organizations/workspaces | id, name, display_color, created_at, archived_at | Yes | Workspace labels and connector names. |
| tags, data_residency, inference_data_retention, compartment_id, external_key_id | No | Not needed today. |
Anthropic Claude Enterprise
Tropic uses an Analytics API key to read per-user and organization-level usage - and, on usage-based plans, cost reports - from Anthropic’s Enterprise Analytics API. This key is different from the Developer Platform Admin API key above and the two are not interchangeable. Only the organization’s Primary Owner can create Analytics API keys.
Create the Key
- Sign in at claude.ai as the Primary Owner of your Enterprise organization.
- Go to Organization settings - API.
- Ensure the API access toggle is switched on. If it is off, all API requests are denied even with a valid key.
- Click Create API key.
- Name the key (for example, Tropic – usage reporting) and select the read:analytics scope. No other scopes are needed.
- Copy the key immediately and store it securely. It is shown only once.
|
Good to know Engagement and adoption data is available for dates on or after January 1, 2026, with roughly a one-day lag. Cost and usage figures can be revised by Anthropic for up to 30 days. Tropic accounts for this when refreshing your data. |
Connect in Tropic
- In Tropic, navigate to Integrations.
- Select the integration and click Connect.
- Enter or paste the API key you created and click Save.
Tropic validates the key and begins fetching data. The initial import can take some time depending on data volume. After the initial import, Tropic refreshes data daily.
Endpoints & Fields Fetched
| Endpoint | Field | Stored | What it feeds |
| GET /v1/organizations/analytics/usage_report | starting_at (bucket) | Yes | The day a row belongs to. |
| model | Yes | Model breakdown rows. | |
| uncached_input_tokens, output_tokens | Yes | Input and Output cards, and the Avg $/1M denominator. | |
| cache_read_input_tokens, cache_creation.5m/_1h | Yes | Cache card. | |
| server_tool_use.web_search_requests | Yes | Not surfaced today. | |
| product, context_window, speed, inference_geo, rbac_group_id, slack_channel_id | Yes | Product drives the Dev Platform vs Enterprise split. The rest are not surfaced. | |
| requests | No | Not needed today. | |
| GET /v1/organizations/analytics/cost_report | amount | Yes | Total Spend and the Cost column. |
| token_type | Yes | Splits cost into on-demand, cached and cache write for the billable rate. | |
| list_amount | Yes | List price before any discount. Not surfaced today. | |
| cost_type, model, product, context_window, speed, inference_geo, rbac_group_id, slack_channel_id | Yes | Model and product are used; the rest are not surfaced. | |
| currency, requests | No | Not needed today. | |
| GET .../analytics/user_usage_report | actor, plus the usage fields above | Yes | The Enterprise half of the User breakdown. Actor is the person. |
| GET .../analytics/user_cost_report | actor, plus the cost fields above | Yes | Per-user cost for Enterprise. Only 58% of usage carries an actor, so the rest lands in an unattributed row. |
| GET /v1/organizations/analytics/summaries | (nothing) | No | Called only to validate the key at connect time. |
Cursor
Tropic uses a Cursor Admin API key to read team usage and spend from Cursor’s Admin API. Only a Team Admin can create keys.
Create the Key
- Sign in to the Cursor dashboard at cursor.com/dashboard as a Team Admin.
- Open the Settings tab and find Cursor Admin API Keys. In some workspaces this appears under an Advanced section as an API Keys card.
- Click New API Key. If you see two tabs (User and Team), make sure to create the key under the Team tab.
- Name the key (for example, Tropic – usage reporting). If your workspace offers a scope option, choose Read-only.
- Copy the key immediately (it begins with key_) and store it securely. It is shown only once.
|
Don’t see an API keys option? Your plan may not include Admin API access, or your account may not have the Team Admin role. Check with your Cursor account owner - some API capabilities are limited to Enterprise agreements. |
Connect in Tropic
- In Tropic, navigate to Integrations.
- Select the integration and click Connect.
- Enter or paste the API key you created and click Save.
Tropic validates the key and begins fetching data. The initial import can take some time depending on data volume. After the initial import, Tropic refreshes data daily.
Endpoints & Fields Fetched
| Endpoint | Field | Stored | What it feeds |
| POST /teams/filtered-usage-events | timestamp | Yes | Rounded to the day to build the bucket. |
| model | Yes | Model breakdown rows. | |
| userEmail | Yes | User breakdown rows. Absent on automation events, which land in an unattributed row. | |
| serviceAccountId | Yes | Distinguishes automation from people. One service account across the whole dataset. | |
| kind | Yes | Stored, not surfaced. Tells Included in Business apart from usage-based. | |
| isChargeable | Yes | Stored, not surfaced. | |
| isHeadless | Yes | Stored, not surfaced. | |
| chargedCents | Yes | Total Spend, the Cost column, the spend bars, and the Avg $/1M numerator. | |
| tokenUsage.inputTokens / outputTokens | Yes | Input and Output cards, and the Avg $/1M denominator. | |
| tokenUsage.cacheReadTokens / cacheWriteTokens | Yes | Cache card. Cursor reports both sides. | |
| tokenUsage.totalCents | Yes | Stored, never displayed. Token cost before the fee. | |
| cursorTokenFee | No | A per-event fee. chargedCents equals totalCents plus this fee. | |
| requestsCosts | No | Zero on every event sampled. | |
| conversationId, isTokenBasedCall, maxMode, serviceAccountName | No | Not needed today. |