{
  "components" : {
    "schemas" : {
      "AbortRoundResponse" : {
        "nullable" : false,
        "properties" : {
          "aborted" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "round_id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "aborted", "round_id" ],
        "type" : "object"
      },
      "AcceptedResultDto" : {
        "nullable" : false,
        "properties" : {
          "accepted_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "active_time_ms" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "football_stats" : {
            "nullable" : true,
            "properties" : {
              "goals" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "misses" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "saves" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "shots" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              }
            },
            "required" : [ "goals", "misses", "saves", "shots" ],
            "type" : "object"
          },
          "mode_id" : {
            "enum" : [ "zhora", "football" ],
            "nullable" : false,
            "type" : "string"
          },
          "round_id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "rules_version" : {
            "nullable" : false,
            "type" : "string"
          },
          "score" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "accepted_at", "active_time_ms", "mode_id", "round_id", "rules_version", "score" ],
        "type" : "object"
      },
      "AuthMethodsResponse" : {
        "nullable" : false,
        "properties" : {
          "email" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "email_code" : {
            "$ref" : "#/components/schemas/EmailCodeRules"
          },
          "nickname_rules" : {
            "$ref" : "#/components/schemas/NicknameRules"
          },
          "prototype" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "registration_consents" : {
            "items" : {
              "$ref" : "#/components/schemas/RegistrationConsent"
            },
            "nullable" : false,
            "type" : "array"
          },
          "vk" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "yandex" : {
            "nullable" : false,
            "type" : "boolean"
          }
        },
        "required" : [ "email", "email_code", "nickname_rules", "prototype", "registration_consents", "vk", "yandex" ],
        "type" : "object"
      },
      "AuthSessionState" : {
        "nullable" : false,
        "properties" : {
          "nickname" : {
            "nullable" : true,
            "type" : "string"
          },
          "player_id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "session_expires_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "status" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "nickname", "player_id", "session_expires_at", "status" ],
        "type" : "object"
      },
      "BestResultDto" : {
        "nullable" : false,
        "properties" : {
          "achieved_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "score" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "achieved_at", "score" ],
        "type" : "object"
      },
      "ComboThresholdDto" : {
        "nullable" : false,
        "properties" : {
          "multiplier" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "streak_length" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "multiplier", "streak_length" ],
        "type" : "object"
      },
      "ConsentAcceptance" : {
        "nullable" : false,
        "properties" : {
          "accepted" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "id" : {
            "nullable" : false,
            "type" : "string"
          },
          "version" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "accepted", "id", "version" ],
        "type" : "object"
      },
      "CreateRoundResponse" : {
        "nullable" : false,
        "properties" : {
          "journal_version" : {
            "type" : "integer",
            "enum" : [ 1 ]
          },
          "mode_id" : {
            "enum" : [ "zhora", "football" ],
            "nullable" : false,
            "type" : "string"
          },
          "round_id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "rules" : {
            "$ref" : "#/components/schemas/RoundRulesDto"
          }
        },
        "required" : [ "round_id", "mode_id", "rules" ],
        "type" : "object"
      },
      "EmailCodeRequest" : {
        "nullable" : false,
        "properties" : {
          "email" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "email" ],
        "type" : "object"
      },
      "EmailCodeResponse" : {
        "nullable" : false,
        "properties" : {
          "challenge_token" : {
            "nullable" : false,
            "type" : "string"
          },
          "code_length" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "expires_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "resend_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "challenge_token", "code_length", "expires_at", "resend_at" ],
        "type" : "object"
      },
      "EmailCodeRules" : {
        "nullable" : false,
        "properties" : {
          "length" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "max_attempts" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "resend_seconds" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "ttl_seconds" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "length", "max_attempts", "resend_seconds", "ttl_seconds" ],
        "type" : "object"
      },
      "EmailConfirmRequest" : {
        "nullable" : false,
        "properties" : {
          "challenge_token" : {
            "nullable" : false,
            "type" : "string"
          },
          "code" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "challenge_token", "code" ],
        "type" : "object"
      },
      "FinishRoundResponse" : {
        "nullable" : false,
        "properties" : {
          "is_new_record" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "personal_best" : {
            "$ref" : "#/components/schemas/BestResultDto"
          },
          "result" : {
            "$ref" : "#/components/schemas/AcceptedResultDto"
          }
        },
        "required" : [ "is_new_record", "personal_best", "result" ],
        "type" : "object"
      },
      "FootballCreateRoundResponse" : {
        "nullable" : false,
        "properties" : {
          "journal_version" : {
            "type" : "integer",
            "enum" : [ 1 ]
          },
          "mode_id" : {
            "enum" : [ "zhora", "football" ],
            "nullable" : false,
            "type" : "string"
          },
          "round_id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "rules" : {
            "$ref" : "#/components/schemas/FootballRulesDto"
          }
        },
        "required" : [ "mode_id", "round_id", "rules" ],
        "type" : "object"
      },
      "FootballGestureDto" : {
        "nullable" : false,
        "properties" : {
          "horizontal_sensitivity" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "max_pull" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "min_pull" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "vertical_sensitivity" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "horizontal_sensitivity", "max_pull", "min_pull", "vertical_sensitivity" ],
        "type" : "object"
      },
      "FootballGoalkeeperDto" : {
        "nullable" : false,
        "properties" : {
          "active_profile" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "save_half_width" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "speed_profiles" : {
            "items" : {
              "$ref" : "#/components/schemas/FootballSpeedProfileDto"
            },
            "nullable" : false,
            "type" : "array"
          }
        },
        "required" : [ "active_profile", "save_half_width", "speed_profiles" ],
        "type" : "object"
      },
      "FootballRulesDto" : {
        "nullable" : false,
        "properties" : {
          "duration_ms" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "flight_ms" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "gesture" : {
            "nullable" : true,
            "properties" : {
              "horizontal_sensitivity" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "max_pull" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "min_pull" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "vertical_sensitivity" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              }
            },
            "required" : [ "horizontal_sensitivity", "max_pull", "min_pull", "vertical_sensitivity" ],
            "type" : "object"
          },
          "goal_points" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "goalkeeper" : {
            "$ref" : "#/components/schemas/FootballGoalkeeperDto"
          },
          "shot_interval_ms" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "version" : {
            "nullable" : false,
            "type" : "string"
          },
          "zones" : {
            "items" : {
              "$ref" : "#/components/schemas/FootballZoneDto"
            },
            "nullable" : false,
            "type" : "array"
          }
        },
        "required" : [ "duration_ms", "flight_ms", "gesture", "goal_points", "goalkeeper", "shot_interval_ms", "version", "zones" ],
        "type" : "object"
      },
      "FootballSpeedProfileDto" : {
        "nullable" : false,
        "properties" : {
          "end_speed" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "id" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "start_speed" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "end_speed", "id", "start_speed" ],
        "type" : "object"
      },
      "FootballStatsDto" : {
        "nullable" : false,
        "properties" : {
          "goals" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer",
            "minimum" : 0
          },
          "misses" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer",
            "minimum" : 0
          },
          "saves" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer",
            "minimum" : 0
          },
          "shots" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer",
            "minimum" : 0
          }
        },
        "required" : [ "goals", "misses", "saves", "shots" ],
        "type" : "object",
        "additionalProperties" : false
      },
      "FootballZoneDto" : {
        "nullable" : false,
        "properties" : {
          "bottom" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "id" : {
            "nullable" : false,
            "type" : "string"
          },
          "left" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "multiplier" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "right" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "top" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "bottom", "id", "left", "multiplier", "right", "top" ],
        "type" : "object"
      },
      "GameModeDto" : {
        "nullable" : false,
        "properties" : {
          "available" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "best_result" : {
            "nullable" : true,
            "properties" : {
              "achieved_at" : {
                "format" : "date-time",
                "nullable" : false,
                "type" : "string"
              },
              "score" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              }
            },
            "required" : [ "achieved_at", "score" ],
            "type" : "object"
          },
          "mode_id" : {
            "enum" : [ "zhora", "football" ],
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "available", "best_result", "mode_id" ],
        "type" : "object"
      },
      "GameModesResponse" : {
        "nullable" : false,
        "properties" : {
          "modes" : {
            "items" : {
              "$ref" : "#/components/schemas/GameModeDto"
            },
            "nullable" : false,
            "type" : "array"
          }
        },
        "required" : [ "modes" ],
        "type" : "object"
      },
      "IssuedRewardDto" : {
        "nullable" : false,
        "properties" : {
          "activation_url" : {
            "nullable" : true,
            "type" : "string"
          },
          "code" : {
            "nullable" : false,
            "type" : "string"
          },
          "conditions" : {
            "nullable" : false,
            "type" : "string"
          },
          "description" : {
            "nullable" : false,
            "type" : "string"
          },
          "expires_at" : {
            "format" : "date-time",
            "nullable" : true,
            "type" : "string"
          },
          "id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "image_url" : {
            "nullable" : true,
            "type" : "string"
          },
          "kind" : {
            "nullable" : false,
            "type" : "string"
          },
          "revision" : {
            "format" : "int64",
            "nullable" : false,
            "type" : "integer"
          },
          "title" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "activation_url", "code", "conditions", "description", "expires_at", "id", "image_url", "kind", "revision", "title" ],
        "type" : "object"
      },
      "LeaderboardEntryDto" : {
        "nullable" : false,
        "properties" : {
          "achieved_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "best_score" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "player" : {
            "$ref" : "#/components/schemas/PlayerDto"
          },
          "rank" : {
            "format" : "int64",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "achieved_at", "best_score", "player", "rank" ],
        "type" : "object"
      },
      "LeaderboardPageResponse" : {
        "nullable" : false,
        "properties" : {
          "items" : {
            "items" : {
              "$ref" : "#/components/schemas/LeaderboardEntryDto"
            },
            "nullable" : false,
            "type" : "array"
          },
          "mode_id" : {
            "enum" : [ "zhora", "football" ],
            "nullable" : false,
            "type" : "string"
          },
          "order" : {
            "nullable" : false,
            "type" : "string"
          },
          "own_entry" : {
            "nullable" : true,
            "properties" : {
              "achieved_at" : {
                "format" : "date-time",
                "nullable" : false,
                "type" : "string"
              },
              "best_score" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "player" : {
                "$ref" : "#/components/schemas/PlayerDto"
              },
              "rank" : {
                "format" : "int64",
                "nullable" : false,
                "type" : "integer"
              }
            },
            "required" : [ "achieved_at", "best_score", "player", "rank" ],
            "type" : "object"
          },
          "page" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "size" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "sort" : {
            "nullable" : false,
            "type" : "string"
          },
          "total" : {
            "format" : "int64",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "items", "mode_id", "order", "own_entry", "page", "size", "sort", "total" ],
        "type" : "object"
      },
      "LeaderboardResponse" : {
        "nullable" : false,
        "properties" : {
          "mode_id" : {
            "enum" : [ "zhora", "football" ],
            "nullable" : false,
            "type" : "string"
          },
          "own_entry" : {
            "nullable" : true,
            "properties" : {
              "achieved_at" : {
                "format" : "date-time",
                "nullable" : false,
                "type" : "string"
              },
              "best_score" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              },
              "player" : {
                "$ref" : "#/components/schemas/PlayerDto"
              },
              "rank" : {
                "format" : "int64",
                "nullable" : false,
                "type" : "integer"
              }
            },
            "required" : [ "achieved_at", "best_score", "player", "rank" ],
            "type" : "object"
          },
          "top" : {
            "items" : {
              "$ref" : "#/components/schemas/LeaderboardEntryDto"
            },
            "nullable" : false,
            "type" : "array"
          }
        },
        "required" : [ "mode_id", "own_entry", "top" ],
        "type" : "object"
      },
      "LoginRequest" : {
        "nullable" : false,
        "properties" : {
          "login" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "login" ],
        "type" : "object"
      },
      "LoginResponse" : {
        "nullable" : false,
        "properties" : {
          "player" : {
            "$ref" : "#/components/schemas/PlayerDto"
          },
          "session_expires_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "session_token" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "player", "session_expires_at", "session_token" ],
        "type" : "object"
      },
      "LogoutResponse" : {
        "nullable" : false,
        "properties" : {
          "logged_out" : {
            "nullable" : false,
            "type" : "boolean"
          }
        },
        "required" : [ "logged_out" ],
        "type" : "object"
      },
      "MeResponse" : {
        "nullable" : false,
        "properties" : {
          "player" : {
            "$ref" : "#/components/schemas/PlayerDto"
          },
          "records" : {
            "items" : {
              "$ref" : "#/components/schemas/PersonalRecordDto"
            },
            "nullable" : false,
            "type" : "array"
          }
        },
        "required" : [ "player", "records" ],
        "type" : "object"
      },
      "NicknameRules" : {
        "nullable" : false,
        "properties" : {
          "allowed_characters" : {
            "nullable" : false,
            "type" : "string"
          },
          "case_sensitive_uniqueness" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "max_length" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "min_length" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "trim_whitespace" : {
            "nullable" : false,
            "type" : "boolean"
          }
        },
        "required" : [ "allowed_characters", "case_sensitive_uniqueness", "max_length", "min_length", "trim_whitespace" ],
        "type" : "object"
      },
      "OAuthExchangeRequest" : {
        "nullable" : false,
        "properties" : {
          "browser_secret" : {
            "nullable" : false,
            "type" : "string"
          },
          "ticket" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "browser_secret", "ticket" ],
        "type" : "object"
      },
      "OAuthStartRequest" : {
        "nullable" : false,
        "properties" : {
          "browser_secret" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "browser_secret" ],
        "type" : "object"
      },
      "OAuthStartResponse" : {
        "nullable" : false,
        "properties" : {
          "authorization_url" : {
            "nullable" : false,
            "type" : "string"
          },
          "expires_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "state" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "authorization_url", "expires_at", "state" ],
        "type" : "object"
      },
      "PendingSessionDto" : {
        "nullable" : false,
        "properties" : {
          "player_id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "session_expires_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "session_token" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "player_id", "session_expires_at", "session_token" ],
        "type" : "object"
      },
      "PersonalRecordDto" : {
        "nullable" : false,
        "properties" : {
          "best_result" : {
            "nullable" : true,
            "properties" : {
              "achieved_at" : {
                "format" : "date-time",
                "nullable" : false,
                "type" : "string"
              },
              "score" : {
                "format" : "int32",
                "nullable" : false,
                "type" : "integer"
              }
            },
            "required" : [ "achieved_at", "score" ],
            "type" : "object"
          },
          "mode_id" : {
            "enum" : [ "zhora", "football" ],
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "best_result", "mode_id" ],
        "type" : "object"
      },
      "PlayerCreateRoundResponse" : {
        "oneOf" : [ {
          "$ref" : "#/components/schemas/CreateRoundResponse"
        }, {
          "$ref" : "#/components/schemas/FootballCreateRoundResponse"
        } ]
      },
      "PlayerDto" : {
        "nullable" : false,
        "properties" : {
          "login" : {
            "nullable" : false,
            "type" : "string"
          },
          "player_id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "login", "player_id" ],
        "type" : "object"
      },
      "PlayerRewardGrantDto" : {
        "nullable" : false,
        "properties" : {
          "earned_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "issued_at" : {
            "format" : "date-time",
            "nullable" : true,
            "type" : "string"
          },
          "message" : {
            "nullable" : true,
            "type" : "string"
          },
          "reward" : {
            "nullable" : true,
            "properties" : {
              "activation_url" : {
                "nullable" : true,
                "type" : "string"
              },
              "code" : {
                "nullable" : false,
                "type" : "string"
              },
              "conditions" : {
                "nullable" : false,
                "type" : "string"
              },
              "description" : {
                "nullable" : false,
                "type" : "string"
              },
              "expires_at" : {
                "format" : "date-time",
                "nullable" : true,
                "type" : "string"
              },
              "id" : {
                "format" : "uuid",
                "nullable" : false,
                "type" : "string"
              },
              "image_url" : {
                "nullable" : true,
                "type" : "string"
              },
              "kind" : {
                "nullable" : false,
                "type" : "string"
              },
              "revision" : {
                "format" : "int64",
                "nullable" : false,
                "type" : "integer"
              },
              "title" : {
                "nullable" : false,
                "type" : "string"
              }
            },
            "required" : [ "activation_url", "code", "conditions", "description", "expires_at", "id", "image_url", "kind", "revision", "title" ],
            "type" : "object"
          },
          "round_id" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "state" : {
            "nullable" : false,
            "type" : "string"
          },
          "waiting_reason" : {
            "nullable" : true,
            "type" : "string"
          }
        },
        "required" : [ "earned_at", "id", "issued_at", "message", "reward", "round_id", "state", "waiting_reason" ],
        "type" : "object"
      },
      "PlayerRewardsResponse" : {
        "nullable" : false,
        "properties" : {
          "items" : {
            "items" : {
              "$ref" : "#/components/schemas/PlayerRewardGrantDto"
            },
            "nullable" : false,
            "type" : "array"
          }
        },
        "required" : [ "items" ],
        "type" : "object"
      },
      "RegisterRequest" : {
        "nullable" : false,
        "properties" : {
          "consents" : {
            "items" : {
              "$ref" : "#/components/schemas/ConsentAcceptance"
            },
            "nullable" : false,
            "type" : "array"
          },
          "nickname" : {
            "nullable" : false,
            "type" : "string"
          },
          "registration_token" : {
            "nullable" : true,
            "type" : "string"
          }
        },
        "required" : [ "nickname" ],
        "type" : "object"
      },
      "RegistrationConsent" : {
        "nullable" : false,
        "properties" : {
          "id" : {
            "nullable" : false,
            "type" : "string"
          },
          "label" : {
            "nullable" : false,
            "type" : "string"
          },
          "required" : {
            "nullable" : false,
            "type" : "boolean"
          },
          "version" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "id", "label", "required", "version" ],
        "type" : "object"
      },
      "RegistrationDto" : {
        "nullable" : false,
        "properties" : {
          "expires_at" : {
            "format" : "date-time",
            "nullable" : false,
            "type" : "string"
          },
          "registration_token" : {
            "nullable" : false,
            "type" : "string"
          },
          "suggested_nickname" : {
            "nullable" : true,
            "type" : "string"
          }
        },
        "required" : [ "expires_at", "registration_token", "suggested_nickname" ],
        "type" : "object"
      },
      "RoundRulesDto" : {
        "nullable" : false,
        "properties" : {
          "duration_ms" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "scoring" : {
            "$ref" : "#/components/schemas/ScoringRulesDto"
          },
          "spawn_stages" : {
            "items" : {
              "$ref" : "#/components/schemas/SpawnStageDto"
            },
            "nullable" : false,
            "type" : "array"
          },
          "version" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "duration_ms", "scoring", "spawn_stages", "version" ],
        "type" : "object"
      },
      "ScoringRulesDto" : {
        "nullable" : false,
        "properties" : {
          "cat_penalty" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "combo_thresholds" : {
            "items" : {
              "$ref" : "#/components/schemas/ComboThresholdDto"
            },
            "nullable" : false,
            "type" : "array"
          },
          "initial_multiplier" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "score_floor" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "zhora_points" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "cat_penalty", "combo_thresholds", "initial_multiplier", "score_floor", "zhora_points" ],
        "type" : "object"
      },
      "SpawnStageDto" : {
        "nullable" : false,
        "properties" : {
          "cat_probability_percent" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "max_concurrent_targets" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "spawn_interval_ms" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "starts_at_ms" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "target_lifetime_ms" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          }
        },
        "required" : [ "cat_probability_percent", "max_concurrent_targets", "spawn_interval_ms", "starts_at_ms", "target_lifetime_ms" ],
        "type" : "object"
      },
      "VerifiedLoginResponse" : {
        "nullable" : false,
        "properties" : {
          "pending_session" : {
            "nullable" : true,
            "properties" : {
              "player_id" : {
                "format" : "uuid",
                "nullable" : false,
                "type" : "string"
              },
              "session_expires_at" : {
                "format" : "date-time",
                "nullable" : false,
                "type" : "string"
              },
              "session_token" : {
                "nullable" : false,
                "type" : "string"
              }
            },
            "required" : [ "player_id", "session_expires_at", "session_token" ],
            "type" : "object"
          },
          "registration" : {
            "nullable" : true,
            "properties" : {
              "expires_at" : {
                "format" : "date-time",
                "nullable" : false,
                "type" : "string"
              },
              "registration_token" : {
                "nullable" : false,
                "type" : "string"
              },
              "suggested_nickname" : {
                "nullable" : true,
                "type" : "string"
              }
            },
            "required" : [ "expires_at", "registration_token", "suggested_nickname" ],
            "type" : "object"
          },
          "session" : {
            "nullable" : true,
            "properties" : {
              "player" : {
                "$ref" : "#/components/schemas/PlayerDto"
              },
              "session_expires_at" : {
                "format" : "date-time",
                "nullable" : false,
                "type" : "string"
              },
              "session_token" : {
                "nullable" : false,
                "type" : "string"
              }
            },
            "required" : [ "player", "session_expires_at", "session_token" ],
            "type" : "object"
          },
          "status" : {
            "nullable" : false,
            "type" : "string"
          }
        },
        "required" : [ "pending_session", "registration", "session", "status" ],
        "type" : "object"
      },
      "JournalV1_nonnegativeInt32" : {
        "type" : "integer",
        "minimum" : 0,
        "maximum" : 2147483647
      },
      "JournalV1_positiveInt32" : {
        "type" : "integer",
        "minimum" : 1,
        "maximum" : 2147483647
      },
      "JournalV1_revision" : {
        "type" : "string",
        "pattern" : "^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$",
        "maxLength" : 64
      },
      "JournalV1_state" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "score", "streak", "multiplier" ],
        "properties" : {
          "score" : {
            "$ref" : "#/components/schemas/JournalV1_nonnegativeInt32"
          },
          "streak" : {
            "$ref" : "#/components/schemas/JournalV1_nonnegativeInt32"
          },
          "multiplier" : {
            "$ref" : "#/components/schemas/JournalV1_positiveInt32"
          }
        }
      },
      "JournalV1_journal" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "version", "client_version", "layout_version", "hit_region_version", "slot_count", "capture_status", "omitted_event_count", "events" ],
        "properties" : {
          "version" : {
            "type" : "integer",
            "enum" : [ 1 ]
          },
          "client_version" : {
            "$ref" : "#/components/schemas/JournalV1_revision"
          },
          "layout_version" : {
            "$ref" : "#/components/schemas/JournalV1_revision"
          },
          "hit_region_version" : {
            "$ref" : "#/components/schemas/JournalV1_revision"
          },
          "slot_count" : {
            "type" : "integer",
            "minimum" : 1,
            "maximum" : 256
          },
          "capture_status" : {
            "enum" : [ "complete", "limit_reached" ]
          },
          "omitted_event_count" : {
            "$ref" : "#/components/schemas/JournalV1_nonnegativeInt32"
          },
          "events" : {
            "type" : "array",
            "minItems" : 2,
            "maxItems" : 4096,
            "items" : {
              "$ref" : "#/components/schemas/JournalV1_event"
            }
          }
        },
        "oneOf" : [ {
          "properties" : {
            "capture_status" : {
              "enum" : [ "complete" ]
            },
            "omitted_event_count" : {
              "enum" : [ 0 ]
            }
          }
        }, {
          "properties" : {
            "capture_status" : {
              "enum" : [ "limit_reached" ]
            },
            "omitted_event_count" : {
              "minimum" : 1
            }
          }
        } ]
      },
      "JournalV1_eventCommon" : {
        "type" : "object",
        "required" : [ "seq", "type", "active_time_ms", "elapsed_time_ms" ],
        "properties" : {
          "seq" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 4095
          },
          "type" : {
            "type" : "string"
          },
          "active_time_ms" : {
            "$ref" : "#/components/schemas/JournalV1_nonnegativeInt32"
          },
          "elapsed_time_ms" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 9007199254740991
          },
          "state_after" : {
            "$ref" : "#/components/schemas/JournalV1_state"
          }
        }
      },
      "JournalV1_event" : {
        "allOf" : [ {
          "$ref" : "#/components/schemas/JournalV1_eventCommon"
        }, {
          "oneOf" : [ {
            "additionalProperties" : false,
            "properties" : {
              "seq" : { },
              "active_time_ms" : { },
              "elapsed_time_ms" : { },
              "state_after" : { },
              "type" : {
                "enum" : [ "round_started" ]
              }
            }
          }, {
            "additionalProperties" : false,
            "required" : [ "target_id", "target_type", "slot", "lifetime_ms" ],
            "properties" : {
              "seq" : { },
              "active_time_ms" : { },
              "elapsed_time_ms" : { },
              "state_after" : { },
              "type" : {
                "enum" : [ "target_spawned" ]
              },
              "target_id" : {
                "$ref" : "#/components/schemas/JournalV1_positiveInt32"
              },
              "target_type" : {
                "enum" : [ "zhora", "cat" ]
              },
              "slot" : {
                "type" : "integer",
                "minimum" : 0,
                "maximum" : 255
              },
              "lifetime_ms" : {
                "$ref" : "#/components/schemas/JournalV1_positiveInt32"
              }
            }
          }, {
            "additionalProperties" : false,
            "required" : [ "x", "y", "selected_target_id", "outcome" ],
            "properties" : {
              "seq" : { },
              "active_time_ms" : { },
              "elapsed_time_ms" : { },
              "state_after" : { },
              "type" : {
                "enum" : [ "tap" ]
              },
              "x" : {
                "type" : "integer",
                "minimum" : 0,
                "maximum" : 1000000
              },
              "y" : {
                "type" : "integer",
                "minimum" : 0,
                "maximum" : 1000000
              },
              "selected_target_id" : {
                "type" : "integer",
                "minimum" : 1,
                "maximum" : 2147483647,
                "nullable" : true
              },
              "outcome" : {
                "enum" : [ "zhora", "cat", "empty", "ignored" ]
              }
            },
            "oneOf" : [ {
              "properties" : {
                "outcome" : {
                  "enum" : [ "empty" ]
                },
                "selected_target_id" : {
                  "type" : "integer",
                  "nullable" : true,
                  "enum" : [ null ]
                }
              }
            }, {
              "properties" : {
                "outcome" : {
                  "enum" : [ "zhora", "cat", "ignored" ]
                },
                "selected_target_id" : {
                  "$ref" : "#/components/schemas/JournalV1_positiveInt32"
                }
              }
            } ]
          }, {
            "additionalProperties" : false,
            "required" : [ "target_id", "reason" ],
            "properties" : {
              "seq" : { },
              "active_time_ms" : { },
              "elapsed_time_ms" : { },
              "state_after" : { },
              "type" : {
                "enum" : [ "target_removed" ]
              },
              "target_id" : {
                "$ref" : "#/components/schemas/JournalV1_positiveInt32"
              },
              "reason" : {
                "enum" : [ "hit", "expired", "round_end", "abort" ]
              }
            }
          }, {
            "additionalProperties" : false,
            "required" : [ "reason" ],
            "properties" : {
              "seq" : { },
              "active_time_ms" : { },
              "elapsed_time_ms" : { },
              "state_after" : { },
              "type" : {
                "enum" : [ "paused" ]
              },
              "reason" : {
                "enum" : [ "manual", "background" ]
              }
            }
          }, {
            "additionalProperties" : false,
            "properties" : {
              "seq" : { },
              "active_time_ms" : { },
              "elapsed_time_ms" : { },
              "state_after" : { },
              "type" : {
                "enum" : [ "resumed" ]
              }
            }
          }, {
            "additionalProperties" : false,
            "required" : [ "state_after" ],
            "properties" : {
              "seq" : { },
              "active_time_ms" : { },
              "elapsed_time_ms" : { },
              "state_after" : { },
              "type" : {
                "enum" : [ "round_finished" ]
              }
            }
          }, {
            "additionalProperties" : false,
            "required" : [ "reason", "state_after" ],
            "properties" : {
              "seq" : { },
              "active_time_ms" : { },
              "elapsed_time_ms" : { },
              "state_after" : { },
              "type" : {
                "enum" : [ "round_aborted" ]
              },
              "reason" : {
                "enum" : [ "player_exit" ]
              }
            }
          } ]
        } ]
      },
      "CreateRoundRequest" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "mode_id", "request_id" ],
        "properties" : {
          "mode_id" : {
            "type" : "string"
          },
          "request_id" : {
            "type" : "string",
            "format" : "uuid"
          },
          "journal_version" : {
            "type" : "integer",
            "enum" : [ 1 ]
          }
        }
      },
      "FinishRoundRequest" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "score", "active_time_ms" ],
        "properties" : {
          "score" : {
            "$ref" : "#/components/schemas/JournalV1_nonnegativeInt32"
          },
          "active_time_ms" : {
            "$ref" : "#/components/schemas/JournalV1_nonnegativeInt32"
          },
          "journal" : {
            "$ref" : "#/components/schemas/JournalV1_journal"
          }
        }
      },
      "AbortRoundRequest" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "journal" ],
        "properties" : {
          "journal" : {
            "$ref" : "#/components/schemas/JournalV1_journal"
          }
        }
      },
      "FootballJournalV1_journal" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "version", "client_version", "mechanics_version", "aim_bounds", "capture_status", "omitted_event_count", "events" ],
        "properties" : {
          "version" : {
            "type" : "integer",
            "enum" : [ 1 ]
          },
          "client_version" : {
            "type" : "string",
            "pattern" : "^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$"
          },
          "mechanics_version" : {
            "type" : "string",
            "enum" : [ "launch_v1" ]
          },
          "aim_bounds" : {
            "$ref" : "#/components/schemas/FootballJournalV1_bounds"
          },
          "capture_status" : {
            "type" : "string",
            "enum" : [ "complete", "limit_reached" ]
          },
          "omitted_event_count" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "events" : {
            "type" : "array",
            "minItems" : 2,
            "maxItems" : 4096,
            "items" : {
              "$ref" : "#/components/schemas/FootballJournalV1_event"
            }
          }
        }
      },
      "FootballJournalV1_bounds" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "left", "bottom", "right", "top" ],
        "properties" : {
          "left" : {
            "type" : "integer",
            "minimum" : -1000000,
            "maximum" : 0
          },
          "bottom" : {
            "type" : "integer",
            "minimum" : -1000000,
            "maximum" : 0
          },
          "right" : {
            "type" : "integer",
            "minimum" : 10000,
            "maximum" : 1000000
          },
          "top" : {
            "type" : "integer",
            "minimum" : 10000,
            "maximum" : 1000000
          }
        }
      },
      "FootballJournalV1_state" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "score", "shots", "goals", "saves", "misses" ],
        "properties" : {
          "score" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "shots" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "goals" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "saves" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "misses" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          }
        }
      },
      "FootballJournalV1_event" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "seq", "type", "active_time_ms", "elapsed_time_ms" ],
        "properties" : {
          "seq" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "type" : {
            "type" : "string",
            "enum" : [ "round_started", "shot_started", "shot_resolved", "paused", "resumed", "round_finished", "round_aborted" ]
          },
          "active_time_ms" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "elapsed_time_ms" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 9007199254740991
          },
          "shot_id" : {
            "type" : "integer",
            "minimum" : 1,
            "maximum" : 2147483647
          },
          "aim_x" : {
            "type" : "integer",
            "minimum" : -1000000,
            "maximum" : 1000000
          },
          "aim_y" : {
            "type" : "integer",
            "minimum" : -1000000,
            "maximum" : 1000000
          },
          "goalkeeper_x" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 10000
          },
          "outcome" : {
            "type" : "string",
            "enum" : [ "goal", "save", "miss" ]
          },
          "zone_id" : {
            "type" : "string",
            "nullable" : true,
            "pattern" : "^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$"
          },
          "points" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "score_after" : {
            "type" : "integer",
            "minimum" : 0,
            "maximum" : 2147483647
          },
          "reason" : {
            "type" : "string",
            "enum" : [ "manual", "background", "player_exit" ]
          },
          "state_after" : {
            "$ref" : "#/components/schemas/FootballJournalV1_state"
          }
        },
        "oneOf" : [ {
          "properties" : {
            "type" : {
              "enum" : [ "round_started", "resumed" ]
            }
          },
          "maxProperties" : 4
        }, {
          "properties" : {
            "type" : {
              "enum" : [ "shot_started" ]
            }
          },
          "required" : [ "shot_id", "aim_x", "aim_y", "goalkeeper_x" ],
          "maxProperties" : 8
        }, {
          "properties" : {
            "type" : {
              "enum" : [ "shot_resolved" ]
            }
          },
          "required" : [ "shot_id", "outcome", "zone_id", "points", "score_after" ],
          "maxProperties" : 9
        }, {
          "properties" : {
            "type" : {
              "enum" : [ "paused" ]
            },
            "reason" : {
              "enum" : [ "manual", "background" ]
            }
          },
          "required" : [ "reason" ],
          "maxProperties" : 5
        }, {
          "properties" : {
            "type" : {
              "enum" : [ "round_finished" ]
            }
          },
          "required" : [ "state_after" ],
          "maxProperties" : 5
        }, {
          "properties" : {
            "type" : {
              "enum" : [ "round_aborted" ]
            },
            "reason" : {
              "enum" : [ "player_exit" ]
            }
          },
          "required" : [ "reason", "state_after" ],
          "maxProperties" : 6
        } ]
      },
      "FootballFinishRoundRequest" : {
        "type" : "object",
        "additionalProperties" : false,
        "required" : [ "score", "active_time_ms", "football_stats" ],
        "properties" : {
          "score" : {
            "type" : "integer",
            "format" : "int32",
            "minimum" : 0
          },
          "active_time_ms" : {
            "type" : "integer",
            "format" : "int32",
            "minimum" : 1
          },
          "football_stats" : {
            "$ref" : "#/components/schemas/FootballStatsDto"
          },
          "journal" : {
            "$ref" : "#/components/schemas/FootballJournalV1_journal"
          }
        }
      },
      "PlayerFinishRoundRequest" : {
        "oneOf" : [ {
          "$ref" : "#/components/schemas/FinishRoundRequest"
        }, {
          "$ref" : "#/components/schemas/FootballFinishRoundRequest"
        } ]
      },
      "FootballAbortRoundRequest" : {
        "type" : "object",
        "additionalProperties" : false,
        "properties" : {
          "journal" : {
            "$ref" : "#/components/schemas/FootballJournalV1_journal"
          }
        }
      },
      "PlayerAbortRoundRequest" : {
        "anyOf" : [ {
          "$ref" : "#/components/schemas/AbortRoundRequest"
        }, {
          "$ref" : "#/components/schemas/FootballAbortRoundRequest"
        } ]
      },
      "ApiErrorDto" : {
        "type" : "object",
        "required" : [ "code", "message" ],
        "properties" : {
          "code" : {
            "type" : "string"
          },
          "message" : {
            "type" : "string"
          },
          "retry_at" : {
            "type" : "string",
            "format" : "date-time"
          }
        }
      }
    },
    "securitySchemes" : {
      "PlayerSession" : {
        "scheme" : "bearer",
        "type" : "http"
      }
    }
  },
  "info" : {
    "title" : "API игроков прототипа tir",
    "version" : "0.1.0"
  },
  "openapi" : "3.0.0",
  "paths" : {
    "/auth/login" : {
      "post" : {
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/LoginRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LoginResponse"
                }
              }
            },
            "description" : "OK"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  },
                  "auth_method_disabled" : {
                    "value" : {
                      "code" : "auth_method_disabled",
                      "message" : "Этот способ входа сейчас недоступен. Выберите другой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "409" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "nickname_taken" : {
                    "value" : {
                      "code" : "nickname_taken",
                      "message" : "Это имя занято. Выберите другое."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Conflict"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Войти по публичному логину"
      }
    },
    "/auth/logout" : {
      "post" : {
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LogoutResponse"
                }
              }
            },
            "description" : "OK"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Завершить текущую сессию"
      }
    },
    "/me" : {
      "get" : {
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/MeResponse"
                }
              }
            },
            "description" : "OK"
          },
          "403" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "registration_required" : {
                    "value" : {
                      "code" : "registration_required",
                      "message" : "Завершите регистрацию: выберите никнейм."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Forbidden"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Текущий игрок и рекорды"
      }
    },
    "/me/rewards" : {
      "get" : {
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PlayerRewardsResponse"
                }
              }
            },
            "description" : "OK"
          },
          "403" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "registration_required" : {
                    "value" : {
                      "code" : "registration_required",
                      "message" : "Завершите регистрацию: выберите никнейм."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Forbidden"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Мои награды за первую завершённую игру"
      }
    },
    "/game-modes" : {
      "get" : {
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/GameModesResponse"
                }
              }
            },
            "description" : "OK"
          },
          "403" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "registration_required" : {
                    "value" : {
                      "code" : "registration_required",
                      "message" : "Завершите регистрацию: выберите никнейм."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Forbidden"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Режимы игры"
      }
    },
    "/rounds" : {
      "post" : {
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/CreateRoundRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/PlayerCreateRoundResponse"
                }
              }
            },
            "description" : "OK"
          },
          "403" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "registration_required" : {
                    "value" : {
                      "code" : "registration_required",
                      "message" : "Завершите регистрацию: выберите никнейм."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Forbidden"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  },
                  "rules_unavailable" : {
                    "value" : {
                      "code" : "rules_unavailable",
                      "message" : "Правила временно недоступны. Попробуйте снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  },
                  "journal_version_unsupported" : {
                    "value" : {
                      "code" : "journal_version_unsupported",
                      "message" : "Версия записи действий не поддерживается. Обновите клиент."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "404" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "mode_not_found" : {
                    "value" : {
                      "code" : "mode_not_found",
                      "message" : "Режим не найден."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Not Found"
          },
          "409" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "mode_unavailable" : {
                    "value" : {
                      "code" : "mode_unavailable",
                      "message" : "Режим пока недоступен."
                    }
                  },
                  "request_conflict" : {
                    "value" : {
                      "code" : "request_conflict",
                      "message" : "Запрос уже использован для другого режима."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Conflict"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Создать раунд"
      }
    },
    "/rounds/{id}/finish" : {
      "post" : {
        "parameters" : [ {
          "deprecated" : false,
          "description" : "UUID партии",
          "explode" : false,
          "in" : "path",
          "name" : "id",
          "required" : true,
          "schema" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "style" : "simple"
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PlayerFinishRoundRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/FinishRoundResponse"
                }
              }
            },
            "description" : "OK"
          },
          "403" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "registration_required" : {
                    "value" : {
                      "code" : "registration_required",
                      "message" : "Завершите регистрацию: выберите никнейм."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Forbidden"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  },
                  "score_limit_exceeded" : {
                    "value" : {
                      "code" : "score_limit_exceeded",
                      "message" : "Результат превышает максимум по правилам этой партии."
                    }
                  },
                  "round_too_early" : {
                    "value" : {
                      "code" : "round_too_early",
                      "message" : "Время партии ещё не истекло. Повторите отправку после окончания партии."
                    }
                  },
                  "journal_required" : {
                    "value" : {
                      "code" : "journal_required",
                      "message" : "Для этой партии нужна запись действий."
                    }
                  },
                  "journal_version_unsupported" : {
                    "value" : {
                      "code" : "journal_version_unsupported",
                      "message" : "Версия записи действий не поддерживается. Обновите клиент."
                    }
                  },
                  "journal_invalid" : {
                    "value" : {
                      "code" : "journal_invalid",
                      "message" : "Проверьте запись действий партии."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "404" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "round_not_found" : {
                    "value" : {
                      "code" : "round_not_found",
                      "message" : "Раунд не найден."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Not Found"
          },
          "409" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "result_conflict" : {
                    "value" : {
                      "code" : "result_conflict",
                      "message" : "Раунд уже завершён с другим результатом."
                    }
                  },
                  "journal_not_enabled" : {
                    "value" : {
                      "code" : "journal_not_enabled",
                      "message" : "Запись действий для этой партии не включена."
                    }
                  },
                  "round_state_conflict" : {
                    "value" : {
                      "code" : "round_state_conflict",
                      "message" : "Партия уже завершена другой операцией."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Conflict"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Завершить раунд"
      }
    },
    "/rounds/{id}/abort" : {
      "post" : {
        "parameters" : [ {
          "deprecated" : false,
          "description" : "UUID партии",
          "explode" : false,
          "in" : "path",
          "name" : "id",
          "required" : true,
          "schema" : {
            "format" : "uuid",
            "nullable" : false,
            "type" : "string"
          },
          "style" : "simple"
        } ],
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/PlayerAbortRoundRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AbortRoundResponse"
                }
              }
            },
            "description" : "OK"
          },
          "403" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "registration_required" : {
                    "value" : {
                      "code" : "registration_required",
                      "message" : "Завершите регистрацию: выберите никнейм."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Forbidden"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  },
                  "journal_required" : {
                    "value" : {
                      "code" : "journal_required",
                      "message" : "Для этой партии нужна запись действий."
                    }
                  },
                  "journal_version_unsupported" : {
                    "value" : {
                      "code" : "journal_version_unsupported",
                      "message" : "Версия записи действий не поддерживается. Обновите клиент."
                    }
                  },
                  "journal_invalid" : {
                    "value" : {
                      "code" : "journal_invalid",
                      "message" : "Проверьте запись действий партии."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "404" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "round_not_found" : {
                    "value" : {
                      "code" : "round_not_found",
                      "message" : "Раунд не найден."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Not Found"
          },
          "409" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "journal_not_enabled" : {
                    "value" : {
                      "code" : "journal_not_enabled",
                      "message" : "Запись действий для этой партии не включена."
                    }
                  },
                  "round_state_conflict" : {
                    "value" : {
                      "code" : "round_state_conflict",
                      "message" : "Партия уже завершена другой операцией."
                    }
                  },
                  "result_conflict" : {
                    "value" : {
                      "code" : "result_conflict",
                      "message" : "Раунд уже завершён с другим результатом."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Conflict"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Прервать раунд"
      }
    },
    "/leaderboard" : {
      "get" : {
        "parameters" : [ {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "ID игрового режима",
          "explode" : false,
          "in" : "query",
          "name" : "mode_id",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "style" : "form"
        } ],
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaderboardResponse"
                }
              }
            },
            "description" : "OK"
          },
          "403" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "registration_required" : {
                    "value" : {
                      "code" : "registration_required",
                      "message" : "Завершите регистрацию: выберите никнейм."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Forbidden"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "404" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "mode_not_found" : {
                    "value" : {
                      "code" : "mode_not_found",
                      "message" : "Режим не найден."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Not Found"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Таблица лидеров"
      }
    },
    "/leaderboard/page" : {
      "get" : {
        "parameters" : [ {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "ID игрового режима",
          "explode" : false,
          "in" : "query",
          "name" : "mode_id",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "style" : "form"
        }, {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Номер страницы с 1; по умолчанию 1; неверные целые заменяются значением по умолчанию, значения ниже 1 — единицей",
          "explode" : false,
          "in" : "query",
          "name" : "page",
          "required" : false,
          "schema" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "style" : "form"
        }, {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Размер страницы; по умолчанию 20; неверные целые заменяются значением по умолчанию, разобранные значения ограничиваются диапазоном 1–100",
          "explode" : false,
          "in" : "query",
          "name" : "size",
          "required" : false,
          "schema" : {
            "format" : "int32",
            "nullable" : false,
            "type" : "integer"
          },
          "style" : "form"
        } ],
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LeaderboardPageResponse"
                }
              }
            },
            "description" : "OK"
          },
          "403" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "registration_required" : {
                    "value" : {
                      "code" : "registration_required",
                      "message" : "Завершите регистрацию: выберите никнейм."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Forbidden"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "404" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "mode_not_found" : {
                    "value" : {
                      "code" : "mode_not_found",
                      "message" : "Режим не найден."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Not Found"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Страница рейтинга"
      }
    },
    "/auth/session" : {
      "get" : {
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AuthSessionState"
                }
              }
            },
            "description" : "OK"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        } ],
        "summary" : "Проверить вход и состояние регистрации"
      }
    },
    "/auth/methods" : {
      "get" : {
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/AuthMethodsResponse"
                }
              }
            },
            "description" : "OK"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Доступные способы входа"
      }
    },
    "/auth/email/request" : {
      "post" : {
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/EmailCodeRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/EmailCodeResponse"
                }
              }
            },
            "description" : "OK"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  },
                  "email_send_failed" : {
                    "value" : {
                      "code" : "email_send_failed",
                      "message" : "Не удалось отправить письмо. Повторите позже или выберите другой способ входа."
                    }
                  },
                  "auth_method_disabled" : {
                    "value" : {
                      "code" : "auth_method_disabled",
                      "message" : "Этот способ входа сейчас недоступен. Выберите другой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "429" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "auth_rate_limited" : {
                    "value" : {
                      "code" : "auth_rate_limited",
                      "message" : "Слишком много запросов. Подождите и повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Too Many Requests"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Отправить код на почту"
      }
    },
    "/auth/email/confirm" : {
      "post" : {
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/EmailConfirmRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/VerifiedLoginResponse"
                }
              }
            },
            "description" : "OK"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  },
                  "email_code_invalid" : {
                    "value" : {
                      "code" : "email_code_invalid",
                      "message" : "Неверный код. Проверьте его и повторите попытку."
                    }
                  },
                  "email_code_expired" : {
                    "value" : {
                      "code" : "email_code_expired",
                      "message" : "Срок кода истёк. Запросите новый."
                    }
                  },
                  "email_code_used" : {
                    "value" : {
                      "code" : "email_code_used",
                      "message" : "Код уже использован. Проверьте вход или запросите новый код."
                    }
                  },
                  "email_code_replaced" : {
                    "value" : {
                      "code" : "email_code_replaced",
                      "message" : "Код устарел. Используйте последний отправленный код или запросите новый."
                    }
                  },
                  "email_code_attempts_exceeded" : {
                    "value" : {
                      "code" : "email_code_attempts_exceeded",
                      "message" : "Попытки проверки исчерпаны. Запросите новый код после указанного времени."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Подтвердить код из письма"
      }
    },
    "/auth/register" : {
      "post" : {
        "description" : "Передайте Bearer-сессию либо совместимое поле registration_token в теле. Одновременно передавать оба нельзя.",
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/RegisterRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/LoginResponse"
                }
              }
            },
            "description" : "OK"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  },
                  "auth_flow_invalid" : {
                    "value" : {
                      "code" : "auth_flow_invalid",
                      "message" : "Подтверждение недействительно или устарело. Начните вход заново."
                    }
                  },
                  "registration_consent_required" : {
                    "value" : {
                      "code" : "registration_consent_required",
                      "message" : "Для завершения регистрации примите обязательные согласия."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "409" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "nickname_taken" : {
                    "value" : {
                      "code" : "nickname_taken",
                      "message" : "Это имя занято. Выберите другое."
                    }
                  },
                  "registration_completed" : {
                    "value" : {
                      "code" : "registration_completed",
                      "message" : "Регистрация уже завершена. Никнейм изменить нельзя."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Conflict"
          },
          "401" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "invalid_session" : {
                    "value" : {
                      "code" : "invalid_session",
                      "message" : "Войдите в игру снова."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unauthorized"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "security" : [ {
          "PlayerSession" : [ ]
        }, { } ],
        "summary" : "Выбрать никнейм и завершить регистрацию"
      }
    },
    "/auth/yandex/start" : {
      "post" : {
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OAuthStartRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OAuthStartResponse"
                }
              }
            },
            "description" : "OK"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  },
                  "auth_method_disabled" : {
                    "value" : {
                      "code" : "auth_method_disabled",
                      "message" : "Этот способ входа сейчас недоступен. Выберите другой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  },
                  "auth_flow_invalid" : {
                    "value" : {
                      "code" : "auth_flow_invalid",
                      "message" : "Подтверждение недействительно или устарело. Начните вход заново."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "429" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "auth_rate_limited" : {
                    "value" : {
                      "code" : "auth_rate_limited",
                      "message" : "Слишком много запросов. Подождите и повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Too Many Requests"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Начать вход через yandex"
      }
    },
    "/auth/yandex/callback" : {
      "get" : {
        "parameters" : [ {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Состояние транзакции авторизации",
          "explode" : false,
          "in" : "query",
          "name" : "state",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "style" : "form"
        }, {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Код авторизации провайдера",
          "explode" : false,
          "in" : "query",
          "name" : "code",
          "required" : false,
          "schema" : {
            "nullable" : false,
            "type" : "string"
          },
          "style" : "form"
        }, {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Идентификатор устройства VK ID",
          "explode" : false,
          "in" : "query",
          "name" : "device_id",
          "required" : false,
          "schema" : {
            "nullable" : false,
            "type" : "string"
          },
          "style" : "form"
        }, {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Ошибка провайдера",
          "explode" : false,
          "in" : "query",
          "name" : "error",
          "required" : false,
          "schema" : {
            "nullable" : false,
            "type" : "string"
          },
          "style" : "form"
        } ],
        "responses" : {
          "302" : {
            "description" : "Возврат на настроенный фронтенд с одноразовым билетом или безопасной ошибкой во фрагменте URL"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "auth_flow_invalid" : {
                    "value" : {
                      "code" : "auth_flow_invalid",
                      "message" : "Подтверждение недействительно или устарело. Начните вход заново."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Возврат из yandex"
      }
    },
    "/auth/vk/start" : {
      "post" : {
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OAuthStartRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/OAuthStartResponse"
                }
              }
            },
            "description" : "OK"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  },
                  "auth_method_disabled" : {
                    "value" : {
                      "code" : "auth_method_disabled",
                      "message" : "Этот способ входа сейчас недоступен. Выберите другой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  },
                  "auth_flow_invalid" : {
                    "value" : {
                      "code" : "auth_flow_invalid",
                      "message" : "Подтверждение недействительно или устарело. Начните вход заново."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "429" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "auth_rate_limited" : {
                    "value" : {
                      "code" : "auth_rate_limited",
                      "message" : "Слишком много запросов. Подождите и повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Too Many Requests"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Начать вход через vk"
      }
    },
    "/auth/vk/callback" : {
      "get" : {
        "parameters" : [ {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Состояние транзакции авторизации",
          "explode" : false,
          "in" : "query",
          "name" : "state",
          "required" : true,
          "schema" : {
            "type" : "string"
          },
          "style" : "form"
        }, {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Код авторизации провайдера",
          "explode" : false,
          "in" : "query",
          "name" : "code",
          "required" : false,
          "schema" : {
            "nullable" : false,
            "type" : "string"
          },
          "style" : "form"
        }, {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Идентификатор устройства VK ID",
          "explode" : false,
          "in" : "query",
          "name" : "device_id",
          "required" : false,
          "schema" : {
            "nullable" : false,
            "type" : "string"
          },
          "style" : "form"
        }, {
          "allowEmptyValue" : false,
          "deprecated" : false,
          "description" : "Ошибка провайдера",
          "explode" : false,
          "in" : "query",
          "name" : "error",
          "required" : false,
          "schema" : {
            "nullable" : false,
            "type" : "string"
          },
          "style" : "form"
        } ],
        "responses" : {
          "302" : {
            "description" : "Возврат на настроенный фронтенд с одноразовым билетом или безопасной ошибкой во фрагменте URL"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "auth_flow_invalid" : {
                    "value" : {
                      "code" : "auth_flow_invalid",
                      "message" : "Подтверждение недействительно или устарело. Начните вход заново."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Возврат из vk"
      }
    },
    "/auth/exchange" : {
      "post" : {
        "requestBody" : {
          "content" : {
            "application/json" : {
              "schema" : {
                "$ref" : "#/components/schemas/OAuthExchangeRequest"
              }
            }
          },
          "required" : true
        },
        "responses" : {
          "200" : {
            "content" : {
              "application/json" : {
                "schema" : {
                  "$ref" : "#/components/schemas/VerifiedLoginResponse"
                }
              }
            },
            "description" : "OK"
          },
          "503" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "service_unavailable" : {
                    "value" : {
                      "code" : "service_unavailable",
                      "message" : "Сервис временно недоступен. Повторите попытку."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Service Unavailable"
          },
          "400" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "validation_error" : {
                    "value" : {
                      "code" : "validation_error",
                      "message" : "Проверьте данные запроса."
                    }
                  },
                  "auth_flow_invalid" : {
                    "value" : {
                      "code" : "auth_flow_invalid",
                      "message" : "Подтверждение недействительно или устарело. Начните вход заново."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Bad Request"
          },
          "415" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "unsupported_media_type" : {
                    "value" : {
                      "code" : "unsupported_media_type",
                      "message" : "Отправьте запрос в формате JSON."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Unsupported Media Type"
          },
          "500" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "internal_error" : {
                    "value" : {
                      "code" : "internal_error",
                      "message" : "Не удалось выполнить запрос."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Internal Server Error"
          },
          "413" : {
            "content" : {
              "application/json" : {
                "examples" : {
                  "payload_too_large" : {
                    "value" : {
                      "code" : "payload_too_large",
                      "message" : "Запрос слишком большой."
                    }
                  }
                },
                "schema" : {
                  "$ref" : "#/components/schemas/ApiErrorDto"
                }
              }
            },
            "description" : "Payload Too Large"
          }
        },
        "summary" : "Завершить внешний вход в исходном браузере"
      }
    }
  },
  "servers" : [ {
    "description" : "Текущий сервер",
    "url" : "/"
  } ]
}