# Cursor

The Cursor integration connects Cursor's Admin API to import organization-level usage and spend for every seat on the team, feeding the platform's [Observe](/docs/ai-control-plane/observe) and [Costs](/docs/ai-control-plane/observe/costs) views. It captures usage and spend only, not prompt or response content.

## Access requirements

<Callout type="info">
  Viewing connection status on the AI Integrations page requires the `org:read` scope. Connecting, configuring, or deleting the Cursor integration requires the `org:admin` scope, held by the default [Admin role](/docs/ai-control-plane/org-admin/roles-and-permissions).
</Callout>

## Create a read-only API key

In Cursor's [Team API keys](https://cursor.com/dashboard/api?section=team-keys#team-api-keys) settings, click **New API Key**, give it a recognizable name, set its scope to **Read-only**, then save it. Cursor shows the key once, so copy it before leaving the page.

## Connect it in the dashboard

Open **Organization settings > AI Integrations**, find the **Cursor** provider, and click **Configure**. Paste the key into the **Cursor Admin API key** field and save. There's no organization ID to enter for Cursor.

## Verify the connection

The integration doesn't test the key synchronously on save. The **Usage and spend** stream polls roughly every hour: if the key is invalid, Cursor rejects the request and the stream shows a rejected-credential status with a **Retry now** action once you've fixed the key. A stream that keeps failing auto-pauses after three consecutive rejections rather than retrying indefinitely against a bad credential. Once a poll succeeds, the stream's status turns healthy and usage and spend data starts flowing into Observe and Costs.
