Справочник 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 · Начало работы