Model Pricing API¶
Query the exact AWS unit prices for one or more models, straight from the same AWS Price List catalog the server uses for request cost tracking. Purpose-built for cost-aware model selection: shortlist models with search_models, then compare their price cards in one call.
Quick Start¶
| Endpoint | Method | MCP Tool |
|---|---|---|
/model_pricing |
GET | model_pricing |
How It Works¶
Each returned row is one published AWS price: a billed dimension (same vocabulary as the request-log usage entries) plus its published variants — service tier, prompt-cache write TTL, serving profile, media spec, and long-context bucket. unit_price is an exact decimal string per one billed unit (token, image, second, character, request, search unit).
By default the card reflects your server's configuration: only the configured Bedrock regions, each model's default service tier, and its effective serving profile (routing) are returned, with the same fallbacks billing applies (a tier or routing without a distinct published rate falls back to the standard/plain row). Pass all_prices=true for the full published price table, and explicit region/tier/routing filters to override any axis in either mode.
Prices are indexed eagerly: models not currently accessible to your account can still be priced. An empty prices list means AWS publishes no rows for that model (or none match the filters). A missing variant row means AWS publishes no distinct rate for it — billing then falls back the same way cost tracking does.
The endpoint is a pure in-memory read of the loaded catalog — no AWS call at request time. It requires cost tracking to be enabled (COST_TRACKING=true), and returns a retry-later 503 while the catalog is still loading after startup.
Query Parameters¶
All parameters are optional and combine with AND logic.
| Parameter | Type | Description |
|---|---|---|
model |
string |
Repeatable. Model IDs or aliases to price; omit for the full list of available models |
region |
string |
Only prices for this AWS region (e.g. us-east-1) |
tier |
string |
Only this service tier: standard, flex, priority, batch |
dimension |
string |
Repeatable. Only these billed dimensions (e.g. input_tokens, output_tokens, output_images) |
variants |
boolean |
false = base price card only: standard tier without cache-TTL, routing, or long-context rows (media spec rows are kept) |
currency |
string |
Only prices in this ISO currency code, case-insensitive; must be a currency present in the catalog (e.g. USD, EUR on EUSC) |
routing |
string |
Only this published serving-profile price variant: global, latency. Row routing values enriched for display (geography prefixes, AWS regions) cannot be filtered on — use region for those |
context |
string |
Only this context-length bucket: long (prompts beyond 200K tokens) |
all_prices |
boolean |
true = the full published price table; false (default) = only the prices matching the server's configuration |
Response Fields¶
One ModelPricing object per requested model, in request order (duplicates removed); with no model filter, one per available model, sorted by ID:
| Field | Description |
|---|---|
id |
The model ID as requested |
service |
AWS service/API the prices apply to (e.g. bedrock-runtime) |
default_tier |
Service tier this server applies to the model by default (DEFAULT_MODEL_SERVICE_TIERS) |
default_routings |
Serving profiles this server can use for the model across its configured regions, in configured-region order: global, geography prefixes (eu, us, …), or AWS regions |
prices |
Price rows, sorted by region then remaining axes; empty when AWS publishes none |
Each row in prices (axes are omitted when not applicable):
| Field | Description |
|---|---|
region |
AWS region the price applies to |
dimension |
Billed dimension — same names as the usage log entries |
tier |
Service tier: standard, flex, priority, batch |
cache_ttl |
Prompt-cache write TTL bucket (5m, 1h), when distinctly priced |
routing |
Serving profile: global (global cross-region inference), a geography prefix like eu/us (regional cross-region inference), an AWS region (single-region inference), or latency for the latency-optimized variant |
spec |
Media bucket, e.g. image resolution:quality (1024:standard) or a modality qualifier |
context |
long for the beyond-200K-tokens prompt rate |
unit_price |
Exact plain-decimal price per one billed unit (no exponent, no trailing zeros) |
currency |
ISO currency code (USD commercially, EUR on EUSC) |
Examples¶
Base price card of a shortlist:
curl -G "$BASE/model_pricing" \
--data-urlencode "model=anthropic.claude-sonnet-4-5-20250929-v1:0" \
--data-urlencode "model=amazon.nova-pro-v1:0" \
--data-urlencode "variants=false" \
-H "Authorization: Bearer $API_KEY"
Base price card of every available model:
curl -G "$BASE/model_pricing" \
--data-urlencode "variants=false" \
-H "Authorization: Bearer $API_KEY"
Token rates in one region:
curl -G "$BASE/model_pricing" \
--data-urlencode "model=amazon.nova-pro-v1:0" \
--data-urlencode "region=us-east-1" \
--data-urlencode "dimension=input_tokens" \
--data-urlencode "dimension=output_tokens" \
-H "Authorization: Bearer $API_KEY"
Response (trimmed):
[
{
"id": "amazon.nova-pro-v1:0",
"service": "bedrock-runtime",
"default_tier": "standard",
"default_routings": ["us"],
"prices": [
{"region": "us-east-1", "dimension": "input_tokens", "tier": "standard", "routing": "us", "unit_price": "0.0000008", "currency": "USD"},
{"region": "us-east-1", "dimension": "output_tokens", "tier": "standard", "routing": "us", "unit_price": "0.0000032", "currency": "USD"}
]
}
]
Status Codes¶
| Status | Cause |
|---|---|
200 |
Success — a model with no published price, or no row matching the filters, still returns 200 with an empty prices list |
400 |
Unknown tier, dimension, routing, or context filter value |
503 |
Model pricing is not available on this server, or the price catalog is not loaded yet (retry later) |
Using model_pricing as an MCP Tool¶
When MCP is enabled, model_pricing is exposed as an MCP tool under the same name. The intended agent workflow:
- Call
search_modelsto shortlist model IDs for the task. - Call
model_pricingwith the shortlist and compare. - Keep responses small: use
variants=falseanddimensionfilters.
{
"tool": "model_pricing",
"arguments": {
"model": ["anthropic.claude-sonnet-4-5-20250929-v1:0", "amazon.nova-pro-v1:0"],
"variants": false,
"dimension": ["input_tokens", "output_tokens"]
}
}
Prices are strings on purpose
unit_price values are exact decimal strings ("0.000003"), never floats — JSON floats cannot represent small per-token rates without exponent notation or rounding noise. Parse them with a decimal type for arithmetic.