6ioAPI

Модели fal

Группа fal открывает каталог fal: картинки, видео, звук и другие модели. Название модели — fal/<id модели у fal>, например fal/fal-ai/flux/schnell. Генерация идёт заданием: запрос сразу возвращает номер, по нему вы узнаёте статус и забираете результат, когда он готов. У fal это называется очередью (queue), отсюда queue в адресах. Адреса начинаются с https://api.6io.io/native/fal, авторизация та же: Authorization: Bearer sixio_sk_....

Тело задания уходит в fal как есть. Какие поля у модели, смотрите на её странице на fal.ai, вкладка API: https://fal.ai/models/<id модели>/api, например fal-ai/flux/schnell.

Пример целиком

import time
import requests

API = "https://api.6io.io/native/fal"
H = {"Authorization": "Bearer sixio_sk_..."}
MODEL = "fal-ai/flux/schnell"

# 1. цена единицы (необязательно)
print(requests.get(f"{API}/price/{MODEL}", headers=H).json())

# 2. отправить задание
job = requests.post(
    f"{API}/queue/{MODEL}",
    headers=H,
    json={"prompt": "a red circle on white background", "image_size": {"width": 1024, "height": 1024}},
).json()

# 3. ждать, пока статус станет COMPLETED
while True:
    st = requests.get(job["status_url"], headers=H).json()
    if st["status"] == "COMPLETED":
        break
    time.sleep(2)

# 4. забрать результат
if st.get("error"):
    raise RuntimeError(st["error"])
result = requests.get(job["response_url"], headers=H).json()
print(result["images"][0]["url"])

Скачайте файл сразу или сохраните ссылку: ссылки на файлы действуют ограниченное время (см. ниже).

Каталог и цена

curl "https://api.6io.io/native/fal/models?q=flux&limit=5" -H "Authorization: Bearer sixio_sk_..."
curl "https://api.6io.io/native/fal/price/fal-ai/flux/schnell" -H "Authorization: Bearer sixio_sk_..."

Каталог большой, поэтому он листается: ищите по q и берите следующую страницу по next_cursor.

Ответ про цену:

{
  "id": "fal/fal-ai/flux/schnell",
  "currency": "credits",
  "unit": "megapixels",
  "price_per_unit": "0.240000000000",
  "note": "The final charge depends on the billable units of the finished request (megapixels)"
}

unit — за что назначена цена, price_per_unit — цена одной единицы в кредитах (наценка уже учтена). Поддерживаются модели с единицами images, megapixels, seconds и videos. Для остальных (например, оплата по вычислительному времени) отправка отвечает 400 unsupported_model. Модели, которой нет у fal, — 404 model_not_found.

Отправка задания

curl -X POST "https://api.6io.io/native/fal/queue/fal-ai/flux/schnell" \
  -H "Authorization: Bearer sixio_sk_..." \
  -H "Content-Type: application/json" \
  -d '{"prompt": "a red circle on white background", "image_size": {"width": 1024, "height": 1024}}'

Ответ:

{
  "request_id": "req_8fK2xQ1mZpVwT9sJdL4nAg",
  "status": "IN_QUEUE",
  "status_url": "https://api.6io.io/native/fal/requests/req_8fK2xQ1mZpVwT9sJdL4nAg/status",
  "response_url": "https://api.6io.io/native/fal/requests/req_8fK2xQ1mZpVwT9sJdL4nAg",
  "cancel_url": "https://api.6io.io/native/fal/requests/req_8fK2xQ1mZpVwT9sJdL4nAg/cancel"
}

request_id и ссылки наши, а не fal: задание принадлежит вашему аккаунту, чужое открыть нельзя. Из параметров строки запроса принимается только fal_webhook — адрес для уведомления о конце задания; остальные не поддерживаются. Заголовок Idempotency-Key работает так же, как в чате: см. Повторы и сбои.

Уведомление вместо опроса

Добавьте к адресу отправки ?fal_webhook=<адрес> (адрес закодирован), и мы пришлём на него итог, когда fal закончит задание. Тело уведомления построено как вебхук fal (request_id, status OK или ERROR, payload), но подписано по Standard Webhooks нашим секретом, а ссылки на файлы — наши. Подробности, проверка подписи и повторы — на странице Уведомления.

Статус, результат, отмена

  • GET status_url — IN_QUEUE, IN_PROGRESS или COMPLETED (здесь слова fal, как у его SDK; в Sixio и заданиях состояния называются queued, running, succeeded, failed). Если fal закончил задание ошибкой, в ответе есть поле error.
  • GET response_url — результат модели в формате fal. Пока задание не готово, ответ приходит как у fal (400, «still in progress»).
  • PUT cancel_url — отмена. 200 значит, что задание снято с очереди и не будет выполняться, деньги возвращаются. 202 значит, что сигнал отправлен идущему заданию: оно могло дойти до конца, тогда оно оплачивается.

Ссылки на файлы в результате ведут на наш сервер и действуют ограниченное время (по умолчанию 14 дней). Скачайте то, что нужно хранить дольше.

Деньги

  1. Перед отправкой резервируется оценка: цена единицы × ожидаемое число единиц (число картинок, размер в мегапикселях с округлением вверх, длительность видео — по умолчанию 5 секунд).
  2. Итог списывается по данным fal о фактически оплаченных единицах. Они появляются через несколько минут после завершения. До этого запрос в состоянии billing_pending, это нормально: результат вы получаете сразу.
  3. Задание, которое fal закончил ошибкой, не оплачивается: резерв возвращается через короткое время.

Одновременных заданий можно держать ограниченное число. У картинок, видео и звука свой лимит, не связанный с лимитом чата. Подробности — в разделе Ошибки и лимиты.