Skip to content

Models

GET /v1/models, the catalog currently servable by the pool, with each model's context window and live pricing. This endpoint is the machine-readable twin of the rate card.

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

curl https://api.keln.ai/v1/models
{
  "object": "list",
  "data": [
    {
      "id": "deepseek-ai/deepseek-v4-flash",
      "object": "model",
      "owned_by": "keln",
      "created": 1783468800,
      "added": 1785196800,
      "context_length": 1048576,
      "input_modalities": ["text"],
      "pricing": {
        "prompt": "0.00000014",
        "completion": "0.00000028",
        "input_cache_read": "0.00000007"
      },
      "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. Oversized requests are rejected against this number before billing.
input_modalities Always present: ["text"], or ["text","image"] for models that accept image_url content parts (Images).
pricing Per-token USD strings: prompt / completion / input_cache_read. Multiply by 1M for the rate card's $/Mtok.
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; scrape this instead of hardcoding the rate card.
  • Catalog discovery, a model is listed only when it is both servable at the published SLA and priced; it leaves with 14 days' notice.