RF
Runfuture

Справочник API · Аутентификация

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

Runfuture API использует OAuth2-подобную схему с парой токенов: access_token для запросов к API и refresh_token для обновления истёкшего access_token.

Получение токенов

Отправьте POST-запрос с email и паролем аккаунта. В ответ вы получите access_token (живёт 1 час) и refresh_token (живёт 30 дней).

Endpoint:

POST https://runfuture.ru/api/auth/token

Заголовки:

Content-Type: application/json

Тело запроса:

{
  "email": "you@company.ru",
  "password": "your-password"
}

Пример cURL:

curl -X POST https://runfuture.ru/api/auth/token \
  -H "Content-Type: application/json" \
  -d '{
    "email": "you@company.ru",
    "password": "your-password"
  }'

Успешный ответ (200):

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600
}
ПолеОписание
access_tokenТокен для авторизации API-запросов. Передавайте в заголовке Authorization.
refresh_tokenТокен для получения новой пары access + refresh. Храните в безопасном месте.
token_typeВсегда Bearer
expires_inВремя жизни access_token в секундах (3600 = 1 час)

Ошибки:

// 401 — неверные учётные данные
{
  "error": "invalid_grant",
  "error_description": "Неверный email или пароль"
}

// 400 — не указаны поля
{
  "error": "invalid_request",
  "error_description": "Укажите email и password"
}

Обновление токена

Когда access_token истекает, используйте refresh_token для получения новой пары токенов. Старый refresh_token после обновления становится недействительным — сохраняйте новый.

Endpoint:

POST https://runfuture.ru/api/auth/refresh

Тело запроса:

{
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}

Пример cURL:

curl -X POST https://runfuture.ru/api/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{
    "refresh_token": "YOUR_REFRESH_TOKEN"
  }'

Успешный ответ (200):

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600
}

Ошибки:

// 401 — просроченный или невалидный refresh_token
{
  "error": "invalid_grant",
  "error_description": "Недействительный или просроченный refresh_token"
}

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

Передавайте access_token в заголовке Authorization при каждом запросе к inference API:

curl -X POST https://api.runfuture.ru/v1 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '[{
    "taskType": "imageInference",
    "taskUUID": "a770f077-f413-47de-9dac-be0b26a35da6",
    "model": "bfl:5@1",
    "positivePrompt": "закат над морем",
    "width": 1024,
    "height": 1024
  }]'

Рекомендации по безопасности

  • Никогда не храните токены в клиентском коде (браузер, мобильное приложение в открытом виде).
  • Используйте refresh_token только на серверной стороне вашего приложения.
  • Обновляйте access_token заранее — за 5–10 минут до истечения expires_in.
  • При компрометации токена — смените пароль аккаунта, это инвалидирует все активные сессии.

Пример на TypeScript

async function getTokens(email: string, password: string) {
  const res = await fetch("https://runfuture.ru/api/auth/token", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ email, password }),
  });

  if (!res.ok) throw new Error("Auth failed");
  return res.json() as Promise<{
    access_token: string;
    refresh_token: string;
    expires_in: number;
  }>;
}

async function refreshTokens(refreshToken: string) {
  const res = await fetch("https://runfuture.ru/api/auth/refresh", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ refresh_token: refreshToken }),
  });

  if (!res.ok) throw new Error("Refresh failed");
  return res.json();
}

Далее: Text-to-Image · Начало работы