---
title: "List Base Models"
method: GET
path: "/v1/base-models"
tags: ["model-catalog"]
---

# List Base Models

`GET /v1/base-models`

## Request

- Base URL: `https://api.fastino.ai`
- URL: `https://api.fastino.ai/v1/base-models`
- Auth: none required
- TypeScript: <https://skmtc.dev/fastino-ai/apis/pioneer-inference-api/docs/v1/base-models/get.ts> (a function with typed inputs; its response is checked against the schema)

List base models available to the caller.

Each model reports its inference and training capabilities, supported
training types, context limits, and public pricing. Capability filters
select models currently available for the requested operation.

Authentication is optional. Anonymous callers receive the public catalog;
authenticated callers may also receive models available to their account.
Model visibility can vary by account eligibility and jurisdiction.

Examples:
    GET /v1/base-models                          — full catalog
    GET /v1/base-models?supports_inference=true   — serverless-capable models
    GET /v1/base-models?supports_training=true    — trainable models
    GET /v1/base-models?task_type=encoder          — encoder/NER models only
    GET /v1/base-models?task_type=decoder          — decoder/LLM models only
    GET /v1/base-models?task_type=embedding        — text embedding models only

## Query parameters

- `supports_training` boolean, nullable: Filter to models that support fine-tuning
- `supports_inference` boolean, nullable: Filter to models with serverless inference
- `task_type` string, nullable: Filter by model architecture: 'encoder' (NER/GLiNER), 'decoder' (LLM), 'systemone' (decision), or 'embedding'

## Response `200`

Successful Response

- BaseModelsResponse: Response listing all base models in the public catalog.
  - `models` BaseModelResponse[], required
    - `agentic_benchmark_mean` number, nullable: Mean of the model's curated agentic benchmarks on a 0-100 scale. Null when the model publishes fewer than two of them.
    - `agentic_benchmarks` BenchmarkComponentScore[]: Every curated agentic benchmark the model reports, strongest first. Populated even when agentic_benchmark_mean is null.
      - `benchmark_id` string, required: Upstream benchmark slug
      - `label` string, required: Display name for the benchmark
      - `score` number, required: Normalized score on a 0-100 scale
    - `cache_read_price_per_million` number, nullable: Effective upper-bound USD list price per million input tokens served from the provider's prompt cache (Anthropic cache_read_input_tokens, Bedrock cacheReadInputTokens, OpenAI prompt_tokens_details.cached_tokens). Always the rate BillableEvent.record actually charges: when a provider does not differentiate cache-read pricing this equals ``input_price_per_million`` rather than ``None``, so customers compute ``cache_read_tokens × cache_read_price`` without special-casing. ``None`` only when the model has no pricing at all (cache reads are still tracked for analytics).
    - `cache_write_price_per_million` number, nullable: Effective upper-bound USD list price per million input tokens written into the provider's prompt cache (Anthropic cache_creation_input_tokens, Bedrock cacheWriteInputTokens). Providers that charge cache writes at the plain input rate (OpenAI, Modal) report ``input_price_per_million`` here rather than ``None``, matching what BillableEvent.record charges. ``None`` only when the model has no pricing at all.
    - `coding_benchmark_mean` number, nullable: Mean of the model's curated coding benchmarks on a 0-100 scale. Null when the model publishes fewer than two of them, since one benchmark is a data point rather than an average.
    - `coding_benchmarks` BenchmarkComponentScore[]: Every curated coding benchmark the model reports, strongest first, so a listing can show its working without a request per model. Populated even when coding_benchmark_mean is null, since a single figure is still worth showing.
      - `benchmark_id` string, required: Upstream benchmark slug
      - `label` string, required: Display name for the benchmark
      - `score` number, required: Normalized score on a 0-100 scale
    - `context_window` integer, nullable: Maximum context length in tokens (min across providers)
    - `default_training_batch_size` integer, nullable: Catalog default training batch size for this model. Null when the model is not trainable on a provider that publishes batch defaults. Clients creating training jobs should prefer this value (or omit ``batch_size``) over hard-coding a global default.
    - `deprecated` boolean: Whether the model is deprecated and discouraged for new work. Deprecated models still serve requests until their sunset date; sunset (removed) models are omitted from this catalog entirely.
    - `deprecation_date` string, date, nullable: Date the model entered (or will enter) the deprecated state. Null when the model is not on a deprecation path.
    - `description` string, required: Short description shown in UI
    - `encoder_features` string[], nullable: Hosted encoder features for this model. Null for decoder and embedding models. The value is a subset of a fixed vocabulary, so a feature missing from the list is not hosted.
    - `featured_rank` integer, nullable: Position among the hosted models featured on the /models landing; lower rank shows first. Null when the model is not featured.
    - `id` string, required: Model ID (canonical routing key)
    - `input_price_per_million` number, nullable: Upper-bound USD list price per million input tokens (highest provider COGS multiplied by the inference margin). Caps what BillableEvent.record can charge for model_inference; actual charges may be lower when the request is routed to a cheaper provider.
    - `is_chat_model` boolean, required: Whether the model has a chat template suitable for /v1/chat/completions. Pretrained/base models lack a chat template and produce gibberish on chat-formatted messages. The public catalog has no servable non-chat decoder.
    - `label` string, required: Human-friendly display name
    - `license` string, nullable: SPDX license identifier or short name for the model weights (e.g. 'Apache-2.0', 'Llama-3-Community', 'Proprietary'). Display string only — null when unknown.
    - `market_input_price_per_million` number, nullable: Median USD per 1M input tokens across the third-party providers serving this model, for comparison against our own rate. Median rather than mean so one outlying listing cannot move it. Never used to bill. Null when nobody publishes a rate for it.
    - `market_output_price_per_million` number, nullable: Median USD per 1M output tokens across third-party providers.
    - `market_price_provider_count` integer, nullable: Provider count behind the better-evidenced side: the larger of the input and output counts, which is a lower bound on how many providers list the model rather than a distinct count of them. The two sides can be drawn from different subsets, since a few providers publish an input rate only, so neither side alone is the total. Present so a lone quote can be told apart from a real market. Null when there are no market rates.
    - `max_input_tokens` integer, nullable: Maximum input tokens advertised for this model. Matches the conservative provider context window used by this catalog row. For encoder (GLiNER) models this is the text plus schema limit; longer input is rejected with input_too_long unless the request sets truncate_overflow_text. Null when the catalog has no limit.
    - `max_output_tokens` integer, nullable: Maximum output tokens advertised for decoder generation. Null when no provider publishes a separate output cap.
    - `max_training_batch_size` integer, nullable: Safe maximum training batch size for this model on the training provider. Null when unset or the model is not trainable. Requests above this maximum are rejected (except the legacy explicit Field-default clamp documented on TrainingJobCreate).
    - `output_price_per_million` number, nullable: Upper-bound USD list price per million output tokens (highest provider COGS multiplied by the inference margin). Caps what BillableEvent.record can charge for model_inference; actual charges may be lower when the request is routed to a cheaper provider.
    - `release_month` string, nullable: Official release month shown in the public catalog, formatted as 'Mon YYYY' (for example, 'Apr 2026'). Null when unknown.
    - `replacement_model` string, nullable: Canonical ID of the successor model to migrate to, when the model is deprecated and a replacement is declared.
    - `sunset_date` string, date, nullable: Date the model is removed and requests begin to be rejected. Null when no removal is scheduled.
    - `supports_image_input` boolean: Whether this model accepts image (vision) content blocks on the compat inference APIs. True when any provider catalog entry for this model sets supports_vision=True. Output is always text — no model supports image output.
    - `supports_inference` boolean, required: Whether this model supports serverless base-model inference (pre-deployed, no startup latency, pay-per-token). This is model-level availability only and does not guarantee every upstream model-card feature; hosted encoder features are encoder_features.
    - `supports_on_demand_inference` boolean, required: Whether this model supports on-demand LoRA deployment (dedicated GPU serving a fine-tuned adapter).
    - `supports_training` boolean, required: Whether this model supports fine-tuning on any provider. When False the model is available for inference only. Equal to ``bool(training_types)``.
    - `supports_zdr` boolean: Whether this model has a Zero-Data-Retention-compliant route. Informational — shown on the models page. Fails closed: defaults False and is True only when the model is explicitly catalogued as ZDR-supported, so the claim is never over-reported.
    - `task_type` string, required: Model architecture: 'decoder' for LLMs, 'encoder' for GLiNER/NER models, or 'embedding' for text embedding models
    - `tier` string, nullable: Capability tier: 'open' (open weights), 'fast' (latency-optimized), 'enterprise' (proprietary commercial API), or 'research' (research preview). Null when unclassified.
    - `training_types` string[]: Training types this model can actually be fine-tuned with, sorted and de-duplicated (e.g. ``["lora"]``, ``["lora", "full"]``). Empty when the model is not trainable. Derived from the SFT routes in the same training provider registry that decides which (model, training_type) requests ``POST /training-jobs`` accepts under its default ``training_algorithm=sft``, restricted to the public ``full``/``lora`` vocabulary, so a value listed here is a route the training gate will not reject: a model listing only ``["lora"]`` rejects a ``full`` training request with HTTP 400. Decoders are the exception: ``POST /training-jobs`` rejects them with HTTP 400, and a decoder lists ``["lora"]`` only when the caller's team can train it step by step with the training job routes under /v1/training/jobs.

## Other responses

- `422`: Validation Error

## Changes

- **2026-09-29** `635074d3c4e8`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fastino-ai/apis/pioneer-inference-api/changes/v1/base-models/get.md)

---

[API](https://skmtc.dev/fastino-ai/apis/pioneer-inference-api.md) - [All operations](https://skmtc.dev/fastino-ai/apis/pioneer-inference-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fastino-ai/apis/pioneer-inference-api/revisions/81465e18c1d2?raw)
