Skip to content

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:

  1. Call search_models to shortlist model IDs for the task.
  2. Call model_pricing with the shortlist and compare.
  3. Keep responses small: use variants=false and dimension filters.
{
  "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.