Overview
Anthropic Tenant Restrictions let a proxy allowlist organization IDs. Your proxy injectsanthropic-allowed-org-ids on Claude traffic. Anthropic then allows only those orgs for sign-in and API use.
Formal adds that header with a request-stage rewrite . Users on the Formal Endpoint can sign in only with your Anthropic org. Personal Claude accounts and other orgs receive a 403 from Anthropic.
This guide uses the Formal Endpoint on macOS.
Find your Anthropic organization ID
You need the UUID Anthropic shows for your org.1
Open Anthropic settings
For Enterprise, go to Settings → Account, or Organization settings → Organization. For Console orgs, go to Settings → Organization.
2
Copy the Organization ID
Copy the UUID. It looks like
000a0000-a00a-00a0-a000-000000000000.Route Anthropic traffic through Formal
The Formal Endpoint must intercept Anthropic requests so the rewrite can run.1
Enable the transparent proxy
On macOS, install and start the transparent proxy:Verify: the status command reports that the proxy is running.
2
Connect the Anthropic resource
anthropic with your resource name from formal ls.api.anthropic.com. The Endpoint intercepts that hostname and applies policies.
Create the rewrite policy
The policy mergesanthropic-allowed-org-ids into outgoing LLM request headers. object.union puts your value second, so it overwrites a client-supplied header.
Replace <YOUR_ORG_ID> with the UUID you copied.
- Web Console
- Terraform
- Navigate to Policies
- Click Create Policy
- In Choose a Template, select Restrict Anthropic Sign-Ins To One Org
- Replace
<YOUR_ORG_ID>with the UUID you copied - Click Create Policy to save
Verify
Verify an allowed org:- Sign in to Claude with an account in your Anthropic org.
- Send a Messages API request, or use Claude Code as usual.
- Open Logs and confirm the rewrite ran.
triggered_policies.type:rewrite on LLM requests. Sent headers should include anthropic-allowed-org-ids with your UUID.
Verify a blocked org:
Sign in with a personal Claude account, or call the API with a key from another org. Anthropic should return HTTP 403:
<YOUR_ORG_ID>. HTTP 403 tenant_restriction_violation otherwise.
Troubleshooting
Personal accounts still sign in
Personal accounts still sign in
Possible causes:
- Transparent proxy or
formal connectis not active - Policy is Draft or Dry-run, not Active
- Traffic uses a host you do not intercept (
claude.aivsapi.anthropic.com)
- Run
formal transparent-proxy status - Set the policy to Active
- Confirm Formal intercepts the Anthropic hostname the app uses
Requests return 403 tenant_restriction_violation
Requests return 403 tenant_restriction_violation
Possible causes:
- The UUID is not the org that owns the account or API key
- Extra spaces or quotes in the header value
- You are testing with a personal account (this is expected)
- Re-copy the Organization ID from Anthropic settings
- Keep a single UUID string in the header array
- Sign in with an account in that org
Requests return 400 for the header
Requests return 400 for the header
Possible causes:
- More than one
anthropic-allowed-org-idsheader on the request - Multiple array elements instead of a comma-separated string
- Use
object.unionso Formal overwrites the header - Put every org ID in one comma-separated value
Next Steps
LLM Resources
Proxy Anthropic and other LLM APIs
Rewrite Action
Header rewrite reference
LLM Policy Inputs
Request-stage LLM fields and examples
Formal Endpoint
Enable the transparent proxy