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

# Self-hosted multi-org data plane automation troubleshooting

> Troubleshoot span-scoped online scorers not running when multiple orgs share a self-hosted data plane.

> [!NOTE]
>
> **Applies to:**
>
> * Plan - Enterprise
> * Deployment - Self-hosted
> *
> * Use case - Resolve online scoring automations not firing on a self-hosted data plane when multiple Braintrust organizations share the same data plane

## Summary

An online scorer runs manually but its automation does not fire. The usual cause is a duplicate or missing `bt_data_plane_manager` service token when multiple orgs share one data plane. Invite the parent org's `bt_data_plane_manager` into the child org. If you've already minted a manager token in the child org, reach out to Braintrust engineering to remove the duplicate token so the invite will work.

## What is happening

When multiple orgs share a self-hosted data plane, automations require a single data plane manager token to be present and consistent across orgs. A child org with its own or a mismatched `bt_data_plane_manager` token can prevent automations from running.

**Test automation** runs the scorer against a recent matching row and shows results in the modal banner. **Test automation** does not write scoring spans to logs. The processing status panel fills only for trace-scoped rules. It stays empty for span-scoped automations. For span-scoped filters use `span_attributes.name = '...'` instead of `name = '...'`.

## Fix or suggestion

### Option 1: Invite the parent data plane manager (most common fix)

1. Open the parent org's ** Settings** > [** Service tokens**](https://www.braintrust.dev/app/~/configuration/service-tokens) and copy the manager id shown in the token row (the numeric id column shown in the UI). Do not use the invite-string value that looks like `bt::sp::custom::data_plane_manager-...`, use the numeric id displayed in the Service Tokens list.
2. Run the invite API from a machine with your API key:

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
curl -X PATCH "https://api.braintrust.dev/v1/organization/members" \
  -H "Authorization: Bearer $BRAINTRUST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"org_id": "<child_org_id>", "invite_users": {"ids": ["<manager_user_id>"]}}'
```

Replace `<child_org_id>` and `<manager_user_id>` with the child org id and the numeric manager id copied from the parent org Service Tokens page. Wrap your API key in the `BRAINTRUST_API_KEY` environment variable when running the command.

3. If a manager token was previously minted in the child org, contact Braintrust support to remove the duplicate `bt_data_plane_manager` token. The duplicate must be removed for the parent's invite to take effect.
4. In the child org, go to ** Settings** > [** Service tokens**](https://www.braintrust.dev/app/~/configuration/service-tokens) and confirm the `bt_data_plane_manager` entry matches the parent org manager id you copied.
5. Wait about one hour for backend caches to clear. Opening the child org Service Tokens page after the changes helps trigger the refresh.

### Option 2: Check instance variables and permissions (alternative)

1. Confirm your instance environment variables are set and correct for multi-org setups: `ORG_NAME`, `PRIMARY_ORG_NAME`, and `ALLOWED_ORG_IDS` (`ALLOWED_ORG_IDS` should list the org ids that are permitted on the same data plane).
2. Verify the invited `bt_data_plane_manager` id shown in the parent org matches the child org entry after you invite it.
3. If you see 500s when reprocessing traces, check for duplicate `bt_data_plane_manager` tokens and ask Braintrust to remove the extra token. Also confirm the service token has the required log update permissions for the org.

## How to confirm it worked

* In the automation modal click **Test automation**. The modal banner should show a test result such as `Scores for X matching logs`.
* Send new traces that match the span filter. Check the Logs page for scored spans. A span-scoped automation shows scores on the matching spans.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.