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.
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
{
"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.
| Endpoint | Model types | Notes |
|---|---|---|
POST /v1/chat/completions | Any chat-served model | Text, vision, and image models answered over chat |
POST /v1/responses | TEXT, IMAGE_TO_TEXT, IMAGE_GENERATION | The 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/speech | AUDIO_TTS, MUSIC_GENERATION | Music is billed and returned as speech-shaped audio |
POST /v1/audio/transcriptionsPOST /v1/audio/translations | AUDIO_STT | |
POST /v1/embeddings | EMBEDDING |
