Xenodia Docs
API Reference

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/models

cURL

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

FieldWhy it matters
idThe public model ID to pass in requests.
nameDisplay name derived from the public model ID.
owned_by, brand_key, brand_image_urlModel brand metadata for catalog UI.
upstream_idBrand model ID used by Xenodia when it differs from the public id.
modalitiesWhether a model supports text, image, video, audio, or mixed inputs.
price_input_per_m, price_output_per_mPublic token-price fields for text models, or display fields for media entries.
capabilities.async_supportedWhether task mode is available.
capabilities.request_modeSupported request mode. Media generation uses task.
capabilities.pricingMedia pricing mode and tiers, such as per-resolution image/video prices or Seedance per-second tiers by resolution and video input.
capabilities.parametersSupported request controls and enums.
capabilities.reference_inputReference input transport and item limits.
available_channelsActive 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.

On this page