Models

Models & discovery

The catalogue is live: models are added, repriced and retired without a release on your side. Read it from the API rather than hard-coding a list.

GEThttps://api.oxyy.ai/v1/models
GEThttps://api.oxyy.ai/v1/models/{model}one model, in detail

The list returns every model the API currently serves, with its pricing, context window and modalities. It can include a few models kept callable for existing integrations that no longer appear on the website's model pages. Two fields are Oxyy's own: accessible says whether your tier may call that model, and access_reason says why not when it is false — so a model picker can grey a row out and explain itself. The detail endpoint adds every parameter described rather than merely named, the endpoints and SDKs that serve it, and your own rate limits on it.

# Every model the API serves, with pricing, capabilities and whether
# your key may call it.
curl https://api.oxyy.ai/v1/models \
  -H "Authorization: Bearer $OXYY_API_KEY"

# One model, with every parameter described rather than just named.
curl https://api.oxyy.ai/v1/models/gpt-5.5 \
  -H "Authorization: Bearer $OXYY_API_KEY"
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["OXYY_API_KEY"],
    base_url="https://api.oxyy.ai/v1"
)

# `accessible` says whether YOUR tier may call it; `access_reason`
# says why not when it is false.
for m in client.models.list().data:
    if m.oxyy["type"] == "TEXT" and m.accessible:
        print(m.id, m.oxyy["contextWindow"])

Example response

Response
{
  "object": "list",
  "total_count": 171,
  "data": [
    {
      "id": "gpt-5.5",
      "object": "model",
      "created": 1700000000,
      "owned_by": "openai",
      "accessible": true,
      "access_reason": null,
      "oxyy": {
        "displayName": "GPT-5.5",
        "type": "TEXT",
        "contextWindow": 1050000,
        "maxTokens": 128000,
        "inputModalities": ["text", "image"],
        "outputModalities": ["text"],
        "supportedParameters": ["reasoning_effort", "tools", "response_format"],
        "pricing": {
          "mode": "PER_TOKEN_IO",
          "inputCreditsPerMillion": 5,
          "outputCreditsPerMillion": 30
        },
        "accessible": true
      }
    }
  ]
}

Which endpoint serves which model

Each model has a type, and each endpoint serves a set of types. Send a model to the wrong endpoint and the answer is a 400 with code model_type_mismatch that names the endpoint you wanted — before anything is billed.

EndpointModel typesNotes
POST /v1/chat/completionsAny chat-served modelText, vision, and image models answered over chat
POST /v1/responsesTEXT, IMAGE_TO_TEXT, IMAGE_GENERATIONThe Responses object model has no item for audio, video or vectors
POST /v1/images/*IMAGE_GENERATION, IMAGE_TO_IMAGE
POST /v1/videos/*TEXT_TO_VIDEO, IMAGE_TO_VIDEO, VIDEO_TO_VIDEO
POST /v1/audio/speechAUDIO_TTS, MUSIC_GENERATIONMusic is billed and returned as speech-shaped audio
POST /v1/audio/transcriptions
POST /v1/audio/translations
AUDIO_STT
POST /v1/embeddingsEMBEDDING