Модели 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 дней). Скачайте то, что нужно хранить дольше.
Деньги
- Перед отправкой резервируется оценка: цена единицы × ожидаемое число единиц (число картинок, размер в мегапикселях с округлением вверх, длительность видео — по умолчанию 5 секунд).
- Итог списывается по данным fal о фактически оплаченных единицах. Они появляются через несколько минут после завершения. До этого запрос в состоянии
billing_pending, это нормально: результат вы получаете сразу. - Задание, которое fal закончил ошибкой, не оплачивается: резерв возвращается через короткое время.
Одновременных заданий можно держать ограниченное число. У картинок, видео и звука свой лимит, не связанный с лимитом чата. Подробности — в разделе Ошибки и лимиты.