6ioAPI

Sixio models

The sixio group opens the 6io image and video models: Seedance, Kling, Grok Imagine, WAN, LTX-2, HappyHorse, MiniMax, PixVerse, Nano Banana, GPT Image, Flux, Qwen Image, Seedream and others. These are the same generations as on the 6io site: the same parameter checks and the same price.

A model name is sixio/<name>, for example sixio/flux-3/klein-text-to-image. Generation runs as tasks: you submit a task, poll the status and collect the result. The addresses start with https://api.6io.io/native/sixio, the authorization is the same: Authorization: Bearer sixio_sk_....

Every model has its own page: the input fields, the values the model sets itself, files, an example and what the price depends on. These pages are meant for AI agents; the list is at https://api.6io.io/md/en/sixio-models.md. The live catalog with prices is GET /native/sixio/models.

A full example

import time
import requests

API = "https://api.6io.io/native/sixio"
H = {"Authorization": "Bearer sixio_sk_..."}

# 1. submit the task
task = requests.post(f"{API}/tasks", headers=H, json={
    "model": "sixio/flux-3/klein-text-to-image",
    "input": {"prompt": "a red circle on a white background", "aspectRatio": "1:1", "resolution": "1K"},
}).json()

# 2. wait for the end
while True:
    state = requests.get(task["status_url"], headers=H).json()
    if state["status"] in ("succeeded", "failed"):
        break
    time.sleep(3)

# 3. collect the files
if state["status"] == "succeeded":
    print(state["result"]["urls"])
else:
    print(state["error"]["message"])

If the input does not fit (422 invalid_input with a reason) or there is not enough money (402 insufficient_funds), the task is not created: an error comes instead of status_url, and nothing is charged. The error codes are in Errors and limits.

The catalog

curl "https://api.6io.io/native/sixio/models" -H "Authorization: Bearer sixio_sk_..."

For every model the answer has:

  • id, the name for a request (sixio/...), and kind, image or video;
  • example_input, an example of the input field where there is one;
  • price, the model's price in advance, in credits: unit is what the price is set for (per image, per second, per video), from and to are the lowest and the highest price in that unit, options is the price by variant (resolution, length, sound).

price is for reference. The price charged is the 6io price for your exact input (length, resolution, sound, number of images) with the group markup. The input fields of each model, their types and an example call are visible in the console: open the model on the Models tab.

The input fields

input holds the generation parameters in the form 6io accepts for this model. Field names are camelCase: aspectRatio, imageUrls, referenceImageUrls, audio and so on. Files are passed as public http(s) links.

  • Some fields are set by the model itself and cannot be overridden. For example, for sixio/bytedance/seedance-2-fast the quality tier is always fast, and for sixio/nano-banana-pro the model field is that model.
  • To edit a picture with Flux 3 Klein or Qwen Image 2.1, send the same model (sixio/flux-3/klein-text-to-image, sixio/qwen2-1/text-to-image) with the source pictures in sourceImageUrls.
  • Extending and upscaling a clip (sixio/grok-imagine/extend, sixio/grok-imagine/upscale, sixio/pixverse-v6/extend) take the source in the originalVideoId field. It holds the id of your earlier finished sixio task, a string like req_… (a number will not do). A foreign or wrong ID answers 422 invalid_input.
  • The length of video and audio for the price is measured by the server. Fields where a client could name it itself are not accepted: inputVideoSeconds of Seedance and MiniMax H3 and durationHint of Kling Avatar give 400 unsupported_parameter. For Kling Motion the videoDuration field is required; give any number from 3 to 30: it is ignored.

Wrong values are refused at once with 422 invalid_input and a reason. No money is reserved then.

Images, audio and video are passed as public http(s) links. Where the file itself sets the price (the length of a video or audio), we do not trust the link: we download the file, check it and work with a copy from then on. These are the fields:

  • referenceVideoUrls of Seedance 2, Seedance 2.5 and MiniMax H3;
  • videoUrl of sixio/happyhorse/video-edit;
  • imageUrl and videoUrl of sixio/kling-2.6/motion-control;
  • imageUrl and audioUrl of sixio/kling/ai-avatar-standard and sixio/kling/ai-avatar-pro.

An example for Kling Motion:

{
  "model": "sixio/kling-2.6/motion-control",
  "input": {
    "prompt": "The character dances",
    "imageUrl": "https://example.com/character.png",
    "videoUrl": "https://example.com/motion.mp4",
    "orientation": "video",
    "mode": "720p",
    "videoDuration": 5
  }
}

The rules:

  • The link must lead to a public address and return the file with a 200 answer without a login. Your own server, cloud storage or a link from the result of an earlier sixio task will do. Addresses in private networks are not accepted.
  • Size: an image up to 10 MB, a video up to 100 MB, audio up to 50 MB. Video is MP4, MOV or WebM, an image is JPG, PNG or WebP. If the link has no extension, the format is taken from the content or the Content-Type header.
  • The field takes no more links than the model accepts: up to 3 video references for Seedance 2 and MiniMax H3, up to 10 for Seedance 2.5. For MiniMax H3 their total length is up to 15 seconds, longer is 422 invalid_input.
  • A link to a file that already lies on a 6io server (for example, uploaded on the site) is passed as it is, without a copy. Only a file of your own account is accepted.
  • The copy stays with us for 15 minutes at most and is deleted as soon as the task ends (done or failed). You do not get a link to the copy. On a retry send the original link.
  • The file is downloaded before the money is reserved. If the link did not open, the file did not fit or is too big, the 422 invalid_input answer names the field and the reason, and no money is reserved.
  • An account can hold a limited number of copies at the same time (12 files and 300 MB by default). Above that the answer is 429 rate_limit_exceeded: retry when the running tasks end.

Submitting a task

curl -X POST "https://api.6io.io/native/sixio/tasks" \
  -H "Authorization: Bearer sixio_sk_..." \
  -H "Content-Type: application/json" \
  -d '{"model": "sixio/flux-3/klein-text-to-image", "input": {"prompt": "a red circle on a white background", "aspectRatio": "1:1", "resolution": "1K"}}'

Three fields are allowed in the body: model, input and an optional webhook_url, the address where we report the end of the task so that you need not poll the status (webhooks). Other fields are not accepted. The answer:

{
  "id": "req_8fK2xQ1mZpVwT9sJdL4nAg",
  "object": "task",
  "model": "sixio/flux-3/klein-text-to-image",
  "status": "queued",
  "status_url": "https://api.6io.io/native/sixio/tasks/req_8fK2xQ1mZpVwT9sJdL4nAg"
}

The id is ours, the task belongs to your account, and nobody else's can be opened. The Idempotency-Key header works as in chat: a retry with the same key does not create a second task (see Retries and failures).

Status and result

GET status_url shows the state of the task at the moment of the request. The status field:

status Meaning
queued the task is accepted and waits to start
running the task is in progress
succeeded done, result.urls holds the links to the files (all of them if there are several images)
failed the task was not done, the reason is in error.message
unknown the state could not be read, the money is being checked: ask again later

The answer also has created_at, finished_at and billing (the state of the money and the charged amount in credits).

File links lead to our server and are valid for a limited time, 14 days by default. Download what you need to keep longer: we do not store results.

Money

  1. The price of a task is the 6io price for your input with the group markup. It is reserved on submit. If the available funds are lower, the answer is 402 insufficient_funds.
  2. A finished task charges exactly the reserve.
  3. If the task was not done (fail), the reserve is returned in full.
  4. If the input is refused (422 invalid_input) or the service is temporarily unavailable (503 service_unavailable), the task is not created and no money is spent.

The number of tasks at the same time is limited. Images and video have their own limit, separate from the chat limit. Details are in Errors and limits.

Safety filters

Where the model allows it, the provider's own content filters are off, as on the 6io site. The content of a request and its consequences stay your responsibility (see the terms of use).