Skip to content
Docs / Platform / Models

Models

Three model engines, the auto tiers, how to read the live catalogue, how to hear about new models automatically, and the models the owner has denied.

Engines

Engine Engine id Models allowed Typical speed Best at
Gemini via Antigravity agy Everything the engine lists: Gemini 3.1 Pro, Gemini 3.6/3.7/3.8 Flash, Claude Sonnet 4.6 and Claude Opus 4.6 (Thinking), GPT-OSS 120B 40 to 95 s Pro, 5 to 20 s Flash Pro-class reasoning, long documents, big batches
GPT via Codex codex GPT-6.1 Sol (gpt-6.1-sol); GPT-6 Sol and Luna; GPT-5.6 Sol, Terra, Luna; GPT-5.5; GPT-5.3 Codex Spark; GPT-Reserve. Never GPT-6 Astra 5 to 10 s Fast structured text, JSON, classification, drafts
Claude claude Opus 5.5, Opus 5, Sonnet 5.5, Haiku 4.5. The aliases opus, sonnet, haiku always point at the newest of each. Never Fable or Mythos 5 to 15 s, long answers up to 90 s Writing quality, grading, feedback, chats

MaxiMind always pins the model on the CLI it drives, rotates the accounts of an engine and sidelines an account after a quota error. Quotas are shared across every surface and every user.

Choosing a model

  • On POST /api/ai/generate: engines is the preference order and models maps each engine to an exact id from the catalogue. Omit engines to use the key's own default chain (GET /api/ai/site-chain).
  • On /v1/chat/completions: model is engine/model, for example claude/opus, codex/gpt-5.6-sol, agy/gemini-3.8-flash-high. An explicit pin rotates that engine's accounts but never switches engines.
  • auto uses the caller's configured engine chain. auto/pro and auto/fast use the catalogue's preference recipes within that chain. The reference site recipes are: pro = agy Gemini 3.1 Pro, then codex, then claude; fast = codex, then claude, then agy Gemini 3.8 Flash.
  • Unknown model ids on the OpenAI-compatible endpoint return 400.

Denied models

Anything the owner forbids is silently replaced by that engine's default. Currently denied:

Engine Denied Resolves to
codex anything "astra" (gpt-6-astra) gpt-5.6-sol
claude anything "fable" or "mythos" opus
agy nothing —

Denied ids are omitted from /v1/models, /api/code/v1/models and the /models picker in MaxiMind Code.

List models live

The catalogue is the truth. The current catalogue below loads from MaxiMind when you open this page.

GET /api/ai/catalog

curl -s https://maximind.dev/api/ai/catalog -H "x-api-key: $MAXIMIND_API_KEY"

Returns engines, models (allowed and denied), defaults, tier recipes, attachment capability status and endpoints.

GET /v1/models

curl -s https://maximind.dev/v1/models -H "Authorization: Bearer $MAXIMIND_API_KEY"

Returns the allowed catalogue as OpenAI model objects with ids of the form engine/model. Astra, Fable and Mythos are omitted. created is the Unix time MaxiMind first saw the model (0 for models older than the change log), and x-maximind.points_to shows which exact model an alias such as claude/opus uses today. An automatically refreshed Markdown list is served at /docs/models.md.

Staying up to date

Providers release models often. MaxiMind checks every engine once a day at 03:17 Asia/Ho_Chi_Minh (20:17 UTC) and records every model that appears or disappears. The owner's rules are applied the moment a model is found, so a new model is usable (or blocked) the same day without anyone editing a list. Three ways to follow it:

  1. Use an alias. claude/opus, claude/sonnet and claude/haiku move to the newest model of their family by themselves. auto, auto/pro and auto/fast pick for you. Pin an exact id only when you need reproducible output.
  2. Poll the change feed. Public, no key needed, cached for five minutes. Poll it once a day and remember the last id you saw.
  3. Register a webhook. MaxiMind calls your HTTPS endpoint as soon as a change is recorded.

GET /v1/models/changes

curl -s "https://maximind.dev/v1/models/changes?since=mc_1f0c2a9d8b7e6a5c"

since is an event id from this feed or an ISO-8601 time; omit it for the whole history. Events come oldest first.

{
  "object": "list",
  "data": [{
    "id": "mc_…", "type": "models.updated",
    "created_at": "2026-09-24T20:17:00Z", "created": 1790280000,
    "added": ["claude/claude-opus-5-5"],
    "available": ["claude/claude-opus-5-5"],
    "blocked": [],
    "removed": [],
    "summary": "Claude Opus 5.5 appeared in the Claude client."
  }],
  "latest_event": "mc_…",
  "last_checked_at": "2026-09-24T20:17:00Z",
  "schedule": "checked daily at 03:17 Asia/Ho_Chi_Minh (20:17 UTC)"
}

available is what you can call now; blocked was discovered but is forbidden by the owner's rules; removed is no longer offered by the provider.

Webhooks

Webhooks belong to the API key (or signed-in account) that creates them; each key can register five.

curl -s https://maximind.dev/v1/webhooks -H "Authorization: Bearer $MAXIMIND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://your-app.example/hooks/maximind", "events": ["models.updated"], "description": "Ledoly"}'

The response contains secret (whsec_…) once — store it. Other calls:

Call Does
GET /v1/webhooks your webhooks, with the last delivery status and error
POST /v1/webhooks/{id}/test sends a ping now and returns what your server answered
POST /v1/webhooks/{id}/rotate-secret new secret; also re-enables a disabled webhook
DELETE /v1/webhooks/{id} removes it

Each delivery is a POST with a JSON body {"id", "type", "created_at", "event", "docs"} where event is exactly one feed event, and these headers:

Header Value
X-MaxiMind-Event models.updated or ping
X-MaxiMind-Delivery unique delivery id (use it to ignore duplicates)
X-MaxiMind-Timestamp Unix seconds when it was signed
X-MaxiMind-Signature sha256= + HMAC-SHA256 of "<timestamp>.<raw body>" with your secret

Answer with any 2xx within 10 seconds. Anything else is retried with growing gaps (1 minute up to 6 hours) and later events wait so they arrive in order; after 50 failures in a row the webhook is disabled until you rotate its secret. Endpoints must be public https addresses; MaxiMind does not follow redirects.

Verify the signature (Python)

import hashlib, hmac, time

def is_from_maximind(raw_body: bytes, headers, secret: str) -> bool:
    stamp = headers["X-MaxiMind-Timestamp"]
    if abs(time.time() - int(stamp)) > 300:  # refuse replays older than five minutes
        return False
    expected = hmac.new(secret.encode(), stamp.encode() + b"." + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest("sha256=" + expected, headers["X-MaxiMind-Signature"])

Verify the signature (Node)

import crypto from "node:crypto";

export function isFromMaxiMind(rawBody, headers, secret) {
  const stamp = headers["x-maximind-timestamp"];
  if (Math.abs(Date.now() / 1000 - Number(stamp)) > 300) return false;
  const expected = "sha256=" + crypto.createHmac("sha256", secret).update(`${stamp}.`).update(rawBody).digest("hex");
  const given = headers["x-maximind-signature"] || "";
  return given.length === expected.length && crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected));
}

Sign over the raw request bytes, not re-serialised JSON.

Current catalogue

This list is generated from MaxiMind's live model catalogue and loads whenever you open this page. It includes the current model ids, aliases and defaults for Claude, Codex and Antigravity. Reload to fetch the latest list, or read the catalogue Markdown directly. See What's new for recent model and provider CLI updates.

Images

Withheld on every surface. GET /api/ai/image/models returns {"ok":true,"models":[]}. See Images.