Data residency
Claude Platform on AWS supports the following inference geographies:
-
US: Inference stays within US data centers. A 1.1x pricing multiplier applies.
-
Global: Inference may route to any Anthropic-operated data center worldwide. Standard pricing applies.
Set the inference geography per request with the inference_geo parameter:
Note
The inference_geo parameter is supported on Claude Opus 4.6, Claude Sonnet 4.6, and later models. Requests with inference_geo on Claude Opus 4.5, Claude Sonnet 4.5, or Claude Haiku 4.5 return a 400 error. See Data residency
Shell
curl "https://aws-external-anthropic.us-west-2.api.aws/v1/messages" \ --aws-sigv4 "aws:amz:us-west-2:aws-external-anthropic" \ --user "$AWS_ACCESS_KEY_ID:$AWS_SECRET_ACCESS_KEY" \ -H "x-amz-security-token: $AWS_SESSION_TOKEN" \ -H "content-type: application/json" \ -H "anthropic-version: 2023-06-01" \ -H "anthropic-workspace-id: $ANTHROPIC_AWS_WORKSPACE_ID" \ -d '{ "model": "claude-sonnet-4-6", "max_tokens": 1024, "inference_geo": "us", "messages": [ {"role": "user", "content": "Hello!"} ] }'
Python
from anthropic import AnthropicAWS client = AnthropicAWS(aws_region="us-west-2") message = client.messages.create( model="claude-sonnet-4-6", max_tokens=1024, inference_geo="us", messages=[{"role": "user", "content": "Hello!"}], ) print(message)
TypeScript
import AnthropicAws from "@anthropic-ai/aws-sdk"; const client = new AnthropicAws({ awsRegion: "us-west-2" }); const message = await client.messages.create({ model: "claude-sonnet-4-6", max_tokens: 1024, inference_geo: "us", messages: [{ role: "user", content: "Hello!" }] }); console.log(message);
C#
using Anthropic; using Anthropic.Aws; var client = new AnthropicAwsClient(new() { AwsRegion = "us-west-2" }); var message = await client.Messages.Create(new() { Model = "claude-sonnet-4-6", MaxTokens = 1024, InferenceGeo = "us", Messages = [new() { Role = "user", Content = "Hello!" }] }); Console.WriteLine(message);
Go
client, err := anthropicaws.NewClient(context.Background(), anthropicaws.ClientConfig{}) if err != nil { panic(err) } message, err := client.Messages.New(context.Background(), anthropic.MessageNewParams{ Model: anthropic.ModelClaudeSonnet4_6, MaxTokens: 1024, InferenceGeo: anthropic.String("us"), Messages: []anthropic.MessageParam{ anthropic.NewUserMessage(anthropic.NewTextBlock("Hello!")), }, }) if err != nil { panic(err) } fmt.Println(message)
Java
import com.anthropic.aws.backends.AwsBackend; import com.anthropic.client.AnthropicClient; import com.anthropic.client.okhttp.AnthropicOkHttpClient; import com.anthropic.models.messages.Message; import com.anthropic.models.messages.MessageCreateParams; import com.anthropic.models.messages.Model; import software.amazon.awssdk.regions.Region; AnthropicClient client = AnthropicOkHttpClient.builder() .backend(AwsBackend.builder().region(Region.of("us-west-2")).build()) .build(); Message message = client.messages().create( MessageCreateParams.builder() .model(Model.CLAUDE_SONNET_4_6) .maxTokens(1024) .inferenceGeo("us") .addUserMessage("Hello!") .build() ); IO.println(message);
PHP
use Anthropic\Aws\Client; $client = new Client(awsRegion: 'us-west-2'); $message = $client->messages->create( model: 'claude-sonnet-4-6', maxTokens: 1024, inferenceGeo: 'us', messages: [['role' => 'user', 'content' => 'Hello!']], ); echo $message;
Ruby
require "anthropic" client = Anthropic::AWSClient.new(aws_region: "us-west-2") message = client.messages.create( model: "claude-sonnet-4-6", max_tokens: 1024, inference_geo: "us", messages: [{ role: "user", content: "Hello!" }] ) puts message
If you omit inference_geo, the request defaults to global.
Workspace-level inference geography controls (allowed_inference_geos and default_inference_geo) are not available on Claude Platform on AWS. Set inference_geo on each request instead.