API Reference
List Models
Discover all available AI models, their supported tasks, and starting prices.
Endpoint
GET https://aircube.ai/api/v3/modelsReturns the full list of available models. Use this to programmatically discover model slugs and build request URLs.
Authentication
Authorization: Bearer YOUR_API_KEYResponse
Status: 200 OK
{
"success": true,
"data": [
{
"slug": "seedream-v5.0-pro",
"name": "Seedream 5.0 Pro",
"type": "image",
"tasks": ["text-to-image", "image-to-image"],
"price_from_usd": 0.045
},
{
"slug": "seedance-2.0",
"name": "Seedance 2.0",
"type": "video",
"tasks": ["text-to-video", "image-to-video", "reference-to-video", "video-to-video", "video-extend"],
"price_from_usd": 0.48
},
{
"slug": "qwen3-tts",
"name": "Qwen3 TTS",
"type": "audio",
"tasks": ["text-to-speech"],
"price_from_usd": 0.05
}
]
}Response fields
| Field | Type | Description |
|---|---|---|
slug | string | URL path segment for the model — use this in POST /api/v3/{slug}/{task} |
name | string | Human-readable display name |
type | string | Output category: image, video, audio, or face-swap |
tasks | string[] | Supported task types — each can be used as the {task} segment |
price_from_usd | number | null | Lowest price per generation in USD, or null if not listed |
Building a request URL
Combine slug + any entry from tasks to form the submit URL:
POST https://aircube.ai/api/v3/{slug}/{task}For example, if a model returns slug: "seedance-2.0" with tasks: ["text-to-video", "image-to-video"]:
POST https://aircube.ai/api/v3/seedance-2.0/text-to-video
POST https://aircube.ai/api/v3/seedance-2.0/image-to-videoSee Submit Generation for the full parameter reference per task.
Examples
cURL
curl https://aircube.ai/api/v3/models \
-H "Authorization: Bearer $AIRCUBE_API_KEY"Python — find all video models
import os
import requests
API_KEY = os.environ["AIRCUBE_API_KEY"]
response = requests.get(
"https://aircube.ai/api/v3/models",
headers={"Authorization": f"Bearer {API_KEY}"},
)
models = response.json()["data"]
# Filter video models that support text-to-video
for m in models:
if m["type"] == "video" and "text-to-video" in m["tasks"]:
print(f"{m['slug']:30s} {m['name']:20s} from ${m['price_from_usd']}")JavaScript — build a request from the catalog
const API_KEY = process.env.AIRCUBE_API_KEY;
const BASE = "https://aircube.ai/api/v3";
// 1. Fetch models
const res = await fetch(`${BASE}/models`, {
headers: { Authorization: `Bearer ${API_KEY}` },
});
const { data: models } = await res.json();
// 2. Pick the cheapest image model
const imageModels = models
.filter((m) => m.type === "image" && m.price_from_usd !== null)
.sort((a, b) => a.price_from_usd - b.price_from_usd);
const cheapest = imageModels[0];
console.log(`Using ${cheapest.slug} (${cheapest.name})`);
// 3. Submit a generation
const gen = await fetch(`${BASE}/${cheapest.slug}/${cheapest.tasks[0]}`, {
method: "POST",
headers: {
Authorization: `Bearer ${API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ prompt: "a futuristic robot in a garden" }),
});
const { data } = await gen.json();
console.log(`Generation ID: ${data.id}`);Caching
Responses include Cache-Control: public, max-age=3600. The model list changes infrequently, so caching for up to 1 hour is safe.