> ## Documentation Index
> Fetch the complete documentation index at: https://help.dash.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# Connect providers

> Connect, rotate, and disconnect Anthropic and OpenAI admin keys so the AI Spend Agent can audit your usage.

The AI Spend Agent pulls usage and billing data directly from your AI provider using an **admin API key**. You manage connections from inside the agent: connect a provider, rotate its key when it changes, or disconnect it when you no longer want the agent to audit that account.

<Note>
  Admin keys are stored encrypted and are only used to read usage, cost, and billing data from the provider. Dash.fi never uses them to make model calls on your behalf.
</Note>

## Prerequisites

* The AI Spend Agent must be enabled on your Dash.fi account. See [Overview](/integrations/ai-tokens).
* You need an **admin key** (not a regular API key) from each provider you want to connect. Only an account owner or admin on the provider side can generate one.

## Open the Configure modal

1. Sign in to [app.dash.fi](https://app.dash.fi).
2. Open **AI Spend Agent** from the agents list on your dashboard.
3. Click **Configure** in the top bar of the agent.

The Configure modal walks you through the connection in three steps: get the admin key from the provider console, paste it into Dash.fi, and (optionally) upload your recent provider invoices for billing reconciliation. Only the connection is required to activate the agent — the invoice step can be skipped or completed later. Once you've connected at least one provider, opening Configure again lands you directly on the manage step for that provider.

## Connect Anthropic

<Steps>
  <Step title="Create an admin key in Anthropic">
    Sign in to the [Anthropic Console](https://console.anthropic.com/) and go to **Settings > Admin Keys**. Create a new admin key and copy it — it's shown only once.
  </Step>

  <Step title="Paste the key into Dash.fi">
    In the Configure modal, choose **Anthropic**, paste the admin key, and click **Connect**.
  </Step>

  <Step title="Wait for the first sync">
    The agent immediately fetches your recent usage. Overview, Usage, and the findings views populate as data lands — the first pass typically completes within a few minutes.
  </Step>
</Steps>

## Connect OpenAI

<Steps>
  <Step title="Create an admin key in OpenAI">
    Sign in to the [OpenAI Platform](https://platform.openai.com/) and go to **Settings > Admin Keys** (organization-level). Create a new admin key and copy it — it's shown only once.
  </Step>

  <Step title="Paste the key into Dash.fi">
    In the Configure modal, choose **OpenAI**, paste the admin key, and click **Connect**.
  </Step>

  <Step title="Wait for the first sync">
    The agent begins syncing usage as soon as the key is accepted.
  </Step>
</Steps>

<Tip>
  You can connect Anthropic and OpenAI at the same time. Findings and spend from both providers appear together across every view.
</Tip>

## Upload invoices (optional)

The third step of the Configure modal lets you upload recent provider invoices so the agent can reconcile them against the usage it pulls from the admin key. This step is optional — the agent activates as soon as a provider is connected, and clicking **Next** through the invoice step effectively skips it. You can return to Configure at any time to add invoices later.

Uploading invoices tightens the accuracy of the reconciliation summary and refund claims in [Recovery](/integrations/ai-tokens/recovery), because the agent can compare the provider's actual line-item charges (not just the usage feed) against expected pricing.

### Supported providers and formats

* **Providers**: Anthropic and OpenAI.
* **File types**: PDF or CSV.
* **Recommended scope**: your last **3 months** of invoices for each provider.

### Upload an invoice

<Steps>
  <Step title="Open the Upload invoices step">
    In the Configure modal, advance to **Upload invoices** (step 3).
  </Step>

  <Step title="Choose a provider">
    Select **Anthropic** or **OpenAI** to tag the invoice. You can switch providers between uploads.
  </Step>

  <Step title="Pick a file">
    Click the upload area and choose a PDF or CSV from your machine. The upload starts as soon as you pick the file.
  </Step>

  <Step title="Wait for it to finish">
    A progress bar shows the upload percentage, followed by a short **Verifying upload…** step. Modal navigation is locked while an upload is in flight so the transfer isn't aborted.
  </Step>

  <Step title="Add more or continue">
    On success, the file appears in the **Uploaded** list with a green check. Repeat for additional invoices, or click **Next** / **Done** to leave the step.
  </Step>
</Steps>

Each row in the **Uploaded** list shows the filename, tagged provider, upload date, and current status:

* **Stored** (green check) — The file reached storage and has been recorded against your account.
* **Pending** — Upload is still being verified.
* **Error** (red) — The upload didn't complete. Click **Try again** to re-select the file.

### What happens after upload

Uploaded invoices feed the AI Spend Agent's **billing reconciliation** pipeline. The next audit compares each invoice's line items against the expected pricing derived from your usage. Any additional discrepancies surface in the [Violations](/integrations/ai-tokens/dashboard#violations) view — specifically under **Billing** — and back new or refined refund claims in [Recovery](/integrations/ai-tokens/recovery).

You don't need to do anything else to the uploaded files. There's no parsing job to poll and no manual mapping step.

<Note>
  Only PDF and CSV invoices are accepted. Other file types are rejected before the upload starts.
</Note>

## Sync now

Usage refreshes automatically on the agent's own schedule. To pull the latest data on demand — for example, after a large spike or before opening a claim — click **Sync now** next to the connected provider in the Configure modal. The sync runs in the background; usage-based views refetch once it finishes.

## Connection sync health

Each connection in the Configure modal shows a chip next to the provider name that tells you the state of the last background sync. Use it to tell at a glance whether the numbers in the dashboard are current.

* **Connected** (green) — The last sync succeeded. Below the key preview, the connection shows **Last synced \<timestamp>** so you know how fresh the data is.
* **Sync issue** (amber) — The last sync failed on something transient (for example, a provider timeout or upstream 5xx). Dash.fi keeps retrying automatically on the normal schedule. No action is required unless the state persists.
* **Action needed** (red) — The stored admin key permanently fails, either because the provider rejected it (revoked or expired) or because it can no longer be decrypted. Syncing is paused for that connection and its data is frozen at the last successful sync until you rotate the key.

When any connected provider is in the **Action needed** state, an amber banner appears on every AI Spend Agent page naming the provider and the date its data froze at, with a **Rotate key** button that opens the Configure modal on the affected connection. The agent's top-bar status also switches to amber and appends `· action needed` to make the state visible without opening Configure.

Rotating the key clears the state as soon as the next sync succeeds: the chip returns to **Connected**, the banner disappears, and the top-bar status goes back to its normal live label. Follow [Rotate a key](#rotate-a-key) below to paste the new key.

## Refresh insights

**Sync now** brings in fresh usage data, but a separate audit pass produces findings and claims. Use **Refresh insights** (in the agent's top bar) to re-run the audit against the current usage and produce updated findings. The button shows an **Auditing…** state while the job runs, and refreshes the Action Plan and Recovery views the moment it finishes.

## Rotate a key

Rotate a key when the provider-side key is regenerated, revoked, or scheduled to expire. Rotating replaces the stored key without losing any historical data.

<Steps>
  <Step title="Create a new admin key">
    In the provider console, create a fresh admin key.
  </Step>

  <Step title="Open Configure in Dash.fi">
    Open the AI Spend Agent, click **Configure**, and select the connected provider.
  </Step>

  <Step title="Rotate">
    Click **Rotate**, paste the new admin key, and confirm.
  </Step>
</Steps>

## Disconnect a provider

Disconnecting stops the agent from pulling new usage from that provider. Historical usage and findings already synced remain visible in the dashboard.

<Steps>
  <Step title="Open Configure">
    Open the AI Spend Agent and click **Configure**.
  </Step>

  <Step title="Disconnect">
    Select the connected provider and click **Disconnect**. Confirm when prompted.
  </Step>
</Steps>

If you disconnect every provider, the agent falls back to its onboarding screen the next time you open it. Reconnecting later resumes syncs from the moment you connect — there's no back-fill for the disconnected window unless the provider itself retains that history.

## Troubleshooting

<AccordionGroup>
  <Accordion title="'A live connection already exists' when connecting">
    You already have an active key for that provider on your account. Use **Rotate** instead of **Connect** to replace it.
  </Accordion>

  <Accordion title="Usage or findings look empty after connecting">
    The initial sync can take a few minutes. If views are still empty after 10 minutes, click **Sync now**, then **Refresh insights**. If usage populates but findings don't, the agent may not have detected any issues in that window.
  </Accordion>

  <Accordion title="Connection shows a Sync issue chip">
    The last background sync hit a transient failure. Dash.fi keeps retrying on the normal schedule, so the chip usually clears on its own. See [Connection sync health](#connection-sync-health) for the full state model. If it stays in this state for more than a day, contact [support@dash.fi](mailto:support@dash.fi).
  </Accordion>

  <Accordion title="Connection shows an Action needed chip or an amber banner appears">
    The provider rejected the stored admin key, so syncing is paused and the data is frozen at the last successful sync. Create a fresh admin key in the provider console, click **Rotate key** on the banner (or open Configure directly), and paste the new key. See [Rotate a key](#rotate-a-key).
  </Accordion>
</AccordionGroup>
