---
title: "Models"
method: GET
path: "/inference/models"
tags: ["inference"]
---

# Models

`GET /inference/models`

## Request

- Base URL: `https://api.moda.app/v1`
- URL: `https://api.moda.app/v1/inference/models`
- Auth: HTTP bearer

The chat models this credential may call. A Voyager-billed workspace under contract revision 3
(``VOYAGER_CHAT_IN_PLAN``) gets its plan's menu (``VoyagerInferenceModel``: ``available``,
``required_plan``, ``upgrade_url``, ``approx_credits_per_turn``; DeepSeek V4.1 Flash is the default;
with no plan every model is locked). Everyone else gets today's catalogue.

## Query parameters

- `catalog_version` integer

## Headers

- `x-voyager-locked-models` string, nullable: Voyager-billed workspaces with chat in the plan: 1 lists every Voyager chat model, locked ones included (available false, with the plan that unlocks them); otherwise only the available ones.
- `Moda-Version` '2026-04-12' | '2026-05-01'

## Response `200`

Successful Response

- union
  - VoyagerInferenceCatalogResponse
    - `data` VoyagerInferenceCatalogData, required
      - `models` VoyagerInferenceModel[], required
        - `id` string, required
        - `provider` 'openai' | 'anthropic' | 'openrouter' | 'typesafe' | 'voyager', required
        - `protocol` 'responses' | 'messages' | 'chat-completions', nullable
        - `manufacturer` string, nullable
        - `context_window` integer, nullable
        - `max_output_tokens` integer, nullable
        - `model` string, required
        - `name` string, required
        - `capabilities` InferenceCapabilities, required
          - `tools` boolean
          - `images` boolean
          - `reasoning` boolean
        - `reasoning` InferenceReasoning, required
          - `mode` 'effort' | 'adaptive' | 'toggle' | 'none', required
          - `levels` string[], required
          - `default` string, nullable, required
        - `service_tiers` string[], required
        - `default_service_tier` 'default' | 'priority'
        - `attachments` InferenceAttachments, required
          - `limits` InferenceAttachmentLimit[], required
            - `mime_types` string[], required
            - `max_bytes` integer, required: Maximum raw file bytes before base64 encoding
          - `max_images` integer, nullable
          - `max_request_bytes` integer, required: Maximum serialized upstream JSON request bytes, including base64
        - `is_default` boolean
        - `fallback_default` boolean
        - `manufacturer_name` string, nullable
        - `available` boolean, required: The workspace's Voyager plan includes this model.
        - `required_plan` 'free' | 'starter' | 'creator' | 'ultra' | 'gigamax', nullable, required: The cheapest Voyager plan that includes it.
        - `upgrade_url` string, nullable, required: When locked: the Voyager dashboard's plan picker for required_plan (intent=upgrade&plan=...&reason=model).
        - `approx_credits_per_turn` integer, nullable, required: Estimated credits for a standard agent turn; the dollar value depends on the payer’s effective credit rate.
  - InferenceCatalogResponse
    - `data` InferenceCatalogData, required
      - `models` InferenceModel[], required
        - `id` string, required
        - `provider` 'openai' | 'anthropic' | 'openrouter' | 'typesafe' | 'voyager', required
        - `protocol` 'responses' | 'messages' | 'chat-completions', nullable
        - `manufacturer` string, nullable
        - `context_window` integer, nullable
        - `max_output_tokens` integer, nullable
        - `model` string, required
        - `name` string, required
        - `capabilities` InferenceCapabilities, required
          - `tools` boolean
          - `images` boolean
          - `reasoning` boolean
        - `reasoning` InferenceReasoning, required
          - `mode` 'effort' | 'adaptive' | 'toggle' | 'none', required
          - `levels` string[], required
          - `default` string, nullable, required
        - `service_tiers` string[], required
        - `default_service_tier` 'default' | 'priority'
        - `attachments` InferenceAttachments, required
          - `limits` InferenceAttachmentLimit[], required
            - `mime_types` string[], required
            - `max_bytes` integer, required: Maximum raw file bytes before base64 encoding
          - `max_images` integer, nullable
          - `max_request_bytes` integer, required: Maximum serialized upstream JSON request bytes, including base64
        - `is_default` boolean

## Other responses

- `401`: Authentication required.
- `402`: Insufficient credits for a metered operation.
- `403`: Permission denied for this scope.
- `404`: Resource not found.
- `409`: Conflict (idempotency / resource state).
- `422`: Request validation failed.
- `429`: Rate limit exceeded.
- `500`: Internal error.

## Changes

- **2026-11-03** `9ac6a3abc0f8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/moda/apis/moda-public-api/changes/inference/models/get.md)

---

[API](https://skmtc.dev/moda/apis/moda-public-api.md) - [All operations](https://skmtc.dev/moda/apis/moda-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/moda/apis/moda-public-api/revisions/9ac6a3abc0f8?raw)
