API Hubs и WaveSpeedAI
Альтернатива WaveSpeedAI
API Hubs — альтернатива WaveSpeedAI для генерации изображений и видео с единым предоплаченным балансом. Ниже — цены общих моделей изображений и перенос запросов на наш API задач.
Сравнение API Hubs и WaveSpeedAI
Когда выбрать API Hubs
Выбирайте API Hubs, если важнее свести вызовы WaveSpeedAI к одному эндпоинту медиазадач, чем сохранить отдельные маршруты моделей и синхронные режимы.
Когда стоит остаться на WaveSpeedAI
Оставайтесь на WaveSpeedAI, если приложение зависит от специализированного эндпоинта или синхронного режима. Перед переносом каждого маршрута проверьте наличие модели и её параметры.
Документация API WaveSpeedAIПрокрутите таблицу по горизонтали, чтобы увидеть все столбцы.
| Деталь интеграции | WaveSpeedAI | API Hubs |
|---|---|---|
| Запрос | POST /api/v3/bytedance/seedream-v4.5 | POST /api/v1/generation/create |
| Авторизация | Authorization: Bearer | Authorization: Bearer |
| Идентификатор модели | bytedance/seedream-v4.5 | seedream-4-5 |
Сравнивается модель из примера ниже, а не все эндпоинты провайдера. Одинаковые названия моделей не гарантируют одинаковые параметры, модерацию или результат.
Сравнение цен: WaveSpeedAI и API Hubs
Выбранные общие модели с одинаковыми единицами тарификации. Наши цены берутся из текущего каталога; цены конкурента приведены с датами проверки и ссылками на источники.
| Модель | API Hubs | WaveSpeedAI | Разница нашей цены |
|---|---|---|---|
| Seedream 4.52K · за изображение · по тексту | API Hubs0.036 coins | WaveSpeedAI$0.04 | На 10% ниже |
| Nano Bananaза изображение · по тексту | API Hubs0.015 coins | WaveSpeedAI$0.038 | На 60.5% ниже |
Одно изображение по текстовому запросу без референсов. Указаны публичные базовые тарифы; подписки, скидки за объём, другие разрешения и редактирование могут менять итоговую цену.
Наш баланс выражен в монетах: 1 монета = 1 USD. Цены конкурента указаны в USD.
Стоимость рабочего объёма
Seedream 4.5 · 2K
1 000 изображений с настройками выше
- API Hubs
- 36 coins
- WaveSpeedAI
- $40
Nano Banana
1 000 изображений с настройками выше
- API Hubs
- 15 coins
- WaveSpeedAI
- $38
Примеры рассчитаны по строкам выше, без скидок за объём, подписок и дополнительных платных опций. Они не обещают одинаковую скорость или одинаковые результаты.
Миграция с WaveSpeedAI
Замените эндпоинт модели /api/v3 на /api/v1/generation/create и передайте публичный id модели в JSON. Вместо size используйте документированные поля size и resolution, а опрос prediction замените нашим эндпоинтом статуса задачи.
1
Зарегистрируйтесь, пополните предоплаченный баланс и создайте API-ключ.
2
Отправьте POST /api/v1/generation/create с публичным id модели и параметрами из документации. Одна задача создаёт один результат.
3
Получите taskId из ответа. Опрашивайте GET /api/v1/task/status/TASK_ID или передайте webhook при создании задачи.
WaveSpeedAI
curl --fail-with-body 'https://api.wavespeed.ai/api/v3/bytedance/seedream-v4.5' \-H "Authorization: Bearer $WAVESPEED_API_KEY" \-H 'Content-Type: application/json' \-d '{"prompt": "A ceramic mug on a wooden table, soft morning light","size": "2048*2048"}'
API Hubs
curl --fail-with-body 'https://api.apihubs.ru/api/v1/generation/create' \-H "Authorization: Bearer $API_KEY" \-H 'Content-Type: application/json' \-d '{"model": "seedream-4-5","prompt": "A ceramic mug on a wooden table, soft morning light","resolution": "2K","size": "1:1"}'
Полный пример: создать задачу и получить файл
Запускайте на сервере с Node 22+ или Bun и переменной API_KEY. Пример создаёт одну платную задачу и опрашивает её без повторного создания. Готовые ссылки временные: сохраните файл в своё хранилище.
import { writeFile } from "node:fs/promises";const baseURL = "https://api.apihubs.ru/api/v1";const apiKey = process.env.API_KEY;if (!apiKey) throw new Error("Set API_KEY on the server");async function request(path, options = {}) {const response = await fetch(baseURL + path, {...options,headers: {Authorization: `Bearer ${apiKey}`,"Content-Type": "application/json",},signal: AbortSignal.timeout(30_000),});if (!response.ok) throw new Error(await response.text());return response.json();}const { taskId } = await request("/generation/create", {method: "POST",body: JSON.stringify({"model": "seedream-4-5","prompt": "A ceramic mug on a wooden table, soft morning light","resolution": "2K","size": "1:1"}),});if (!taskId) throw new Error("Missing taskId");const deadline = Date.now() + 10 * 60_000;let fileUrl;while (Date.now() < deadline) {const { data } = await request(`/task/status/${encodeURIComponent(taskId)}`);if (data.status === "finished") {fileUrl = data.files?.[0]?.fileUrl;if (!fileUrl) throw new Error("Task finished without a file");break;}if (data.status === "failed" || data.status === "expired") {throw new Error(data.errorMessage || data.status);}await new Promise((resolve) => setTimeout(resolve, 2000));}if (!fileUrl) throw new Error(`Still processing: save taskId ${taskId} and resume polling`);const file = await fetch(fileUrl, { signal: AbortSignal.timeout(60_000) });if (!file.ok) throw new Error(`Download failed: ${file.status}`);const mime = file.headers.get("content-type")?.split(";")[0];const extension = { "image/png": "png", "image/jpeg": "jpg", "image/webp": "webp" }[mime] || "bin";await writeFile(`generated-image.${extension}`, new Uint8Array(await file.arrayBuffer()));
Храните API-ключи на сервере. Перед переносом рабочей нагрузки проверьте один запрос: параметры, обработку статусов и полученный результат.
Частые вопросы
Как перейти с WaveSpeedAI?
Замените эндпоинт модели /api/v3 на /api/v1/generation/create и передайте публичный id модели в JSON. Вместо size используйте документированные поля size и resolution, а опрос prediction замените нашим эндпоинтом статуса задачи.
API Hubs всегда дешевле WaveSpeedAI?
Нет. Сравните конкретную модель, настройки и единицу тарификации в таблице. Цены могут меняться в обе стороны; перед переносом рабочей нагрузки проверьте оба каталога.
Можно ли перенести любой сценарий с WaveSpeedAI?
Оставайтесь на WaveSpeedAI, если приложение зависит от специализированного эндпоинта или синхронного режима. Перед переносом каждого маршрута проверьте наличие модели и её параметры.
Что происходит с ошибками и незавершёнными запросами?
Медиазадачи повторяются по настроенным маршрутам; резерв используется, когда он доступен. При окончательной ошибке генерации списание возвращается. Задачу в обработке нужно опрашивать, а не создавать заново. Истечение ссылки на файл не означает ошибку генерации.
Как пополнить баланс?
Доступные способы оплаты, валюта и минимальная сумма пополнения указаны в личном кабинете до оплаты. Подписки нет: использование моделей оплачивается с предоплаченного баланса.
Выполните первый запрос в API Hubs
Выберите модель, проверьте параметры и цену, затем создайте API-ключ в личном кабинете. Начните с одного запроса перед переносом нагрузки.