# Xide APP REST API

> Generate images, videos, audio and image edits with Xide APP credits. Failed generations are refunded automatically.

- Base URL: `https://xide.app/api/v1`
- Authentication: `Authorization: Bearer xide_live_…` (or the `X-API-Key` header)
- Get an API key: https://xide.app/dashboard/api
- OpenAPI 3.1: https://xide.app/api/v1/openapi.json
- MCP server for AI assistants: https://xide.app/api/mcp (see https://xide.app/docs/mcp.md)

## Quickstart

1. List models

```bash
export XIDE_API_KEY="xide_live_..."

curl "https://xide.app/api/v1/models?category=image" \
  -H "Authorization: Bearer $XIDE_API_KEY"
```

2. Start a generation

```bash
curl -X POST "https://xide.app/api/v1/generate/text-to-image-flux-2-pro" \
  -H "Authorization: Bearer $XIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-42" \
  -d '{"inputs": {"prompt": "a red fox in fresh snow"}, "metadata": {"order": 42}}'
```

3. Wait for the result

```bash
curl "https://xide.app/api/v1/jobs/JOB_ID?wait=30" \
  -H "Authorization: Bearer $XIDE_API_KEY"
```

Image, video and audio inputs accept an upload_id, a public https URL, or the url of a previous output.

## Response format

Success responses look like { "ok": true, "data": … } and errors like { "ok": false, "error": { "code", "message" } }. Rate limits are returned in the X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers. Error messages follow the Accept-Language header: Turkish, English, Spanish, Russian or Arabic.

## Endpoints

### GET /api/v1/models

List models; filter by category and search — scope: `read`

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| category | query | image \| edit \| video \| audio \| lipsync \| icon \| utility \| recast | no |  |
| q | query | string | no | Search in model id and name |

Request:

```bash
curl "https://xide.app/api/v1/models?category=image&q=flux" \
  -H "Authorization: Bearer $XIDE_API_KEY"
```

Response:

```json
{
  "ok": true,
  "data": {
    "models": [
      {
        "id": "text-to-image-flux-2-pro",
        "name": "Flux 2 Pro",
        "category": "image",
        "description": "High quality text-to-image",
        "credits": {
          "min": 60,
          "max": 60
        },
        "variants": []
      }
    ],
    "count": 1
  }
}
```

### GET /api/v1/models/{model}

Model details: inputs, defaults, variants — scope: `read`

Resolution variants have their own ids.

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| model | path | string | yes |  |

Request:

```bash
curl "https://xide.app/api/v1/models/text-to-image-flux-2-pro" \
  -H "Authorization: Bearer $XIDE_API_KEY"
```

Response:

```json
{
  "ok": true,
  "data": {
    "model": {
      "id": "text-to-image-flux-2-pro",
      "name": "Flux 2 Pro",
      "category": "image",
      "description": "High quality text-to-image",
      "credits": {
        "min": 60,
        "max": 60
      },
      "variants": [],
      "inputs": [
        {
          "name": "prompt",
          "label": "Prompt",
          "type": "text",
          "required": true,
          "max_length": 4000
        },
        {
          "name": "aspect_ratio",
          "label": "Aspect ratio",
          "type": "enum",
          "required": false,
          "options": [
            "1:1",
            "16:9",
            "9:16"
          ],
          "default": "1:1"
        }
      ]
    }
  }
}
```

### POST /api/v1/quote

Exact credit cost for given inputs — scope: `read`

The quoted amount is exactly what generate charges.

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| model | body (application/json) | string | yes |  |
| inputs | body (application/json) | object | no |  |

Request:

```bash
curl -X POST "https://xide.app/api/v1/quote" \
  -H "Authorization: Bearer $XIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "text-to-image-flux-2-pro", "inputs": {"prompt": "a red fox in fresh snow"}}'
```

Response:

```json
{
  "ok": true,
  "data": {
    "model": "text-to-image-flux-2-pro",
    "cost_credits": 60,
    "balance": 1200
  }
}
```

### POST /api/v1/generate/{model}

Starts a generation and returns the job (202) — scope: `generate`

Credits are reserved when the job is created and refunded if it fails. Repeats with the same Idempotency-Key within 24 hours return the original job (200, `Idempotent-Replayed: true`).

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| model | path | string | yes |  |
| Idempotency-Key | header | string | no |  |
| inputs | body (application/json) | object | yes | Model inputs (see GET /models/{model}) |
| webhook_url | body (application/json) | string | no | Public https URL notified when the job finishes |
| metadata | body (application/json) |  | no | Echoed back on the job and webhook (max 4 KB) |

Request:

```bash
curl -X POST "https://xide.app/api/v1/generate/text-to-image-flux-2-pro" \
  -H "Authorization: Bearer $XIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: order-42" \
  -d '{"inputs": {"prompt": "a red fox in fresh snow"}, "metadata": {"order": 42}}'
```

Response:

```json
{
  "ok": true,
  "data": {
    "job": {
      "job_id": "cmjob1a2b3c4d5e6f7g8h9i0",
      "status": "queued",
      "model": "text-to-image-flux-2-pro",
      "model_name": "Flux 2 Pro",
      "cost_credits": 60,
      "created_at": "2026-10-26T10:00:00.000Z",
      "completed_at": null,
      "error": null,
      "outputs": [],
      "result": null,
      "metadata": {
        "order": 42
      },
      "source": "api"
    },
    "balance": 1140
  }
}
```

### GET /api/v1/jobs/{job_id}

Job status and outputs; wait until it finishes — scope: `read`

`wait` long-polls until the job finishes.

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| job_id | path | string | yes |  |
| wait | query | integer (0–50) | no |  |

Request:

```bash
curl "https://xide.app/api/v1/jobs/JOB_ID?wait=30" \
  -H "Authorization: Bearer $XIDE_API_KEY"
```

Response:

```json
{
  "ok": true,
  "data": {
    "job": {
      "job_id": "cmjob1a2b3c4d5e6f7g8h9i0",
      "status": "completed",
      "model": "text-to-image-flux-2-pro",
      "model_name": "Flux 2 Pro",
      "cost_credits": 60,
      "created_at": "2026-10-26T10:00:00.000Z",
      "completed_at": "2026-10-26T10:00:09.000Z",
      "error": null,
      "outputs": [
        {
          "id": "cmoutput7x6w5v4u3t2s1r0q",
          "kind": "image",
          "url": "https://xide.app/api/v1/files/cmoutput7x6w5v4u3t2s1r0q",
          "download_url": "https://xide.app/api/v1/files/cmoutput7x6w5v4u3t2s1r0q?download=1",
          "content_type": "image/png",
          "width": 1024,
          "height": 1024,
          "duration": null,
          "size_bytes": 1832211,
          "nsfw": false
        }
      ],
      "result": null,
      "metadata": {
        "order": 42
      },
      "source": "api"
    }
  }
}
```

### GET /api/v1/jobs

Your jobs, newest first — scope: `read`

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| limit | query | integer (1–100) | no |  |
| status | query | queued \| processing \| completed \| failed \| cancelled | no |  |
| cursor | query | string | no | next_cursor from the previous page |

Request:

```bash
curl "https://xide.app/api/v1/jobs?limit=20&status=completed" \
  -H "Authorization: Bearer $XIDE_API_KEY"
```

Response:

```json
{
  "ok": true,
  "data": {
    "jobs": [
      {
        "job_id": "cmjob1a2b3c4d5e6f7g8h9i0",
        "status": "completed",
        "model": "text-to-image-flux-2-pro",
        "model_name": "Flux 2 Pro",
        "cost_credits": 60,
        "created_at": "2026-10-26T10:00:00.000Z",
        "completed_at": "2026-10-26T10:00:09.000Z",
        "error": null,
        "outputs": [
          {
            "id": "cmoutput7x6w5v4u3t2s1r0q",
            "kind": "image",
            "url": "https://xide.app/api/v1/files/cmoutput7x6w5v4u3t2s1r0q",
            "download_url": "https://xide.app/api/v1/files/cmoutput7x6w5v4u3t2s1r0q?download=1",
            "content_type": "image/png",
            "width": 1024,
            "height": 1024,
            "duration": null,
            "size_bytes": 1832211,
            "nsfw": false
          }
        ],
        "result": null,
        "metadata": {
          "order": 42
        },
        "source": "api"
      }
    ],
    "next_cursor": null
  }
}
```

### POST /api/v1/jobs/{job_id}/cancel

Cancels a queued job and refunds the credits — scope: `generate`

Credits are refunded.

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| job_id | path | string | yes |  |

Request:

```bash
curl -X POST "https://xide.app/api/v1/jobs/JOB_ID/cancel" \
  -H "Authorization: Bearer $XIDE_API_KEY"
```

Response:

```json
{
  "ok": true,
  "data": {
    "job": {
      "job_id": "cmjob1a2b3c4d5e6f7g8h9i0",
      "status": "cancelled",
      "model": "text-to-image-flux-2-pro",
      "model_name": "Flux 2 Pro",
      "cost_credits": 60,
      "created_at": "2026-10-26T10:00:00.000Z",
      "completed_at": "2026-10-26T10:00:09.000Z",
      "error": null,
      "outputs": [],
      "result": null,
      "metadata": {
        "order": 42
      },
      "source": "api"
    }
  }
}
```

### POST /api/v1/uploads

Uploads a reference file (file or URL) — scope: `upload`

Send a multipart `file` (max 1 GiB) or JSON `{ url }` (max 256 MB). Use the returned upload_id as a media input.

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| file | body (multipart/form-data) | string | yes |  |
| url | body (application/json) | string | yes |  |

Request:

```bash
curl -X POST "https://xide.app/api/v1/uploads" \
  -H "Authorization: Bearer $XIDE_API_KEY" \
  -F "file=@photo.jpg"

# or
curl -X POST "https://xide.app/api/v1/uploads" \
  -H "Authorization: Bearer $XIDE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com/photo.jpg"}'
```

Response:

```json
{
  "ok": true,
  "data": {
    "upload_id": "cmupload9z8y7x6w5v4u3t2",
    "content_type": "image/jpeg",
    "size_bytes": 482113
  }
}
```

### GET /api/v1/files/{output_id}

Downloads an output file (redirect) — scope: `read`

Redirects to a short-lived signed URL.

| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
| output_id | path | string | yes |  |
| download | query | 0 \| 1 | no |  |

Request:

```bash
curl -L "https://xide.app/api/v1/files/OUTPUT_ID?download=1" \
  -H "Authorization: Bearer $XIDE_API_KEY" \
  -o output.png
```

Response:

```http
HTTP/1.1 302 Found
Location: https://…/signed-url (short-lived)
```

### GET /api/v1/account

Balance, key info and today's usage — scope: `account`

Request:

```bash
curl "https://xide.app/api/v1/account" \
  -H "Authorization: Bearer $XIDE_API_KEY"
```

Response:

```json
{
  "ok": true,
  "data": {
    "credits": {
      "balance": 1140
    },
    "key": {
      "name": "My app",
      "prefix": "xide_live_Ab",
      "last4": "9xQz",
      "scopes": [
        "generate",
        "read",
        "upload",
        "account"
      ],
      "rate_limit_per_min": 60,
      "daily_credit_cap": 2000,
      "expires_at": null
    },
    "usage_today": {
      "requests": 12,
      "jobs": 1,
      "credits_spent": 60,
      "errors": 0
    }
  }
}
```

### GET /api/v1/openapi.json

Machine-readable API description — no API key required

Request:

```bash
curl "https://xide.app/api/v1/openapi.json"
```

## Webhooks

When a job finishes, a job.completed, job.failed or job.cancelled event is sent to webhook_url. Headers: X-Xide-Event, X-Xide-Timestamp and X-Xide-Signature (sha256=HMAC_SHA256(secret, timestamp + "." + body)). Failed deliveries are retried up to three times.

```json
{
  "event": "job.completed",
  "job": {
    "job_id": "cmjob1a2b3c4d5e6f7g8h9i0",
    "status": "completed",
    "model": "text-to-image-flux-2-pro",
    "model_name": "Flux 2 Pro",
    "cost_credits": 60,
    "created_at": "2026-10-26T10:00:00.000Z",
    "completed_at": "2026-10-26T10:00:09.000Z",
    "error": null,
    "outputs": [
      {
        "id": "cmoutput7x6w5v4u3t2s1r0q",
        "kind": "image",
        "url": "https://xide.app/api/v1/files/cmoutput7x6w5v4u3t2s1r0q",
        "download_url": "https://xide.app/api/v1/files/cmoutput7x6w5v4u3t2s1r0q?download=1",
        "content_type": "image/png",
        "width": 1024,
        "height": 1024,
        "duration": null,
        "size_bytes": 1832211,
        "nsfw": false
      }
    ],
    "result": null,
    "metadata": {
      "order": 42
    },
    "source": "api"
  },
  "sent_at": "2026-10-26T10:00:10.000Z"
}
```

```js
// Node.js — verify the signature with the raw request body
const crypto = require("crypto");
const timestamp = req.headers["x-xide-timestamp"];
const signature = req.headers["x-xide-signature"];
const expected = "sha256=" + crypto
  .createHmac("sha256", process.env.XIDE_WEBHOOK_SECRET)
  .update(timestamp + "." + rawBody)
  .digest("hex");
const valid = signature.length === expected.length &&
  crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected));
```

## Idempotency

Add an Idempotency-Key header to a generation request and repeats with the same key within 24 hours won't start a new job or spend credits; the original job is returned with 200 and an Idempotent-Replayed: true header. Safe to retry after network errors.

## Limits

60 requests per minute per key · JSON body up to 256 KB · file uploads up to 1 GiB (256 MB from a URL), at most 2 uploads at once · job wait up to 50 s.

## Error codes

| HTTP | code | meaning |
|---|---|---|
| 401 | `unauthorized` | Key missing, invalid or revoked |
| 403 | `forbidden` | Account suspended, email not verified or IP not allowed |
| 403 | `forbidden_scope` | The key lacks permission for this action |
| 402 | `insufficient_credits` | Not enough credits |
| 422 | `validation_error` | Invalid inputs (missing or wrong field) |
| 413 | `payload_too_large` | Body or file exceeds the size limit |
| 404 | `model_not_found` | Model not found |
| 404 | `not_found` | Job or file not found |
| 409 | `conflict` | The job can no longer be canceled, or a request with the same Idempotency-Key is in progress |
| 409 | `model_disabled` | The model is temporarily disabled |
| 429 | `rate_limited` | Per-minute request or concurrent upload limit exceeded |
| 429 | `daily_credit_cap_reached` | The key's daily credit cap is used up |
| 429 | `too_many_active_jobs` | Too many jobs running at once |
| 503 | `maintenance` | Under maintenance; retry after Retry-After |
| 503 | `api_disabled` | The developer API is temporarily turned off |
| 500 | `internal` | Unexpected error; try again |

## Models

128 models. Use the id in `POST /api/v1/generate/{model}`. Credit ranges are estimates — call `POST /api/v1/quote` (or the MCP tool `estimate_cost`) for the exact amount. Resolution variants have their own ids. Inputs per model: `GET /api/v1/models/{model}`.

| id | name | category | credits | variants |
|---|---|---|---|---|
| `voiceover-elevenlabs-turbo-v2-5` | ElevenLabs Voiceover | audio | 1–4000 |  |
| `music-generation-lyria-3` | Lyria 3 | audio | 80–160 |  |
| `music-generation-google-lyria` | Google Lyria | audio | 80 |  |
| `sound-effects` | Sound Effects | audio | 5–110 |  |
| `audio-isolation` | Audio Isolation | audio | 60 |  |
| `beta-remove-background` | Remove Background | edit | 3 |  |
| `image-upscaler-precision-v2` | Upscaler Precision V2 | edit | 90–1440 |  |
| `image-upscaler-precision` | Upscaler Precision | edit | 90 |  |
| `image-upscaler` | Upscaler Creative | edit | 90–1440 |  |
| `text-to-image-gpt-image-2-5-edit` | GPT Image 2.5 (Edit) | edit | 15–10000 |  |
| `text-to-image-gpt-image-2-edit` | GPT Image 2 (Edit) | edit | 15–5000 |  |
| `text-to-image-seedream-v5-pro-edit` | Seedream 5.0 Pro (Edit) | edit | 75–150 |  |
| `text-to-image-seedream-v5-lite-edit` | Seedream V5 Lite (Edit) | edit | 50 |  |
| `text-to-image-seedream-v4-5-edit` | Seedream 4.5 (Edit) | edit | 50 |  |
| `text-to-image-seedream-v4-edit` | Seedream 4 (Edit) | edit | 50 |  |
| `image-expand-flux-pro` | Flux Pro | edit | 50 |  |
| `beta-text-to-image-reimagine-flux` | Flux Reimagine | edit | 50 |  |
| `ideogram-image-edit` | Ideogram Image Edit | edit | 30–90 |  |
| `image-expand-ideogram` | Ideogram | edit | 60 |  |
| `image-expand-seedream-v4-5` | Seedream V4.5 | edit | 50 |  |
| `image-relight` | Image Relight | edit | 75–150 |  |
| `image-style-transfer` | Style Transfer | edit | 200 |  |
| `image-change-camera` | Image Change Camera | edit | 50 |  |
| `skin-enhancer-creative` | Skin Enhancer Creative | edit | 100 |  |
| `skin-enhancer-faithful` | Skin Enhancer Faithful | edit | 200 |  |
| `skin-enhancer-flexible` | Skin Enhancer Flexible | edit | 600 |  |
| `classifier-image` | AI Image Detector | utility | 8 |  |
| `image-to-prompt` | Image to Prompt | utility | 8 |  |
| `text-to-image` | Classic Text-to-Image | image | 1–4 |  |
| `text-to-image-flux-2-klein` | Flux 2 Klein | image | 10–45 |  |
| `text-to-image-flux-2-turbo` | Flux 2 Turbo | image | 20 |  |
| `text-to-image-flux-dev` | Flux Dev | image | 10 |  |
| `text-to-image-flux-2-flex` | Flux 2 Flex | image | 80–280 |  |
| `text-to-image-flux-2-pro` | Flux 2 Pro | image | 50–175 |  |
| `text-to-image-flux-pro-v1-1` | Flux Pro 1.1 | image | 50 |  |
| `text-to-image-hyperflux` | HyperFlux | image | 10 |  |
| `text-to-image-flux-kontext-pro` | Flux Kontext Pro | image | 70 |  |
| `text-to-image-flux-kontext-max` | Flux Kontext Max | image | 150 |  |
| `text-to-image-gpt-image-2` | GPT Image 2 | image | 15–5000 |  |
| `text-to-image-gpt-image-2-5` | GPT Image 2.5 | image | 15–10000 |  |
| `text-to-image-seedream-v4` | Seedream 4 | image | 50 |  |
| `text-to-image-seedream-v4-5` | Seedream 4.5 | image | 50 |  |
| `text-to-image-seedream-v5-lite` | Seedream V5 Lite | image | 50 |  |
| `text-to-image-seedream-v5-pro` | Seedream 5.0 Pro | image | 75–150 |  |
| `text-to-image-nano-banana-pro-flash` | Nano Banana Pro Flash | image | 75–150 |  |
| `text-to-image-nano-banana-pro` | Nano Banana Pro | image | 75–150 |  |
| `text-to-image-z-image` | Z-Image | image | 5 |  |
| `mystic` | Mystic | image | 50–130 |  |
| `gemini-2-5-flash-image-preview` | Gemini 2.5 Flash | image | 120 |  |
| `text-to-image-runway` | Runway | image | 200 |  |
| `video-upscaler-turbo` | Video Upscaler Turbo | video | 60–300 |  |
| `image-to-video-wan-2-7` | WAN 2.7 (Image to Video) | video | 260–3000 |  |
| `reference-to-video-wan-2-7` | WAN 2.7 (Reference to Video) | video | 260–2000 |  |
| `text-to-video-wan-2-7` | WAN 2.7 (Text to Video) | video | 260–3000 |  |
| `video-edit-wan-2-7` | WAN 2.7 (Video Edit) | video | 130–2000 |  |
| `image-to-video-wan-2-5-i2v-1080p` | WAN 2.5 1080p (Image to Video) | video | 1500–3000 | `image-to-video-wan-2-5-i2v-1080p`, `image-to-video-wan-2-5-i2v-720p`, `image-to-video-wan-2-5-i2v-480p` |
| `text-to-video-wan-2-5-t2v-1080p` | WAN 2.5 1080p (Text to Video) | video | 1500–3000 | `text-to-video-wan-2-5-t2v-1080p`, `text-to-video-wan-2-5-t2v-720p`, `text-to-video-wan-2-5-t2v-480p` |
| `image-to-video-wan-v2-6-1080p` | WAN 2.6 1080p (Image to Video) | video | 1500–4500 | `image-to-video-wan-v2-6-1080p`, `image-to-video-wan-v2-6-720p` |
| `text-to-video-wan-v2-6-1080p` | WAN 2.6 1080p (Text to Video) | video | 1500–4500 | `text-to-video-wan-v2-6-1080p`, `text-to-video-wan-v2-6-720p` |
| `image-to-video-wan-v2-2-720p` | WAN 2.2 | video | 160–320 | `image-to-video-wan-v2-2-720p`, `image-to-video-wan-v2-2-480p` |
| `image-to-video-wan-v2-2-580p` | WAN 2.2 580p | video | 80–160 |  |
| `video-kling-v3-motion-control-pro` | Kling 3 Pro (Motion Control) | video | 1500 | `video-kling-v3-motion-control-pro`, `video-kling-v3-motion-control-std` |
| `video-kling-v3-omni-4k` | Kling 3 Omni | video | 1200–6000 | `video-kling-v3-omni-4k`, `video-kling-v3-omni-pro`, `video-kling-v3-omni-std` |
| `image-to-video-kling-v3-turbo-1080p` | Kling 3.0 Turbo I2V | video | 780–3900 | `image-to-video-kling-v3-turbo-1080p`, `image-to-video-kling-v3-turbo-720p` |
| `text-to-video-kling-v3-turbo-1080p` | Kling 3.0 Turbo T2V | video | 780–3900 | `text-to-video-kling-v3-turbo-1080p`, `text-to-video-kling-v3-turbo-720p` |
| `reference-to-video-kling-v3-omni-pro` | Kling 3 Omni Pro (Reference to Video) | video | 285–1425 | `reference-to-video-kling-v3-omni-pro`, `reference-to-video-kling-v3-omni-std` |
| `video-kling-v3-pro` | Kling 3 Pro | video | 270–1350 | `video-kling-v3-pro`, `video-kling-v3-std` |
| `video-kling-4k-i2v` | Kling 4K I2V | video | 1200–6000 |  |
| `video-kling-4k-t2v` | Kling 4K T2V | video | 1200–6000 |  |
| `video-kling-v2-6-motion-control-pro` | Kling 2.6 Pro (Motion Control) | video | 1100 | `video-kling-v2-6-motion-control-pro`, `video-kling-v2-6-motion-control-std` |
| `image-to-video-kling-v2-6-pro` | Kling 2.6 Pro (Image to Video) | video | 225–450 |  |
| `image-to-video-kling-v2-5-720p` | Kling 2.5 | video | 140–280 | `image-to-video-kling-v2-5-720p`, `image-to-video-kling-v2-5-pro` |
| `image-to-video-kling-elements-pro` | Kling Elements Pro | video | 475–950 | `image-to-video-kling-elements-pro`, `image-to-video-kling-elements-std` |
| `image-to-video-kling-o1-pro` | Kling O1 Pro (Image to Video) | video | 500–1000 | `image-to-video-kling-o1-pro`, `image-to-video-kling-o1-std` |
| `image-to-video-kling-o1-pro-video-reference` | Kling O1 Pro (Video Reference) | video | 500–1000 |  |
| `image-to-video-kling-o1-std-video-reference` | Kling O1 Standard (Video Reference) | video | 375–750 |  |
| `reference-to-video-veo-3-1` | Veo 3.1 (Reference to Video) | video | 1600–2720 |  |
| `image-to-video-veo-3-1-fast` | Veo 3.1 Fast (Image to Video) | video | 400–2160 | `image-to-video-veo-3-1-fast`, `image-to-video-veo-3-1` |
| `text-to-video-veo-3-1-fast` | Veo 3.1 Fast (Text to Video) | video | 400–2160 | `text-to-video-veo-3-1-fast`, `text-to-video-veo-3-1` |
| `image-to-video-veo-3-1-lite` | Veo 3.1 Lite (Image to Video) | video | 160–320 |  |
| `text-to-video-veo-3-1-lite` | Veo 3.1 Lite (Text to Video) | video | 160–320 |  |
| `video-seedance-2-5-pro-1080p` | Seedance 2.5 Pro | video | 4400–33000 | `video-seedance-2-5-pro-1080p`, `video-seedance-2-5-pro-720p`, `video-seedance-2-5-pro-480p` |
| `video-seedance-2-pro-4k` | Seedance 2.0 Pro | video | 5600–21000 | `video-seedance-2-pro-4k`, `video-seedance-2-pro-1080p`, `video-seedance-2-pro-720p`, `video-seedance-2-pro-480p` |
| `video-seedance-2-fast-720p` | Seedance 2.0 Fast | video | 940–3525 | `video-seedance-2-fast-720p`, `video-seedance-2-fast-480p` |
| `video-seedance-2-mini-720p` | Seedance 2.0 Mini | video | 560–2100 | `video-seedance-2-mini-720p`, `video-seedance-2-mini-480p` |
| `image-to-video-happy-horse-1-1` | Happy Horse 1.1 (Image to Video) | video | 495–4200 |  |
| `reference-to-video-happy-horse-1-1` | Happy Horse 1.1 (Reference to Video) | video | 495–4200 |  |
| `text-to-video-happy-horse-1-1` | Happy Horse 1.1 (Text to Video) | video | 495–4200 |  |
| `video-edit-happy-horse-1` | Happy Horse 1.0 (Video Edit) | video | 550–950 |  |
| `image-to-video-happy-horse-1` | Happy Horse 1.0 (Image to Video) | video | 495–4200 |  |
| `reference-to-video-happy-horse-1` | Happy Horse 1.0 (Reference to Video) | video | 495–4200 |  |
| `text-to-video-happy-horse-1` | Happy Horse 1.0 (Text to Video) | video | 495–4200 |  |
| `image-to-video-minimax-hailuo-2-3-1080p-fast` | MiniMax Hailuo 2.3 1080p Fast | video | 258 |  |
| `image-to-video-minimax-hailuo-2-3-1080p` | MiniMax Hailuo 2.3 1080p | video | 240 |  |
| `image-to-video-minimax-hailuo-2-3-768p-fast` | MiniMax Hailuo 2.3 768p Fast | video | 150–250 | `image-to-video-minimax-hailuo-2-3-768p-fast`, `image-to-video-minimax-hailuo-2-3-768p` |
| `image-to-video-minimax-hailuo-02-1080p` | MiniMax Hailuo 02 1080p | video | 720 |  |
| `image-to-video-minimax-hailuo-02-768p` | MiniMax Hailuo 02 768p | video | 210–350 |  |
| `image-to-video-minimax-live` | MiniMax Video 01 Live | video | 720 |  |
| `image-to-video-ltx-2-pro` | LTX Video 2.0 Pro (Image to Video) | video | 360–1200 | `image-to-video-ltx-2-pro`, `image-to-video-ltx-2-fast` |
| `text-to-video-ltx-2-pro` | LTX Video 2.0 Pro (Text to Video) | video | 360–1200 | `text-to-video-ltx-2-pro`, `text-to-video-ltx-2-fast` |
| `image-to-video-pixverse-v6-transition` | PixVerse V6 (Transition) | video | 100–3000 |  |
| `text-to-video-pixverse-v6` | PixVerse V6 (Text to Video) | video | 100–3000 |  |
| `image-to-video-pixverse-v5-5-transition` | PixVerse V5.5 (Transition) | video | 500–2000 |  |
| `text-to-video-pixverse-v5-5` | PixVerse V5.5 (Text to Video) | video | 500–2000 |  |
| `image-to-video-pixverse-v5` | PixVerse V5 (Image to Video) | video | 500–1600 |  |
| `image-to-video-pixverse-v5-transition` | PixVerse V5 (Transition) | video | 500–1600 |  |
| `text-to-video-pixverse-v5` | PixVerse V5 (Text to Video) | video | 500–1600 |  |
| `image-to-video-runway-4-5` | Runway Gen-4.5 (Image to Video) | video | 1100–2200 |  |
| `text-to-video-runway-4-5` | Runway Gen-4.5 (Text to Video) | video | 1100–2200 |  |
| `image-to-video-runway-gen4-turbo` | Runway Gen4 Turbo | video | 500–1000 |  |
| `video-runway-act-two` | Runway Act Two Character Performance | video | 1000 |  |
| `video-omni-human-1-5` | OmniHuman 1.5 | video | 1800 |  |
| `video-vfx` | VFX | video | 300 |  |
| `video-upscaler-topaz` | Video Upscaler Topaz | video | 150–750 |  |
| `video-upscaler` | Video Upscaler | video | 100–500 |  |
| `video-upscaler-precision` | Video Upscaler Precision | video | 100–500 |  |
| `lip-sync-latent-sync` | Latent Sync | lipsync | 1400 |  |
| `lip-sync-veed-fabric-1-0-fast` | Veed Fabric 1.0 Fast | lipsync | 1800–3500 |  |
| `lip-sync-veed-fabric-1-0` | Veed Fabric 1.0 | lipsync | 1400–2600 |  |
| `text-to-icon` | Icon Generator | icon | 150 |  |
| `text-to-icon-preview` | Icon Preview | icon | 150 |  |
| `flux-dev` | Flux Dev | image | 20 |  |
| `flux-schnell` | Flux Schnell | image | 10 |  |
| `real-esrgan` | Real-ESRGAN | edit | 8 |  |
| `p-video-replace` | P-Video Replace | recast | 60 |  |
| `wan-animate-replace` | Wan 2.2 Animate Replace | recast | 100 |  |
| `recast` | MiniMax H3 Max Recast | recast | 3000–27000 |  |
| `pixverse-swap` | Pixverse Swap | recast | 300–800 |  |
