Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Model catalog

Lazu publishes the full set of models a given API key can access. Read this catalog at runtime instead of hardcoding model names — new models get added, old ones get deprecated, and which models a key can reach depends on the key's scope.

GET /api/models/catalog

curl https://api.lazu.ai/api/models/catalog \
  -H "Authorization: Bearer $LAZU_API_KEY"

Response (abridged):

{
  "object": "list",
  "data": [
    {
      "id": "gpt-4o-mini",
      "object": "model",
      "name": "gpt-4o-mini",
      "provider": "openai",
      "owned_by": "openai",
      "modality": {
        "input": ["text", "image"],
        "output": ["text"]
      },
      "capabilities": {
        "supports_function_calling": true,
        "supports_parallel_function_calling": true,
        "supports_vision": true,
        "supports_reasoning": false,
        "supports_response_schema": true,
        "supports_prompt_caching": true
      },
      "supported_endpoint_types": ["openai", "openai-response"],
      "supported_endpoints": [
        { "type": "openai", "path": "/v1/chat/completions", "method": "POST" },
        { "type": "openai-response", "path": "/v1/responses", "method": "POST" }
      ],
      "default_endpoint_type": "openai",
      "context_length": 128000,
      "max_output_tokens": 16384,
      "pricing": {
        "currency": "USD",
        "billing_type": "per_token",
        "input": 0.15,
        "output": 0.6,
        "cache_read": 0.075,
        "pricing_version": 3
      },
      "usage_capabilities": {
        "reported_dimensions": [
          "input",
          "output",
          "cache_read",
          "cache_write",
          "cache_write_5m",
          "cache_write_1h"
        ],
        "billable_dimensions": [
          "input",
          "output",
          "cache_read",
          "cache_write_5m"
        ],
        "response_fields": {
          "openai_compatible": [
            "usage.prompt_tokens_details.cached_tokens",
            "usage.prompt_tokens_details.cache_write_tokens",
            "usage.prompt_tokens_details.cache_write_5m_tokens"
          ],
          "request_detail": [
            "usage.dimensions",
            "billing.line_items",
            "provider_usage.raw_fields"
          ]
        }
      },
      "supported_parameters": [
        "tools",
        "tool_choice",
        "response_format",
        "cache_control"
      ],
      "parameters": {
        "model": { "type": "string", "required": true },
        "messages": { "type": "array", "required": true },
        "temperature": { "type": "float", "default": 1, "range": [0, 2] },
        "max_tokens": { "type": "integer", "default": 1024 },
        "stream": { "type": "boolean", "default": false }
      },
      "example": {
        "curl": "curl https://api.lazu.ai/v1/chat/completions ..."
      }
    },
    "..."
  ]
}

Picking a model

You wantFilter onCommon endpoint
Text chatmodality.output includes text/v1/chat/completions
Multimodal (vision)modality.input includes image/v1/chat/completions or /v1/responses
Reasoning (o-series)capabilities.supports_reasoning === true/v1/responses (recommended)
Embeddingssupported_endpoint_types includes embeddings/v1/embeddings
Tool / function callcapabilities.supports_function_calling === true/v1/chat/completions

Use default_endpoint_type unless your client SDK specifically needs a native provider endpoint (Anthropic's /v1/messages, Gemini's /v1beta/models/…:generateContent, etc.).

Usage and cache metadata

Each model includes usage_capabilities so production clients can discover which usage dimensions may appear before sending traffic. This matters for prompt caching because providers do not use one shared field set.

DimensionMeaning
cache_readCached input tokens read from an existing cache entry. In OpenAI-compatible responses this appears as usage.prompt_tokens_details.cached_tokens or usage.input_tokens_details.cached_tokens.
cache_writeCache creation/write tokens when the provider reports a total but not a TTL bucket.
cache_write_5mCache creation/write tokens for a 5-minute TTL bucket.
cache_write_1hCache creation/write tokens for a 1-hour TTL bucket.
cache_missCache misses reported separately by the provider, for example DeepSeek prompt_cache_miss_tokens.

Provider notes:

  • OpenAI-compatible cache reads use cached_tokens; OpenAI chat responses do not expose a separate cache-write token count.
  • Anthropic reports cache reads and cache creation, including 5-minute and 1-hour buckets when available.
  • Gemini reports cached content reads through cachedContentTokenCount.
  • Qwen/DashScope may report cached_tokens and cache creation fields, including Anthropic-compatible cache field names on some routes.
  • DeepSeek reports prompt_cache_hit_tokens and prompt_cache_miss_tokens; Lazu normalizes hits to cache_read and misses to cache_miss.

Use reported_dimensions to decide which fields may appear, and billable_dimensions to decide which dimensions can affect price for the current catalog price context.

Listing via /v1/models

If your SDK uses OpenAI-style models.list(), Lazu also serves a flatter OpenAI-compatible response at /v1/models:

curl https://api.lazu.ai/v1/models \
  -H "Authorization: Bearer $LAZU_API_KEY"

See Models list for the exact schema.

Pricing detail

Each catalog entry has a pricing object for the current API key's effective catalog price. See Pricing & lanes for how routing lane preferences affect the price returned for a key.