Kataleptic
§ API · v1 Updated 2026-09-23

The Inference API

Kataleptic serves frontier open-source and proprietary models from a single OpenAI-compatible endpoint. Drop-in for any OpenAI or OpenRouter client — change the base URL, keep your code.

Base URLhttps://api.kataleptic.com/v1
AuthBearer dg_...
FormatOpenAI-compatible JSON / SSE

Quickstart

Three minutes from zero to your first token.

  1. Get a key. Sign up for a free API key — no card required. After confirming your email, you'll receive $2 in prepaid credit.
  2. Pick a model. Browse the models catalogue. Start with meta/llama-3.3-70b ($0.30 / $0.40 per MTok) for day-to-day work. Model IDs are OpenRouter-style provider/model (openai/gpt-5.5); the bare name (llama-3.3-70b) works too.
  3. Fire a request. Your existing OpenAI SDK works. Just change the base URL.
curl https://api.kataleptic.com/v1/chat/completions \
  -H "Authorization: Bearer $DUGUET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "meta/llama-3.3-70b",
    "messages": [
      { "role": "user", "content": "Hello from Kataleptic." }
    ]
  }'

Authentication

All requests carry an API key in the Authorization header, Bearer scheme. Keys start with dg_ and are shown only once at signup — save them securely.

Authorization: Bearer dg_177984c7a0e3ef28tHi0zHgQXdjYLHdLqm87M3kPmQ6OLSYf

Inspect a key's state (usage, remaining credit, call count) at GET /v1/auth/key.

$ curl https://api.kataleptic.com/v1/auth/key \
    -H "Authorization: Bearer $DUGUET_API_KEY"

{
  "data": {
    "label": "[email protected]",
    "usage": 0.0014,
    "limit": 2.00,
    "is_free_tier": true,
    "rate_limit": { "requests": 500, "interval": "60s" },
    "tokens_used": { "prompt": 2431, "completion": 802 },
    "calls": 17
  }
}

Chat completions

POST /v1/chat/completions — OpenAI-compatible. All standard parameters are accepted: messages, temperature, top_p, max_tokens, stream, stop, seed, frequency_penalty, presence_penalty.

The response includes OpenRouter-compatible extensions:

  • provider — the model's real upstream provider (e.g. "openai", "meta", "mistralai")
  • native_finish_reason — upstream raw reason, preserved alongside the normalised finish_reason
  • usage.cost — dollar cost of this call, computed from the per-model price

Request example — with tool use

{
  "model": "meta/llama-3.3-70b",
  "messages": [
    { "role": "system", "content": "You are a research assistant." },
    { "role": "user",   "content": "Summarise the paper at arxiv.org/abs/2401.XXX" }
  ],
  "temperature": 0.3,
  "max_tokens": 1024,
  "tools": [{
    "type": "function",
    "function": {
      "name": "fetch_url",
      "description": "Fetch the text of a URL",
      "parameters": {
        "type": "object",
        "properties": { "url": { "type": "string" } },
        "required": ["url"]
      }
    }
  }]
}

Response

{
  "id": "chatcmpl-9ecf…",
  "object": "chat.completion",
  "created": 1776293537,
  "model": "meta/llama-3.3-70b",
  "provider": "meta",
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "…"
    },
    "finish_reason": "stop",
    "native_finish_reason": "stop"
  }],
  "usage": {
    "prompt_tokens": 142,
    "completion_tokens": 387,
    "total_tokens": 529,
    "cost": 0.000197,
    "is_byok": false
  }
}

Streaming

Pass "stream": true to receive a Server-Sent-Events stream of chat.completion.chunk objects. The stream ends with data: [DONE]. All chunks carry provider and the prefixed model name.

from openai import OpenAI

client = OpenAI(
    base_url="https://api.kataleptic.com/v1",
    api_key=os.environ["DUGUET_API_KEY"],
)

stream = client.chat.completions.create(
    model="mistralai/mistral-large-3",
    messages=[{"role": "user", "content": "Write a haiku about inference."}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content or ""
    print(delta, end="", flush=True)

Transcription

POST /v1/audio/transcriptions — OpenAI-compatible multipart upload. Send the audio file and a model id; you get the transcript back. Billed per minute of audio.

curl https://api.kataleptic.com/v1/audio/transcriptions \
  -H "Authorization: Bearer $DUGUET_API_KEY" \
  -F model="gpt-4o-mini-transcribe" \
  -F file="@meeting.mp3"
  • gpt-4o-mini-transcribe — the cheapest ($0.0045/min); bulk and background audio.
  • gpt-transcribe — current-generation accuracy ($0.006/min).
  • gpt-4o-transcribe — GPT-4o accuracy with semantic context.
  • gpt-4o-transcribe-diarize — speaker-labelled transcripts for multi-speaker meetings.
  • whisper-large-v2 — timestamps and subtitles ($0.0097/min), rate-limited to about 3 requests per minute; see below.

Subtitles and timestamps: the gpt-* models return json or text only. For verbose_json (word and segment timestamps), srt or vtt, use whisper-large-v2. It is rate-limited to about 3 requests per minute; use gpt-4o-mini-transcribe for volume. Azure retires it on 2026-12-15, and after that no model on Kataleptic returns timestamps or subtitles.

For live audio, stream it instead: gpt-live-transcribe and gpt-realtime-whisper run as a realtime transcription session at wss://api.kataleptic.com/v1/realtime?intent=transcription, returning partial and final transcripts as you speak — see streaming transcription.

Retiring 2026-10-23: whisper-large-v3-turbo and the compatibility names whisper-1, whisper, whisper-large-v3 and large-v3. Switch to gpt-4o-mini-transcribe now — see retiring models.

Embeddings

POST /v1/embeddings — OpenAI-compatible. Returns vector representations suitable for semantic search and RAG.

curl https://api.kataleptic.com/v1/embeddings \
  -H "Authorization: Bearer $DUGUET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "nomic-ai/nomic-embed",
    "input": "Embeddings map text to vectors for semantic search."
  }'

Batching: input accepts an array of strings to embed in one request.

Retiring 2026-10-23: nomic-embed, the only embedding model, retires on 2026-10-23 and nothing replaces it. After that date /v1/embeddings has no model to serve.

Realtime voice

Speech-to-speech over WebSocket at wss://api.kataleptic.com/v1/realtime — wire-compatible with the OpenAI Realtime API, so unmodified OpenAI realtime clients work. Three tiers behind one endpoint: a cascade with ~250 ms to first audio (kataleptic-realtime), HD neural voices via Azure Voice Live (kataleptic-realtime-hd), and native speech-to-speech (gpt-realtime-2.1, plus a -mini volume tier and the previous gpt-realtime-2).

Full reference: quickstart, the tier comparison, session.update fields, transcript events, telephony / G.711, streaming transcription and pricing live on the Realtime voice page.

Retiring 2026-10-23: the cascade tier kataleptic-realtime, its Piper voices, and selecting it with ?model=<chat model>. Move to kataleptic-realtime-hd or gpt-realtime-2.1 / gpt-realtime-2.1-mini — see retiring models.

Models

Fifty-two models — open-source and proprietary chat and reasoning, image, video, realtime voice, transcription and embeddings. Eleven of them retire on 2026-10-23; see retiring models. The full live list, with prices, is at GET /v1/models; the models page describes each one.

Retiring on 2026-10-23

On 2026-10-23 we retire every model we host on our own GPU, together with the compatibility names that point at them. They will not be aliased to other models. From that date a request naming one of them fails with HTTP 410 and error.code: "model_retired", and the message names the replacement. The replacements are all live now, so you can switch today.

RetiringSwitch to
qwen3-8b, qwen2.5-coder-7b, gemma3-27b, glm4-9bAny chat model, e.g. gpt-5.4-mini, llama-3.3-70b or deepseek-v4-flash.
mistral-nemo-12bmistral-medium-3.5, or any of the above.
whisper-large-v3-turbogpt-4o-mini-transcribe (cheapest) or gpt-transcribe. For timestamps, SRT or VTT: whisper-large-v2, until Azure retires it on 2026-12-15.
whisper-1, whisper, whisper-large-v3, large-v3 (compatibility names for the model above)gpt-4o-mini-transcribe. From 2026-10-23 it is also the default when a transcription request names no model.
whisper-large-v3-turbo-stream, parakeet-tdt-0-6b-stream, and the /v1/listen endpointgpt-live-transcribe or gpt-realtime-whisper in a realtime transcription session. /v1/listen is removed.
kataleptic-realtime, piper-tts, and /v1/realtime?model=<chat model>kataleptic-realtime-hd, or gpt-realtime-2.1 / gpt-realtime-2.1-mini.
gpt-realtime, gpt-4o-realtime*, gpt-audio* on /v1/realtime (compatibility names for the cascade)gpt-realtime-2.1-mini. From 2026-10-23 it is also the default for a realtime session that names no model. The real ids gpt-realtime-2, gpt-realtime-2.1 and gpt-realtime-2.1-mini are unaffected.
nomic-embedNo replacement: no embedding model will be offered.

Rate limits

Free trials: 20 requests / minute and two concurrent requests per account, shared across keys. Paid accounts normally allow 120 requests / minute and eight concurrent requests; individual capacity agreements may differ. Source IP and platform capacity limits also apply. Signup permits five requests per source IP per hour and three confirmation emails per inbox per hour, including Gmail aliases. Free credit is limited to one $2 trial per eligible inbox and a shared daily allocation. If that allocation is full, your confirmation page tells you when to retry.

When a request would exceed the limit, the API returns HTTP 429 with a Retry-After header.

Errors

All errors follow the OpenAI shape:

{
  "error": {
    "message": "Invalid or missing API key",
    "type": "authentication_error"
  }
}
StatusTypeWhen
400invalid_request_errorMalformed body or unsupported parameter.
401authentication_errorMissing, invalid, or disabled API key.
402insufficient_quotaCredit exhausted. Top up via email for now.
404model_not_foundUnknown model id. See /v1/models.
429rate_limit_exceededSlow down.
5xxupstream_errorA backend provider is misbehaving. We'll tell you which.

OpenRouter compatibility

Every response body mirrors OpenRouter's extensions: provider, native_finish_reason, usage.cost, usage.is_byok. Model IDs use the model's real upstream provider as an OpenRouter-style prefix — openai/gpt-5.5, meta/llama-3.3-70b, mistralai/mistral-large-3 — and the bare name (gpt-5.5) is accepted too. /v1/models lists both forms.

If you're migrating from OpenRouter, set base_url to https://api.kataleptic.com/v1 and adjust model names. That's the whole migration.

Support

One inbox. Answered by the person who wrote this.

[email protected]