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": "kie",
"brand_key": "kie",
"brand_image_url": "/v1/models/brands/kie/image",
"upstream_id": "google/nano-banana-pro",
"released_at": null,
"modalities": ["image"],
"description": "Image generation and editing model.",
"price_input_per_m": 0,
"price_output_per_m": 0,
"capabilities": {
"async_supported": true,
"request_mode": ["sync", "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": "KIE",
"slug": "kie",
"description": "KIE media provider",
"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 or upstream model ID. |
owned_by, brand_key, brand_image_url | Provider and brand metadata for model catalog UI. |
upstream_id | Provider-facing model ID when it differs from the Xenodia 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 provider-specific display fields for media entries. |
capabilities.async_supported | Whether task mode is available. |
capabilities.request_mode | Whether the model accepts sync requests, async tasks, or both. |
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 channels that can currently serve the model. 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.