II.
ModelTransportProtocol JSON
Structured · livemodel-transport:bedrock-invoke
AWS Bedrock InvokeModel json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "model-transport:bedrock-invoke",
"_kind": "ModelTransportProtocol",
"_file": "compute/model-transport-protocols/bedrock-invoke.yaml",
"_cluster": "compute",
"attributes": {
"displayName": "AWS Bedrock InvokeModel",
"vendor": "Amazon Web Services",
"specUrl": "https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_InvokeModel.html",
"streamingFraming": "aws-event-stream",
"toolUseSchema": "Tool-use schema is delegated to the underlying model provider's\nnative body shape. For Anthropic models on Bedrock, the request /\nresponse body is a wire-compatible Anthropic Messages payload (with\nBedrock-specific fields removed: `model` is set via URL path, and\n`anthropic_version` is set in the body). Tool calls therefore\nappear as `tool_use` content blocks; tool results as `tool_result`\nblocks — identical to Anthropic Messages.\n",
"thinkingChannel": "content-block",
"cacheControl": "explicit",
"firstSpecVersion": "2023-09-28",
"currentSpecVersion": "2023-09-28",
"status": "standard",
"requestBodyShape": "POST /model/{modelId}/invoke\nPOST /model/{modelId}/invoke-with-response-stream\nHeaders:\n - `Content-Type: application/json`\n - `Accept: application/json` (for InvokeModel) or\n `application/vnd.amazon.eventstream` (for InvokeModelWithResponseStream)\n - AWS SigV4 `Authorization` header\nBody: opaque JSON payload defined by the underlying model provider.\nFor Anthropic Claude on Bedrock the body is the Anthropic Messages\nrequest shape with these adjustments:\n - `anthropic_version` (required, e.g. \"bedrock-2023-05-31\") instead of\n the `anthropic-version` header\n - no top-level `model` field (it is supplied via the URL `modelId`)\n - all other fields (`messages`, `system`, `max_tokens`, `tools`,\n `tool_choice`, `temperature`, `top_p`, `top_k`, `stop_sequences`,\n `thinking`, `metadata`) match Anthropic Messages\n",
"responseBodyShape": "Non-streaming (InvokeModel):\n HTTP 200, `application/json` — the full provider-native response\n payload as the response body. For Anthropic Claude this is the\n Anthropic Messages response (`{id, type, role, model, content,\n stop_reason, stop_sequence, usage}`).\nStreaming (InvokeModelWithResponseStream):\n HTTP 200, `application/vnd.amazon.eventstream` — AWS EventStream\n frames. Each frame carries a base64-encoded `bytes` field whose\n decoded payload is a JSON event in the provider-native streaming\n shape (e.g. Anthropic `message_start` / `content_block_delta` /\n `message_stop` events). Bedrock additionally injects a\n `amazon-bedrock-invocationMetrics` object on the terminal event\n (input/output token counts, latency).\n",
"streamingEventTypes": [
"chunk",
"message_start",
"content_block_start",
"content_block_delta",
"content_block_stop",
"message_delta",
"message_stop",
"ping",
"internalServerException",
"modelStreamErrorException",
"modelTimeoutException",
"validationException",
"throttlingException"
],
"toolCallWireFormat": "Provider-native. For Anthropic on Bedrock: a `tool_use` content\nblock on the response message:\n { \"type\": \"tool_use\", \"id\": \"toolu_...\", \"name\": \"<tool>\", \"input\": { ... } }\n",
"toolResultWireFormat": "Provider-native. For Anthropic on Bedrock: a `tool_result` content\nblock in a subsequent user-role message in the request `messages`\narray:\n { \"type\": \"tool_result\",\n \"tool_use_id\": \"toolu_...\",\n \"content\": string | ContentBlock[],\n \"is_error\"?: bool }\n",
"errorEnvelope": "Non-2xx response, `application/json` (Bedrock runtime error envelope):\n { \"message\": string,\n \"__type\": \"<ExceptionName>\" }\nCommon `__type` values: `ValidationException`, `AccessDeniedException`,\n`ThrottlingException`, `ServiceQuotaExceededException`,\n`ModelTimeoutException`, `ModelStreamErrorException`,\n`ModelNotReadyException`, `InternalServerException`.\nAWS request-id is returned in the `x-amzn-RequestId` response header.\n",
"cacheControlWireFormat": "Anthropic-on-Bedrock supports prompt caching using the same\n`cache_control` annotation as Anthropic Messages:\n { \"type\": \"text\", \"text\": \"...\", \"cache_control\": { \"type\": \"ephemeral\" } }\nUp to four cache breakpoints per request. Cache hit accounting is\nreported as `usage.cache_creation_input_tokens` and\n`usage.cache_read_input_tokens` on the response.\ncurrent Bedrock TTL options (default 5m; 1h availability varies\nby region/model).\n",
"rateLimitSignaling": "On HTTP 429 `ThrottlingException`: standard AWS retry semantics\napply. Bedrock does not document per-tenant remaining-budget\nheaders; clients should rely on exponential backoff and the\n`retry-after` header when present. Quota state is observable via\nCloudWatch service-quotas metrics rather than per-response headers.\n",
"reasoningWireFormat": "Provider-native. For Anthropic on Bedrock, extended thinking is\nrequested via `thinking: { type: \"enabled\", budget_tokens }` in the\nrequest body and returned as `thinking` / `redacted_thinking`\ncontent blocks on the response — identical to Anthropic Messages.\n",
"authHeaderFormat": "AWS Signature Version 4 over the request:\n `Authorization: AWS4-HMAC-SHA256 Credential=..., SignedHeaders=..., Signature=...`\n `x-amz-date: <ISO8601>`\n `x-amz-security-token: <session-token>` (for STS / role creds)\nNo API key. Endpoint: `https://bedrock-runtime.<region>.amazonaws.com`.\n",
"versioningHeader": "No protocol-version header. Provider-payload versioning is carried\nin-body (e.g. `anthropic_version: \"bedrock-2023-05-31\"` for\nAnthropic Claude). Bedrock control-plane API version is implicit\nin the signed endpoint.\n"
},
"outgoingEdges": [
{
"from": "model-transport:bedrock-invoke",
"to": "layer:3-transport",
"kind": "realizes",
"attributes": {}
},
{
"from": "model-transport:bedrock-invoke",
"to": "provider:aws-bedrock",
"kind": "served_by"
},
{
"from": "model-transport:bedrock-invoke",
"to": "model:claude-opus-4-7@current",
"kind": "spoken_by"
}
],
"incomingEdges": []
}