Меню документации

Документация по API

API токены — это учетные данные для аутентификации, которые позволяют программно получать доступ к сервисам Problembo. Используйте токены для интеграции наших AI-сервисов в ваши приложения, скрипты или рабочие процессы.

Документация по API токенам

Обзор

API токены — это учетные данные для аутентификации, которые позволяют программно получать доступ к сервисам Problembo. Используйте токены для интеграции наших AI-сервисов в ваши приложения, скрипты или рабочие процессы.

Начало работы

Создание токена

  1. Перейдите в Личный кабинет
  2. Нажмите кнопку "Создать токен"
  3. Введите описательное название для вашего токена
  4. Выберите срок действия (или установите "Бессрочно")
  5. Нажмите "Создать" для генерации токена
  6. Важно: Скопируйте токен немедленно - вы больше не сможете его увидеть!

Безопасность токенов

  • Никогда не передавайте токены другим лицам
  • Не добавляйте токены в системы контроля версий (Git, SVN и т.д.)
  • Используйте переменные окружения для хранения токенов в приложениях
  • Регулярно обновляйте токены для повышения безопасности
  • Отзывайте скомпрометированные токены немедленно

Использование API

Базовый URL

https://problembo.com/apis/v1/client

Эндпоинты

  • POST /apis/v1/client/tasks - Создание новой задачи
  • GET /apis/v1/client/tasks/{taskId} - Получение статуса и результата задачи

Аутентификация

Включите ваш API токен в заголовок Authorization каждого запроса:

Authorization: Bearer ВАШ_API_ТОКЕН

Структура запроса

Все запросы на создание задач имеют единую структуру:

{
  "taskType": "тип_задачи",
  "payload": {
    // параметры, специфичные для типа задачи
  }
}

Получение примеров JSON

💡 Важно: Примеры JSON для конкретных типов задач можно получить прямо в интерфейсе каждого сервиса через кнопку "Json for API". Это самый простой способ узнать правильную структуру запроса для нужного вам сервиса.

Доступные типы задач

Основные типы задач (taskType):

  • com.problembo.proto.SdImageClientTaskPr - Генерация изображений
  • com.problembo.proto.VideoGenClientTaskPr - Генерация видео
  • com.problembo.proto.SongGenClientTaskPr - Генерация музыки
  • com.problembo.proto.TtsGenClientTaskPr - Синтез речи (Text-to-Speech)
  • com.problembo.proto.UpscaleSimpleClientTaskPr - Улучшение качества изображений
  • com.problembo.proto.BgRemoveClientTaskPr - Удаление фона с изображений
  • com.problembo.proto.VideoEnhanceClientTaskPr - Улучшение качества видео
  • и другие

Примеры запросов

Создание задачи (POST)

Запрос:

curl -X POST https://problembo.com/apis/v1/client/tasks \
  -H "Authorization: Bearer ВАШ_API_ТОКЕН" \
  -H "Content-Type: application/json" \
  -d '{
    "taskType": "com.problembo.proto.SdImageClientTaskPr",
    "payload": {
      "base": {
        "prompt": "1girl, beautiful anime character",
        "negativePrompt": "nsfw, low quality",
        "imageQuantity": 1,
        "model": "SdModel_WaifuStudio_1",
        "aspectRatioPreset": "ASPECT_RATIO_VERTICAL_16_9",
        "performanceMode": "SD_IMAGE_GEN_MODE_SPEED"
      },
      "promptMode": "PromptMode_default"
    }
  }'

Ответ (успешное создание):

{
  "taskCreated": {
    "taskId": "00331b93-31bd-4e33-b28c-cc46793a911f",
  }
}

Получение результата (GET)

Запрос:

curl -X GET https://problembo.com/apis/v1/client/tasks/00331b93-31bd-4e33-b28c-cc46793a911f \
  -H "Authorization: Bearer ВАШ_API_ТОКЕН"

Ответ (задача в процессе):

{
  "taskId": "00331b93-31bd-4e33-b28c-cc46793a911f",
  "status": "EXECUTING",
  "ready": false
}

Ответ (задача завершена успешно):

{
  "taskId": "00331b93-31bd-4e33-b28c-cc46793a911f",
  "status": "END_SUCCESS",
  "ready": true,
  "completedAt": "2025-11-04T07:14:33Z",
  "result": {
    "@type": "type.googleapis.com/com.problembo.proto.SdImageClientTaskPr.Result",
    "taskResult": [
      {
        "origFilename": "problembo-result-20251104071432.jpg",
        "url": "https://prbo.gateway.storjshare.io/910e1b85-4677-49d4-abd3-41218733ab60.jpg?X-Amz-Algorithm=AWS4-HMAC-SHA256&..."
      }
    ]
  }
}

Ответ (ошибка при выполнении):

{
  "taskId": "00331b93-31bd-4e33-b28c-cc46793a911f",
  "status": "END_ERR",
  "ready": true,
  "error": {
    "errorKey": "SD_PROMPT_NOT_SAFE",
    "text": "Промпт содержит небезопасный контент"
  }
}

Статусы задач

Задача может находиться в одном из следующих статусов:

  • PENDING - Задача создана и ожидает обработки
  • ASSIGN_TO_WORKER - Задача назначается воркеру
  • EXECUTING - Задача выполняется
  • END_SUCCESS - Задача успешно завершена
  • END_ERR - Задача завершена с ошибкой
  • END_TIMEOUT - Превышено время ожидания выполнения

Поле ready показывает, завершена ли задача (независимо от результата).

Полный workflow

Типичный сценарий работы с API:

# 1. Создать задачу
TASK_ID=$(curl -X POST https://problembo.com/apis/v1/client/tasks \
  -H "Authorization: Bearer $API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"taskType": "...", "payload": {...}}' \
  | jq -r '.taskCreated.taskId')

echo "Task ID: $TASK_ID"

# 2. Опросить статус (polling)
while true; do
  RESPONSE=$(curl -s https://problembo.com/apis/v1/client/tasks/$TASK_ID \
    -H "Authorization: Bearer $API_TOKEN")

  STATUS=$(echo $RESPONSE | jq -r '.status')
  READY=$(echo $RESPONSE | jq -r '.ready')

  echo "Status: $STATUS"

  if [ "$READY" = "true" ]; then
    if [ "$STATUS" = "END_SUCCESS" ]; then
      echo "Task completed successfully!"
      echo $RESPONSE | jq '.result'
    else
      echo "Task failed!"
      echo $RESPONSE | jq '.error'
    fi
    break
  fi

  sleep 5
done

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

Переименование токенов

Давайте токенам осмысленные имена для идентификации их назначения:

  • продакшен-сервер
  • разработка-тестирование
  • мобильное-приложение-v2

Настройки срока действия

Выбирайте подходящий срок действия в зависимости от вашего случая:

  • 30 дней: Тестирование и разработка
  • 90 дней: Краткосрочные проекты
  • 1 год: Долгосрочные приложения
  • Бессрочно: Критическая инфраструктура (обновляйте вручную)

Статус токена

Токены могут иметь следующие статусы:

  • Активен: Токен действителен и может использоваться
  • Отключён: Временно отключен, можно снова включить
  • Истёк: Прошел срок действия, не может использоваться
  • Отозван: Навсегда аннулирован

Ограничения частоты запросов (Rate Limiting)

API использует распределенное ограничение частоты запросов для защиты от перегрузки:

Лимиты по эндпоинтам

  • POST /apis/v1/client/tasks: 15 запросов за 60 секунд
  • GET /apis/v1/client/tasks/{id}: 120 запросов за 60 секунд

Ответ при превышении лимита

При превышении лимита вы получите HTTP статус 429 Too Many Requests:

HTTP/1.1 429 Too Many Requests
Retry-After: 60
Content-Type: application/json

{
  "error": "rate_limit_exceeded"
}

Заголовок Retry-After указывает, через сколько секунд можно повторить запрос.

Примечание: Rate limiting по умолчанию может быть отключен. Уточните актуальные лимиты у службы поддержки.

Коды ошибок

HTTP статусы

  • 200 OK - Запрос успешно обработан
  • 400 Bad Request - Некорректный запрос или ошибка валидации
  • 401 Unauthorized - Невалидный или отсутствующий токен
  • 404 Not Found - Задача не найдена
  • 429 Too Many Requests - Превышен лимит частоты запросов
  • 500 Internal Server Error - Внутренняя ошибка сервера

Коды ошибок задач (errorKey)

При ошибке выполнения задачи в ответе будет присутствовать поле error с кодом ошибки:

Ошибки доступа и биллинга

  • BILLING_ACCESS_DENIED - Недостаточно средств на балансе
  • IP_BILLING_ACCESS_DENIED - IP-адрес заблокирован
  • IP_BAN - IP-адрес забанен
  • ANONYMOUS_USER - Требуется аутентификация
  • NOT_PAID_USER - Функция доступна только платным пользователям

Ошибки валидации

  • PARSE_TASK - Ошибка парсинга JSON запроса
  • INVALID_INPUT_FILE - Некорректный входной файл
  • SD_EMPTY_PROMPT - Пустой промпт
  • SD_PROMPT_TOO_LONG - Промпт слишком длинный
  • SD_NO_LATIN_PROMPT - Промпт должен быть на латинице
  • SD_PROMPT_NOT_SAFE - Промпт содержит небезопасный контент

Лимиты

  • MAX_PARALLEL_TASKS_PER_IP - Превышен лимит параллельных задач
  • MAX_TASKS_PER_USER - Превышен лимит задач пользователя

Системные ошибки

  • SERVICE_DISABLED - Сервис временно отключен
  • MAINTENANCE - Технические работы
  • BUSY - Система перегружена
  • TIMEOUT - Превышено время выполнения задачи
  • NOT_FOUND - Задача не найдена
  • UNKNOWN_ERROR - Неизвестная ошибка

Лучшие практики

  1. Используйте отдельные токены для разных приложений или окружений
  2. Устанавливайте сроки действия, подходящие для вашего случая
  3. Реализуйте polling с разумными интервалами (рекомендуется 3-5 секунд)
  4. Обрабатывайте все возможные статусы задач в вашем коде
  5. Реализуйте логику повторных попыток с экспоненциальной задержкой при rate limiting
  6. Проверяйте баланс перед отправкой большого количества задач
  7. Кешируйте результаты по возможности, чтобы не запрашивать их повторно
  8. Обрабатывайте ошибки грамотно - логируйте errorKey для отладки
  9. Отслеживайте использование токенов в разделе статистики

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

Токен не работает

  • Убедитесь, что токен активен и не истёк
  • Проверьте правильность формата заголовка: Authorization: Bearer TOKEN
  • Убедитесь, что на аккаунте достаточно кредитов
  • Проверьте, что токен начинается с префикса pbo_pat_

Ошибка 401 Unauthorized

Возможные причины:

  • Токен недействителен, истек или отозван
  • Неправильный формат заголовка Authorization
  • Лишние пробелы или символы в токене
  • Токен не скопирован полностью

Решение:

# Правильно
curl -H "Authorization: Bearer pbo_pat_..."

# Неправильно
curl -H "Authorization: pbo_pat_..."  # отсутствует "Bearer"
curl -H "Authorization: Bearer  pbo_pat_..."  # двойной пробел

Ошибка 429 Too Many Requests

Вы превысили лимит частоты запросов.

Решение:

  1. Дождитесь времени, указанного в заголовке Retry-After
  2. Реализуйте экспоненциальную задержку между повторными попытками
  3. Оптимизируйте частоту опроса статуса задачи
  4. Используйте батчинг для массовых операций

Ошибка BILLING_ACCESS_DENIED

Недостаточно средств на балансе.

Решение:

  1. Проверьте баланс в личном кабинете
  2. Пополните баланс
  3. Убедитесь, что выбран правильный тарифный план

Ошибка SD_PROMPT_NOT_SAFE

Промпт содержит небезопасный или запрещенный контент.

Решение:

  1. Проверьте промпт на наличие запрещенных слов
  2. Используйте более нейтральные формулировки
  3. Обратитесь в поддержку, если считаете, что промпт корректен

Задача зависла в статусе EXECUTING

Задача выполняется дольше обычного.

Решение:

  1. Продолжайте опрашивать статус - некоторые задачи могут выполняться до 5-10 минут
  2. Проверьте статус системы на странице мониторинга
  3. Если задача не завершается более 15 минут, обратитесь в поддержку с taskId

Примеры на других языках

JavaScript/TypeScript

const API_TOKEN = "pbo_pat_ваш_токен";
const BASE_URL = "https://problembo.com/apis/v1/client/tasks";

const headers = {
  "Authorization": `Bearer ${API_TOKEN}`,
  "Content-Type": "application/json"
};

// Создание задачи
async function createTask() {
  const response = await fetch(BASE_URL, {
    method: "POST",
    headers,
    body: JSON.stringify({
      taskType: "com.problembo.proto.SdImageClientTaskPr",
      payload: {
        base: {
          prompt: "beautiful landscape",
          imageQuantity: 1,
          model: "SdModel_XL_anime"
        }
      }
    })
  });

  const data = await response.json();
  return data.taskCreated.taskId;
}

// Опрос статуса
async function waitForTask(taskId: string) {
  while (true) {
    const response = await fetch(`${BASE_URL}/${taskId}`, { headers });
    const data = await response.json();

    console.log(`Status: ${data.status}`);

    if (data.ready) {
      return data;
    }

    await new Promise(resolve => setTimeout(resolve, 5000));
  }
}

// Использование
const taskId = await createTask();
console.log(`Task created: ${taskId}`);

const result = await waitForTask(taskId);
if (result.status === "END_SUCCESS") {
  console.log("Success!", result.result);
} else {
  console.log("Failed!", result.error);
}

Поддержка

Нужна помощь? Свяжитесь с нашей службой поддержки:


Последнее обновление: ноябрь 2025