# OpenAI Compliance Logs

The OpenAI Compliance Logs integration connects OpenAI's Compliance Logs Platform to import Codex and ChatGPT usage and spend for the organization, feeding the platform's [Observe](/docs/ai-control-plane/observe) and [Costs](/docs/ai-control-plane/observe/costs) views. Codex cloud surfaces such as web tasks and GitHub code review emit no device telemetry, so this feed is their only token source. These imports are post-hoc logs: usage on log-only surfaces can be observed and billed, but not blocked in real time.

> OpenAI also has a separate ChatGPT Conversations import that reuses the same API key but a different identifier: a ChatGPT **workspace UUID** rather than an organization ID. It imports conversation content instead of cost: ChatGPT conversations and Codex cloud web-task transcripts, both surfaced as [agent sessions](/docs/ai-control-plane/observe/agent-sessions). If both are connected, don't confuse the two ID fields when configuring them.

## Access requirements

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

## Create the credential

Create an OpenAI API key with access to compliance logs for the organization, from OpenAI's own platform console. You'll also need your OpenAI organization ID, which starts with `org-`.

## Connect it in the dashboard

Open **Organization settings > AI Integrations**, find the **OpenAI Compliance Logs** provider, and click **Configure**. Enter:

- **OpenAI Compliance Logs API key**: the key from above.
- **OpenAI organization ID**: must start with `org-`; the dashboard rejects values in any other format when you save.

## Verify the connection

The integration doesn't test the credential synchronously on save; the first scheduled poll does. The **Codex & ChatGPT cost metrics** stream polls roughly every 5 minutes, with an initial 30-day lookback on first connect. If the key is invalid, OpenAI 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 polling succeeds, Codex and ChatGPT usage and cost data start flowing into Observe and Costs.
