Federated connections are managed at
claude.ai/admin-settings/claude-tag: open Federated cloud access in the left navigation. Changing them needs an organization Owner, or an admin with full Claude Tag management permission.- The connection is in an Access bundle attached to the channel’s scope. For a gateway, the scope’s custom instructions also name the gateway’s address, so Claude knows the gateway exists.
- You tested in a new thread. A thread already running isn’t told about a connection added after it started; ask Claude for the service by name, or send
@Claude !restartat the channel’s top level.
Messages in the console
Most dialog messages say what to do. The table adds what the message doesn’t. The one message that needs more, “The check didn’t pass”, has its own entry below the table, followed by what removing and reconnecting a gateway does.The check didn’t pass
What you see The Connect a gateway dialog shows “The check didn’t pass. Claude couldn’t reach the gateway, or the gateway didn’t reject a token whose subject isn’t your organization while accepting one that is. Fix the gateway and run the check again, or skip the check and record why.” What it means The connection check sent two requests to your gateway and didn’t get the two answers it needs. The gateway must reject a token whose subject isn’t your organization, and it must accept a token for your Control subject. The console shows this one message for every failed check, so it doesn’t say which request failed. If this was a new address, nothing was registered. How to resolve The check sends an emptyPOST to the address itself, with nothing added after the host, twice. Work through the causes in order.
A 503 from the gateway usually means it can’t reach
https://identity.anthropic.com to fetch the keys. For a gateway that rejects every token, Your gateway rejects every token lists each setting to compare. If you deployed Anthropic’s sample gateway, its config.yaml must carry your real organization ID in the control-subject entry.
If the gateway can’t be fixed right away, select the Skip the check option, enter a Reason for skipping, and click Connect without the check. To run the check later, remove the gateway and connect it again; see Removing and reconnecting a gateway.
Removing and reconnecting a gateway
In the Gateways table, click Remove in the gateway’s row. Claude stops using the gateway at once. A connection that used the gateway stays in its Access bundle but stops working, and Claude reports request blocked: this credential’s audience isn’t registered as a gateway for this organization until the gateway is registered again. To reconnect, click Connect a gateway in the Gateways section and enter the same address. Registering the address restores the existing connection, which is still in the bundle, so don’t add it to the bundle again; the dialog refuses if you try.Errors Claude reports in the thread
When a request from a channel can’t be sent with a federated credential, it fails with an HTTP status and a one-line reason, which Claude usually quotes. Reasons with HTTP 403 and 502 end with the connection’s name in parentheses, for example("gateway.example.com"). The two 503 reasons don’t name the connection.
Messages that begin “request blocked” come with HTTP 403. The request was refused on purpose, and retrying won’t help. A 503 is temporary. A 502 usually means AWS, Google Cloud, or your authorization server refused the token exchange. A response from your gateway or from the cloud API itself reaches Claude as is, so those show as whatever status the other side returned.
request blocked: this credential only works in channel sessions, not personal ones
What you see Claude’s request got HTTP 403 with this reason. What it means Federated connections work only in Slack channels, where Claude acts under your organization’s agent identity. The request came from a direct message, or from another session running under a person’s own account, which has no agent identity for the token to name. How to resolve Use the connection from a channel whose scope has the bundle attached. No setting enables it in direct messages.request blocked: this credential’s audience isn’t registered as a gateway for this organization
What you see Claude’s request got HTTP 403 with this reason. What it means The gateway was removed from the Gateways table, but its connection is still in an Access bundle. Claude can’t get a token for an address that isn’t registered. How to resolve To keep the gateway, register the same address again; see Removing and reconnecting a gateway. To drop it, in Access bundles, open the bundle’s Credentials tab, open the ⋮ menu on the connection’s row, and choose Delete.request blocked: Google (gcp) credentials aren’t enabled for this organization
What you see Claude’s request got HTTP 403 with this reason. What it means A Google Cloud identity is connected in a bundle, but Google Cloud federation is off for your organization. How to resolve Contact your Anthropic account team with the details under Contact Anthropic.request blocked: this credential has restrict_credential_minting set, so Google’s credential-minting endpoints are refused
What you see Claude’s request got HTTP 403 with this reason. What it means The Google Cloud identity was connected with Block requests that mint new credentials selected, and Claude tried to call a Google endpoint that creates keys, tokens, or other credentials. The block worked as intended. How to resolve Usually nothing: the block worked. If Claude needs that call, review the identity’s IAM permissions first, because the block is a safeguard on top of IAM and not a replacement for it. The setting is chosen when the identity is connected, so in the Cloud roles table, click Remove in the identity’s row, and connect the identity again with the Block requests that mint new credentials checkbox cleared.request blocked: this Google credential only works for requests to Google API hosts
What you see Claude’s request got HTTP 403 with this reason. What it means Claude tried to send a Google Cloud credential to a host Google doesn’t serve. The credential is attached only togoogleapis.com, its subdomains, and subdomains of clients6.google.com.
How to resolve
If the target is a Google API, check the host Claude used. If it isn’t, the request needs a different connection.
request blocked: this credential’s allowed hosts include its own token endpoint
What you see Claude’s request got HTTP 403 with the reason “request blocked: this credential’s allowed hosts include its own token endpoint; an admin must remove the token endpoint’s host from the allowed hosts”. What it means The authorization server connection’s allowed hosts cover the token endpoint’s own host, for example through a wildcard such as*.example.com that covers auth.example.com. The connect dialog refuses this when the connection is created, and so does every later edit of its allowed hosts, so the message isn’t expected; the same rule is checked again on every request. The access token your server returns must never be sent back to the server that issued it, so every request with this connection is refused until an admin fixes it.
How to resolve
In Access bundles, open the bundle’s Credentials tab, open the ⋮ menu on the connection’s row, choose Edit, and in the Edit connection dialog set Allowed hosts to only the APIs Claude calls with the returned token, for example api.example.com, with no wildcard that covers the token endpoint’s host. If the API and the token endpoint share a host, use a different host for one of them.
credential injection temporarily unavailable; retry the request
What you see Claude’s request got HTTP 503 with this reason, or with “injection capacity exceeded; retry the request”. What it means Something was briefly unavailable. Anthropic’s identity service, your cloud provider’s token exchange, or your authorization server answered with a server error (5xx) or 429, or timed out, or a failure moments earlier is still being backed off. How to resolve Ask Claude to retry. If one connection keeps failing this way, check that your authorization server or cloud provider is reachable and healthy, then contact your Anthropic account team with the details under Contact Anthropic.injection failed
What you see Claude’s request got HTTP 502 with the reasoninjection failed ("<connection name>").
What it means
Most often, the system Claude’s identity token was presented to refused the exchange. AWS refused AssumeRoleWithWebIdentity, Google Cloud’s token exchange refused the token, or your authorization server answered the grant with an error. Claude’s reply doesn’t say why; your own logs do.
How to resolve
Look up the refusal where it happened and fix the configuration it names.
Allow for log delivery delay before concluding there was no attempt. If your logs show none at the time of the request, the token wasn’t issued, and you should contact Anthropic with the details listed there. A gateway connection doesn’t produce this error. Your gateway’s own response reaches Claude, so Claude reports the status your gateway returned, usually 401 or 403; see Your gateway rejects every token.
The cloud API answers 403 after a successful exchange
What you see Claude reports a 403 from an AWS or Google Cloud API, with the provider’s own error body rather than a reason beginning “request blocked”. What it means The token exchange worked and Claude called the API with the exchanged credential, but the role or identity lacks permission for that action. For Google Cloud, the exchange always requests thecloud-platform scope, so IAM alone decides what the credential can do.
How to resolve
Grant the IAM permission to the AWS role, the Google Cloud service account, or the federated identity when no service account is named. For AWS, a 403 also makes Claude assume the role again on the next request, so a fix takes effect on the next try.
Rejections in your own logs
Your gateway rejects every token
What you see Every request from Claude gets 401 or 403 from your gateway, including the connection check’s token for the Control subject. What it means One of the standard checks is configured with the wrong value. Your gateway’s log of the failing check is the fastest route; if it logs nothing, work down the list. The values to compare against are shown in the Connect a gateway dialog before you enter an address, as described on Connect a gateway. How to resolveYour gateway sees the same token ID on many requests
What you see Requests within a few minutes of each other carry a token with the samejti. A gateway that treats a repeated jti as a replay rejects almost everything.
What it means
This is normal. Claude reuses one token for a session’s requests to the same gateway for about five minutes, or until your gateway answers 401, and then requests a new one. A plain 403 from your gateway doesn’t refresh the token. Exchanges are different: AWS, Google Cloud, and an authorization server each see a token once per exchange.
How to resolve
Don’t do per-request replay detection at a gateway. Rely on the signature, audience, expiry, and subject checks.
Your gateway, trust policy, or IAM binding pins a full agent subject
What you see One of two things. The connection check passed, but Claude’s requests from a channel get 403 from your gateway. Or a gateway mapping, AWS trust policy condition, or Google Cloud IAM binding that matched a full subject ending in/agent/cagt_... stopped matching after the Slack channel was deleted and recreated.
What it means
Your rule accepts only specific agents. The connection check’s Control subject is a reserved agent, so a rule listing it passes the check while rejecting real agents. And each channel’s agent has its own ID: deleting and recreating a channel creates a new agent, so a pinned subject no longer appears in any token. By default the sample gateway accepts only the subjects listed in its configuration, and it logs the verified subject of each agent it rejects.
How to resolve
If you pin exact subjects, keep the list current. Log the verified subject of each rejected request, add each new agent’s full subject to your rule (and, for a gateway, the Control subject with no access), and update the rule whenever a channel is deleted and recreated. The console doesn’t display agent IDs, so your own logs are where you learn them. If keeping the list current isn’t practical, accept every subject that starts with your Subject prefix, wimse://identity.anthropic.com/org/<your organization ID>/agent/, instead, which is the minimum form of the subject check. In the sample gateway, that is an organization_principals entry in config.yaml.
AWS refuses AssumeRoleWithWebIdentity
What you see Claude reportsinjection failed with HTTP 502, and CloudTrail shows an AssumeRoleWithWebIdentity event for the role with an error code.
What it means
STS refused to issue credentials for Claude’s token. The trust relationship between your role and Anthropic’s issuer isn’t right.
How to resolve
AWS credentials are reused for up to an hour for the same agent, so several threads’ requests can appear under one CloudTrail session, and a trust policy change takes effect only when those credentials expire or AWS answers a request with 403.
Google Cloud refuses the token exchange
What you see Claude reportsinjection failed ("<connection name>") with HTTP 502. Google’s token exchange rejected the token, or the service account impersonation that follows it was refused. Claude shows this one message for every refusal from Google, so the message doesn’t say which check failed.
What it means
The workload identity pool’s provider or attribute condition doesn’t accept the token, or the federated identity can’t act as the service account you named.
How to resolve
Google records the reason in your Cloud Audit Logs. The Security Token Service API entry covers the token exchange, and, if you named a service account, the IAM Service Account Credentials API entry covers the impersonation. Both are Data Access audit logs, which Google keeps off by default, as described under Verify the connection. If the logs were on and show no entry at the time of the request, the token wasn’t issued; see injection failed. Otherwise, work through the checks in order.
Your authorization server rejects the grant
What you see Claude reportsinjection failed with HTTP 502, and your authorization server’s log shows a POST to the token endpoint answered with a 4xx, typically {"error":"invalid_grant"}.
What it means
Your server didn’t accept Claude’s identity token as a JWT bearer assertion.
How to resolve
Claude doesn’t read
error_description, so put the detail in your server’s log rather than in the response.
Contact Anthropic
If no entry resolves the problem, contact your Anthropic account team and include:- Your organization name and the channel where it happened
- The time of the failing request, with the time zone
- The error text Claude reported, including the HTTP status and the connection’s name where the error shows one
- For a gateway, the line from your gateway’s log; for AWS, the CloudTrail event; for Google Cloud, the audit log entry; for an authorization server, the request and response your server logged
Related resources
- Federated cloud access overview: how the token works and which connection type to use
- Connect a gateway: the setup steps and the connection check in full
- Identity token reference: every claim, the lifetime, and key rotation
- Limits: counts, lengths, and lifetimes
- Troubleshoot Claude Tag setup: errors outside federated cloud access