Request for Model Catalog API to Support Agent-Based Systems

We currently leverage the existing Models API to enumerate available model IDs. However, for agent-based systems, the current endpoint lacks the capability-level metadata required for autonomous decision-making.

Today, our system must infer or externally maintain information such as supported modalities, tool compatibility, context limits, and operational constraints. This results in unnecessary token usage, duplicated effort, and increased system complexity, particularly as model offerings evolve.

We would like to propose an extension or complementary endpoint that exposes a structured, capability-aware model catalog, including for example:

  • Supported modalities (text, vision, audio, image generation)

  • Tool and structured output support

  • Context and output limits

  • Relevant constraints or recommended use cases

Such an endpoint would allow agents to dynamically query available models, build or refresh internal catalogs, and route tasks appropriately without repeated documentation lookup or trial-based probing. This would significantly improve efficiency and enable more autonomous, tool-aware agent behavior.

If a richer capability descriptor is already available internally or via an undocumented endpoint, we would appreciate guidance on accessing it. Otherwise, we believe this would be a valuable enhancement for developers building advanced agent and orchestration systems.

Cheers,
Kruel.ai

1 Like

Don’t try this in production…

#!/usr/bin/env python3
import os, httpx

model_id = "gpt-5.2-2025-12-11"
URL = f"https://api.openai.com/dashboard/models/{model_id}"

headers: dict[str, str] = (
    {
        "Content-Type": "application/json",
    }
    | {"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"}
    | {
        k: v for k, v in (
            ("openai-organization", os.environ.get("OPENAI_ORG_ID")),
            ("OpenAI-Project", os.environ.get("OPENAI_PROJECT_ID")),
        )
        if v
    }
)
with httpx.Client(
    http2=True, timeout=30.0, headers=headers, follow_redirects=True
) as client:
    model_dict = client.get(URL).json()
print(model_dict)

Response:

{
  "object": "model",
  "id": "gpt-5.2-2025-12-11",
  "supported_methods": [
    "chat.completions",
    "responses"
  ],
  "groups": [
    "gpt_5"
  ],
  "features": [
    "streaming",
    "function_calling",
    "parallel_tool_calls",
    "developer_message",
    "image_content",
    "response_json_object",
    "response_json_schema",
    "reasoning_effort",
    "detailed_reasoning_summary",
    "file_search",
    "web_search",
    "file_content",
    "code_interpreter",
    "image_generation",
    "custom_tools",
    "variable_verbosity",
    "reasoning_effort_none",
    "reasoning_effort_xhigh",
    "dev_environment_tools"
  ],
  "max_tokens": 100000
}

Full enums for you to figure out…

features = [
    "advanced_config",
    "audio",
    "auto_add_web_search",
    "code_interpreter",
    "custom_tools",
    "detailed_reasoning_summary",
    "dev_environment_tools",
    "developer_message",
    "file_content",
    "file_search",
    "function_calling",
    "image_content",
    "image_generation",
    "input_fidelity",
    "parallel_tool_calls",
    "reasoning_effort",
    "reasoning_effort_minimal",
    "reasoning_effort_none",
    "reasoning_effort_xhigh",
    "response_json_object",
    "response_json_schema",
    "streaming",
    "streaming_if_verified",
    "system_message",
    "variable_verbosity",
    "web_search"
]
groups = [
    "fine_tune",
    "gpt_3",
    "gpt_4",
    "gpt_4_1",
    "gpt_4o",
    "gpt_5",
    "reasoning"
]
supported_methods = [
    "audio.speech",
    "audio.transcription",
    "chat.completions",
    "completions",
    "embedding",
    "images",
    "realtime",
    "responses",
    "videos"
]