Model Discovery API
Discover public Xenodia models, modalities, pricing hints, async support, and capability metadata.
Use GET /v1/models before sending model-specific requests. The catalog prevents clients from guessing which models are currently enabled and which parameters they support.
This endpoint is public. You can call it before an API key exists, then use the selected model ID in authenticated runtime requests.
Endpoint
GET https://api.xenodia.xyz/v1/modelscURL
curl "https://api.xenodia.xyz/v1/models"Example model item
{
"id": "nano-banana-pro",
"object": "model",
"name": "nano-banana-pro",
"owned_by": "google",
"brand_key": "google",
"brand_image_url": "/v1/models/brands/google/image",
"upstream_id": "google/nano-banana-pro",
"released_at": null,
"modalities": ["image"],
"description": "Image generation model.",
"price_input_per_m": 0,
"price_output_per_m": 0,
"capabilities": {
"async_supported": true,
"request_mode": ["task"],
"pricing": {
"mode": "resolution",
"tiers": [
{ "id": "1k_2k", "label": "1K / 2K", "unit": "image", "price_micro_usdc": 0 },
{ "id": "4k", "label": "4K", "unit": "image", "price_micro_usdc": 0 }
]
},
"parameters": [
{
"name": "aspect_ratio",
"enum": ["1:1", "16:9", "auto"]
},
{
"name": "resolution",
"enum": ["1K", "2K", "4K"]
}
],
"reference_input": {
"supported": true,
"transport": ["url", "multipart_file"],
"max_items": 8
}
},
"enabled": true,
"created_at": "2026-01-01T00:00:00Z",
"updated_at": "2026-01-01T00:00:00Z",
"available_channels": [
{
"id": 1,
"name": "Primary Image",
"slug": "route-1",
"description": "Image route option for this model.",
"price_input_per_m": 0,
"price_output_per_m": 0
}
]
}Fields to read
| Field | Why it matters |
|---|---|
id | The public model ID to pass in requests. |
name | Display name derived from the public model ID. |
owned_by, brand_key, brand_image_url | Model brand metadata for catalog UI. |
upstream_id | Brand model ID used by Xenodia when it differs from the public id. |
modalities | Whether a model supports text, image, video, audio, or mixed inputs. |
price_input_per_m, price_output_per_m | Public token-price fields for text models, or display fields for media entries. |
capabilities.async_supported | Whether task mode is available. |
capabilities.request_mode | Supported request mode. Media generation uses task. |
capabilities.pricing | Media pricing mode and tiers, such as per-resolution image/video prices or Seedance per-second tiers by resolution and video input. |
capabilities.parameters | Supported request controls and enums. |
capabilities.reference_input | Reference input transport and item limits. |
available_channels | Active public channel options currently able to serve the model. name is the channel display name, while slug remains a neutral route label. Supplier identifiers are not exposed. If this array is empty, the model is omitted from the response. |
The response also includes a top-level payment object with minimum and recommended top-up hints.
Client rule
Do not infer media support from a model name. Read modalities and capabilities instead.
For price-sensitive UI, treat zero-price tiers as “not priced in this snapshot” unless your product has confirmed the model is enabled on a billable channel. Runtime calls may still reject requests if a video price tier is not configured.