Capabilities
The DIAL Bedrock Adapter does more than call Bedrock models: it picks the right Claude integration, applies Bedrock guardrails and latency modes, caches prompts, balances models across AWS accounts, reaches Claude through the Anthropic API, and speaks the native Anthropic Messages API. This reference describes each capability and the DIAL Core settings behind it. It is for platform engineers who tune Bedrock models in DIAL; it assumes you know Supported models.
Claude clients
The adapter reaches Claude on Bedrock through one of three integrations, chosen by AWS_CLAUDE_DEFAULT_CLIENT or per upstream by extraData.claude_client:
| Client | Integration |
|---|---|
legacy (default) | The legacy Amazon Bedrock integration for Claude |
mantle | The current Claude in Amazon Bedrock integration, which Anthropic recommends for new setups. It counts prompt tokens exactly, and needs the bedrock-mantle:CountTokens IAM permission. |
converse | The Bedrock Converse API |
Configurable models
Models take extra settings in custom_fields.configuration of the chat request; GET /openai/deployments/<model id>/configuration returns the JSON Schema.
| Models | Setting | Effect |
|---|---|---|
| Converse API models | performanceConfig.latency | standard, or optimized for Bedrock's latency-optimized mode, where the model supports it |
| Converse API models | guardrailConfig | Applies a Bedrock guardrail to the request |
| Claude | Extended thinking, reasoning level, beta flags, citations | See the Anthropic adapter |
| Stability AI | aspect_ratio, negative_prompt | Image shape, from 16:9 to 9:21, and a negative prompt |
Bedrock guardrails
{
"messages": [{ "role": "user", "content": "hello" }],
"custom_fields": {
"configuration": {
"guardrailConfig": {
"guardrailIdentifier": "<GUARDRAIL_ID>",
"guardrailVersion": "<VERSION>",
"streamProcessingMode": "sync",
"trace": "enabled"
}
}
}
}
- The object matches the Converse API's
GuardrailStreamConfiguration. - When the guardrail intervenes, the adapter answers with an error of code
content_filter. The guardrail's trace is not attached, and evaluating only part of the request is not supported. - Claude uses the Anthropic SDK by default. A Converse API setting, such as
performanceConfigorguardrailConfig, switches the request to the Converse API, which dropstool_choice=noneand the Claude configuration.
For guardrails that DIAL applies to every model, see Guardrails.
Prompt caching
| Kind | Models | How to turn it on |
|---|---|---|
| Manual | Converse API models and Claude 3 models that support caching | Set features.cacheSupported: true on the DIAL Core model, and mark cache breakpoints in tools or messages with custom_fields.cache_breakpoint. |
| Automatic | Claude through the Anthropic API only | Set features.autoCachingSupported: true, and optionally preset a top-level breakpoint in defaults. |
{
"role": "system",
"content": "<LONG_SYSTEM_PROMPT>",
"custom_fields": { "cache_breakpoint": {} }
}
With caching on, endpoint becomes a required identifier of each upstream; any unique values work, such as "1" and "2". Check the Bedrock prompt caching model list first.
Accounts, regions, and load balancing
Each upstream of a model can carry its own AWS account, role, region, and Claude client in extraData, so DIAL Core can balance one model across them:
"upstreams": [
{
"extraData": {
"region": "eu-west-1",
"claude_client": "mantle",
"aws_access_key_id": "<KEY_ID_1>",
"aws_secret_access_key": "<SECRET_1>"
}
},
{
"extraData": {
"region": "us-east-1",
"aws_assume_role_arn": "arn:aws:iam::123456789012:role/BedrockAccessAdapterRoleName"
}
}
]
extraData field | Overrides |
|---|---|
region | AWS_DEFAULT_REGION |
claude_client | AWS_CLAUDE_DEFAULT_CLIENT |
aws_access_key_id, aws_secret_access_key, aws_session_token | AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN |
aws_assume_role_arn | AWS_ASSUME_ROLE_ARN |
See Load balancing and upstreams for how Core picks an upstream.
Claude through the Anthropic API
An upstream with a key sends Claude requests to the Anthropic API at https://api.anthropic.com/v1/messages instead of Bedrock. Because the adapter knows Claude by its Bedrock ID, map the Claude API model name to it with compatible_model_id:
"<DIAL_MODEL_ID>": {
"type": "chat",
"endpoint": "<ADAPTER>/openai/deployments/claude-sonnet-4-5-20250929/chat/completions",
"upstreams": [
{
"key": "<ANTHROPIC_API_KEY>",
"extraData": { "compatible_model_id": "anthropic.claude-sonnet-4-5-20250929-v1:0" }
}
]
}
Without the mapping, the adapter answers 404. Bedrock and Anthropic API upstreams can sit side by side on one model.
Compatibility mode
When Bedrock releases a model version the adapter does not know yet, serve it through a known, compatible model. Set compatible_model_id on every upstream of the DIAL Core model:
"<DIAL_MODEL_ID>": {
"type": "chat",
"endpoint": "<ADAPTER>/openai/deployments/<NEW_BEDROCK_MODEL_ID>/chat/completions",
"upstreams": [
{ "extraData": { "compatible_model_id": "<SUPPORTED_BEDROCK_MODEL_ID>" } }
]
}
The request is processed as for the supported model, but sent to Bedrock with the new ID. Features only the new model has, such as a new input type, do not work until the adapter supports it natively. A mapping between models with different APIs, such as a chat and an image model, has no effect. The older COMPATIBILITY_MAPPING variable is deprecated in favor of this setting.
Anthropic Messages passthrough
The adapter serves the native Claude API at /anthropic, so clients built on the Anthropic SDK, such as Claude Code, reach Claude on Bedrock without an Anthropic API key. Requests carry Bedrock model names, including cross-region ones, not Claude API aliases. Endpoints Bedrock does not implement answer 404. To use Claude Code through DIAL, see Claude Code.
Anthropic Messages to Chat Completions translator
The translator lets an Anthropic-native client use a model that speaks only Chat Completions, such as a GPT model. It takes an Anthropic Messages request at /openaiChatCompletions/anthropic/v1/messages, converts it, sends it back to DIAL Core at <DIAL_URL>/openai/v1/chat/completions, and converts the answer back. It never calls Bedrock, and it needs DIAL_URL.
"gpt-5.5": {
"type": "chat",
"interfaces": {
"openaiChatCompletions": { "base_url": "<OPENAI_ADAPTER>" },
"anthropicMessages": { "base_url": "<BEDROCK_ADAPTER>/openaiChatCompletions" }
},
"upstreams": [
{ "endpoint": "https://api.openai.com/v1/chat/completions", "key": "<OPENAI_API_KEY>" }
]
}
/openaiChatCompletions/legacycalls Core's per-deployment endpoint instead, with theapi-versionfromDIAL_API_VERSION.- Text, images, documents, search results, and custom function tools translate. Provider tools, such as web search, are sent as DIAL static functions. Files API sources and document URLs answer
400, and token counting is not supported.
The full mapping is in the translation guide. For how DIAL Core routes translated APIs, see Translators.
Further reading
- DIAL Bedrock Adapter configuration — credentials, session tags, and resource limits
- DIAL Bedrock Adapter supported models — every model ID
- Translators in DIAL Core — serve an AI API a model does not speak
- Connect Claude Code to DIAL — point Claude Code at DIAL's Anthropic Messages endpoint
- Guardrails — what interceptor-based guardrails enforce and where they apply
- Load balancing and upstreams — upstreams, tiers, weights, and retries behind a model