{
    "info": {
        "title": "adonix",
        "version": "17.2.0",
        "description": "HackIllinois' backend API\n\n## Authentication\n\n**Cookie-Based Authentication**: This API uses HTTP-only cookies for web authentication and bearer tokens for mobile authentication.\n\n[Attendee Authentication](https://adonix.hackillinois.org/auth/login/github?redirect=https://adonix.hackillinois.org/docs)\n\n[Staff Authentication](https://adonix.hackillinois.org/auth/login/google?redirect=https://adonix.hackillinois.org/docs)\n\nYou can authenticate to test using the two links above - you'll have to do it programmatically in the apps, though.\n\nAuthentication is required for most endpoints, and most endpoints have a role requirement as well (staff-only, for example).\nYou can see these requirements on each endpoint's description.\n\n## Errors\nErrors are formatted like:\n```json\n{\n    \"error\": \"NotFound\",\n    \"message\": \"Couldn't find that\",\n}\n```\nWhere `error` is a error type that can be compared in code, and `message` is a user-facing message for that error.\n\nThis way, handling errors is straight-forward.\n\n## Shared Errors\nThese error types are **not listed** under endpoints specifically, since each endpoint shares them.\n\nAuthentication:\n- `NoToken` - you haven't specified a token on an endpoint that requires one\n- `TokenInvalid` - the token specified is invalid, try re-logging\n- `TokenExpired` - the token has expired, you'll need to log in again\n- `Forbidden` - you don't have the role required to use this endpoint\n\nSpecification has one key type as well - `BadRequest`.\nIf you ever get this error code, you're sending a request in the wrong format.\nThis error will also include information about what information is wrong,\nbut you should always consult the docs if you get this error to verify.\n"
    },
    "openapi": "3.1.0",
    "servers": [
        {
            "url": "https://adonix.hackillinois.org",
            "description": "Production"
        }
    ],
    "components": {
        "schemas": {
            "AdmissionDecision": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "TBD",
                            "ACCEPTED",
                            "REJECTED",
                            "WAITLISTED"
                        ]
                    },
                    "admittedPro": {
                        "type": "boolean",
                        "example": false
                    },
                    "response": {
                        "type": "string",
                        "enum": [
                            "PENDING",
                            "ACCEPTED",
                            "DECLINED"
                        ]
                    },
                    "emailSent": {
                        "type": "boolean",
                        "example": false
                    },
                    "reimbursementValue": {
                        "type": "number"
                    },
                    "correctProChallenge": {
                        "type": "boolean",
                        "example": false
                    }
                },
                "required": [
                    "userId",
                    "status",
                    "admittedPro",
                    "response",
                    "emailSent",
                    "reimbursementValue",
                    "correctProChallenge"
                ]
            },
            "AdmissionDecisionUpdate": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "status": {
                        "type": "string",
                        "enum": [
                            "TBD",
                            "ACCEPTED",
                            "REJECTED",
                            "WAITLISTED"
                        ]
                    },
                    "admittedPro": {
                        "type": "boolean",
                        "example": false
                    },
                    "reimbursementValue": {
                        "type": "number"
                    }
                },
                "required": [
                    "userId",
                    "status",
                    "admittedPro",
                    "reimbursementValue"
                ]
            },
            "AttendeeProfile": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "displayName": {
                        "type": "string"
                    },
                    "avatarUrl": {
                        "type": "string"
                    },
                    "discordTag": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number"
                    },
                    "pointsAccumulated": {
                        "type": "number"
                    },
                    "foodWave": {
                        "type": "number"
                    },
                    "dietaryRestrictions": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "shirtSize": {
                        "type": "string"
                    },
                    "team": {
                        "type": "string"
                    },
                    "teamBadge": {
                        "type": "string"
                    },
                    "tier": {
                        "type": "number"
                    },
                    "duelStats": {
                        "type": "object",
                        "properties": {
                            "duelsPlayed": {
                                "type": "number",
                                "default": 0
                            },
                            "uniqueDuelsPlayed": {
                                "type": "number",
                                "default": 0
                            },
                            "duelsWon": {
                                "type": "number",
                                "default": 0
                            }
                        }
                    }
                },
                "required": [
                    "userId",
                    "displayName",
                    "avatarUrl",
                    "discordTag",
                    "points",
                    "pointsAccumulated",
                    "foodWave",
                    "dietaryRestrictions",
                    "shirtSize",
                    "team",
                    "teamBadge"
                ],
                "example": {
                    "userId": "google12345",
                    "displayName": "Bob The Great",
                    "discordTag": "hackillinois",
                    "avatarUrl": "https://raw.githubusercontent.com/HackIllinois/adonix-metadata/main/avatars/goblin.png",
                    "points": 23,
                    "pointsAccumulated": 104,
                    "foodWave": 1,
                    "dietaryRestrictions": [
                        "Peanut Allergy"
                    ],
                    "shirtSize": "M",
                    "team": "Alpha",
                    "teamBadge": "https://raw.githubusercontent.com/HackIllinois/adonix-metadata/main/teamBadges/alpha.png",
                    "tier": 3
                }
            },
            "AttendeeProfileCreateRequest": {
                "type": "object",
                "properties": {
                    "discordTag": {
                        "type": "string"
                    },
                    "displayName": {
                        "type": "string"
                    },
                    "dietaryRestrictions": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "shirtSize": {
                        "type": "string"
                    },
                    "avatarId": {
                        "type": "string"
                    }
                },
                "required": [
                    "discordTag",
                    "displayName",
                    "dietaryRestrictions",
                    "shirtSize",
                    "avatarId"
                ],
                "example": {
                    "displayName": "Bob The Great",
                    "discordTag": "hackillinois",
                    "avatarId": "goblin",
                    "dietaryRestrictions": [
                        "Peanut Allergy"
                    ],
                    "shirtSize": "M"
                }
            },
            "AttendeeProfileRanking": {
                "type": "object",
                "properties": {
                    "ranking": {
                        "type": "number"
                    }
                },
                "required": [
                    "ranking"
                ],
                "example": {
                    "ranking": 1
                }
            },
            "AttendeeProfileUpdateRequest": {
                "type": "object",
                "properties": {
                    "discordTag": {
                        "type": "string"
                    },
                    "displayName": {
                        "type": "string"
                    },
                    "dietaryRestrictions": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "shirtSize": {
                        "type": "string"
                    },
                    "avatarId": {
                        "type": "string"
                    }
                },
                "example": {
                    "displayName": "Bob The Great",
                    "discordTag": "hackillinois",
                    "avatarId": "goblin",
                    "shirtSize": "L"
                }
            },
            "AttendeeTeam": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string"
                    },
                    "name": {
                        "type": "string"
                    },
                    "badge": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number"
                    },
                    "members": {
                        "type": "number"
                    }
                },
                "required": [
                    "name",
                    "badge",
                    "points",
                    "members"
                ],
                "example": {
                    "id": "6717efb83b5d4c1a2e47a7e1",
                    "name": "Team 1",
                    "badge": "https://raw.githubusercontent.com/HackIllinois/adonix-metadata/main/teamBadges/team1.png",
                    "points": 6700,
                    "members": 67
                }
            },
            "CTF": {
                "type": "object",
                "properties": {
                    "flagId": {
                        "type": "string"
                    },
                    "flag": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number"
                    }
                },
                "required": [
                    "flagId",
                    "flag",
                    "points"
                ],
                "example": {
                    "flagId": "flag1",
                    "flag": "hackctf{flag1-example_flag}",
                    "points": 10
                }
            },
            "CreateAttendeeTeamRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "badge": {
                        "type": "string"
                    }
                },
                "required": [
                    "name",
                    "badge"
                ],
                "example": {
                    "name": "Team 1",
                    "badge": "https://raw.githubusercontent.com/HackIllinois/adonix-metadata/main/teamBadges/team1.png"
                }
            },
            "CreateEventRequest": {
                "type": "object",
                "properties": {
                    "isStaff": {
                        "type": "boolean"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string"
                    },
                    "startTime": {
                        "type": "number",
                        "minimum": 0
                    },
                    "endTime": {
                        "type": "number",
                        "minimum": 0
                    },
                    "exp": {
                        "type": "number"
                    },
                    "eventType": {
                        "type": "string",
                        "enum": [
                            "MEAL",
                            "SPEAKER",
                            "WORKSHOP",
                            "MINIEVENT",
                            "SIDEQUEST",
                            "QNA",
                            "MEETING",
                            "STAFFSHIFT",
                            "OTHER"
                        ]
                    },
                    "locations": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Location"
                        }
                    },
                    "isAsync": {
                        "type": "boolean"
                    },
                    "mapImageUrl": {
                        "type": "string"
                    },
                    "sponsor": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number",
                        "minimum": 0
                    },
                    "isPrivate": {
                        "type": "boolean"
                    },
                    "displayOnStaffCheckIn": {
                        "type": "boolean"
                    },
                    "isMandatory": {
                        "type": "boolean"
                    },
                    "isPro": {
                        "type": "boolean"
                    },
                    "menu": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "isStaff",
                    "name",
                    "description",
                    "startTime",
                    "endTime",
                    "eventType",
                    "locations",
                    "isAsync",
                    "points",
                    "isPrivate",
                    "isPro"
                ],
                "example": {
                    "name": "Awesome Event",
                    "description": "A really cool event",
                    "startTime": 1532202702,
                    "endTime": 1532212702,
                    "exp": 1532242900,
                    "locations": [
                        {
                            "description": "Siebel Center for CS",
                            "latitude": 40.1138,
                            "longitude": -88.2249
                        }
                    ],
                    "sponsor": "AwesomeSocks",
                    "eventType": "WORKSHOP",
                    "points": 10,
                    "isStaff": false,
                    "isPrivate": false,
                    "isAsync": false,
                    "isPro": false,
                    "isMandatory": false,
                    "displayOnStaffCheckIn": true,
                    "mapImageUrl": "example.com/image.png"
                }
            },
            "CreateSponsorRequest": {
                "type": "object",
                "properties": {
                    "email": {
                        "$ref": "#/components/schemas/SponsorEmail"
                    }
                },
                "required": [
                    "email"
                ]
            },
            "DecisionStatistic": {
                "type": "object",
                "properties": {
                    "accepted": {
                        "type": "number"
                    },
                    "rejected": {
                        "type": "number"
                    },
                    "waitlisted": {
                        "type": "number"
                    },
                    "tbd": {
                        "type": "number"
                    }
                },
                "required": [
                    "accepted",
                    "rejected",
                    "waitlisted",
                    "tbd"
                ]
            },
            "DeleteSponsorRequest": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    }
                },
                "required": [
                    "userId"
                ]
            },
            "Duel": {
                "type": "object",
                "properties": {
                    "hostId": {
                        "type": "string"
                    },
                    "guestId": {
                        "type": "string"
                    },
                    "hostScore": {
                        "type": "number"
                    },
                    "guestScore": {
                        "type": "number"
                    },
                    "hostHasDisconnected": {
                        "type": "boolean"
                    },
                    "guestHasDisconnected": {
                        "type": "boolean"
                    },
                    "hasFinished": {
                        "type": "boolean"
                    },
                    "isScoringDuel": {
                        "type": "boolean"
                    },
                    "pendingUpdates": {
                        "type": "object",
                        "properties": {
                            "host": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            },
                            "guest": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                }
                            }
                        },
                        "required": [
                            "host",
                            "guest"
                        ]
                    }
                },
                "required": [
                    "hostId",
                    "guestId",
                    "hostScore",
                    "guestScore",
                    "hostHasDisconnected",
                    "guestHasDisconnected",
                    "hasFinished",
                    "isScoringDuel",
                    "pendingUpdates"
                ],
                "example": {
                    "hostId": "google12345",
                    "guestId": "google67890",
                    "hostScore": 6,
                    "guestScore": 7,
                    "hostHasDisconnected": false,
                    "guestHasDisconnected": false,
                    "hasFinished": false,
                    "isScoringDuel": true,
                    "pendingUpdates": {
                        "host": [],
                        "guest": []
                    }
                }
            },
            "DuelCreateRequest": {
                "type": "object",
                "properties": {
                    "hostId": {
                        "type": "string"
                    },
                    "guestId": {
                        "type": "string"
                    }
                },
                "required": [
                    "hostId",
                    "guestId"
                ],
                "example": {
                    "hostId": "google12345",
                    "guestId": "google67890"
                }
            },
            "DuelId": {
                "type": "string",
                "example": "duel1"
            },
            "DuelUpdateRequest": {
                "type": "object",
                "properties": {
                    "hostScore": {
                        "type": "number"
                    },
                    "guestScore": {
                        "type": "number"
                    },
                    "hostHasDisconnected": {
                        "type": "boolean"
                    },
                    "guestHasDisconnected": {
                        "type": "boolean"
                    },
                    "hasFinished": {
                        "type": "boolean"
                    }
                },
                "example": {
                    "hostScore": 0,
                    "guestScore": 1,
                    "hostHasDisconnected": false,
                    "guestHasDisconnected": false,
                    "hasFinished": false
                }
            },
            "Event": {
                "type": "object",
                "properties": {
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    },
                    "isStaff": {
                        "type": "boolean"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string"
                    },
                    "startTime": {
                        "type": "number",
                        "minimum": 0
                    },
                    "endTime": {
                        "type": "number",
                        "minimum": 0
                    },
                    "exp": {
                        "type": "number"
                    },
                    "eventType": {
                        "type": "string",
                        "enum": [
                            "MEAL",
                            "SPEAKER",
                            "WORKSHOP",
                            "MINIEVENT",
                            "SIDEQUEST",
                            "QNA",
                            "MEETING",
                            "STAFFSHIFT",
                            "OTHER"
                        ]
                    },
                    "locations": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Location"
                        }
                    },
                    "isAsync": {
                        "type": "boolean"
                    },
                    "mapImageUrl": {
                        "type": "string"
                    },
                    "sponsor": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number",
                        "minimum": 0
                    },
                    "isPrivate": {
                        "type": "boolean"
                    },
                    "displayOnStaffCheckIn": {
                        "type": "boolean"
                    },
                    "isMandatory": {
                        "type": "boolean"
                    },
                    "isPro": {
                        "type": "boolean"
                    },
                    "menu": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "eventId",
                    "isStaff",
                    "name",
                    "description",
                    "startTime",
                    "endTime",
                    "eventType",
                    "locations",
                    "isAsync",
                    "points",
                    "isPrivate",
                    "isPro"
                ],
                "example": {
                    "eventId": "52fdfc072182654f163f5f0f9a621d72",
                    "name": "Awesome Event",
                    "description": "A really cool event",
                    "startTime": 1532202702,
                    "endTime": 1532212702,
                    "locations": [
                        {
                            "description": "Siebel Center for CS",
                            "latitude": 40.1138,
                            "longitude": -88.2249
                        }
                    ],
                    "sponsor": "AwesomeSocks",
                    "eventType": "WORKSHOP",
                    "points": 10,
                    "isStaff": false,
                    "isPrivate": false,
                    "isAsync": false,
                    "isPro": false,
                    "isMandatory": false,
                    "displayOnStaffCheckIn": true,
                    "mapImageUrl": "example.com/image.png",
                    "exp": 12393928829,
                    "menu": [
                        "Pizza",
                        "Pizza"
                    ]
                }
            },
            "EventAttendance": {
                "type": "object",
                "properties": {
                    "present": {
                        "type": "array",
                        "items": {
                            "type": "array",
                            "prefixItems": [
                                {
                                    "type": "string"
                                },
                                {
                                    "type": "number"
                                },
                                {
                                    "type": "number"
                                }
                            ]
                        }
                    },
                    "excused": {
                        "type": "array",
                        "items": {
                            "type": "array",
                            "prefixItems": [
                                {
                                    "type": "string"
                                },
                                {
                                    "type": "number"
                                },
                                {
                                    "type": "number"
                                }
                            ]
                        }
                    },
                    "absent": {
                        "type": "array",
                        "items": {
                            "type": "array",
                            "prefixItems": [
                                {
                                    "type": "string"
                                },
                                {
                                    "type": "number"
                                },
                                {
                                    "type": "number"
                                }
                            ]
                        }
                    }
                },
                "required": [
                    "present",
                    "excused",
                    "absent"
                ]
            },
            "EventAttendees": {
                "type": "object",
                "properties": {
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    },
                    "attendees": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    },
                    "excusedAttendees": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    }
                },
                "required": [
                    "eventId",
                    "attendees",
                    "excusedAttendees"
                ]
            },
            "EventAttendeesInfo": {
                "type": "object",
                "properties": {
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    },
                    "attendeesInfo": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserInfo"
                        }
                    }
                },
                "required": [
                    "eventId",
                    "attendeesInfo"
                ]
            },
            "EventFollowers": {
                "type": "object",
                "properties": {
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    },
                    "followers": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    }
                },
                "required": [
                    "eventId",
                    "followers"
                ]
            },
            "EventId": {
                "type": "string",
                "example": "event1"
            },
            "EventQRCode": {
                "type": "string"
            },
            "EventStatistic": {
                "type": "object",
                "properties": {
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    },
                    "attendees": {
                        "type": "number"
                    }
                },
                "required": [
                    "eventId",
                    "attendees"
                ]
            },
            "Events": {
                "type": "object",
                "properties": {
                    "events": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Event"
                        }
                    }
                },
                "required": [
                    "events"
                ]
            },
            "FlagCreateRequest": {
                "type": "object",
                "properties": {
                    "flagId": {
                        "type": "string"
                    },
                    "flag": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number"
                    }
                },
                "required": [
                    "flagId",
                    "flag",
                    "points"
                ],
                "example": {
                    "flagId": "flag1",
                    "flag": "hackctf{flag1-example_flag}",
                    "points": 10
                }
            },
            "JobPosting": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/JobPostingCreateRequest"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "_id": {
                                "$ref": "#/components/schemas/JobPostingMongoId"
                            }
                        },
                        "required": [
                            "_id"
                        ]
                    }
                ]
            },
            "JobPostingCreateRequest": {
                "type": "object",
                "properties": {
                    "companyName": {
                        "type": "string",
                        "minLength": 1,
                        "example": "Example Corp"
                    },
                    "logoUrl": {
                        "type": "string",
                        "format": "uri",
                        "example": "https://example.com/logo.png"
                    },
                    "jobTitle": {
                        "type": "string",
                        "minLength": 1,
                        "example": "Software Engineer Intern"
                    },
                    "jobDescription": {
                        "type": "string",
                        "minLength": 1,
                        "example": "Build products with our engineering team."
                    },
                    "applicationUrl": {
                        "type": "string",
                        "format": "uri",
                        "example": "https://example.com/careers/software-engineer-intern"
                    }
                },
                "required": [
                    "companyName",
                    "logoUrl",
                    "jobTitle",
                    "jobDescription",
                    "applicationUrl"
                ]
            },
            "JobPostingMongoId": {
                "type": "string",
                "pattern": "^[a-fA-F0-9]{24}$",
                "example": "65f0d1d7f6201f6a63dbf53e"
            },
            "JudgeMongoId": {
                "type": "string",
                "pattern": "^[a-fA-F0-9]{24}$",
                "example": "65f0d1d7f6201f6a63dbf53e"
            },
            "JudgeProfile": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/JudgeProfileCreateRequest"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "_id": {
                                "$ref": "#/components/schemas/JudgeMongoId"
                            }
                        },
                        "required": [
                            "_id"
                        ]
                    }
                ]
            },
            "JudgeProfileCreateRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "example": "Ada Lovelace"
                    },
                    "description": {
                        "type": "string",
                        "example": "Can judge product, technical depth, and storytelling."
                    },
                    "imageUrl": {
                        "type": "string",
                        "format": "uri",
                        "default": "https://raw.githubusercontent.com/HackIllinois/hackillinois/main/mobile/assets/profile/avatar-screen/avatars/character1.svg",
                        "description": "Public URL for the judge profile image bytes",
                        "example": "https://raw.githubusercontent.com/HackIllinois/hackillinois/main/mobile/assets/profile/avatar-screen/avatars/character1.svg"
                    }
                },
                "required": [
                    "name",
                    "description"
                ]
            },
            "ListRoles": {
                "type": "object",
                "properties": {
                    "userIds": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    }
                },
                "required": [
                    "userIds"
                ]
            },
            "ListRolesInfo": {
                "type": "object",
                "properties": {
                    "userInfo": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserInfo"
                        }
                    }
                },
                "required": [
                    "userInfo"
                ]
            },
            "Location": {
                "type": "object",
                "properties": {
                    "description": {
                        "type": "string"
                    },
                    "latitude": {
                        "type": "number"
                    },
                    "longitude": {
                        "type": "number"
                    }
                },
                "required": [
                    "description",
                    "latitude",
                    "longitude"
                ]
            },
            "MailBulkSendResult": {
                "type": "object",
                "properties": {
                    "success": {
                        "type": "boolean"
                    },
                    "successCount": {
                        "type": "number"
                    },
                    "failedCount": {
                        "type": "number"
                    },
                    "errors": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "success",
                    "successCount",
                    "failedCount",
                    "errors"
                ],
                "example": {
                    "success": true,
                    "successCount": 10,
                    "failedCount": 0,
                    "errors": []
                }
            },
            "MailSend": {
                "type": "object",
                "properties": {
                    "subject": {
                        "type": "string"
                    },
                    "body": {
                        "type": "string"
                    },
                    "emails": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "format": "email"
                        }
                    }
                },
                "required": [
                    "subject",
                    "body",
                    "emails"
                ]
            },
            "MailSendAttendees": {
                "type": "object",
                "properties": {
                    "subject": {
                        "type": "string"
                    },
                    "body": {
                        "type": "string"
                    }
                },
                "required": [
                    "subject",
                    "body"
                ]
            },
            "MailSendResult": {
                "type": "object",
                "properties": {
                    "success": {
                        "type": "boolean"
                    },
                    "message": {
                        "type": "string"
                    }
                },
                "required": [
                    "success"
                ],
                "example": {
                    "success": true
                }
            },
            "MailSendSelf": {
                "type": "object",
                "properties": {
                    "subject": {
                        "type": "string"
                    },
                    "body": {
                        "type": "string"
                    }
                },
                "required": [
                    "subject",
                    "body"
                ]
            },
            "MentorAttendanceRequest": {
                "type": "object",
                "properties": {
                    "mentorId": {
                        "$ref": "#/components/schemas/MentorId"
                    }
                },
                "required": [
                    "mentorId"
                ]
            },
            "MentorCreateOfficeHours": {
                "type": "object",
                "properties": {
                    "mentorName": {
                        "type": "string",
                        "example": "Bob the Mentor"
                    },
                    "location": {
                        "type": "string",
                        "example": "Siebel 2407"
                    },
                    "startTime": {
                        "type": "number",
                        "description": "Unix timestamp",
                        "example": 1707235200000
                    },
                    "endTime": {
                        "type": "number",
                        "description": "Unix timestamp",
                        "example": 1707238800000
                    }
                },
                "required": [
                    "mentorName",
                    "location",
                    "startTime",
                    "endTime"
                ]
            },
            "MentorId": {
                "type": "string",
                "example": "a1f25"
            },
            "MentorOfficeHours": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/MentorCreateOfficeHours"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "mentorId": {
                                "$ref": "#/components/schemas/MentorId"
                            }
                        },
                        "required": [
                            "mentorId"
                        ]
                    }
                ]
            },
            "MentorProfile": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/MentorProfileCreateRequest"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "mentorId": {
                                "$ref": "#/components/schemas/MentorId"
                            }
                        },
                        "required": [
                            "mentorId"
                        ]
                    }
                ]
            },
            "MentorProfileCreateRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string",
                        "example": "Bob the Mentor"
                    },
                    "description": {
                        "type": "string",
                        "example": "I can help with React, Node.js, and product ideation."
                    },
                    "imageUrl": {
                        "type": "string",
                        "format": "uri",
                        "default": "https://raw.githubusercontent.com/HackIllinois/mobile/refs/heads/main/assets/point-shop/point-shop-shopkeeper-2.png",
                        "description": "Public URL for the mentor profile image bytes",
                        "example": "https://raw.githubusercontent.com/HackIllinois/mobile/refs/heads/main/assets/point-shop/point-shop-shopkeeper-2.png"
                    }
                },
                "required": [
                    "name",
                    "description"
                ]
            },
            "NewsletterId": {
                "type": "string",
                "example": "hackillinois2025_interest"
            },
            "NewsletterSubscription": {
                "type": "object",
                "properties": {
                    "newsletterId": {
                        "$ref": "#/components/schemas/NewsletterId"
                    },
                    "subscribers": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "newsletterId",
                    "subscribers"
                ],
                "example": {
                    "newsletterId": "hackillinois2025_interest",
                    "subscribers": [
                        "user1",
                        "user2",
                        "user3"
                    ]
                }
            },
            "NewsletterSubscriptions": {
                "type": "array",
                "items": {
                    "$ref": "#/components/schemas/NewsletterSubscription"
                }
            },
            "NotificationMessage": {
                "type": "object",
                "properties": {
                    "sender": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "title": {
                        "type": "string"
                    },
                    "body": {
                        "type": "string"
                    },
                    "sent": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    },
                    "failed": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    }
                },
                "required": [
                    "sender",
                    "title",
                    "body",
                    "sent",
                    "failed"
                ],
                "example": {
                    "sender": "google1234",
                    "title": "This is a test notification",
                    "body": "blame aydan",
                    "sent": [
                        "github1234",
                        "github1236",
                        "github1235"
                    ],
                    "failed": [
                        "github1237"
                    ]
                }
            },
            "NotificationMessages": {
                "type": "array",
                "items": {
                    "$ref": "#/components/schemas/NotificationMessage"
                }
            },
            "NotificationSend": {
                "type": "object",
                "properties": {
                    "sent": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    },
                    "failed": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    },
                    "time_ms": {
                        "type": "number",
                        "example": 532
                    }
                },
                "required": [
                    "sent",
                    "failed",
                    "time_ms"
                ]
            },
            "NotificationSendRequest": {
                "type": "object",
                "properties": {
                    "title": {
                        "type": "string"
                    },
                    "body": {
                        "type": "string"
                    },
                    "role": {
                        "$ref": "#/components/schemas/Role"
                    },
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    },
                    "staffShift": {
                        "$ref": "#/components/schemas/EventId"
                    },
                    "foodWave": {
                        "type": "number"
                    },
                    "userIds": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/UserId"
                        }
                    }
                },
                "required": [
                    "title",
                    "body"
                ],
                "example": {
                    "title": "This is a test notification",
                    "body": "blame aydan",
                    "role": "STAFF"
                }
            },
            "Order": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "items": {
                        "type": "object",
                        "additionalProperties": {
                            "type": "number"
                        },
                        "example": {
                            "item1": 32,
                            "item3": 5
                        }
                    }
                },
                "required": [
                    "userId",
                    "items"
                ]
            },
            "OrderQRCode": {
                "type": "object",
                "properties": {
                    "QRCode": {
                        "type": "string"
                    }
                },
                "required": [
                    "QRCode"
                ],
                "example": {
                    "QRCode": "hackillinois://user?qr=3e7eea9a-7264-4ddf-877d-9e004a888eda"
                }
            },
            "OrderRedeem": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "itemId": {
                                    "$ref": "#/components/schemas/ShopItemId"
                                },
                                "name": {
                                    "type": "string",
                                    "example": "Cool Item"
                                },
                                "quantity": {
                                    "type": "number",
                                    "example": 5
                                }
                            },
                            "required": [
                                "itemId",
                                "name",
                                "quantity"
                            ]
                        }
                    }
                },
                "required": [
                    "userId",
                    "items"
                ]
            },
            "OrderRedeemRequest": {
                "type": "object",
                "properties": {
                    "QRCode": {
                        "type": "string"
                    }
                },
                "required": [
                    "QRCode"
                ],
                "description": "The QR code token. Note: This is not the full hackillinois:// uri but just the QR token part.",
                "example": {
                    "QRCode": "3e7eea9a-7264-4ddf-877d-9e004a888eda"
                }
            },
            "ProfileLeaderboardEntries": {
                "type": "object",
                "properties": {
                    "profiles": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ProfileLeaderboardEntry"
                        }
                    }
                },
                "required": [
                    "profiles"
                ]
            },
            "ProfileLeaderboardEntry": {
                "type": "object",
                "properties": {
                    "displayName": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number"
                    },
                    "avatarUrl": {
                        "type": "string"
                    }
                },
                "required": [
                    "displayName",
                    "points",
                    "avatarUrl"
                ]
            },
            "ProfileLeaderboardQueryLimit": {
                "type": "number",
                "minimum": 1,
                "maximum": 25,
                "description": "The number of items to return.\n Must be [1, 25], inclusive.",
                "example": 5
            },
            "Provider": {
                "type": "string",
                "enum": [
                    "github",
                    "google",
                    "sponsor"
                ],
                "description": "The provider to use for authentication. Attendees use GitHub and staff use Google.",
                "example": "github"
            },
            "QRInfo": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "qrInfo": {
                        "type": "string",
                        "description": "QR code URI for the user",
                        "example": "hackillinois://user?userToken=abcd"
                    }
                },
                "required": [
                    "userId",
                    "qrInfo"
                ],
                "description": "A user's QR code"
            },
            "RSVPStatistic": {
                "type": "object",
                "properties": {
                    "accepted": {
                        "type": "number"
                    },
                    "declined": {
                        "type": "number"
                    },
                    "pending": {
                        "type": "number"
                    }
                },
                "required": [
                    "accepted",
                    "declined",
                    "pending"
                ]
            },
            "RedirectUrl": {
                "type": "string",
                "description": "Must be a valid HTTPS URL (or HTTP for localhost)",
                "example": "https://hackillinois.org/register"
            },
            "RegisterDeviceToken": {
                "type": "object",
                "properties": {
                    "deviceToken": {
                        "type": "string",
                        "example": "abcd"
                    }
                },
                "required": [
                    "deviceToken"
                ]
            },
            "RegistrationApplicationDraft": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/RegistrationApplicationDraftRequest"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "userId": {
                                "$ref": "#/components/schemas/UserId"
                            }
                        },
                        "required": [
                            "userId"
                        ]
                    }
                ],
                "example": {
                    "firstName": "Ronakin",
                    "lastName": "Kanandini",
                    "age": "21",
                    "email": "rpak@gmail.org",
                    "gender": "Prefer Not to Answer",
                    "race": [
                        "Prefer Not to Answer"
                    ],
                    "country": "United States",
                    "state": "Illinois",
                    "school": "University of Illinois Urbana-Champaign",
                    "education": "Undergraduate University (3+ year)",
                    "graduate": "Spring 2026",
                    "major": "Computer science, computer engineering, or software engineering",
                    "underrepresented": "No",
                    "hackathonsParticipated": "2-3",
                    "userId": "github1234"
                }
            },
            "RegistrationApplicationDraftRequest": {
                "type": "object",
                "properties": {
                    "firstName": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "lastName": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "preferredName": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "age": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "email": {
                        "type": "string",
                        "maxLength": 200,
                        "format": "email"
                    },
                    "phoneNumber": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "gender": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "race": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "maxItems": 20
                    },
                    "country": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "state": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "school": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "education": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "graduate": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "major": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "underrepresented": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "hackathonsParticipated": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "application1": {
                        "type": "string",
                        "maxLength": 2000
                    },
                    "application2": {
                        "type": "string",
                        "maxLength": 2000
                    },
                    "application3": {
                        "type": "string",
                        "maxLength": 2000
                    },
                    "applicationOptional": {
                        "type": "string",
                        "maxLength": 2000
                    },
                    "pro": {
                        "type": "boolean"
                    },
                    "attribution": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "maxItems": 20
                    },
                    "eventInterest": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "maxItems": 20
                    },
                    "requestTravelReimbursement": {
                        "type": "boolean"
                    },
                    "mlhNewsletter": {
                        "type": "boolean"
                    }
                },
                "example": {
                    "firstName": "Ronakin",
                    "lastName": "Kanandini",
                    "age": "21",
                    "email": "rpak@gmail.org",
                    "gender": "Prefer Not to Answer",
                    "race": [
                        "Prefer Not to Answer"
                    ],
                    "country": "United States",
                    "state": "Illinois",
                    "school": "University of Illinois Urbana-Champaign",
                    "education": "Undergraduate University (3+ year)",
                    "graduate": "Spring 2026",
                    "major": "Computer science, computer engineering, or software engineering",
                    "underrepresented": "No",
                    "hackathonsParticipated": "2-3"
                }
            },
            "RegistrationApplicationSubmittedRequest": {
                "type": "object",
                "properties": {
                    "firstName": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "lastName": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "preferredName": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "age": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "email": {
                        "type": "string",
                        "maxLength": 200,
                        "format": "email"
                    },
                    "phoneNumber": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "gender": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "race": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "maxItems": 20
                    },
                    "country": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "state": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "school": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "education": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "graduate": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "major": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "underrepresented": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "hackathonsParticipated": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "application1": {
                        "type": "string",
                        "maxLength": 2000
                    },
                    "application2": {
                        "type": "string",
                        "maxLength": 2000
                    },
                    "application3": {
                        "type": "string",
                        "maxLength": 2000
                    },
                    "applicationOptional": {
                        "type": "string",
                        "maxLength": 2000
                    },
                    "pro": {
                        "type": "boolean"
                    },
                    "attribution": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "maxItems": 20
                    },
                    "eventInterest": {
                        "type": "array",
                        "items": {
                            "type": "string",
                            "maxLength": 200
                        },
                        "maxItems": 20
                    },
                    "requestTravelReimbursement": {
                        "type": "boolean"
                    },
                    "mlhNewsletter": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "firstName",
                    "lastName",
                    "age",
                    "email",
                    "phoneNumber",
                    "gender",
                    "race",
                    "country",
                    "school",
                    "education",
                    "graduate",
                    "major",
                    "underrepresented",
                    "hackathonsParticipated",
                    "application1",
                    "application2",
                    "application3",
                    "attribution",
                    "eventInterest",
                    "requestTravelReimbursement",
                    "mlhNewsletter"
                ],
                "example": {
                    "firstName": "Ronakin",
                    "lastName": "Kanandini",
                    "age": "21",
                    "email": "rpak@gmail.org",
                    "phoneNumber": "+1 123-456-7890",
                    "gender": "Prefer Not to Answer",
                    "race": [
                        "Prefer Not to Answer"
                    ],
                    "country": "United States",
                    "state": "Illinois",
                    "school": "University of Illinois Urbana-Champaign",
                    "education": "Undergraduate University (3+ year)",
                    "graduate": "Spring 2026",
                    "major": "Computer science, computer engineering, or software engineering",
                    "underrepresented": "No",
                    "hackathonsParticipated": "2-3",
                    "application1": "I love hack",
                    "application2": "I love hack",
                    "application3": "I love hack",
                    "applicationOptional": "",
                    "pro": true,
                    "attribution": [
                        "Word of Mouth",
                        "Instagram"
                    ],
                    "eventInterest": [
                        "Meeting New People"
                    ],
                    "requestTravelReimbursement": false,
                    "mlhNewsletter": true
                }
            },
            "RegistrationChallengeStatus": {
                "type": "object",
                "properties": {
                    "inputFileId": {
                        "type": "string"
                    },
                    "attempts": {
                        "type": "number"
                    },
                    "complete": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "inputFileId",
                    "attempts",
                    "complete"
                ],
                "example": {
                    "inputFileId": "abc123",
                    "attempts": 3,
                    "complete": false
                }
            },
            "RegistrationStatus": {
                "type": "object",
                "properties": {
                    "alive": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "alive"
                ],
                "description": "If registration is currently open or not"
            },
            "ResumeBookEntry": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "email": {
                        "type": "string",
                        "maxLength": 200,
                        "format": "email"
                    },
                    "firstName": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "lastName": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "school": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "education": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "major": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "graduate": {
                        "type": "string",
                        "maxLength": 200
                    },
                    "pro": {
                        "type": "boolean"
                    },
                    "title": {
                        "type": "string"
                    }
                },
                "required": [
                    "userId",
                    "email",
                    "firstName",
                    "lastName",
                    "school",
                    "education",
                    "major",
                    "graduate"
                ]
            },
            "ResumeBookFilter": {
                "type": "object",
                "properties": {
                    "graduations": {
                        "type": "array",
                        "items": {
                            "type": [
                                "number",
                                "null"
                            ]
                        }
                    },
                    "majors": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "degrees": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "ResumeDownloadURL": {
                "type": "object",
                "properties": {
                    "url": {
                        "type": "string",
                        "example": "https://resume-bucket-dev.s3.us-east-2.amazonaws.com/abcd"
                    }
                },
                "required": [
                    "url"
                ]
            },
            "ResumeListDownloadURL": {
                "type": "object",
                "properties": {
                    "urls": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    }
                },
                "required": [
                    "urls"
                ],
                "example": {
                    "urls": [
                        "https://resume-bucket-dev.s3.us-east-2.amazonaws.com/abcd",
                        "https://resume-bucket-dev.s3.us-east-2.amazonaws.com/xyzw"
                    ]
                }
            },
            "ResumeUploadURL": {
                "allOf": [
                    {
                        "$ref": "#/components/schemas/ResumeDownloadURL"
                    },
                    {
                        "type": "object",
                        "properties": {
                            "fields": {}
                        }
                    }
                ],
                "example": {
                    "url": "https://resume-bucket-dev.s3.us-east-2.amazonaws.com/",
                    "fields": {
                        "success_action_status": "201",
                        "Content-Type": "application/pdf",
                        "bucket": "resume-bucket-dev",
                        "X-Amz-Algorithm": "AWS4-HMAC-SHA256",
                        "X-Amz-Credential": "ABCD/20241013/us-east-2/s3/aws4_request",
                        "X-Amz-Date": "20241013T081251Z",
                        "key": "github1234.pdf",
                        "Policy": "eyJ==",
                        "X-Amz-Signature": "bfe6f0c382"
                    }
                }
            },
            "Role": {
                "type": "string",
                "enum": [
                    "ADMIN",
                    "STAFF",
                    "MENTOR",
                    "APPLICANT",
                    "ATTENDEE",
                    "USER",
                    "SPONSOR",
                    "BLOBSTORE",
                    "PRO"
                ],
                "example": "USER"
            },
            "Roles": {
                "type": "object",
                "properties": {
                    "id": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "roles": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Role"
                        }
                    }
                },
                "required": [
                    "id",
                    "roles"
                ]
            },
            "ScanAttendee": {
                "type": "object",
                "properties": {
                    "success": {
                        "type": "boolean",
                        "enum": [
                            true
                        ]
                    },
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "eventName": {
                        "type": "string"
                    },
                    "dietaryRestrictions": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "example": [
                            "Vegan",
                            "No Pork"
                        ]
                    }
                },
                "required": [
                    "success",
                    "userId",
                    "eventName",
                    "dietaryRestrictions"
                ]
            },
            "ScanAttendeeRequest": {
                "type": "object",
                "properties": {
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    },
                    "attendeeQRCode": {
                        "type": "string",
                        "description": "The scanned QR code token, not the hackillinois:// uri",
                        "example": "ns6Shwu2"
                    }
                },
                "required": [
                    "eventId",
                    "attendeeQRCode"
                ]
            },
            "ScanEvent": {
                "type": "object",
                "properties": {
                    "success": {
                        "type": "boolean",
                        "enum": [
                            true
                        ]
                    },
                    "eventName": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number",
                        "description": "Points added from checking into the event",
                        "example": 5
                    }
                },
                "required": [
                    "success",
                    "eventName",
                    "points"
                ]
            },
            "ScanEventRequest": {
                "type": "object",
                "properties": {
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    }
                },
                "required": [
                    "eventId"
                ]
            },
            "Shifts": {
                "type": "object",
                "properties": {
                    "shifts": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Event"
                        }
                    }
                },
                "required": [
                    "shifts"
                ]
            },
            "ShopItem": {
                "type": "object",
                "properties": {
                    "itemId": {
                        "$ref": "#/components/schemas/ShopItemId"
                    },
                    "name": {
                        "type": "string"
                    },
                    "price": {
                        "type": "number"
                    },
                    "isRaffle": {
                        "type": "boolean"
                    },
                    "quantity": {
                        "type": "number"
                    },
                    "imageURL": {
                        "type": "string"
                    }
                },
                "required": [
                    "itemId",
                    "name",
                    "price",
                    "isRaffle",
                    "quantity",
                    "imageURL"
                ],
                "example": {
                    "itemId": "3e7eea9a-7264-4ddf-877d-9e004a888eda",
                    "name": "HackIllinois Branded Hoodie",
                    "price": 15,
                    "isRaffle": true,
                    "quantity": 1,
                    "imageURL": "https://raw.githubusercontent.com/HackIllinois/example/avatars/bunny.svg"
                }
            },
            "ShopItemCreateRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "price": {
                        "type": "number"
                    },
                    "isRaffle": {
                        "type": "boolean"
                    },
                    "quantity": {
                        "type": "number"
                    },
                    "imageURL": {
                        "type": "string"
                    }
                },
                "required": [
                    "name",
                    "price",
                    "isRaffle",
                    "quantity",
                    "imageURL"
                ],
                "example": {
                    "name": "HackIllinois Branded Hoodie",
                    "price": 15,
                    "isRaffle": true,
                    "quantity": 1,
                    "imageURL": "https://raw.githubusercontent.com/HackIllinois/example/avatars/bunny.svg"
                }
            },
            "ShopItemId": {
                "type": "string",
                "example": "3e7eea9a-7264-4ddf-877d-9e004a888eda"
            },
            "ShopItemStatistic": {
                "type": "object",
                "properties": {
                    "itemId": {
                        "$ref": "#/components/schemas/ShopItemId"
                    },
                    "purchased": {
                        "type": "number"
                    }
                },
                "required": [
                    "itemId",
                    "purchased"
                ]
            },
            "ShopItemUpdateRequest": {
                "type": "object",
                "properties": {
                    "name": {
                        "type": "string"
                    },
                    "price": {
                        "type": "number"
                    },
                    "isRaffle": {
                        "type": "boolean"
                    },
                    "quantity": {
                        "type": "number"
                    },
                    "imageURL": {
                        "type": "string"
                    }
                },
                "example": {
                    "name": "New Name"
                }
            },
            "ShopItems": {
                "type": "array",
                "items": {
                    "$ref": "#/components/schemas/ShopItem"
                }
            },
            "Sponsor": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "email": {
                        "$ref": "#/components/schemas/SponsorEmail"
                    }
                },
                "required": [
                    "userId",
                    "email"
                ]
            },
            "SponsorEmail": {
                "type": "string",
                "format": "email",
                "example": "example@sponsor.com"
            },
            "SponsorLoginRequest": {
                "type": "object",
                "properties": {
                    "email": {
                        "$ref": "#/components/schemas/SponsorEmail"
                    },
                    "code": {
                        "type": "string",
                        "example": "1A3Z56"
                    }
                },
                "required": [
                    "email",
                    "code"
                ]
            },
            "Staff Team": {
                "type": "object",
                "properties": {
                    "id": {
                        "type": "string",
                        "example": "6717efb83b5d4c1a2e47a7e1"
                    },
                    "name": {
                        "type": "string",
                        "example": "Systems"
                    }
                },
                "required": [
                    "name"
                ],
                "description": "Represents a team within the organization."
            },
            "StatisticLog": {
                "type": "object",
                "properties": {
                    "timestamp": {
                        "type": "number"
                    },
                    "events": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/EventStatistic"
                        }
                    },
                    "decision": {
                        "$ref": "#/components/schemas/DecisionStatistic"
                    },
                    "rsvp": {
                        "$ref": "#/components/schemas/RSVPStatistic"
                    },
                    "shopItems": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/ShopItemStatistic"
                        }
                    }
                },
                "required": [
                    "timestamp",
                    "events",
                    "decision",
                    "rsvp",
                    "shopItems"
                ]
            },
            "StatisticLogFilterLimitSchema": {
                "type": "number",
                "minimum": 1,
                "maximum": 25,
                "description": "The number of items to return.\n Must be [1, 25], inclusive.",
                "example": 5
            },
            "StatisticLoggingStatus": {
                "type": "object",
                "properties": {
                    "enabled": {
                        "type": "boolean"
                    }
                },
                "required": [
                    "enabled"
                ]
            },
            "StatisticLogs": {
                "type": "array",
                "items": {
                    "$ref": "#/components/schemas/StatisticLog"
                }
            },
            "SubscribeRequest": {
                "type": "object",
                "properties": {
                    "listName": {
                        "$ref": "#/components/schemas/NewsletterId"
                    },
                    "emailAddress": {
                        "type": "string"
                    }
                },
                "required": [
                    "listName",
                    "emailAddress"
                ],
                "example": {
                    "listName": "hackillinois2025_interest",
                    "emailAddress": "example@example.com"
                }
            },
            "UpdateEventRequest": {
                "type": "object",
                "properties": {
                    "isStaff": {
                        "type": "boolean"
                    },
                    "name": {
                        "type": "string"
                    },
                    "description": {
                        "type": "string"
                    },
                    "startTime": {
                        "type": "number",
                        "minimum": 0
                    },
                    "endTime": {
                        "type": "number",
                        "minimum": 0
                    },
                    "exp": {
                        "type": "number"
                    },
                    "eventType": {
                        "type": "string",
                        "enum": [
                            "MEAL",
                            "SPEAKER",
                            "WORKSHOP",
                            "MINIEVENT",
                            "SIDEQUEST",
                            "QNA",
                            "MEETING",
                            "STAFFSHIFT",
                            "OTHER"
                        ]
                    },
                    "locations": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/Location"
                        }
                    },
                    "isAsync": {
                        "type": "boolean"
                    },
                    "mapImageUrl": {
                        "type": "string"
                    },
                    "sponsor": {
                        "type": "string"
                    },
                    "points": {
                        "type": "number",
                        "minimum": 0
                    },
                    "isPrivate": {
                        "type": "boolean"
                    },
                    "displayOnStaffCheckIn": {
                        "type": "boolean"
                    },
                    "isMandatory": {
                        "type": "boolean"
                    },
                    "isPro": {
                        "type": "boolean"
                    },
                    "menu": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        }
                    },
                    "eventId": {
                        "$ref": "#/components/schemas/EventId"
                    }
                },
                "required": [
                    "eventId"
                ],
                "example": {
                    "eventId": "event1",
                    "name": "New Name"
                }
            },
            "UserFollowing": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "following": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/EventId"
                        }
                    }
                },
                "required": [
                    "userId",
                    "following"
                ],
                "description": "A user's events they are following"
            },
            "UserId": {
                "type": "string",
                "description": "Id of a specific user. Can start with github or google.",
                "example": "github1234"
            },
            "UserInfo": {
                "type": "object",
                "properties": {
                    "userId": {
                        "$ref": "#/components/schemas/UserId"
                    },
                    "name": {
                        "type": "string",
                        "example": "John Doe"
                    },
                    "email": {
                        "type": "string",
                        "example": "john@doe.com"
                    }
                },
                "required": [
                    "userId",
                    "name",
                    "email"
                ],
                "description": "A user's info"
            },
            "VersionResponse": {
                "type": "object",
                "properties": {
                    "version": {
                        "type": "string",
                        "description": "The version",
                        "example": "2024.2.4"
                    }
                },
                "required": [
                    "version"
                ]
            }
        },
        "parameters": {}
    },
    "paths": {
        "/admission/accept/": {
            "put": {
                "summary": "RSVP with an accept decision",
                "description": "**Required role: USER**",
                "tags": [
                    "Admission"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AttendeeProfileCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The updated decision",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AdmissionDecision"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "One of:\n- AlreadyExists: Profile already exists\n- ProfileDataRequired: Profile data required when accepting\n\n**See examples dropdown below**",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "AlreadyExists"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Your profile is already created!"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "AlreadyExists",
                                                "message": "Your profile is already created!"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "ProfileDataRequired"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Profile data is required when accepting admission"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "ProfileDataRequired",
                                                "message": "Profile data is required when accepting admission"
                                            }
                                        }
                                    ]
                                },
                                "examples": {
                                    "AlreadyExists": {
                                        "description": "Profile already exists",
                                        "value": {
                                            "error": "AlreadyExists",
                                            "message": "Your profile is already created!"
                                        }
                                    },
                                    "ProfileDataRequired": {
                                        "description": "Profile data required when accepting",
                                        "value": {
                                            "error": "ProfileDataRequired",
                                            "message": "Profile data is required when accepting admission"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Not accepted so can't make a decision",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotAccepted"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You weren't accepted, you cannot accept/decline this decision"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotAccepted",
                                        "message": "You weren't accepted, you cannot accept/decline this decision"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "One of:\n- DecisionNotFound: Couldn't find user's decision\n- NotFound: Couldn't find user's application\n\n**See examples dropdown below**",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "DecisionNotFound"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Couldn't find your decision!"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "DecisionNotFound",
                                                "message": "Couldn't find your decision!"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "NotFound"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Couldn't find your registration"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "NotFound",
                                                "message": "Couldn't find your registration"
                                            }
                                        }
                                    ]
                                },
                                "examples": {
                                    "DecisionNotFound": {
                                        "description": "Couldn't find user's decision",
                                        "value": {
                                            "error": "DecisionNotFound",
                                            "message": "Couldn't find your decision!"
                                        }
                                    },
                                    "NotFound": {
                                        "description": "Couldn't find user's application",
                                        "value": {
                                            "error": "NotFound",
                                            "message": "Couldn't find your registration"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "409": {
                        "description": "Already RSVPd",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadyRSVPed"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You've already RSVPed!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadyRSVPed",
                                        "message": "You've already RSVPed!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admission/notsent/": {
            "get": {
                "summary": "Gets all admission decisions that have not had an email sent yet",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Admission"
                ],
                "responses": {
                    "200": {
                        "description": "The decisions",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/AdmissionDecision"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admission/rsvp/": {
            "get": {
                "summary": "Gets admission rsvp information for the current user",
                "description": "**Required role: USER**",
                "tags": [
                    "Admission"
                ],
                "responses": {
                    "200": {
                        "description": "The admission rsvp information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AdmissionDecision"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Admission rsvp was not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "DecisionNotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find your decision!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "DecisionNotFound",
                                        "message": "Couldn't find your decision!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admission/rsvp/staff/": {
            "get": {
                "summary": "Gets admission rsvps for all users",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Admission"
                ],
                "responses": {
                    "200": {
                        "description": "All admission rsvps",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/AdmissionDecision"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admission/rsvp/{decision}/": {
            "put": {
                "summary": "RSVP with a decline decision",
                "description": "**Required role: USER**",
                "tags": [
                    "Admission"
                ],
                "responses": {
                    "200": {
                        "description": "The updated decision",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AdmissionDecision"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Not accepted so can't make a decision",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotAccepted"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You weren't accepted, you cannot accept/decline this decision"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotAccepted",
                                        "message": "You weren't accepted, you cannot accept/decline this decision"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "One of:\n- DecisionNotFound: Couldn't find user's decision\n- NotFound: Couldn't find user's application\n\n**See examples dropdown below**",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "DecisionNotFound"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Couldn't find your decision!"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "DecisionNotFound",
                                                "message": "Couldn't find your decision!"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "NotFound"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Couldn't find your registration"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "NotFound",
                                                "message": "Couldn't find your registration"
                                            }
                                        }
                                    ]
                                },
                                "examples": {
                                    "DecisionNotFound": {
                                        "description": "Couldn't find user's decision",
                                        "value": {
                                            "error": "DecisionNotFound",
                                            "message": "Couldn't find your decision!"
                                        }
                                    },
                                    "NotFound": {
                                        "description": "Couldn't find user's application",
                                        "value": {
                                            "error": "NotFound",
                                            "message": "Couldn't find your registration"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "409": {
                        "description": "Already RSVPd",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadyRSVPed"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You've already RSVPed!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadyRSVPed",
                                        "message": "You've already RSVPed!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admission/rsvp/{id}/": {
            "get": {
                "summary": "Gets admission rsvp information for the specified user",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Admission"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The admission rsvp information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AdmissionDecision"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Admission rsvp was not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "DecisionNotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find your decision!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "DecisionNotFound",
                                        "message": "Couldn't find your decision!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/admission/update/": {
            "put": {
                "summary": "Updates the decision status of specified applicants",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Admission"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/components/schemas/AdmissionDecisionUpdate"
                                }
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully updated",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "A applicant's application was not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find your registration"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find your registration"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/attendee-team/": {
            "post": {
                "summary": "Creates a new team",
                "description": "**Required role: STAFF**",
                "tags": [
                    "AttendeeTeam"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateAttendeeTeamRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "The created team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AttendeeTeam"
                                }
                            }
                        }
                    }
                }
            },
            "get": {
                "summary": "Gets all teams",
                "description": "**Required role: null**",
                "tags": [
                    "AttendeeTeam"
                ],
                "responses": {
                    "200": {
                        "description": "List of all teams",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/AttendeeTeam"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/attendee-team/{id}/": {
            "delete": {
                "summary": "Deletes a team by ID",
                "description": "**Required role: STAFF**",
                "tags": [
                    "AttendeeTeam"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Successfully deleted team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {},
                                    "description": "Empty response"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find team"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find team"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/login/{provider}/": {
            "get": {
                "summary": "Initiates a login through an authentication provider",
                "description": "**Required role: null**\n\nYou should redirect the browser here to initate the login process. Attendees authenticate through GitHub, and staff authenticate through Google. The redirect parameter must be a URL with a valid origin. Mobile URLs will receive JWT as a URL parameter. Web URLs will receive JWT as an HTTP-only cookie. After successful authentication, the user will be redirected to the provided URL.",
                "tags": [
                    "Auth"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/Provider"
                        },
                        "required": true,
                        "name": "provider",
                        "in": "path"
                    },
                    {
                        "schema": {
                            "$ref": "#/components/schemas/RedirectUrl"
                        },
                        "required": true,
                        "name": "redirect",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful redirect to authentication provider",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {}
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "The redirect url requested is invalid",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "BadRedirectUrl"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The redirect url provided is invalid"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "BadRedirectUrl",
                                        "message": "The redirect url provided is invalid"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/logout/": {
            "post": {
                "summary": "Logs out the currently authenticated user",
                "description": "**Required role: null**\n\nClears the JWT authentication cookie, effectively logging out the user.",
                "tags": [
                    "Auth"
                ],
                "responses": {
                    "200": {
                        "description": "Successfully logged out",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/refresh/": {
            "post": {
                "summary": "Refresh the user's JWT",
                "description": "**Required role: USER**\n\nRefreshes the user's JWT to reflect their most up to date authentication information",
                "tags": [
                    "Auth"
                ],
                "responses": {
                    "200": {
                        "description": "JWT refresh succeeded",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "jwt": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "jwt"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/roles/": {
            "get": {
                "summary": "Gets the roles of the currently authenticated user",
                "description": "**Required role: USER**\n\nPossible roles: ADMIN, STAFF, MENTOR, APPLICANT, ATTENDEE, USER, SPONSOR, BLOBSTORE, PRO",
                "tags": [
                    "Auth"
                ],
                "responses": {
                    "200": {
                        "description": "The roles",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Roles"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/roles/list-info/{role}/": {
            "get": {
                "summary": "Lists user info for all users that have the specified role",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Auth"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/Role"
                        },
                        "required": true,
                        "name": "role",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "User info of all users that have the specified role",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ListRolesInfo"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/roles/list/{role}/": {
            "get": {
                "summary": "Gets all users that have the specified role",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Auth"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/Role"
                        },
                        "required": true,
                        "name": "role",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The user ids that have the specified role",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ListRoles"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/roles/{id}/": {
            "get": {
                "summary": "Gets the roles of the specified user",
                "description": "**Required role: STAFF**\n\nStaff-only because this is used to get roles of another user. To get the roles of the currently authenticated user, use `GET /auth/roles/` instead.",
                "tags": [
                    "Auth"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The roles",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Roles"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the user specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find user"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find user"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/roles/{id}/{role}/": {
            "put": {
                "summary": "Adds a role to a user",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Auth"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    },
                    {
                        "schema": {
                            "$ref": "#/components/schemas/Role"
                        },
                        "required": true,
                        "name": "role",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The updated roles",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Roles"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the user specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find user"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find user"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Removes a role from a user",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Auth"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    },
                    {
                        "schema": {
                            "$ref": "#/components/schemas/Role"
                        },
                        "required": true,
                        "name": "role",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The updated roles",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Roles"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the user specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find user"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find user"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/sponsor/login/": {
            "post": {
                "summary": "Logs in with a code",
                "description": "**Required role: null**",
                "tags": [
                    "Auth"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SponsorLoginRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully logged in, returns the auth token for future requests",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "jwt": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "jwt"
                                    ]
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "The email or code sent was invalid",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "BadCode"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The code entered was invalid"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "BadCode",
                                        "message": "The code entered was invalid"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/sponsor/verify/": {
            "post": {
                "summary": "Sends a code to a sponsor email",
                "description": "**Required role: null**\n\nFor security reasons, there is no confirmation on if an email was actually sent or not",
                "tags": [
                    "Auth"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/SponsorEmail"
                        },
                        "required": true,
                        "name": "email",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Sent a code if the email provided was valid",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/token/": {
            "get": {
                "summary": "Extract JWT from authentication cookie",
                "description": "**Required role: USER**\n\nAllows mobile apps to extract their JWT from the HTTP-only cookie",
                "tags": [
                    "Auth"
                ],
                "responses": {
                    "200": {
                        "description": "JWT token",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "jwt": {
                                            "type": "string"
                                        }
                                    },
                                    "required": [
                                        "jwt"
                                    ]
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "No valid authentication cookie found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AuthenticationFailed"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to authenticate (did the login session expire?) - please try again"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AuthenticationFailed",
                                        "message": "Failed to authenticate (did the login session expire?) - please try again"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/auth/{provider}/callback/": {
            "get": {
                "summary": "DO NOT CALL. Authentication providers call this after a successful authentication.",
                "description": "**Required role: null**\n\n**You should not ever use this directly.** Authentication providers use this endpoint to determine where to send the authentication data. Sets JWT as HTTP-only cookie (web) or URL parameter (mobile).",
                "tags": [
                    "Auth"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/Provider"
                        },
                        "required": true,
                        "name": "provider",
                        "in": "path"
                    },
                    {
                        "schema": {
                            "$ref": "#/components/schemas/RedirectUrl"
                        },
                        "required": true,
                        "name": "state",
                        "in": "query"
                    }
                ],
                "responses": {
                    "302": {
                        "description": "Successful redirect with cookies set or token in URL",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {}
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "The redirect url requested is invalid",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "BadRedirectUrl"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The redirect url provided is invalid"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "BadRedirectUrl",
                                        "message": "The redirect url provided is invalid"
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Authorization failed",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AuthenticationFailed"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to authenticate (did the login session expire?) - please try again"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AuthenticationFailed",
                                        "message": "Failed to authenticate (did the login session expire?) - please try again"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/ctf/": {
            "post": {
                "summary": "Creates a new CTF flag",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "CTF"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/FlagCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "The created CTF flag",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CTF"
                                }
                            }
                        }
                    }
                }
            },
            "get": {
                "summary": "Retrieves all CTF flags",
                "description": "**Required role: STAFF**",
                "tags": [
                    "CTF"
                ],
                "responses": {
                    "200": {
                        "description": "The list of CTF flags",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/CTF"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/ctf/submit/{id}/": {
            "post": {
                "summary": "Submits an answer for a CTF flag",
                "description": "**Required role: USER**",
                "tags": [
                    "CTF"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "answer": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "answer"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The submitted answer is correct",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/CTF"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "One of:\n- CTFSolveFailed: The submitted flag is incorrect\n- AlreadyClaimed: The flag has already been claimed\n- CTFNotActive: CTF is not currently active\n\n**See examples dropdown below**",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "CTFSolveFailed"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "The submitted flag is incorrect"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "CTFSolveFailed",
                                                "message": "The submitted flag is incorrect"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "AlreadyClaimed"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "You've already claimed this flag"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "AlreadyClaimed",
                                                "message": "You've already claimed this flag"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "CTFNotActive"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "CTF is not currently active"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "CTFNotActive",
                                                "message": "CTF is not currently active"
                                            }
                                        }
                                    ]
                                },
                                "examples": {
                                    "CTFSolveFailed": {
                                        "description": "The submitted flag is incorrect",
                                        "value": {
                                            "error": "CTFSolveFailed",
                                            "message": "The submitted flag is incorrect"
                                        }
                                    },
                                    "AlreadyClaimed": {
                                        "description": "The flag has already been claimed",
                                        "value": {
                                            "error": "AlreadyClaimed",
                                            "message": "You've already claimed this flag"
                                        }
                                    },
                                    "CTFNotActive": {
                                        "description": "CTF is not currently active",
                                        "value": {
                                            "error": "CTFNotActive",
                                            "message": "CTF is not currently active"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find flag",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "FlagNotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find flag"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "FlagNotFound",
                                        "message": "Failed to find flag"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/ctf/{id}/": {
            "delete": {
                "summary": "Deletes a CTF flag",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "CTF"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "The deleted CTF flag",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {},
                                    "description": "Empty response"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find flag",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "FlagNotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find flag"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "FlagNotFound",
                                        "message": "Failed to find flag"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/duel/": {
            "post": {
                "summary": "Initiates a duel between two users",
                "description": "**Required role: USER**",
                "tags": [
                    "Duel"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DuelCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "The created duel",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Duel"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/duel/{id}/": {
            "get": {
                "summary": "Gets a duel",
                "description": "**Required role: USER**",
                "tags": [
                    "Duel"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/DuelId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The requested duel",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Duel"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "The requested duel was not found.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "DuelNotFoundError"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The requested duel was not found."
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "DuelNotFoundError",
                                        "message": "The requested duel was not found."
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Updates a duel only if both users submit matching changes",
                "description": "**Required role: USER**",
                "tags": [
                    "Duel"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/DuelId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DuelUpdateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The updated duel",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Duel"
                                }
                            }
                        }
                    },
                    "202": {
                        "description": "Update pending confirmation",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Duel"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "You do not have permission to perform this action.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "DuelForbiddenError"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You do not have permission to perform this action."
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "DuelForbiddenError",
                                        "message": "You do not have permission to perform this action."
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "The requested duel was not found.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "DuelNotFoundError"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The requested duel was not found."
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "DuelNotFoundError",
                                        "message": "The requested duel was not found."
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes a duel",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Duel"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/DuelId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The duel was deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "The requested duel was not found.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "DuelNotFoundError"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The requested duel was not found."
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "DuelNotFoundError",
                                        "message": "The requested duel was not found."
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/": {
            "get": {
                "summary": "Gets all events",
                "description": "**Required role: null**\n\nThe events returned are filtered based on what the currently authenticated user can access.\nFor example, if the currently authenticated user is not staff, staff events will not be shown.",
                "tags": [
                    "Event"
                ],
                "responses": {
                    "200": {
                        "description": "The events",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Events"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Create a new event",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Event"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateEventRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The new event",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Event"
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Update a event",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Event"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/UpdateEventRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The updated event",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Event"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event to update",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/attendance/{id}/": {
            "get": {
                "summary": "Gets attendance per user",
                "description": "**Required role: null**\n\nThe events returned are filtered based on what the currently authenticated user can access.\nFor example, if the currently authenticated user is not staff, staff events will not be shown.",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of mandatory events in which the user is absent, present, and excused",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/EventAttendance"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/attendees-info/{id}/": {
            "get": {
                "summary": "Gets all the attendee information from an event",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/EventId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The attendees' info",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/EventAttendeesInfo"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/attendees/{id}/": {
            "get": {
                "summary": "Gets all the attendees of an event",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/EventId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The attendees",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/EventAttendees"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/followers/{id}/": {
            "get": {
                "summary": "Gets all the followers of an event",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/EventId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The followers",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/EventFollowers"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/mark-excused/{id}/": {
            "put": {
                "summary": "Updates a user's excused status for an event",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/EventId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "userId": {
                                        "type": "string"
                                    },
                                    "excused": {
                                        "type": "boolean"
                                    }
                                },
                                "required": [
                                    "userId",
                                    "excused"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully updated user's excused status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/staff/": {
            "get": {
                "summary": "Gets all staff events",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Event"
                ],
                "responses": {
                    "200": {
                        "description": "The events",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Events"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/update-attendance/{id}/": {
            "put": {
                "summary": "Updates a user's attendance for an event",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/EventId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "userId": {
                                        "type": "string"
                                    },
                                    "present": {
                                        "type": "boolean"
                                    }
                                },
                                "required": [
                                    "userId",
                                    "present"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully updated user's attendance status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/{id}/": {
            "get": {
                "summary": "Gets details of an event",
                "description": "**Required role: null**",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/EventId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The event",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Event"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event specified.\nThis also occurs if the user doesn't have permission to view this event.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Delete a event",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/EventId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event to delete",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/event/{id}/qr": {
            "get": {
                "summary": "Gets qr code of an event",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Event"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/EventId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The QR code",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "qrCode": {
                                            "$ref": "#/components/schemas/EventQRCode"
                                        }
                                    },
                                    "required": [
                                        "qrCode"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the event specified.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job/": {
            "get": {
                "summary": "Gets all job postings",
                "description": "**Required role: null**",
                "tags": [
                    "Job"
                ],
                "responses": {
                    "200": {
                        "description": "The job postings",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JobPosting"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Creates a job posting",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Job"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobPostingCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "The created job posting",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobPosting"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/job/{id}/": {
            "put": {
                "summary": "Updates a job posting",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Job"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/JobPostingMongoId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JobPostingCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The updated job posting",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JobPosting"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the job posting requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find job posting"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find job posting"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes a job posting",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Job"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/JobPostingMongoId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the job posting requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find job posting"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find job posting"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/judge/info/": {
            "post": {
                "summary": "Creates a judge profile",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Judge"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JudgeProfileCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "The created judge profile",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JudgeProfile"
                                }
                            }
                        }
                    }
                }
            },
            "get": {
                "summary": "Gets all judge profiles",
                "description": "**Required role: null**",
                "tags": [
                    "Judge"
                ],
                "responses": {
                    "200": {
                        "description": "The judge profiles",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/JudgeProfile"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/judge/info/{id}/": {
            "put": {
                "summary": "Updates a judge profile",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Judge"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/JudgeMongoId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/JudgeProfileCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The updated judge profile",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/JudgeProfile"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the judge requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find judge"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find judge"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes a judge profile",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Judge"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/JudgeMongoId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the judge requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find judge"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find judge"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/mail/send/": {
            "post": {
                "summary": "Bulk send a generic email",
                "description": "**Required role: ADMIN**\n\nSends a generic email with the given subject and body to all provided email addresses.",
                "tags": [
                    "Mail"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MailSend"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bulk send results",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MailBulkSendResult"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/mail/send/attendees/": {
            "post": {
                "summary": "Send a generic email to all attendees",
                "description": "**Required role: ADMIN**\n\nFetches all attendee profiles, joins with registration submissions to get emails, and sends a generic email to each.",
                "tags": [
                    "Mail"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MailSendAttendees"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Bulk send results",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MailBulkSendResult"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/mail/send/self/": {
            "post": {
                "summary": "Send a generic email to yourself",
                "description": "**Required role: ADMIN**\n\nLooks up the authenticated user's email from the user collection and sends them a generic email.",
                "tags": [
                    "Mail"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MailSendSelf"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Email sent successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MailSendResult"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "User email not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "UserEmailNotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "User email not found"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "UserEmailNotFound",
                                        "message": "User email not found"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/mentor/": {
            "post": {
                "summary": "Create a mentor's office hours",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Mentor"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MentorCreateOfficeHours"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "The new office hours",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MentorOfficeHours"
                                }
                            }
                        }
                    }
                }
            },
            "get": {
                "summary": "Gets all mentor office hours",
                "description": "**Required role: USER**",
                "tags": [
                    "Mentor"
                ],
                "responses": {
                    "200": {
                        "description": "The office hours",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/MentorOfficeHours"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/mentor/attendance/": {
            "post": {
                "summary": "Checks into a mentor's office hours",
                "description": "**Required role: ATTENDEE**",
                "tags": [
                    "Mentor"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MentorAttendanceRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully checked in, returns the points rewarded",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "points": {
                                            "type": "number",
                                            "description": "The points rewarded for checking in",
                                            "example": 5
                                        }
                                    },
                                    "required": [
                                        "points"
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Already checked in to office hours",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadyCheckedIn"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You're already checked in to this event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadyCheckedIn",
                                        "message": "You're already checked in to this event"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the mentor requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find mentor"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find mentor"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/mentor/info/": {
            "post": {
                "summary": "Creates a mentor profile",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Mentor"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MentorProfileCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "201": {
                        "description": "The created mentor profile",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MentorProfile"
                                }
                            }
                        }
                    }
                }
            },
            "get": {
                "summary": "Gets all mentor profiles",
                "description": "**Required role: null**",
                "tags": [
                    "Mentor"
                ],
                "responses": {
                    "200": {
                        "description": "The mentor profiles",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/MentorProfile"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/mentor/info/{id}/": {
            "put": {
                "summary": "Updates a mentor profile",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Mentor"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/MentorId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MentorProfileCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The updated mentor profile",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MentorProfile"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the mentor requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find mentor"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find mentor"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes a mentor profile",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Mentor"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/MentorId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the mentor requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find mentor"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find mentor"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/mentor/{id}/": {
            "put": {
                "summary": "Updates the specified mentor's office hours",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Mentor"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/MentorId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/MentorCreateOfficeHours"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The updated office hours",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/MentorOfficeHours"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the mentor requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find mentor"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find mentor"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes the specified mentor's office hours",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Mentor"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/MentorId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Failed to find the mentor requested",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find mentor"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find mentor"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/newsletter/": {
            "get": {
                "summary": "Gets all of the newsletter and their subscribers",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Newsletter"
                ],
                "responses": {
                    "200": {
                        "description": "Successfully got the subscribers",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NewsletterSubscriptions"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/newsletter/subscribe/": {
            "post": {
                "summary": "Subscribes the requested email to the requested newsletter",
                "description": "**Required role: null**",
                "tags": [
                    "Newsletter"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SubscribeRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully added email to newsletter",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Unsubscribes the requested email to the requested newsletter",
                "description": "**Required role: null**",
                "tags": [
                    "Newsletter"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/SubscribeRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "If the email was subscribed, it no longer is. For privacy reasons, whether this email was subscribed or not is hidden.",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/newsletter/{id}/": {
            "get": {
                "summary": "Gets a newsletter and it's subscribers",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Newsletter"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/NewsletterId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully got the subscribers",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NewsletterSubscription"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "That newsletter does not exist",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "That newsletter doesn't exist!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "That newsletter doesn't exist!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/notification/": {
            "get": {
                "summary": "Gets all notifications that have been sent",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Notification"
                ],
                "responses": {
                    "200": {
                        "description": "All the notifications",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NotificationMessages"
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Registers a device token to be associate with the currently authenticated user",
                "description": "**Required role: USER**",
                "tags": [
                    "Notification"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RegisterDeviceToken"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully registered",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/notification/send/": {
            "post": {
                "summary": "Sends a notification to a specified group of users",
                "description": "**Required role: ADMIN**\n\nCan filter by: \n- `eventId`: users following a event\n- `role`: users that have a role\n- `staffShift`: staff in a staff shift\n- `foodWave`: users in a food wave \n- `userIds`: some set of users\nFilters are intersecting, so `eventId = 123` and `foodWave = 1` would get users following event 123 AND in food wave 1.",
                "tags": [
                    "Notification"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/NotificationSendRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The result of the sent batch",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NotificationSend"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/notification/send/self": {
            "post": {
                "summary": "Sends a test notification to the currently authenticated user",
                "description": "**Required role: STAFF**\n\nUseful for testing if your device token is registered correctly and notifications are working.",
                "tags": [
                    "Notification"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "title": {
                                        "type": "string"
                                    },
                                    "body": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "title",
                                    "body"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The result of the test notification",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/NotificationSend"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/profile/": {
            "get": {
                "summary": "Gets the currently authenticated user's profile",
                "description": "**Required role: ATTENDEE**",
                "tags": [
                    "Profile"
                ],
                "responses": {
                    "200": {
                        "description": "The profile",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AttendeeProfile"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the profile (is it created yet?)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find the profile"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find the profile"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Creates profile of the currently authenticated user",
                "description": "**Required role: ATTENDEE**",
                "tags": [
                    "Profile"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AttendeeProfileCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The created profile",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AttendeeProfile"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Profile already created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadyExists"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Your profile is already created!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadyExists",
                                        "message": "Your profile is already created!"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Updates profile of the currently authenticated user",
                "description": "**Required role: ATTENDEE**",
                "tags": [
                    "Profile"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/AttendeeProfileUpdateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The ranking",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AttendeeProfile"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find ",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find the profile"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find the profile"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/profile/leaderboard/": {
            "get": {
                "summary": "Gets the profile leaderboard",
                "description": "**Required role: null**\n\nThis endpoint is limited - you must provide a limit in the range `[1, 25]`, inclusive.",
                "tags": [
                    "Profile"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/ProfileLeaderboardQueryLimit"
                        },
                        "required": false,
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The leaderboard",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ProfileLeaderboardEntries"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/profile/ranking/": {
            "get": {
                "summary": "Gets the ranking of the currently authenticated user",
                "description": "**Required role: ATTENDEE**",
                "tags": [
                    "Profile"
                ],
                "responses": {
                    "200": {
                        "description": "The ranking",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AttendeeProfileRanking"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the profile (is it created yet?)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find the profile"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find the profile"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/profile/{id}/": {
            "get": {
                "summary": "Gets the specified user's profile",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Profile"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The profile",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/AttendeeProfile"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find the profile",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find the profile"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find the profile"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/puzzle/create/": {
            "post": {
                "summary": "Create the currently authenticated user's puzzle",
                "description": "**Required role: USER**",
                "tags": [
                    "Puzzle"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "teamName": {
                                        "type": "string",
                                        "example": "team team"
                                    }
                                },
                                "required": [
                                    "teamName"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The newly created puzzle status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "userId": {
                                            "$ref": "#/components/schemas/UserId"
                                        },
                                        "teamName": {
                                            "type": "string",
                                            "example": "team team"
                                        },
                                        "lastCorrect": {
                                            "type": "number",
                                            "example": 123
                                        },
                                        "score": {
                                            "type": "number",
                                            "example": 3
                                        },
                                        "problemComplete": {
                                            "type": "array",
                                            "items": {
                                                "type": "boolean"
                                            },
                                            "example": [
                                                true,
                                                true,
                                                false
                                            ]
                                        }
                                    },
                                    "required": [
                                        "userId",
                                        "teamName",
                                        "lastCorrect",
                                        "score",
                                        "problemComplete"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/puzzle/status/": {
            "get": {
                "summary": "Gets the status on the currently authenticated user's puzzle",
                "description": "**Required role: USER**",
                "tags": [
                    "Puzzle"
                ],
                "responses": {
                    "200": {
                        "description": "The status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "userId": {
                                            "$ref": "#/components/schemas/UserId"
                                        },
                                        "teamName": {
                                            "type": "string",
                                            "example": "team team"
                                        },
                                        "lastCorrect": {
                                            "type": "number",
                                            "example": 123
                                        },
                                        "score": {
                                            "type": "number",
                                            "example": 3
                                        },
                                        "problemComplete": {
                                            "type": "array",
                                            "items": {
                                                "type": "boolean"
                                            },
                                            "example": [
                                                true,
                                                true,
                                                false
                                            ]
                                        }
                                    },
                                    "required": [
                                        "userId",
                                        "teamName",
                                        "lastCorrect",
                                        "score",
                                        "problemComplete"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "The user's puzzle hasn't been created yet",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotCreated"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You need to create a puzzle first!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotCreated",
                                        "message": "You need to create a puzzle first!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/puzzle/submit/{qid}/": {
            "post": {
                "summary": "Submits an answer to a specific question",
                "description": "**Required role: USER**",
                "tags": [
                    "Puzzle"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string",
                            "example": "1"
                        },
                        "required": true,
                        "name": "qid",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "answer": {
                                        "type": "string",
                                        "example": "tacocat"
                                    }
                                },
                                "required": [
                                    "answer"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The new puzzle status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "userId": {
                                            "$ref": "#/components/schemas/UserId"
                                        },
                                        "teamName": {
                                            "type": "string",
                                            "example": "team team"
                                        },
                                        "lastCorrect": {
                                            "type": "number",
                                            "example": 123
                                        },
                                        "score": {
                                            "type": "number",
                                            "example": 3
                                        },
                                        "problemComplete": {
                                            "type": "array",
                                            "items": {
                                                "type": "boolean"
                                            },
                                            "example": [
                                                true,
                                                true,
                                                false
                                            ]
                                        }
                                    },
                                    "required": [
                                        "userId",
                                        "teamName",
                                        "lastCorrect",
                                        "score",
                                        "problemComplete"
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "The answer was incorrect",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "IncorrectAnswer"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Your answer was incorrect!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "IncorrectAnswer",
                                        "message": "Your answer was incorrect!"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "One of:\n- NotCreated: The user's puzzle hasn't been created yet\n- NotFound: The question requested doesn't exist\n\n**See examples dropdown below**",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "NotCreated"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "You need to create a puzzle first!"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "NotCreated",
                                                "message": "You need to create a puzzle first!"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "NotFound"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "That question doesn't exist!"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "NotFound",
                                                "message": "That question doesn't exist!"
                                            }
                                        }
                                    ]
                                },
                                "examples": {
                                    "NotCreated": {
                                        "description": "The user's puzzle hasn't been created yet",
                                        "value": {
                                            "error": "NotCreated",
                                            "message": "You need to create a puzzle first!"
                                        }
                                    },
                                    "NotFound": {
                                        "description": "The question requested doesn't exist",
                                        "value": {
                                            "error": "NotFound",
                                            "message": "That question doesn't exist!"
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/registration/": {
            "get": {
                "summary": "Gets the currently authenticated user's submitted registration data",
                "description": "**Required role: USER**",
                "tags": [
                    "Registration"
                ],
                "responses": {
                    "200": {
                        "description": "The submitted registration information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RegistrationApplicationDraft"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find submitted registration information (make sure you create it first!)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find your registration"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find your registration"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/registration/all/{type}": {
            "get": {
                "summary": "Gets all submitted or draft registrations",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Registration"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string",
                            "enum": [
                                "submitted",
                                "draft"
                            ]
                        },
                        "required": true,
                        "name": "type",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "All registrations of the specified type",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/RegistrationApplicationDraft"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/registration/challenge/": {
            "get": {
                "summary": "Gets the challenge input for the currently authenticated user",
                "description": "**Required role: USER**",
                "tags": [
                    "Registration"
                ],
                "responses": {
                    "200": {
                        "description": "The challenge status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RegistrationChallengeStatus"
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "You are not registered for this track",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "MissingPro"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You are not registered for this track"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "MissingPro",
                                        "message": "You are not registered for this track"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find your registration",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find your registration"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find your registration"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Attempts to solve the challenge by uploading a solution image",
                "description": "**Required role: USER**",
                "tags": [
                    "Registration"
                ],
                "responses": {
                    "200": {
                        "description": "Successfully solved, the new challenge status is returned",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RegistrationChallengeStatus"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "One of:\n- IncorrectSolution: Incorrect answer, try again\n- AlreadySolved: Already solved correctly\n\n**See examples dropdown below**",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "IncorrectSolution"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "That's not the correct answer, try again!"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "IncorrectSolution",
                                                "message": "That's not the correct answer, try again!"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "AlreadySolved"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "You've already solved the challenge!"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "AlreadySolved",
                                                "message": "You've already solved the challenge!"
                                            }
                                        }
                                    ]
                                },
                                "examples": {
                                    "IncorrectSolution": {
                                        "description": "Incorrect answer, try again",
                                        "value": {
                                            "error": "IncorrectSolution",
                                            "message": "That's not the correct answer, try again!"
                                        }
                                    },
                                    "AlreadySolved": {
                                        "description": "Already solved correctly",
                                        "value": {
                                            "error": "AlreadySolved",
                                            "message": "You've already solved the challenge!"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Registration is closed",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "RegistrationClosed"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Registration is closed, check back next year!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "RegistrationClosed",
                                        "message": "Registration is closed, check back next year!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/registration/draft/": {
            "get": {
                "summary": "Gets the currently authenticated user's draft registration data",
                "description": "**Required role: USER**",
                "tags": [
                    "Registration"
                ],
                "responses": {
                    "200": {
                        "description": "The draft registration information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RegistrationApplicationDraft"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find draft registration information (make sure you create it first!)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find your registration"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find your registration"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Creates or updates the currently authenticated user's draft registration data",
                "description": "**Required role: USER**",
                "tags": [
                    "Registration"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RegistrationApplicationDraftRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The registration draft was created or updated",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RegistrationApplicationDraftRequest"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Registration is already submitted, cannot update anymore",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadySubmitted"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You've already submitted your registration!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadySubmitted",
                                        "message": "You've already submitted your registration!"
                                    }
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Registration is closed",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "RegistrationClosed"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Registration is closed, check back next year!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "RegistrationClosed",
                                        "message": "Registration is closed, check back next year!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/registration/status/": {
            "get": {
                "summary": "Gets the status of whether registration is currently active",
                "description": "**Required role: null**",
                "tags": [
                    "Registration"
                ],
                "responses": {
                    "200": {
                        "description": "The registration status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RegistrationStatus"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/registration/submit/": {
            "post": {
                "summary": "Submits the currently authenticated user's registration - permanent",
                "description": "**Required role: USER**",
                "tags": [
                    "Registration"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/RegistrationApplicationSubmittedRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The new registration information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RegistrationApplicationSubmittedRequest"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Registration is already submitted, cannot update anymore",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadySubmitted"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You've already submitted your registration!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadySubmitted",
                                        "message": "You've already submitted your registration!"
                                    }
                                }
                            }
                        }
                    },
                    "403": {
                        "description": "Registration is closed",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "RegistrationClosed"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Registration is closed, check back next year!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "RegistrationClosed",
                                        "message": "Registration is closed, check back next year!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/registration/userid/{id}": {
            "get": {
                "summary": "Gets the specified user's registration data",
                "description": "**Required role: STAFF**\n\nStaff-only because this can be used to get any user's registration data.\nIf you need the currently authenticated user's registration data, use `GET /registration/` instead.",
                "tags": [
                    "Registration"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The registration information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/RegistrationApplicationDraft"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Couldn't find registration information (make sure you create it first!)",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Couldn't find your registration"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Couldn't find your registration"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/resume/batch-download/": {
            "post": {
                "summary": "Gets a download url for all the resumes",
                "description": "**Requires one role of: SPONSOR, ADMIN**\n\nList of presigned urls from s3 that is valid for 60 seconds",
                "tags": [
                    "Resume"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "userIds": {
                                        "type": "array",
                                        "items": {
                                            "type": "string"
                                        }
                                    }
                                },
                                "required": [
                                    "userIds"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "List of download urls",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResumeListDownloadURL"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/resume/download/": {
            "get": {
                "summary": "Gets a download url for the resume of the currently authenticated user",
                "description": "**Required role: USER**\n\nThis is a presigned url from s3 that is valid for 60 seconds",
                "tags": [
                    "Resume"
                ],
                "responses": {
                    "200": {
                        "description": "The download url",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResumeDownloadURL"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/resume/download/{id}": {
            "get": {
                "summary": "Gets a download url for the resume of the specified user",
                "description": "**Requires one role of: SPONSOR, ADMIN**\n\nThis is for a specific user and requires higher permissions, use `GET /resume/download/` for the currently authenticated user",
                "tags": [
                    "Resume"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The download url",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResumeDownloadURL"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/resume/upload/": {
            "get": {
                "summary": "Gets a upload url for the resume of the currently authenticated user",
                "description": "**Required role: USER**\n\nThis is a presigned url from s3 that is valid for 60 seconds",
                "tags": [
                    "Resume"
                ],
                "responses": {
                    "200": {
                        "description": "The upload url",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ResumeUploadURL"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/shop/": {
            "get": {
                "summary": "Gets all the shop items available",
                "description": "**Required role: null**",
                "tags": [
                    "Shop"
                ],
                "responses": {
                    "200": {
                        "description": "The shop items",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ShopItems"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/shop/cart/": {
            "get": {
                "summary": "Returns content of users cart",
                "description": "**Required role: USER**",
                "tags": [
                    "Shop"
                ],
                "responses": {
                    "200": {
                        "description": "List of items and quantity",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Order"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/shop/cart/qr/": {
            "get": {
                "summary": "Returns qr code of users cart",
                "description": "**Required role: USER**",
                "tags": [
                    "Shop"
                ],
                "responses": {
                    "200": {
                        "description": "QR code",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/OrderQRCode"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Not enough quantity in shop",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "InsufficientQuantity"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Not enough of that item in the shop!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "InsufficientQuantity",
                                        "message": "Not enough of that item in the shop!"
                                    }
                                }
                            }
                        }
                    },
                    "402": {
                        "description": "User doesn't have enough points to purchase",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "InsufficientFunds"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You don't have enough points to purchase that item!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "InsufficientFunds",
                                        "message": "You don't have enough points to purchase that item!"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Shop Item doesn't exist",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Shop item not found!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Shop item not found!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/shop/cart/redeem/": {
            "post": {
                "summary": "Purchases the order scanned",
                "description": "**Required role: STAFF**\n\nNote: Do not pass the full uri (`hackillinois://user?qr=abcd`) but just the QR token part (`abcd`).",
                "tags": [
                    "Shop"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/OrderRedeemRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The successfully purchased order",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/OrderRedeem"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "One of:\n- InsufficientQuantity: Not enough quantity in shop\n- QRExpired: QR Code Expired\n- QRInvalid: QR Code Invalid (not expired)\n\n**See examples dropdown below**",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "InsufficientQuantity"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Not enough of that item in the shop!"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "InsufficientQuantity",
                                                "message": "Not enough of that item in the shop!"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "QRExpired"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Your QR code has expired"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "QRExpired",
                                                "message": "Your QR code has expired"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "QRInvalid"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Your QR code is invalid and unable to decrypt"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "QRInvalid",
                                                "message": "Your QR code is invalid and unable to decrypt"
                                            }
                                        }
                                    ]
                                },
                                "examples": {
                                    "InsufficientQuantity": {
                                        "description": "Not enough quantity in shop",
                                        "value": {
                                            "error": "InsufficientQuantity",
                                            "message": "Not enough of that item in the shop!"
                                        }
                                    },
                                    "QRExpired": {
                                        "description": "QR Code Expired",
                                        "value": {
                                            "error": "QRExpired",
                                            "message": "Your QR code has expired"
                                        }
                                    },
                                    "QRInvalid": {
                                        "description": "QR Code Invalid (not expired)",
                                        "value": {
                                            "error": "QRInvalid",
                                            "message": "Your QR code is invalid and unable to decrypt"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "402": {
                        "description": "Not enough points to purchase",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "InsufficientFunds"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You don't have enough points to purchase that item!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "InsufficientFunds",
                                        "message": "You don't have enough points to purchase that item!"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Shop Item doesn't exist",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Shop item not found!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Shop item not found!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/shop/cart/{itemId}/": {
            "post": {
                "summary": "Adds item to users cart",
                "description": "**Required role: USER**",
                "tags": [
                    "Shop"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/ShopItemId"
                        },
                        "required": true,
                        "name": "itemId",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The successfully updated order",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Order"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Not enough quantity in shop",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "InsufficientQuantity"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Not enough of that item in the shop!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "InsufficientQuantity",
                                        "message": "Not enough of that item in the shop!"
                                    }
                                }
                            }
                        }
                    },
                    "402": {
                        "description": "Not enough points to purchase",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "InsufficientFunds"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You don't have enough points to purchase that item!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "InsufficientFunds",
                                        "message": "You don't have enough points to purchase that item!"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Shop Item doesn't exist",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Shop item not found!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Shop item not found!"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Removes a single instance of an item from the user's cart",
                "description": "**Required role: USER**",
                "tags": [
                    "Shop"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/ShopItemId"
                        },
                        "required": true,
                        "name": "itemId",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The successfully updated order",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Order"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Shop Item is not in user's cart",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Shop item not found!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Shop item not found!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/shop/item/": {
            "post": {
                "summary": "Creates a shop item",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Shop"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ShopItemCreateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The new item",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ShopItem"
                                }
                            }
                        }
                    },
                    "409": {
                        "description": "The item already exists",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadyExists"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "An item with that id already exists, did you mean to update it instead?"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadyExists",
                                        "message": "An item with that id already exists, did you mean to update it instead?"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/shop/item/{id}/": {
            "put": {
                "summary": "Updates a shop item",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Shop"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/ShopItemId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ShopItemUpdateRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The new item",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ShopItem"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Item doesn't exist",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Shop item not found!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Shop item not found!"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes a shop item",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Shop"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/ShopItemId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Item doesn't exist",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Shop item not found!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Shop item not found!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/shop/raffle/{id}/": {
            "get": {
                "summary": "Raffles a shop item",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Shop"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/ShopItemId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The raffle winner",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "userId": {
                                            "$ref": "#/components/schemas/UserId"
                                        }
                                    },
                                    "required": [
                                        "userId"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Item doesn't exist",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Shop item not found!"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Shop item not found!"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/sponsor/": {
            "get": {
                "summary": "Gets all sponsors",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Sponsor"
                ],
                "responses": {
                    "200": {
                        "description": "All sponsors",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Sponsor"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Creates a sponsor",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Sponsor"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/CreateSponsorRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The newly created sponsor",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Sponsor"
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes a sponsor",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Sponsor"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/DeleteSponsorRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully deleted",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Sponsor not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find the sponsor"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "Failed to find the sponsor",
                                        "message": "NotFound"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/sponsor/resumebook/all": {
            "get": {
                "summary": "Returns all admitted applicants",
                "description": "**Requires one role of: SPONSOR, ADMIN**",
                "tags": [
                    "Sponsor"
                ],
                "responses": {
                    "200": {
                        "description": "The complete list of admitted applicants",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ResumeBookEntry"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/sponsor/resumebook/pagecount": {
            "post": {
                "summary": "Counts admitted applicants matching filter criteria and returns page count",
                "description": "**Requires one role of: SPONSOR, ADMIN**",
                "tags": [
                    "Sponsor"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ResumeBookFilter"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Total number of pages based on ENTRIES_PER_PAGE",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "pageCount": {
                                            "type": "number"
                                        }
                                    },
                                    "required": [
                                        "pageCount"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/sponsor/resumebook/{page}/": {
            "post": {
                "summary": "Returns a page of admitted applicants matching filter criteria",
                "description": "**Requires one role of: SPONSOR, ADMIN**",
                "tags": [
                    "Sponsor"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "number",
                            "minimum": 1
                        },
                        "required": true,
                        "name": "page",
                        "in": "path"
                    }
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ResumeBookFilter"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The list of admitted applicants for the specified page",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/ResumeBookEntry"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff-team/": {
            "get": {
                "summary": "Gets all teams",
                "description": "**Required role: USER**",
                "tags": [
                    "StaffTeam"
                ],
                "responses": {
                    "200": {
                        "description": "List of all teams",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "array",
                                    "items": {
                                        "$ref": "#/components/schemas/Staff Team"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Creates a new team",
                "description": "**Required role: STAFF**",
                "tags": [
                    "StaffTeam"
                ],
                "responses": {
                    "201": {
                        "description": "The created team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Staff Team"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff-team/{id}/": {
            "get": {
                "summary": "Gets a team and its staff",
                "description": "**Required role: USER**",
                "tags": [
                    "StaffTeam"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Team and its staff members",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "team": {
                                            "$ref": "#/components/schemas/Staff Team"
                                        },
                                        "staff": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "firstName": {
                                                        "type": "string"
                                                    },
                                                    "lastName": {
                                                        "type": "string"
                                                    },
                                                    "title": {
                                                        "type": "string"
                                                    },
                                                    "team": {
                                                        "type": "string"
                                                    },
                                                    "emoji": {
                                                        "type": "string"
                                                    },
                                                    "profilePictureUrl": {
                                                        "type": "string"
                                                    },
                                                    "quote": {
                                                        "type": "string"
                                                    },
                                                    "isActive": {
                                                        "type": "boolean",
                                                        "default": true
                                                    },
                                                    "email": {
                                                        "type": "string"
                                                    },
                                                    "staffEmail": {
                                                        "type": "string"
                                                    },
                                                    "school": {
                                                        "type": "string"
                                                    },
                                                    "major": {
                                                        "type": "string"
                                                    },
                                                    "education": {
                                                        "type": "string"
                                                    },
                                                    "graduate": {
                                                        "type": "string"
                                                    },
                                                    "userId": {
                                                        "$ref": "#/components/schemas/UserId"
                                                    }
                                                },
                                                "required": [
                                                    "firstName",
                                                    "lastName",
                                                    "title",
                                                    "email",
                                                    "staffEmail",
                                                    "school",
                                                    "major",
                                                    "education",
                                                    "graduate",
                                                    "userId"
                                                ]
                                            },
                                            "description": "List of staff in the team"
                                        }
                                    },
                                    "required": [
                                        "team",
                                        "staff"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find team"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find team"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Updates a team by ID",
                "description": "**Required role: STAFF**",
                "tags": [
                    "StaffTeam"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Updated team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Staff Team"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find team"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find team"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes a team by ID",
                "description": "**Required role: STAFF**",
                "tags": [
                    "StaffTeam"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "204": {
                        "description": "Successfully deleted team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {},
                                    "description": "Empty response"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the team",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find team"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find team"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff/attendance/": {
            "post": {
                "summary": "Checks the currently authenticated staff into the specified staff event",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Staff"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "eventId": {
                                        "$ref": "#/components/schemas/EventId"
                                    }
                                },
                                "required": [
                                    "eventId"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The scanned user's information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "The event is no longer open for check in",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "CodeExpired"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The code for this event has expired"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "CodeExpired",
                                        "message": "The code for this event has expired"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "The specified event was not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff/info/": {
            "get": {
                "summary": "Gets all active staff information for the team page",
                "description": "**Required role: USER**",
                "tags": [
                    "Staff"
                ],
                "responses": {
                    "200": {
                        "description": "Active staff information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "staffInfo": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "firstName": {
                                                        "type": "string"
                                                    },
                                                    "lastName": {
                                                        "type": "string"
                                                    },
                                                    "title": {
                                                        "type": "string"
                                                    },
                                                    "team": {
                                                        "type": "string"
                                                    },
                                                    "emoji": {
                                                        "type": "string"
                                                    },
                                                    "profilePictureUrl": {
                                                        "type": "string"
                                                    },
                                                    "quote": {
                                                        "type": "string"
                                                    },
                                                    "isActive": {
                                                        "type": "boolean",
                                                        "default": true
                                                    },
                                                    "email": {
                                                        "type": "string"
                                                    },
                                                    "staffEmail": {
                                                        "type": "string"
                                                    },
                                                    "school": {
                                                        "type": "string"
                                                    },
                                                    "major": {
                                                        "type": "string"
                                                    },
                                                    "education": {
                                                        "type": "string"
                                                    },
                                                    "graduate": {
                                                        "type": "string"
                                                    },
                                                    "userId": {
                                                        "$ref": "#/components/schemas/UserId"
                                                    }
                                                },
                                                "required": [
                                                    "firstName",
                                                    "lastName",
                                                    "title",
                                                    "email",
                                                    "staffEmail",
                                                    "school",
                                                    "major",
                                                    "education",
                                                    "graduate",
                                                    "userId"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "staffInfo"
                                    ]
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Creates a new staff member profile",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Staff"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "firstName": {
                                        "type": "string"
                                    },
                                    "lastName": {
                                        "type": "string"
                                    },
                                    "title": {
                                        "type": "string"
                                    },
                                    "team": {
                                        "type": "string"
                                    },
                                    "emoji": {
                                        "type": "string"
                                    },
                                    "profilePictureUrl": {
                                        "type": "string"
                                    },
                                    "quote": {
                                        "type": "string"
                                    },
                                    "isActive": {
                                        "type": "boolean",
                                        "default": true
                                    },
                                    "email": {
                                        "type": "string"
                                    },
                                    "staffEmail": {
                                        "type": "string"
                                    },
                                    "school": {
                                        "type": "string"
                                    },
                                    "major": {
                                        "type": "string"
                                    },
                                    "education": {
                                        "type": "string"
                                    },
                                    "graduate": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "firstName",
                                    "lastName",
                                    "title",
                                    "email",
                                    "staffEmail",
                                    "school",
                                    "major",
                                    "education",
                                    "graduate"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Staff member created successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "No account found for the provided email",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "StaffEmailNotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "No account found for this email, the staff member must sign in with their staff email first"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "StaffEmailNotFound",
                                        "message": "No account found for this email, the staff member must sign in with their staff email first"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "put": {
                "summary": "Updates an existing staff member profile",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Staff"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "firstName": {
                                        "type": "string"
                                    },
                                    "lastName": {
                                        "type": "string"
                                    },
                                    "title": {
                                        "type": "string"
                                    },
                                    "team": {
                                        "type": "string"
                                    },
                                    "emoji": {
                                        "type": "string"
                                    },
                                    "profilePictureUrl": {
                                        "type": "string"
                                    },
                                    "quote": {
                                        "type": "string"
                                    },
                                    "isActive": {
                                        "type": "boolean",
                                        "default": true
                                    },
                                    "email": {
                                        "type": "string"
                                    },
                                    "staffEmail": {
                                        "type": "string"
                                    },
                                    "school": {
                                        "type": "string"
                                    },
                                    "major": {
                                        "type": "string"
                                    },
                                    "education": {
                                        "type": "string"
                                    },
                                    "graduate": {
                                        "type": "string"
                                    },
                                    "userId": {
                                        "$ref": "#/components/schemas/UserId"
                                    },
                                    "staffId": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "staffId"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Staff member updated successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Staff member not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "StaffNotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The specified staff member was not found"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "StaffNotFound",
                                        "message": "The specified staff member was not found"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "delete": {
                "summary": "Deletes a staff member profile",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Staff"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "staffId": {
                                        "type": "string"
                                    }
                                },
                                "required": [
                                    "staffId"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Staff member deleted successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Staff member not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "StaffNotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "The specified staff member was not found"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "StaffNotFound",
                                        "message": "The specified staff member was not found"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff/scan-attendee/": {
            "put": {
                "summary": "Checks in a user using their encrypted QR code token for a specified event. Note: This is not the full hackillinois:// uri but just the QR token part.",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Staff"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ScanAttendeeRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "The scanned user's information",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ScanAttendee"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "One of:\n- QRExpired: QR Code Expired\n- QRInvalid: QR Code Invalid (not expired)\n- AlreadyCheckedIn: User already checked in\n\n**See examples dropdown below**",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "anyOf": [
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "QRExpired"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Your QR code has expired"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "QRExpired",
                                                "message": "Your QR code has expired"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "QRInvalid"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "Your QR code is invalid and unable to decrypt"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "QRInvalid",
                                                "message": "Your QR code is invalid and unable to decrypt"
                                            }
                                        },
                                        {
                                            "type": "object",
                                            "properties": {
                                                "error": {
                                                    "type": "string",
                                                    "enum": [
                                                        "AlreadyCheckedIn"
                                                    ]
                                                },
                                                "message": {
                                                    "type": "string",
                                                    "enum": [
                                                        "You're already checked in to this event"
                                                    ]
                                                }
                                            },
                                            "required": [
                                                "error",
                                                "message"
                                            ],
                                            "example": {
                                                "error": "AlreadyCheckedIn",
                                                "message": "You're already checked in to this event"
                                            }
                                        }
                                    ]
                                },
                                "examples": {
                                    "QRExpired": {
                                        "description": "QR Code Expired",
                                        "value": {
                                            "error": "QRExpired",
                                            "message": "Your QR code has expired"
                                        }
                                    },
                                    "QRInvalid": {
                                        "description": "QR Code Invalid (not expired)",
                                        "value": {
                                            "error": "QRInvalid",
                                            "message": "Your QR code is invalid and unable to decrypt"
                                        }
                                    },
                                    "AlreadyCheckedIn": {
                                        "description": "User already checked in",
                                        "value": {
                                            "error": "AlreadyCheckedIn",
                                            "message": "You're already checked in to this event"
                                        }
                                    }
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "attendeeQRCode has expired",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "QRExpired"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Your QR code has expired"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "QRExpired",
                                        "message": "Your QR code has expired"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the event to check into",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff/shift/": {
            "get": {
                "summary": "Gets staff shifts for the currently authenticated user",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Staff"
                ],
                "responses": {
                    "200": {
                        "description": "The shifts",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/Shifts"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "User already checked in",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadyCheckedIn"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You're already checked in to this event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadyCheckedIn",
                                        "message": "You're already checked in to this event"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the event to check into",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            },
            "post": {
                "summary": "Sets the shifts for a specified user",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Staff"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "userId": {
                                        "$ref": "#/components/schemas/UserId"
                                    },
                                    "shifts": {
                                        "type": "array",
                                        "items": {
                                            "$ref": "#/components/schemas/EventId"
                                        }
                                    }
                                },
                                "required": [
                                    "userId",
                                    "shifts"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully set",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "User already checked in",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadyCheckedIn"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You're already checked in to this event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadyCheckedIn",
                                        "message": "You're already checked in to this event"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the event to check into",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff/shift/add/": {
            "post": {
                "summary": "Adds a shift assignment for a specific user",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Staff"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "userId": {
                                        "$ref": "#/components/schemas/UserId"
                                    },
                                    "shiftId": {
                                        "$ref": "#/components/schemas/EventId"
                                    }
                                },
                                "required": [
                                    "userId",
                                    "shiftId"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully added shift assignment",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff/shift/all/": {
            "get": {
                "summary": "Gets all staff shift assignments",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Staff"
                ],
                "responses": {
                    "200": {
                        "description": "All staff shift assignments",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "assignments": {
                                            "type": "array",
                                            "items": {
                                                "type": "object",
                                                "properties": {
                                                    "userId": {
                                                        "$ref": "#/components/schemas/UserId"
                                                    },
                                                    "shifts": {
                                                        "type": "array",
                                                        "items": {
                                                            "$ref": "#/components/schemas/EventId"
                                                        }
                                                    }
                                                },
                                                "required": [
                                                    "userId",
                                                    "shifts"
                                                ]
                                            }
                                        }
                                    },
                                    "required": [
                                        "assignments"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff/shift/candidates/": {
            "get": {
                "summary": "Gets staff shift assignment candidates from user_users (Google users)",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Staff"
                ],
                "responses": {
                    "200": {
                        "description": "Google users eligible for staff shift assignment",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "users": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/UserInfo"
                                            }
                                        }
                                    },
                                    "required": [
                                        "users"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/staff/shift/remove/": {
            "post": {
                "summary": "Removes a shift assignment for a specific user",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Staff"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "type": "object",
                                "properties": {
                                    "userId": {
                                        "$ref": "#/components/schemas/UserId"
                                    },
                                    "shiftId": {
                                        "$ref": "#/components/schemas/EventId"
                                    }
                                },
                                "required": [
                                    "userId",
                                    "shiftId"
                                ]
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully removed shift assignment",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/statistic/": {
            "get": {
                "summary": "Gets statistics for a specific time range",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Statistic"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": [
                                "number",
                                "null"
                            ]
                        },
                        "required": false,
                        "name": "before",
                        "in": "query"
                    },
                    {
                        "schema": {
                            "type": [
                                "number",
                                "null"
                            ]
                        },
                        "required": false,
                        "name": "after",
                        "in": "query"
                    },
                    {
                        "schema": {
                            "$ref": "#/components/schemas/StatisticLogFilterLimitSchema"
                        },
                        "required": false,
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The logs",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/StatisticLogs"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/statistic/logging/": {
            "get": {
                "summary": "Gets if logging is currently enabled",
                "description": "**Required role: STAFF**",
                "tags": [
                    "Statistic"
                ],
                "responses": {
                    "200": {
                        "description": "Current logging status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/StatisticLoggingStatus"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/statistic/logging/{status}/": {
            "post": {
                "summary": "Enables or disables logging",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Statistic"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string",
                            "enum": [
                                "enable",
                                "disable"
                            ]
                        },
                        "required": true,
                        "name": "status",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Updated logging status",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/user/": {
            "get": {
                "summary": "Gets the user info for the currently authenticated user",
                "description": "**Required role: USER**",
                "tags": [
                    "User"
                ],
                "responses": {
                    "200": {
                        "description": "The currently authenticated user's user info",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UserInfo"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the user info",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find user"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find user"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/user/follow/{id}/": {
            "put": {
                "summary": "Follows the specified event",
                "description": "**Required role: USER**",
                "tags": [
                    "User"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Events followed after successfully following",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UserFollowing"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the event to follow",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/user/following/": {
            "get": {
                "summary": "Gets the events the currently authenticated user is following",
                "description": "**Required role: USER**",
                "tags": [
                    "User"
                ],
                "responses": {
                    "200": {
                        "description": "The followed events",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UserFollowing"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/user/qr/": {
            "get": {
                "summary": "Gets a QR code for the currently authenticated user",
                "description": "**Required role: USER**\n\nYou should fetch this QR code every 15 seconds, as it expires every 20 seconds.",
                "tags": [
                    "User"
                ],
                "responses": {
                    "200": {
                        "description": "The currently authenticated user's QR code",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/QRInfo"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/user/qr/{id}/": {
            "get": {
                "summary": "Gets a QR code for the specified user",
                "description": "**Required role: STAFF**\n\nThis is staff-only since you can get ANY user's QR code with this endpoint.\nIf you want to get the currently authenticated user's QR code, use `GET /user/qr`.",
                "tags": [
                    "User"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The specified user's QR code",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/QRInfo"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the user specified",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find user"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find user"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/user/scan-event/": {
            "put": {
                "summary": "Checks in the currently authenticated user and marks their attendance",
                "description": "**Required role: ATTENDEE**",
                "tags": [
                    "User"
                ],
                "requestBody": {
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ScanEventRequest"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully checked in",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/ScanEvent"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "User already checked in",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "AlreadyCheckedIn"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "You're already checked in to this event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "AlreadyCheckedIn",
                                        "message": "You're already checked in to this event"
                                    }
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the event to check into",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/user/unfollow/{id}/": {
            "delete": {
                "summary": "Unfollows the specified event",
                "description": "**Required role: USER**",
                "tags": [
                    "User"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Events followed after successfully unfollowing",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UserFollowing"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the event to unfollow",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Could not find event"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Could not find event"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/user/{id}/": {
            "get": {
                "summary": "Gets the user info for the specified user",
                "description": "**Required role: STAFF**\n\nThis is staff-only since you can get ANY user's info with this endpoint.\nTo get the currently authenticated user, use `GET /user/`",
                "tags": [
                    "User"
                ],
                "parameters": [
                    {
                        "schema": {
                            "$ref": "#/components/schemas/UserId"
                        },
                        "required": true,
                        "name": "id",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "The specified's user info",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/UserInfo"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Could not find the user info",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "error": {
                                            "type": "string",
                                            "enum": [
                                                "NotFound"
                                            ]
                                        },
                                        "message": {
                                            "type": "string",
                                            "enum": [
                                                "Failed to find user"
                                            ]
                                        }
                                    },
                                    "required": [
                                        "error",
                                        "message"
                                    ],
                                    "example": {
                                        "error": "NotFound",
                                        "message": "Failed to find user"
                                    }
                                }
                            }
                        }
                    }
                }
            }
        },
        "/version/android/": {
            "get": {
                "summary": "Gets the current android version",
                "description": "**Required role: null**\n\nNote that this version can be set on the admin site",
                "tags": [
                    "Version"
                ],
                "responses": {
                    "200": {
                        "description": "The current version",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/VersionResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/version/android/{version}/": {
            "post": {
                "summary": "Sets the current android version",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Version"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string",
                            "description": "The version",
                            "example": "2024.2.4"
                        },
                        "required": true,
                        "name": "version",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully set",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        },
        "/version/ios/": {
            "get": {
                "summary": "Gets the current ios version",
                "description": "**Required role: null**\n\nNote that this version can be set on the admin site",
                "tags": [
                    "Version"
                ],
                "responses": {
                    "200": {
                        "description": "The current version",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/VersionResponse"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/version/ios/{version}/": {
            "post": {
                "summary": "Sets the current ios version",
                "description": "**Required role: ADMIN**",
                "tags": [
                    "Version"
                ],
                "parameters": [
                    {
                        "schema": {
                            "type": "string",
                            "description": "The version",
                            "example": "2024.2.4"
                        },
                        "required": true,
                        "name": "version",
                        "in": "path"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successfully set",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "type": "object",
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "enum": [
                                                true
                                            ]
                                        }
                                    },
                                    "required": [
                                        "success"
                                    ]
                                }
                            }
                        }
                    }
                }
            }
        }
    },
    "webhooks": {}
}