Skip to content

Models

GET /v1/models, the catalog of models providers can currently serve, with each model's context window and live pricing. It is the machine-readable version of the Models & pricing page.

This endpoint requires no authentication and is CORS-open (Access-Control-Allow-Origin: *):

curl https://api.keln.ai/v1/models
{
  "object": "list",
  "data": [
    {
      "id": "deepseek-ai/deepseek-v4.1-flash",
      "object": "model",
      "owned_by": "keln",
      "created": 1783468800,
      "added": 1790709351,
      "context_length": 1048576,
      "input_modalities": ["text", "image"],
      "reasoning": {
        "mandatory": false,
        "supported_efforts": ["none", "low", "high", "max"],
        "default_effort": "max"
      },
      "pricing": {
        "prompt": "0.0000003",
        "completion": "0.0000012",
        "input_cache_read": "0.000000036"
      },
      "performance": {
        "tps_p50": 64.2,
        "ttft_p50_ms": 520,
        "as_of": 1786000000
      }
    }
  ]
}

Fields

Field Meaning
id The model id you pass to /v1/chat/completions, the open ecosystem's own naming (org/model), canonically lowercase.
context_length The model's context window (prompt + output tokens), the number Keln enforces. Every listed model declares one, so treat the field as always present. Keln rejects oversized requests against this number before billing.
input_modalities Always present: ["text"], or ["text","image"] for models that accept image_url content parts (Images).
reasoning Present on every reasoning model, in the shape OpenRouter publishes. mandatory is true when thinking cannot be switched off (reasoning_effort: "none" answers reasoning_not_disableable). supported_efforts lists the reasoning_effort values that change something on this model, none first when it switches thinking off; levels that run the same depth are listed once, and the field is absent on a model that is on/off only. default_effort is what an omitted reasoning_effort runs. Per-model table: Reasoning.
pricing Per-token USD strings: prompt / completion / input_cache_read. Multiply by 1M for the $/Mtok shown on Models & pricing.
performance Live routing figures for the model: tps_p50 (delivered output tokens per second), ttft_p50_ms (median time to first token, present when there's a figure for it), and as_of (unix seconds). Omitted entirely when no fresh measurement exists; read its absence as "no recent data", not as zero.
added Unix seconds, when the model joined the Keln catalog. This is the real date.
created A constant epoch, held fixed for strict OpenAI clients that require the field. It is not a date; use added.

Practical uses

  • Pre-flight sizing. Read context_length before sending huge prompts instead of catching context_length_exceeded.
  • Live pricing. pricing always matches what billing charges; read it instead of hardcoding the rates.
  • Catalog discovery. A model is listed only when it is both servable at the published SLO and priced; it leaves with 14 days' notice.