Перейти к основному содержанию
APIXO использует асинхронную схему для всех задач генерации. Это учитывает, что генерация ИИ занимает время — от нескольких секунд для изображений до нескольких минут для видео.

Схема работы

┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Submit    │────▶│  Poll or    │────▶│   Retrieve  │
│   Task      │     │  Callback   │     │   Results   │
└─────────────┘     └─────────────┘     └─────────────┘
      │                   │                   │
      ▼                   ▼                   ▼
   taskId            state check          resultUrls

Шаг 1: Отправка задачи

Отправьте POST-запрос для создания задачи генерации:
POST https://api.apixo.ai/api/v1/generateTask/{model}
Запрос:
{
  "request_type": "async",
  "input": {
    "mode": "text-to-image",
    "prompt": "A beautiful sunset over mountains"
  }
}
Ответ:
{
  "code": 200,
  "message": "success",
  "data": {
    "taskId": "task_abc123xyz"
  }
}
API сразу возвращает taskId. Фактическая генерация выполняется в фоне.

Шаг 2: Получение результатов

Есть два варианта получения результатов:

Вариант A: Polling (рекомендуется для начала)

Периодически проверяйте статус задачи:
GET https://api.apixo.ai/api/v1/statusTask/{model}?taskId={taskId}
Ответ (в процессе):
{
  "data": {
    "taskId": "task_abc123xyz",
    "state": "processing"
  }
}
Ответ (завершено):
{
  "data": {
    "taskId": "task_abc123xyz",
    "state": "success",
    "resultJson": "{\"resultUrls\":[\"https://cdn.apixo.ai/...\"]}",
    "costTime": 12500
  }
}

Вариант B: Webhooks (рекомендуется для продакшена)

Укажите callback_url при отправке:
{
  "request_type": "callback",
  "callback_url": "https://your-server.com/webhook/apixo",
  "input": { ... }
}
APIXO отправит результат на ваш URL методом POST, когда задача завершится. Подробности в разделе Webhooks.

Состояния задачи

СостояниеОписание
pendingЗадача в очереди, ожидает запуска
processingЗадача выполняется
successЗадача успешно завершена
failedЗадача завершилась с ошибкой (см. failMsg)

Рекомендации по polling

  1. Начинайте с интервалов 3–5 секунд для большинства задач
  2. Используйте экспоненциальный backoff для длительных задач (видео)
  3. Задайте максимальный таймаут (например, 5 минут)
  4. Обрабатывайте ошибки с логикой повторных попыток
const pollWithBackoff = async (taskId, maxWait = 300000) => {
  let interval = 3000; // Start at 3s
  const startTime = Date.now();
  
  while (Date.now() - startTime < maxWait) {
    const result = await checkStatus(taskId);
    
    if (result.state === 'success') return result;
    if (result.state === 'failed') throw new Error(result.failMsg);
    
    await sleep(interval);
    interval = Math.min(interval * 1.5, 30000); // Max 30s
  }
  
  throw new Error('Timeout waiting for result');
};

Когда использовать каждый подход

ПодходЛучше всего подходит для
PollingПростые интеграции, клиентские приложения, тестирование
WebhooksПродакшен-серверы, real-time приложения, высокая нагрузка

Дальнейшие шаги