Models

List models

List the LLM models available to your organization.

Returns the LLM catalog. The id of each entry is a model slug (for example opus-4.5, sonnet-4.6, claude-opus-4-7) — pass it as entity_id when assigning an llm_model via POST /agents/{agent_id}/resources.

GET /api/public/v1/models

Query parameters

ParameterTypeDescription
providerstringFilter the catalog to a single provider (e.g. anthropic, opencode, codex). When omitted, returns all models the calling organization is entitled to use.

Example

curl -X GET "https://api.nairi.ai/api/public/v1/models?provider=anthropic" \
  -H "Authorization: Bearer $NAIRI_API_KEY"
const url = new URL("https://api.nairi.ai/api/public/v1/models");
url.searchParams.set("provider", "anthropic");

const res = await fetch(url, {
  headers: { Authorization: `Bearer ${process.env.NAIRI_API_KEY}` },
});
const models = (await res.json()) as Array<{
  id: string;
  display_name: string;
  input_price: number | null;
  output_price: number | null;
  is_free: boolean;
}>;
require "net/http"
require "json"
require "uri"

uri = URI("https://api.nairi.ai/api/public/v1/models")
uri.query = URI.encode_www_form(provider: "anthropic")
req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer #{ENV['NAIRI_API_KEY']}"

res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }
models = JSON.parse(res.body)
import os
import requests

res = requests.get(
    "https://api.nairi.ai/api/public/v1/models",
    headers={"Authorization": f"Bearer {os.environ['NAIRI_API_KEY']}"},
    params={"provider": "anthropic"},
)
models = res.json()
package main

import (
	"encoding/json"
	"fmt"
	"io"
	"net/http"
	"net/url"
	"os"
)

func main() {
	params := url.Values{}
	params.Set("provider", "anthropic")
	req, _ := http.NewRequest("GET", "https://api.nairi.ai/api/public/v1/models?"+params.Encode(), nil)
	req.Header.Set("Authorization", "Bearer "+os.Getenv("NAIRI_API_KEY"))
	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	raw, _ := io.ReadAll(res.Body)
	var models []map[string]any
	json.Unmarshal(raw, &models)
	fmt.Println(models)
}

Response: 200 OK

[
  {
    "id": "claude-opus-4-7",
    "display_name": "Claude Opus 4.7",
    "input_price": 15.0,
    "output_price": 75.0,
    "is_free": false
  },
  {
    "id": "sonnet-4.6",
    "display_name": "Claude Sonnet 4.6",
    "input_price": 3.0,
    "output_price": 15.0,
    "is_free": false
  }
]

Response fields

FieldTypeDescription
idstringModel slug. Pass as entity_id when assigning llm_model.
display_namestringHuman-readable model name.
input_pricenumber | nullInput price per 1M tokens (USD). null for free-tier models.
output_pricenumber | nullOutput price per 1M tokens (USD). null for free-tier models.
is_freebooleantrue for models included in the Nairi free tier.

On this page