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

# Braintrust

> AI evals & observability — members & access

<Tabs>
  <Tab title="Overview">
    Connect Braintrust with an API key to sync organization members, projects, API keys, datasets, and experiments, and run access reviews. Read-only. Data feeds into your Access accounts and Inventory pages.

    <Info>
      **Read-only access.** DSALTA only reads data from this integration. It never creates, modifies, or deletes anything in your environment, and every remediation step is performed by your team directly in the third-party product.
    </Info>

    <Info>
      **What you'll see.** The Access page lists the members of one Braintrust **organization** — the organization the key was created in, or, when the key can see several, the one with the lowest organization ID — with their name (or their email address when Braintrust stores no name for them), their email, their permission groups shown in the role column (for example **Owners**; several groups are joined with commas, and a member who belongs to no group is shown as **Member**) and the date their Braintrust account was created. Service accounts that sit behind service tokens are left out. Braintrust reports no account status, so every member is shown as **Active**. Braintrust reports no per-user MFA state, so the **MFA** column is blank (shown as a dash).
    </Info>

    <Note>
      DSALTA collects this integration's data when you connect it — you can refresh it at any time with **Sync from integrations** on the **Integrations** page. The compliance checks below re-run once a day at 02:00 America/New\_York.
    </Note>

    ## What DSALTA reads

    DSALTA reads the Braintrust organization member roster — names, emails, permission-group membership and creation dates — which appears on your **Access** page; and your Braintrust **projects**, the organization's **API keys** (name, owner email, creation date and expiry, or "never expires" — never the secret), and your **datasets** and **experiments**, each labelled with its project, which appear on your **Inventory** page. Permission groups and service tokens are read best-effort after the roster: if the group list cannot be read, every member is shown as **Member**, and if the service-token list cannot be read, no service account is removed from the roster. Datasets and experiments appear once you create a dataset or run an evaluation. No last-login time is shown: the Braintrust member record carries none.

    It calls these Braintrust endpoints on `api.braintrust.dev` (or `api-eu.braintrust.dev` when the region is `eu`):

    * `/v1/organization`
    * `/v1/user?org_name={name}`
    * `/v1/group?org_name={name}`
    * `/v1/service_token?org_name={name}`
    * `/v1/project?org_name={name}`
    * `/v1/api_key?org_name={name}`
    * `/v1/dataset?org_name={name}`
    * `/v1/experiment?org_name={name}`

    Every request is a read. DSALTA has no code path that creates, modifies, or deletes anything in your Braintrust environment.

    ## Troubleshooting

    <AccordionGroup>
      <Accordion title="The Access page shows the wrong organization, or fewer members than expected">
        Braintrust API keys are created per organization, and a key inherits the permissions of the user who created it. When a key can see several organizations, DSALTA syncs the one with the lowest organization ID. Create the key as an **Owner** of the organization you want reviewed, from that organization's own **Settings → API keys** page, then disconnect and connect again. Note that disconnecting permanently deletes the data already collected from Braintrust.
      </Accordion>

      <Accordion title="The connection is rejected, or stopped working">
        A Braintrust API key's expiration defaults to one year and cannot be changed after creation; when it lapses, every sync fails until you create a new key and reconnect. A key pasted from **Settings → AI providers** is an outbound model key, not a Braintrust credential, and is rejected. Only the value `eu` in the **Region** field selects the EU host — anything else, including a blank field, uses the US host — so a key for an EU-hosted organization is rejected until you enter `eu`.
      </Accordion>

      <Accordion title="Every member shows the role Member, or Inventory is missing datasets and experiments">
        Roles come from Braintrust permission groups, which are read best-effort: if the group list cannot be read, every member is shown as **Member** without failing the sync. Projects, API keys, datasets and experiments are read best-effort too, and datasets and experiments only exist once you have created a dataset or run an evaluation. Click **Sync from integrations** on the **Integrations** page to retry.
      </Accordion>
    </AccordionGroup>

    <AccordionGroup>
      <Accordion title="How do I check whether the connection is healthy?">
        Open **Integrations** in the DSALTA sidebar, stay on the **Connected** tab, and click **Manage** on the integration's card. Open the **Status** tab: it shows either **Connected and working properly** or **Connection issues detected**.

        Use the **Status** tab, not **Overview** — Overview always reports **Connected** regardless of the real state.
      </Accordion>

      <Accordion title="A check shows Failed and nothing changed on my side">
        On an integration-powered check, **Failed** normally means DSALTA was blocked rather than that you are non-compliant. Open the test, go to **Source Data**, and read the result code: **403** is a missing permission, **428** is a setting DSALTA still needs, **500** is a failure on DSALTA's side.

        A real compliance gap shows **207** and leaves the test looking **Completed**. See [Understanding Test Results](/guides/compliance/test-results).
      </Accordion>

      <Accordion title="Data looks out of date">
        Compliance checks re-run once a day at 02:00 America/New\_York. To refresh sooner, open **Integrations → Connected** and click **Sync from integrations** at the top right — it refreshes every connected integration at once.
      </Accordion>

      <Accordion title="How do I repair a broken connection?">
        There is no Reconnect, Repair or Refresh Token button. The only repair available is to disconnect and connect again.

        <Warning>
          **Disconnecting is destructive and cannot be undone.** DSALTA removes the access records, inventory, vulnerabilities, code changes, incidents and device records collected from this integration, and deletes the test results tied to the connection. Export anything you still need as audit evidence first — see [Integration errors](/troubleshooting/integration-errors).
        </Warning>
      </Accordion>

      <Accordion title="Configure scope will not let me change anything">
        That is expected. **Configure scope** is read-only — it shows what DSALTA is permitted to read, and has no Save action. To change what DSALTA can see, change the permissions on the credential in the third-party product, then disconnect and connect again.
      </Accordion>
    </AccordionGroup>
  </Tab>

  <Tab title="How to connect">
    A Braintrust API key (or service token). The organization is detected automatically. Read-only.

    **Before you begin**

    * A Braintrust organization.
    * The **Organization Owner** role — the key inherits the permissions of the user who creates it.

    You will need:

    | Field | Where to find it | Example |
    | - | - | - |
    | **API key** | **Settings → API keys → + API key** (or **Settings → Service tokens** for a service token) | `sk-…` or `bt-st-…`, shown once |
    | **Region (optional)** | **Settings → Data plane**; only needed when the organization's data plane is in the EU | `eu` |

    <Steps>
      <Step title="Start in DSALTA">
        Open **Integrations** in the DSALTA sidebar, find **Braintrust**, and click **Connect** to open the connect panel.
      </Step>

      <Step title="Select the organization">
        Sign in at [braintrust.dev](https://www.braintrust.dev) and make sure the organization selector (top left) shows the organization to connect: API keys are created per organization.
      </Step>

      <Step title="Create an API key">
        Open **Settings → API keys** and click **+ API key**. Enter a name and choose the expiration: it defaults to one year and cannot be changed afterwards, so pick **never expires** or note the renewal date. Create the key as an organization **Owner**.

        <Warning>
          **Do not use anything from Settings → AI providers.** Those are the outbound OpenAI, Anthropic or Bedrock keys Braintrust uses to call models, not Braintrust credentials, and DSALTA rejects them at connect time.
        </Warning>

        <Tip>
          A service token (**Settings → Service tokens**, prefixed `bt-st-…`) works too, and it survives the creator leaving the organization.
        </Tip>
      </Step>

      <Step title="Copy the key and connect">
        Click **Create** and copy the key now — it starts with `sk-` and is shown once. Return to the connect panel and paste it. Enter `eu` as the region only if your organization's data plane is in the EU; leave it empty for US. Then click **Connect**.
      </Step>
    </Steps>

    <Check>
      DSALTA validates the key when you click **Connect**, by listing the organizations it can see and then listing the members of the chosen organization. On success the integration moves to the **Connected** tab, and **Manage → Status** reads **Connected and working properly**. Checks begin reporting after the first sync.
    </Check>

    <Warning>
      **If the connection is rejected.** An invalid, expired or deleted key, a key pasted from **Settings → AI providers**, the wrong region for the organization, or a key that can see no organization.

      The on-screen message is generic — see [Connection error messages](/troubleshooting/connection-error-messages).
    </Warning>
  </Tab>

  <Tab title="Automated checks">
    Each check below re-runs once a day, at 02:00 America/New\_York, while this integration is connected. Click any check for step-by-step remediation guidance.

    | Check | Severity | What it verifies |
    | - | - | - |
    | [User access to Critical System should be valid](/integrations/braintrust/user-access-to-critical-system-should-be-valid) | Info | Checks that everyone with Braintrust access is an active employee on the People page. |
    | [Offboarded users should not have active access](/integrations/braintrust/offboarded-users-should-not-have-active-access) | High | Checks that offboarded employees no longer have active Braintrust access. |
  </Tab>

  <Tab title="Useful links">
    | Topic | Link |
    | - | - |
    | Setup | [Braintrust authentication](https://www.braintrust.dev/docs/admin/authentication) |
    | Remediation | [Organizations](https://www.braintrust.dev/docs/admin/organizations) · [Access control](https://www.braintrust.dev/docs/admin/access-control) |
    | General | [Braintrust](https://www.braintrust.dev) |
    | DSALTA | [Connection error messages](/troubleshooting/connection-error-messages) |
  </Tab>
</Tabs>
