Multi-Platform Portability & Model Upgrades

Upgrading from Legacy Bedrock to the Current Mantle Surface

Bedrock now has two ways to reach Claude, and the newer one speaks Anthropic's native request shape. Moving over is mostly deletion — of translation code you no longer need — plus a handful of operational changes that are easy to miss.

Claude 3P 101 · Updated July 2026 · Unofficial guide

Amazon Bedrock serves Claude through two surfaces. The legacy one — InvokeModel and Converse on the bedrock-runtime endpoint — wraps Claude in AWS API conventions: ARN-versioned model identifiers, a "anthropic_version": "bedrock-2023-05-31" body field, and AWS event-stream encoding for streaming. The current surface, "Claude in Amazon Bedrock," serves Anthropic's Messages API directly at https://bedrock-mantle.{region}.api.aws/anthropic/v1/messages with the same request body shape as the first-party API and standard SSE streaming. The legacy surface remains available, but current-generation models are pushing the decision: Claude Sonnet 5 is not on the legacy surface at all, and Fable 5, Opus 4.8, and Opus 4.7 have no ARN-versioned IDs.

The code changes

Legacy surfaceCurrent (Mantle) surface
Python clientAnthropicBedrockAnthropicBedrockMantle(aws_region="us-east-1")
Model IDsglobal.anthropic.claude-opus-4-6-v1, us.anthropic.claude-sonnet-4-5-20250929-v1:0anthropic.claude-opus-4-8, anthropic.claude-fable-5, anthropic.claude-sonnet-5
Version markeranthropic_version body field (bedrock-2023-05-31)Standard Anthropic request shape
StreamingAWS event-stream encodingStandard SSE
Endpoint / IAMbedrock-runtime; bedrock:InvokeModel etc.bedrock-mantle; bedrock-mantle:CreateInference

With the SDK, the visible diff is small:

from anthropic import AnthropicBedrockMantle

client = AnthropicBedrockMantle(aws_region="us-east-1")
msg = client.messages.create(
    model="anthropic.claude-opus-4-8",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)

Credentials keep working unchanged: the client resolves them via the standard AWS precedence — constructor args, env vars, config files, SSO, roles, instance metadata. Note the ID form changes twice: the routing prefix (global./us.) disappears, and 4.6+ models go dateless. Routing is now chosen by endpoint configuration — the current surface offers global endpoints (no premium) and regional endpoints (10% premium, for data residency) — rather than by editing the model ID string. One behavioral note if you relied on it: the legacy Converse API needed citations enabled for full visual PDF understanding; check your PDF paths as part of validation.

The operational changes people miss

Migration order that works: stand up IAM and (if used) VPC endpoints for bedrock-mantle → rebuild logging against CloudWatch/CloudTrail → swap the client and model IDs behind your provider factory → run both surfaces in parallel on a traffic slice → verify quotas, latency, and audit records → retire the legacy path.

Where to go next

For the ID mechanics in detail, read the anthropic. prefix rule. If you are weighing Bedrock against Anthropic-operated options on AWS, the legacy API comparison and the Claude Platform on AWS migration guide frame the alternatives.

Sources