Skip to content

Search Models API

Discover available models by capability — filter by modality, route, region, streaming support, Batch API support, or legacy status. This endpoint is purpose-built for AI agents that need to identify the right model ID before invoking another endpoint.

Browsing rather than calling?

The Models page publishes the same catalogue as an interactive table — with AWS prices, regional availability and public leaderboard scores — before you have a deployment.

Quick Start

Endpoint Method MCP Tool
/search_models GET search_models

How It Works

All query parameters are optional. Parameters combine with AND logic — only models matching every supplied filter are returned. Results are sorted by model ID. With no filters, every active (non-legacy) model is returned (see the legacy note below for deprecated-model lookups).

Agent workflow: call search_models first to obtain the correct model ID, then pass it to the target endpoint. To compare costs before picking, pass the shortlisted IDs to the Model Pricing API.

Query Parameters

Parameter Type Description
input_modalities string Repeatable. Filter by input modality: TEXT, IMAGE, VIDEO, AUDIO, SPEECH
output_modalities string Repeatable. Filter by output modality: TEXT, IMAGE, VIDEO, SPEECH, EMBEDDING, RERANKING, MODERATION
route string Filter to models supporting a route path (e.g. /v1/chat/completions) or an MCP tool name (e.g. openai_chat_completion) — both formats are accepted transparently
region string Filter to models available in a specific AWS region (e.g. us-east-1)
streaming boolean true = streaming-capable models only, false = non-streaming only
batch boolean true = models advertised for the Batch API only, false = the rest. Best effort — see the note below.
legacy boolean true = deprecated models only, false = active models only. Deprecated models are excluded when omitted.

Modality values are case-insensitive

TEXT, text, and Text are all accepted.

Batch support is advertised on a best-effort basis

batch is a discovery hint, not a guarantee, and it is never used to reject a request: a batch naming a model that is not advertised is still submitted, and only the backend decides. So a model with batch: false — or with no batch field at all — may well run a batch successfully, and the authoritative answer is what you get back when you submit one. Treat it as a shortlist to start from, not as a list of the only models that work.

Legacy models are excluded by default

Deprecated models are left out of the results unless you pass legacy=true. Pass it if you specifically need to look up a deprecated model, for example to check its replacement — it returns deprecated models only, not the active ones plus the deprecated ones. Combine both calls (with and without legacy=true) if you need the full catalogue.

Response Fields

Each item in the returned list is a ModelDetails object:

Field Description
id Amazon Bedrock model ID — pass this to other endpoints
name Human-readable model name
provider Model provider (e.g. Anthropic, Amazon, Meta)
service AWS service serving the model: AWS Bedrock Runtime, AWS Bedrock Mantle, AWS Comprehend, AWS Polly, or AWS Transcribe
input_modalities List of accepted input types
output_modalities List of produced output types
aliases Alternate model names accepted by the model parameter of the other endpoints (if any)
supported_routes API routes this model can be used with
supported_mcp_tools MCP tool names this model supports
regions AWS regions where this model is available
response_streaming Whether streaming responses are supported
batch true = advertised for the Batch API; false = not advertised; absent = unknown. Best effort — see the note above
legacy true = deprecated model; false or absent = active
start_of_life_time GA date, if known
end_of_life_time Deprecation date, if known
legacy_time Date the model was marked legacy, if known
public_extended_access_time Extended public-access end date, if known
inference_profiles Per-region inference profile IDs as a region → profile ID mapping (if any)

Examples

The curl examples below use a $BASE variable set to your scheme and host — native routes such as /search_models are not prefixed:

export BASE="https://your-host"

All models accepting TEXT input:

curl -G "$BASE/search_models" \
  --data-urlencode "input_modalities=TEXT" \
  -H "Authorization: Bearer $API_KEY"

Image-generation capable models — route path or MCP tool name, both work:

# Using the API route path
curl -G "$BASE/search_models" \
  --data-urlencode "route=/v1/images/generations" \
  -H "Authorization: Bearer $API_KEY"

# Using the MCP tool name — same result
curl -G "$BASE/search_models" \
  --data-urlencode "route=openai_image_generation" \
  -H "Authorization: Bearer $API_KEY"

Active chat models (legacy models are excluded by default):

curl -G "$BASE/search_models" \
  --data-urlencode "route=openai_chat_completion" \
  -H "Authorization: Bearer $API_KEY"

Active streaming models in us-east-1:

curl -G "$BASE/search_models" \
  --data-urlencode "region=us-east-1" \
  --data-urlencode "streaming=true" \
  -H "Authorization: Bearer $API_KEY"

Chat models advertised for the Batch API:

curl -G "$BASE/search_models" \
  --data-urlencode "route=openai_chat_completion" \
  --data-urlencode "batch=true" \
  -H "Authorization: Bearer $API_KEY"

Look up a deprecated model (see the legacy=true note above):

curl -G "$BASE/search_models" \
  --data-urlencode "route=openai_chat_completion" \
  --data-urlencode "legacy=true" \
  -H "Authorization: Bearer $API_KEY"

Status Codes

Status Cause
200 Success — valid filters that match zero models still return 200 with an empty list
400 Unrecognized filter value: unknown modality name, route path, MCP tool name, or a region where no model is available

Empty list vs. 400

A 400 is returned when a filter value is completely unrecognized (e.g. a typo in a modality name) or when the requested region serves no model at all. Otherwise, a combination of filters that happens to match zero models still returns 200 with an empty list.

Using search_models as an MCP Tool

When MCP is enabled, search_models is exposed as an MCP tool under the same name. AI agents should call it before any other tool to identify which model ID to use.

The route parameter accepts either format — agents can pass the MCP tool name they intend to call next without needing to know the corresponding HTTP path:

{
  "tool": "search_models",
  "arguments": {
    "route": "openai_chat_completion"
  }
}

This is the preferred tool for model discovery — it returns richer metadata than openai_model_list or anthropic_model_list and supports capability-based filtering so agents can select the most appropriate model for their task.

Always include search_models in your MCP tool set

When configuring MCP_INCLUDE_TOOLS, always add search_models so agents can discover the right model ID dynamically rather than relying on hardcoded values. See Operations Configuration → MCP for details.