🎮 Tamagotchi API (1.0.0)

Download OpenAPI specification:

Добро пожаловать в Tamagotchi API!

Современный API для игры-тамагочи с системой управления стрессом и тревожностью.


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

API использует JWT Bearer токены для аутентификации.

После успешного логина или регистрации вы получите токен:

Authorization: Bearer YOUR_JWT_TOKEN

📋 Структура ответов

Все ответы API имеют единообразную структуру:

{
  "success": true,
  "message": "Операция выполнена успешно",
  "data": {
    // Данные ответа
  },
  "player_state": {
    // 🎮 СТАНДАРТИЗИРОВАННЫЙ ОБЪЕКТ ИГРОКА
    // Присутствует во ВСЕХ эндпоинтах (кроме auth)
    "id": 123,
    "level": 5,
    "experience": {...},
    "energy": {...},
    "stress": {...}
    // Полное описание см. ниже
  }
}

При ошибках валидации:

{
  "success": false,
  "message": "Ошибки валидации", 
  "errors": {
    "email": ["Введите корректный email"],
    "password": ["Пароль слишком короткий"]
  }
}

🎮 PlayerState - ВАЖНО!

Объект player_state присутствует во ВСЕХ API ответах (кроме auth). Фронтенд получает полное состояние игрока в каждом запросе:

{
  "success": true,
  "data": { ... },
  "player_state": {
    "level": 5,
    "energy": { "current": 120, "percentage": 60.0, "status": {"color": "#2196F3"} },
    "stress": { "current": 35, "level": {"value": "normal", "color": "#2196F3"} },
    "capabilities": { "can_perform_micro_actions": true, "can_start_situations": true }
  }
}

📋 Полное описание полей player_state

🆔 Базовая информация

  • id - Уникальный ID профиля игрока (integer)
  • user_id - ID пользователя-владельца профиля (integer)
  • level - Текущий уровень игрока (integer, min: 1)

⭐ Система опыта (experience)

  • total - Общее количество опыта за всё время (integer, min: 0)
  • current_level - Опыт в пределах текущего уровня, 0-99 (integer)
  • to_next_level - Сколько опыта нужно до следующего уровня (integer, 1-100)
  • progress_percentage - Процент прогресса до следующего уровня (float, 0-100)

⚡ Система энергии (energy)

  • current - Текущее количество энергии (integer, 0-200)
  • max - Максимальное количество энергии (integer, всегда 200)
  • percentage - Процент от максимальной энергии (float, 0-100)
  • status.level - Уровень энергии для UI:
    • "critical" (0-24%) - 🔴 Красный, игрок не может выполнять действия
    • "low" (25-49%) - 🟠 Оранжевый, ограниченные возможности
    • "medium" (50-74%) - 🔵 Синий, нормальное состояние
    • "high" (75-100%) - 🟢 Зеленый, отличное состояние
  • status.label - Текстовое описание для UI (string)
  • status.color - HEX цвет для индикаторов (string, например "#2196F3")

😰 Система стресса (stress)

  • current - Текущий уровень стресса (integer, 0-100)
  • percentage - Стресс в процентах (float, 0-100)
  • level.value - Категория стресса для логики:
    • "low" (0-20) - 🟢 Спокойное состояние, можно браться за сложные задачи
    • "normal" (21-50) - 🔵 Обычное состояние, всё под контролем
    • "elevated" (51-80) - 🟠 Повышенная тревожность, нужна релаксация
    • "high" (81-100) - 🔴 Высокий стресс, срочно нужен отдых
  • level.label - Русское название уровня стресса (string)
  • level.color - HEX цвет для UI индикаторов (string)
  • level.recommended_actions - Массив рекомендаций (array of strings)

😟 Тревожность (anxiety)

  • current - Текущий уровень тревожности (integer, 0-100)
  • percentage - Тревожность в процентах (float, 0-100)

🕐 Активность игрока (activity)

  • last_login - Время последнего входа (ISO 8601 datetime)
  • consecutive_days - Количество дней подряд в игре (integer, min: 0)
  • can_claim_daily_reward - Можно ли получить ежедневную награду (boolean)

🎮 Возможности игрока (capabilities)

  • can_perform_micro_actions - Может ли выполнять микродействия (boolean)
    • true если energy >= 10
    • Для UI: если false - кнопки микродействий неактивны, показать "Недостаточно энергии"
  • can_start_situations - Может ли начинать ситуации (boolean)
    • true если energy >= 20 AND stress <= 80
    • Для UI: если false - показать причину (энергия/стресс) и рекомендации

⏰ Временные метки (timestamps)

  • created_at - Дата создания профиля (ISO 8601 datetime)
  • updated_at - Дата последнего обновления (ISO 8601 datetime)

🎯 Инструкции для фронтендеров:

  • 🎨 Цвета: используйте energy.status.color и stress.level.color для индикаторов
  • 🚫 Блокировки: проверяйте capabilities.* для активации/деактивации кнопок
  • 📊 Прогресс: experience.progress_percentage для прогресс-баров
  • 💡 Рекомендации: stress.level.recommended_actions для подсказок пользователю
  • Статусы: energy.status.level и stress.level.value для логики UI

🚀 Быстрый старт

  1. Зарегистрируйтесь: POST /auth/register
  2. Получите токен: Используйте его в заголовке Authorization
  3. Исследуйте API: Все эндпоинты доступны с токеном

🎯 Основные возможности:

  • 🔐 Полная аутентификация (регистрация, логин, сброс пароля)
  • 👤 Управление игроком (профиль, статистика, прогресс)
  • 🎭 Игровые ситуации (случайные, по категориям, с выбором решений)
  • Микродействия (дыхательные упражнения, физическая активность)
  • 📊 Аналитика (статистика игры, поведение игроков)
  • 👑 Админ-панель (управление контентом, конфигурации)

Authentication

Регистрация, авторизация и управление аккаунтом

Регистрация нового пользователя

Создает новый аккаунт пользователя с автоматическим созданием профиля игрока.

Требования к паролю:

  • Минимум 8 символов
  • Минимум 1 строчная буква (a-z)
  • Минимум 1 заглавная буква (A-Z)
  • Минимум 1 цифра (0-9)
  • Минимум 1 специальный символ (@$!%*?&)
Request Body schema: application/json
required
name
required
string [ 2 .. 255 ] characters ^[a-zA-Zа-яА-ЯёЁ\s\-'\.]+$

Имя пользователя (только буквы, пробелы, дефисы, апострофы)

email
required
string <email> <= 255 characters
password
required
string >= 8 characters ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&]...

Сложный пароль согласно требованиям

password_confirmation
required
string

Подтверждение пароля (должно совпадать с password)

Responses

Request samples

Content type
application/json
{
  • "name": "Иван Иванов",
  • "email": "ivan@example.com",
  • "password": "MyPass123!",
  • "password_confirmation": "MyPass123!"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Пользователь успешно зарегистрирован",
  • "data": {
    }
}

Вход в систему

Аутентификация пользователя по email и паролю

Request Body schema: application/json
required
email
required
string <email>
password
required
string >= 6 characters

Responses

Request samples

Content type
application/json
{
  • "email": "ivan@example.com",
  • "password": "MyPass123!"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Пользователь успешно зарегистрирован",
  • "data": {
    }
}

Выход из системы

Инвалидация JWT токена пользователя

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Вы успешно вышли из системы",
  • "data": { }
}

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

Получение нового JWT токена без повторной авторизации

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Токен успешно обновлен",
  • "data": {
    }
}

Запрос сброса пароля

Отправка инструкций по сбросу пароля на email

Request Body schema: application/json
required
email
required
string <email>

Responses

Request samples

Content type
application/json
{
  • "email": "ivan@example.com"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Инструкции по сбросу пароля отправлены на email",
  • "data": { }
}

Сброс пароля

Установка нового пароля с использованием токена сброса

Request Body schema: application/json
required
email
required
string <email>
token
required
string
password
required
string >= 8 characters ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&]...
password_confirmation
required
string

Responses

Request samples

Content type
application/json
{
  • "email": "ivan@example.com",
  • "token": "reset_token_here",
  • "password": "NewPass123!",
  • "password_confirmation": "NewPass123!"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Пароль успешно изменен",
  • "data": { }
}

Подтверждение email

Верификация email адреса пользователя

Request Body schema: application/json
required
token
required
string

Responses

Request samples

Content type
application/json
{
  • "token": "verification_token_here"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Email успешно подтвержден",
  • "data": { }
}

Player

Профиль игрока, статистика и прогресс

Получение профиля игрока

Возвращает текущий профиль игрока с актуальной статистикой

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Профиль игрока успешно получен",
  • "data": {
    },
  • "player_state": {
    }
}

Обновление профиля игрока

Обновление данных профиля игрока (стресс, тревожность)

Authorizations:
bearerAuth
Request Body schema: application/json
required
stress
integer [ 0 .. 100 ]

Уровень стресса

anxiety
integer [ 0 .. 100 ]

Уровень тревожности

Responses

Request samples

Content type
application/json
{
  • "stress": 45,
  • "anxiety": 30
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Профиль успешно обновлен",
  • "data": {
    },
  • "updated_fields": [
    ],
  • "player_state": {
    }
}

Обновление персональной информации

Обновление персональных данных профиля игрока (любимая песня, фильм, книга, блюдо, имя лучшего друга)

Authorizations:
bearerAuth
Request Body schema: application/json
required
favorite_song
string <= 255 characters

Любимая песня

favorite_movie
string <= 255 characters

Любимый фильм

favorite_book
string <= 255 characters

Любимая книга

favorite_dish
string <= 255 characters

Любимое блюдо

best_friend_name
string <= 255 characters

Имя лучшего друга

Responses

Request samples

Content type
application/json
Example
{
  • "favorite_song": "Bohemian Rhapsody",
  • "favorite_movie": "Inception",
  • "favorite_book": "1984",
  • "favorite_dish": "Пицца",
  • "best_friend_name": "Александр"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Персональная информация успешно обновлена",
  • "data": {
    },
  • "updated_fields": [
    ]
}

Статистика игрока

Получение детальной статистики игрока

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    },
  • "player_state": {
    }
}

Получение ежедневной награды

Получение ежедневной награды (опыт, энергия). Доступно раз в день.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Ежедневная награда получена",
  • "data": {
    },
  • "player_state": {
    }
}

Добавление опыта

Добавление опыта игроку (для внутренних нужд)

Authorizations:
bearerAuth
Request Body schema: application/json
required
amount
required
integer [ 1 .. 1000 ]

Количество опыта для добавления

reason
string

Причина добавления опыта

Responses

Request samples

Content type
application/json
{
  • "amount": 25,
  • "reason": "Завершение ситуации"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    },
  • "player_state": {
    }
}

Обновление энергии

Изменение уровня энергии игрока

Authorizations:
bearerAuth
Request Body schema: application/json
required
amount
required
integer [ -200 .. 200 ]

Изменение энергии (может быть отрицательным)

Responses

Request samples

Content type
application/json
{
  • "amount": -20
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    },
  • "player_state": {
    }
}

Обновление стресса

Изменение уровня стресса игрока

Authorizations:
bearerAuth
Request Body schema: application/json
required
amount
required
integer [ -100 .. 100 ]

Изменение стресса (может быть отрицательным)

Responses

Request samples

Content type
application/json
{
  • "amount": -10
}

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    },
  • "player_state": {
    }
}

Situations

Игровые ситуации и их прохождение

Список доступных ситуаций

Получение списка ситуаций, доступных для текущего уровня игрока

Authorizations:
bearerAuth
query Parameters
category
string
Enum: "work" "personal" "health" "social" "education"

Фильтр по категории ситуации

difficulty
string
Enum: "easy" "medium" "hard"

Фильтр по сложности

page
integer >= 1
Default: 1

Номер страницы для пагинации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Случайная ситуация

Получение случайной ситуации, подходящей по уровню и категории предпочтений

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Случайная рекомендованная ситуация

Получение случайной ситуации из персонализированных рекомендаций.

Логика выбора:

  • Исключает уже завершенные ситуации
  • Учитывает текущий уровень стресса игрока
  • При высоком стрессе (>70) - только расслабляющие ситуации (stress_impact ≤ 0)
  • При низком стрессе (<30) - вызовы для роста (stress_impact ≥ 0)
  • При среднем стрессе - все доступные ситуации
  • Фильтр по уровню игрока

Отличие от /random: персонализация vs полная случайность

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Случайная рекомендованная ситуация успешно получена",
  • "data": {
    }
}

Просмотр активных ситуаций

Получение информации о всех текущих активных ситуациях игрока.

Активная ситуация - это ситуация, которая была начата (POST /situations/{id}/start), но еще не завершена (POST /situations/{id}/complete).

Возможные состояния:

  • Есть активные ситуации - возвращает массив ситуаций с деталями и опциями для завершения
  • Нет активных ситуаций - возвращает успешный ответ с пустым массивом

Используется для восстановления состояния игры после перезапуска приложения.

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Активные ситуации успешно получены (найдено: 2)",
  • "data": {
    }
}

История пройденных ситуаций

Получение истории ситуаций, пройденных игроком

Authorizations:
bearerAuth
query Parameters
page
integer >= 1
Default: 1

Номер страницы для пагинации

limit
integer [ 1 .. 50 ]
Default: 20

Количество записей на страницу

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Рекомендованные ситуации

Получение ситуаций, рекомендованных для текущего состояния игрока

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Детали ситуации

Получение подробной информации о конкретной ситуации

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 1

ID ситуации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Инициация ситуации

Начало ситуации с применением базового стресса (stress_impact). После инициации ситуацию можно завершить выбором опции.

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 1

ID ситуации

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Ситуация успешно начата!",
  • "data": {
    },
  • "player_state": {
    }
}

Завершение ситуации

Выбор варианта решения ситуации и получение результатов

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 1

ID ситуации

Request Body schema: application/json
required
option_id
required
integer

ID выбранного варианта решения

Responses

Request samples

Content type
application/json
{
  • "option_id": 2
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Ситуация успешно завершена",
  • "data": {
    },
  • "player_state": {
    }
}

Micro Actions

Микродействия для управления состоянием

Список доступных микродействий

Получение списка микродействий для восстановления энергии и получения опыта

Authorizations:
bearerAuth
query Parameters
category
string
Enum: "relaxation" "exercise" "creativity" "social"
Example: category=relaxation

Фильтр по категории микродействия

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Список микродействий успешно получен",
  • "data": {
    }
}

Список рекомендованных микродействий

Получение списка микродействий, рекомендованных на основе текущего состояния игрока (уровень энергии, стресс, уровень)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Рекомендованные микродействия успешно получены",
  • "data": {
    }
}

Случайное рекомендованное микродействие

Получение одного случайного микродействия из рекомендаций, подходящих для текущего состояния игрока

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Случайное рекомендованное микродействие получено",
  • "data": {
    }
}

История выполненных микродействий

Получение истории микродействий, выполненных игроком

Authorizations:
bearerAuth
query Parameters
limit
integer [ 1 .. 100 ]
Default: 20

Количество записей для возврата

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "История микродействий успешно получена",
  • "data": {
    }
}

Выполнение микродействия

Выполнение выбранного микродействия для получения энергии и опыта

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 1

ID микродействия

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Микродействие успешно выполнено!",
  • "data": {
    }
}

Admin

Административная панель (только для админов)

Получение конфигураций игры

Получение всех конфигурационных параметров игры (только для администраторов)

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Обновление конфигурации

Обновление значения конфигурационного параметра игры

Authorizations:
bearerAuth
path Parameters
key
required
string
Example: daily_reward_base_experience

Ключ конфигурации

Request Body schema: application/json
required
value
required
string

Новое значение конфигурации

description
string

Описание конфигурации (опционально)

Responses

Request samples

Content type
application/json
{
  • "value": "75",
  • "description": "Базовое количество опыта за ежедневную награду"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Конфигурация успешно обновлена",
  • "data": {
    }
}

Управление ситуациями

Получение списка всех ситуаций для администрирования

Authorizations:
bearerAuth
query Parameters
page
integer >= 1
Default: 1

Номер страницы

per_page
integer [ 1 .. 100 ]
Default: 20

Количество записей на страницу

category
string
Enum: "work" "personal" "health" "social" "education"

Фильтр по категории

active
boolean

Фильтр по активности

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Создание новой ситуации

Создание новой игровой ситуации с вариантами решений

Authorizations:
bearerAuth
Request Body schema: application/json
required
title
required
string <= 255 characters
description
required
string
category
required
string
Enum: "work" "personal" "health" "social" "education"
difficulty_level
required
string
Enum: "easy" "medium" "hard"
min_level_required
integer >= 1
Default: 1
stress_impact
integer [ -50 .. 50 ]
experience_reward
integer >= 0
is_active
boolean
Default: true
position
string
Default: "desktop"
Enum: "phone" "tv" "desktop" "tablet" "smartwatch" "notification"

Место отображения ситуации

required
Array of objects [ 2 .. 5 ] items

Responses

Request samples

Content type
application/json
{
  • "title": "Конфликт с коллегой",
  • "description": "Ваш коллега постоянно критикует вашу работу на совещаниях",
  • "category": "work",
  • "difficulty_level": "medium",
  • "min_level_required": 3,
  • "stress_impact": 20,
  • "experience_reward": 30,
  • "is_active": true,
  • "position": "desktop",
  • "options": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Ситуация успешно создана",
  • "data": {
    }
}

Обновление ситуации

Обновление существующей игровой ситуации

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 1

ID ситуации

Request Body schema: application/json
required
title
string <= 255 characters
description
string
category
string
Enum: "work" "personal" "health" "social" "education"
difficulty_level
string
Enum: "easy" "medium" "hard"
min_level_required
integer >= 1
stress_impact
integer [ -50 .. 50 ]
experience_reward
integer >= 0
is_active
boolean
Array of objects

Responses

Request samples

Content type
application/json
{
  • "title": "Конфликт с коллегой (обновлено)",
  • "description": "Ваш коллега постоянно критикует вашу работу",
  • "category": "work",
  • "difficulty_level": "hard",
  • "min_level_required": 5,
  • "stress_impact": 25,
  • "experience_reward": 40,
  • "is_active": true,
  • "options": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Ситуация успешно обновлена",
  • "data": {
    }
}

Удаление ситуации

Удаление игровой ситуации (мягкое удаление)

Authorizations:
bearerAuth
path Parameters
id
required
integer
Example: 1

ID ситуации для удаления

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Ситуация успешно удалена",
  • "data": { }
}

Analytics

Аналитика и статистика игры

Основная аналитика (дашборд)

Получение ключевых метрик и статистики для дашборда

Authorizations:
bearerAuth
query Parameters
period
string
Default: "month"
Enum: "today" "week" "month" "quarter" "year"

Период для анализа

date_from
string <date>
Example: date_from=2025-08-01

Начальная дата (ISO 8601)

date_to
string <date>
Example: date_to=2025-09-01

Конечная дата (ISO 8601)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Анализ поведения игроков

Подробная аналитика поведенческих паттернов игроков

Authorizations:
bearerAuth
query Parameters
segment
string
Default: "all"
Enum: "all" "new" "returning" "active" "inactive"

Сегмент пользователей для анализа

period
string
Default: "month"
Enum: "week" "month" "quarter"

Период для анализа

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Статистика по ситуациям

Анализ популярности и эффективности игровых ситуаций

Authorizations:
bearerAuth
query Parameters
category
string
Enum: "work" "personal" "health" "social" "education"

Фильтр по категории ситуаций

period
string
Default: "month"
Enum: "week" "month" "quarter"

Период для анализа

sort_by
string
Default: "popularity"
Enum: "popularity" "effectiveness" "completion_rate"

Сортировка результатов

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}

Статистика активности

Анализ общей активности пользователей и системы

Authorizations:
bearerAuth
query Parameters
granularity
string
Default: "day"
Enum: "hour" "day" "week" "month"

Детализация временных данных

period
string
Default: "month"
Enum: "week" "month" "quarter" "year"

Период для анализа

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "data": {
    }
}