--- openapi: 3.1.0 info: title: WCA API summary: WCA API endpoints accessible via OAuth bearer tokens or without authentication description: These endpoints can be accessed by third-party applications using OAuth bearer tokens, or are publicly accessible without authentication. contact: name: WCA Software Team url: https://www.worldcubeassociation.org email: software@worldcubeassociation.org version: 0.2.0 license: name: MIT url: https://opensource.org/licenses/MIT servers: - url: https://www.worldcubeassociation.org/api description: Production server - url: http://localhost:3000/api description: Development server paths: "/v1/competitions/{competitionId}/registrations": get: summary: Get competition registrations tags: - competitions - registrations operationId: competitionRegistrationsV2 parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: type: array items: "$ref": "#/components/schemas/RegistrationDataV2" security: [] "/v1/competitions/{competitionId}/live/rounds/{roundId}": get: summary: Gets Information about the Round including the live Results tags: - live operationId: liveByRound parameters: - name: competitionId in: path required: true schema: type: string - name: roundId in: path required: true schema: type: string responses: '200': description: Returns results content: application/json: schema: "$ref": "#/components/schemas/LiveRound" security: [] "/v1/competitions/{competitionId}/live/podiums": get: summary: Gets Information about the Podiums of the Live Results tags: - live operationId: livePodiums parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Returns podiums with round information content: application/json: schema: type: array items: "$ref": "#/components/schemas/LiveRound" security: [] "/v1/competitions/{competitionId}/live/registrations/{registrationId}": get: summary: Gets Information about the Competitors's live result tags: - live operationId: liveByPerson parameters: - name: competitionId in: path required: true schema: type: string - name: registrationId in: path required: true schema: type: string responses: '200': description: Returns a person and their results content: application/json: schema: "$ref": "#/components/schemas/LivePerson" security: [] "/v0/healthcheck": get: summary: API health check tags: - system operationId: healthcheck responses: '200': description: Successful health check content: application/json: schema: type: object properties: status: type: string example: ok api_instance: type: boolean example: false security: [] "/v0/scramble-program": get: summary: Get scramble program information tags: - system operationId: getScrambleProgram responses: '200': description: Scramble program information content: application/json: schema: type: object properties: current: type: object properties: name: type: string example: TNoodle-WCA-1.2.3 information: type: string format: uri example: https://www.worldcubeassociation.org/regulations/scrambles/ download: type: string format: uri example: https://github.com/thewca/tnoodle/releases/download/v1.2.3/TNoodle-WCA-1.2.3.jar allowed: type: array items: type: string example: - TNoodle-WCA-1.2.3 publicKeyBytes: type: - string - 'null' history: type: array items: type: string security: [] "/v0/search": get: summary: Omni search across competitions, users, regulations, incidents tags: - search operationId: omniSearch parameters: - name: q in: query required: true schema: type: string description: Search query string responses: '200': description: Search results content: application/json: schema: type: object properties: result: type: array items: oneOf: - "$ref": "#/components/schemas/SearchResultCompetition" - "$ref": "#/components/schemas/SearchResultUser" - "$ref": "#/components/schemas/SearchResultRegulation" - "$ref": "#/components/schemas/SearchResultIncident" '400': description: No query specified content: application/json: schema: type: object properties: error: type: string example: No query specified security: [] "/v0/search/posts": get: summary: Search posts tags: - search operationId: postsSearch parameters: - name: q in: query required: true schema: type: string description: Search query string responses: '200': description: Search results content: application/json: schema: type: object properties: result: type: array items: "$ref": "#/components/schemas/SearchResultPost" security: [] "/v0/search/competitions": get: summary: Search competitions tags: - search operationId: competitionsSearch parameters: - name: q in: query required: true schema: type: string description: Search query string responses: '200': description: Search results content: application/json: schema: type: object properties: result: type: array items: "$ref": "#/components/schemas/SearchResultCompetition" security: [] "/v0/search/users": get: summary: Search users tags: - search operationId: usersSearch parameters: - name: q in: query required: true schema: type: string description: Search query string responses: '200': description: Search results content: application/json: schema: type: object properties: result: type: array items: "$ref": "#/components/schemas/SearchResultUser" security: [] "/v0/search/persons": get: summary: Search persons tags: - search operationId: personsSearch parameters: - name: q in: query required: true schema: type: string description: Search query string - name: persons_table in: query required: false schema: type: boolean description: Include persons table data responses: '200': description: Search results content: application/json: schema: type: object properties: result: type: array items: "$ref": "#/components/schemas/SearchResultPerson" security: [] "/v0/search/regulations": get: summary: Search regulations tags: - search operationId: regulationsSearch parameters: - name: q in: query required: true schema: type: string description: Search query string responses: '200': description: Search results content: application/json: schema: type: object properties: result: type: array items: "$ref": "#/components/schemas/SearchResultRegulation" security: [] "/v0/search/incidents": get: summary: Search incidents tags: - search operationId: incidentsSearch parameters: - name: q in: query required: true schema: type: string description: Search query string responses: '200': description: Search results content: application/json: schema: type: object properties: result: type: array items: "$ref": "#/components/schemas/SearchResultIncident" security: [] "/v0/users": get: summary: Get users by IDs tags: - users operationId: getUsersByIds parameters: - name: ids in: query required: true schema: type: array items: type: integer style: form explode: false description: Comma-separated list of user IDs responses: '200': description: List of users content: application/json: schema: type: object properties: users: type: array items: type: object properties: id: type: integer wca_id: type: string name: type: string gender: type: string country_iso2: type: string country: type: object security: [] post: summary: Get users by IDs (POST method) tags: - users operationId: getUsersByIdsPost requestBody: content: application/json: schema: type: object required: - ids properties: ids: type: array items: type: integer responses: '200': description: List of users content: application/json: schema: type: object properties: users: type: array items: type: object properties: id: type: integer wca_id: type: string name: type: string gender: type: string country_iso2: type: string country: type: object security: [] "/v0/users/me": get: summary: Get current user info tags: - users operationId: getCurrentUser security: - bearerAuth: [] parameters: - name: upcoming_competitions in: query required: false schema: type: boolean - name: ongoing_competitions in: query required: false schema: type: boolean responses: '200': description: Current user information content: application/json: schema: type: object properties: user: "$ref": "#/components/schemas/Person" upcoming_competitions: type: array items: "$ref": "#/components/schemas/CompetitionInfo" ongoing_competitions: type: array items: "$ref": "#/components/schemas/CompetitionInfo" rankings: type: object properties: single: type: array items: type: object average: type: array items: type: object '401': description: Unauthorized "/v0/users/{id}": get: summary: Get user by ID or WCA ID description: | Retrieve a user by either: - Numeric ID (e.g., 12345) - WCA ID (e.g., 2016DOE01) The server automatically detects which type of identifier is provided. tags: - users operationId: getUserByIdentifier parameters: - name: id in: path required: true schema: type: string responses: '200': description: User information content: application/json: schema: type: object properties: user: "$ref": "#/components/schemas/Person" '404': description: User not found content: application/json: schema: type: object properties: user: type: - object - 'null' security: [] "/v0/delegates": get: summary: Get list of all delegates tags: - users operationId: getDelegates responses: '200': description: List of delegates content: application/json: schema: type: array items: "$ref": "#/components/schemas/Person" security: [] "/v0/delegates/search-index": get: summary: Get delegates search index tags: - users operationId: getDelegatesSearchIndex responses: '200': description: Delegate search index content: application/json: schema: type: array items: type: object properties: id: type: integer name: type: string wca_id: type: string thumb_url: type: string format: uri security: [] "/v0/persons": get: summary: List persons tags: - persons operationId: listPersons parameters: - name: q in: query required: false schema: type: string description: Search query - name: wca_ids in: query required: false schema: type: string description: Comma-separated list of WCA IDs to filter by - name: page in: query required: false schema: type: integer - name: per_page in: query required: false schema: type: integer responses: '200': description: Paginated list of persons content: application/json: schema: type: array items: "$ref": "#/components/schemas/PersonInfo" security: [] "/v0/persons/{wca_id}": get: summary: Get information for a person tags: - users operationId: personByWCAId parameters: - name: wca_id in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: "$ref": "#/components/schemas/PersonInfo" security: [] "/v0/persons/{wca_id}/results": get: summary: Get results for a person tags: - users operationId: personResults parameters: - name: wca_id in: path required: true schema: type: string - name: event_id in: query schema: type: string responses: '200': description: Successful response content: application/json: schema: "$ref": "#/components/schemas/Results" security: [] "/v0/persons/{wca_id}/records": get: summary: Get records for a person tags: - users operationId: personRecords parameters: - name: wca_id in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: "$ref": "#/components/schemas/Results" security: [] "/v0/persons/{wca_id}/competitions": get: summary: Get competitions for a person tags: - users operationId: personCompetitions parameters: - name: wca_id in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: "$ref": "#/components/schemas/Competitions" security: [] "/v0/persons/{wca_id}/personal_records": get: summary: Get person personal records by WCA ID tags: - persons operationId: getPersonPersonalRecords parameters: - name: wca_id in: path required: true schema: type: string responses: '200': description: Personal records content: application/json: schema: type: array items: "$ref": "#/components/schemas/WcifPersonalBest" security: [] "/v0/geocoding/search": get: summary: Geocode a location query tags: - geocoding operationId: geocodeLocation parameters: - name: q in: query required: true schema: type: string description: Location query string responses: '200': description: Google Maps geocoding response content: application/json: schema: type: object description: Google Maps Geocoding API response security: [] "/v0/geocoding/time_zone": get: summary: Get timezone from coordinates tags: - geocoding operationId: getTimezoneFromCoords parameters: - name: lat in: query required: true schema: type: integer description: Latitude in microdegrees - name: lng in: query required: true schema: type: integer description: Longitude in microdegrees responses: '200': description: Timezone names for the coordinates content: application/json: schema: type: array items: type: string example: America/Los_Angeles security: [] "/v0/countries": get: summary: Get list of all countries tags: - wca operationId: getCountries responses: '200': description: List of countries content: application/json: schema: type: array items: "$ref": "#/components/schemas/Country" security: [] "/v0/records": get: summary: Get all records (world, continental, national) tags: - results operationId: getRecords responses: '200': description: Records by type content: application/json: schema: type: object properties: world_records: type: object additionalProperties: type: object properties: single: type: integer average: type: integer continental_records: type: object additionalProperties: type: object additionalProperties: type: object properties: single: type: integer average: type: integer national_records: type: object additionalProperties: type: object additionalProperties: type: object properties: single: type: integer average: type: integer security: [] "/v0/known-timezones": get: summary: Get a list of Olson timezones that the backend understands tags: - wca operationId: knownTimezones responses: '200': description: Successful response content: application/json: schema: type: array items: type: string example: America/New_York security: [] "/v0/regional-organizations": get: summary: A list of currently acknowledged regional organizations tags: - wca operationId: regionalOrganizations responses: '200': description: Retrieved organizations content: application/json: schema: type: array items: "$ref": "#/components/schemas/RegionalOrganization" security: [] "/v0/competition_series/{id}": get: summary: Get competition series tags: - competitions operationId: getCompetitionSeries parameters: - name: id in: path required: true schema: type: string responses: '200': description: Competition series WCIF content: application/json: schema: type: object properties: id: type: string competitions: type: array items: "$ref": "#/components/schemas/WcifSchedule" '404': description: Competition series not found security: [] "/v0/results/rankings/{event_id}/{type}": get: summary: Get the current rankings parameters: - name: type in: path required: true schema: type: string - name: event_id in: path required: true schema: type: string - in: query name: region schema: type: string - in: query name: show schema: type: string - in: query name: gender schema: type: string operationId: getRankings responses: '200': description: Successfully retrieved rankings content: application/json: schema: type: object required: - rankings - timestamp properties: rankings: type: array items: "$ref": "#/components/schemas/ExtendedResult" timestamp: type: string format: date security: [] "/v0/results/records": get: summary: Get the current records for all regions parameters: - in: query name: event_id schema: type: string - in: query name: region schema: type: string - in: query name: show schema: type: string - in: query name: gender schema: type: string operationId: getRecords2 responses: '200': description: Successfully retrieved records content: application/json: schema: type: object required: - records - timestamp properties: records: "$ref": "#/components/schemas/RecordByEvent" timestamp: type: string format: date security: [] "/v0/results/records/{id}": get: summary: Get record by ID tags: - results operationId: getRecordById parameters: - name: id in: path required: true schema: type: string responses: '200': description: Record details content: application/json: schema: "$ref": "#/components/schemas/Record" security: [] "/v0/results/records/{id}/history": get: summary: Get record history tags: - results operationId: getRecordHistory parameters: - name: id in: path required: true schema: type: string responses: '200': description: Record history content: application/json: schema: type: array items: type: object properties: type: type: string result: type: object value: type: integer personName: type: string competitionId: type: string date: type: string format: date security: [] "/v0/results/{user_id}/qualification_data": get: summary: Get user qualification data tags: - results operationId: getUserQualificationData parameters: - name: user_id in: path required: true schema: type: integer - name: date in: query required: false schema: type: string format: date description: ISO 8601 date string responses: '200': description: User qualification data content: application/json: schema: type: object '400': description: Invalid date format '404': description: User not found security: [] "/v0/export/public": get: summary: Get Export Information tags: - results operationId: publicExports responses: '200': description: Successfully retrieved exports content: application/json: schema: "$ref": "#/components/schemas/ExportInfo" security: [] "/v0/competition_index": get: summary: Get a list of (upcoming) competitions for table display tags: - competitions operationId: competitionList parameters: - name: include_cancelled in: query schema: type: boolean - name: continent in: query schema: type: string - name: country_iso2 in: query schema: type: string - name: delegate in: query schema: type: string - name: event_ids[] in: query schema: type: array items: type: string - name: start in: query schema: type: string format: datetime - name: end in: query schema: type: string format: datetime - name: admin_status in: query schema: type: string - name: q in: query schema: type: string - name: sort in: query schema: type: string - name: ongoing_and_future in: query schema: type: string format: datetime responses: '200': description: Successful response content: application/json: schema: type: array items: "$ref": "#/components/schemas/CompetitionIndex" security: [] "/v0/competitions": get: summary: Get a list of (upcoming) competitions for table display tags: - competitions operationId: competitionList2 parameters: - name: include_cancelled in: query schema: type: boolean - name: continent in: query schema: type: string - name: country_iso2 in: query schema: type: string - name: delegate in: query schema: type: string - name: event_ids[] in: query schema: type: array items: type: string - name: start in: query schema: type: string format: datetime - name: end in: query schema: type: string format: datetime - name: admin_status in: query schema: type: string - name: q in: query schema: type: string - name: sort in: query schema: type: string - name: ongoing_and_future in: query schema: type: string format: datetime responses: '200': description: Successful response content: application/json: schema: type: array items: "$ref": "#/components/schemas/CompetitionIndex" security: [] "/v0/competitions/mine": get: summary: Get a list of a users competition operationId: getMyCompetitions tags: - competitions responses: '200': description: Successful response content: application/json: schema: type: object required: - past_competitions - future_competitions - bookmarked_competitions - registrations_by_competition properties: past_competitions: type: array items: "$ref": "#/components/schemas/MyCompetition" future_competitions: type: array items: "$ref": "#/components/schemas/MyCompetition" bookmarked_competitions: type: array items: "$ref": "#/components/schemas/MyCompetition" registrations_by_competition: type: object additionalProperties: "$ref": "#/components/schemas/CompetingStatus" security: - bearerAuth: [] "/v0/competitions/{competitionId}": get: summary: Get competition details tags: - competitions operationId: competitionById parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: "$ref": "#/components/schemas/CompetitionInfo" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/wcif/public": get: summary: Get public competition WCIF tags: - competitions operationId: getCompetitionWcifPublic parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Competition WCIF (public) content: application/json: schema: "$ref": "#/components/schemas/WcifSchedule" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/events": get: summary: Get competition events in WCIF v0 format tags: - competitions operationId: competitionEvents parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: type: array items: "$ref": "#/components/schemas/WcifEvent" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/schedule": get: summary: Get competition schedule in WCIF format tags: - competitions operationId: competitionSchedule parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: "$ref": "#/components/schemas/WcifSchedule" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/tabs": get: summary: Get competition tabs tags: - competitions operationId: competitionTabs parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: type: array items: "$ref": "#/components/schemas/Tabs" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/registrations": get: summary: Get competition registrations tags: - competitions operationId: competitionRegistrations parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: type: array items: "$ref": "#/components/schemas/RegistrationData" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/competitors": get: summary: Get competition competitors tags: - competitions operationId: getCompetitionCompetitors parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: List of competitors content: application/json: schema: type: array items: "$ref": "#/components/schemas/Person" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/qualifications": get: summary: Get competition qualifications tags: - competitions operationId: getCompetitionQualifications parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Qualification WCIF content: application/json: schema: type: array items: "$ref": "#/components/schemas/WcifQualification" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/podiums": get: summary: Returns the podium results tags: - competitions operationId: competitionPodiums parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful Response content: application/json: schema: type: array items: "$ref": "#/components/schemas/Result" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/results": get: summary: Returns all results operationId: resultsByCompetition parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful Response content: application/json: schema: "$ref": "#/components/schemas/Results" security: [] "/v0/competitions/{competitionId}/results/{event_id}": get: summary: Get competition event results tags: - competitions operationId: getCompetitionEventResults parameters: - name: competitionId in: path required: true schema: type: string - name: event_id in: path required: true schema: type: string responses: '200': description: Event results by round content: application/json: schema: type: object properties: id: type: string example: '333' rounds: type: array items: type: object properties: id: type: integer roundTypeId: type: string isH2hMock: type: boolean results: type: array items: "$ref": "#/components/schemas/Result" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/scrambles": get: summary: Returns the competition scrambles operationId: getScrambles tags: - competitions parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful Response content: application/json: schema: type: array items: "$ref": "#/components/schemas/Scramble" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/scrambles/{event_id}": get: summary: Get competition event scrambles tags: - competitions operationId: getCompetitionEventScrambles parameters: - name: competitionId in: path required: true schema: type: string - name: event_id in: path required: true schema: type: string responses: '200': description: Event scrambles by round content: application/json: schema: type: object properties: id: type: string example: '333' rounds: type: array items: type: object properties: id: type: integer roundTypeId: type: string scrambles: type: array items: "$ref": "#/components/schemas/Scramble" '404': "$ref": "#/components/responses/CompetitionNotFound" description: Not Found security: [] "/v0/competitions/{competitionId}/psych-sheet/{event_id}": get: summary: Get competition registrations tags: - results - competitions parameters: - name: competitionId in: path required: true schema: type: string - name: event_id in: path required: true schema: type: string - name: sort_by in: query required: false schema: type: string responses: '200': description: Successful response content: application/json: schema: "$ref": "#/components/schemas/PsychSheet" security: [] "/v0/regulations/translations": get: summary: Gets all translations of regulations tags: - regulations operationId: regulationTranslations responses: '200': description: Successful response content: application/json: schema: "$ref": "#/components/schemas/RegulationsTranslations" security: [] "/v0/incidents": get: summary: Get a list of incidents tags: - regulations operationId: regulationsList parameters: - name: q in: query schema: type: string - name: tags in: query schema: type: string - name: page in: query schema: type: number - name: per_page in: query schema: type: number responses: '200': description: Successful response content: application/json: schema: type: array items: "$ref": "#/components/schemas/Incident" security: [] "/v1/competitions/{competitionId}/registrations/create": post: summary: Create registration tags: - registrations operationId: createRegistration security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string requestBody: content: application/json: schema: type: object properties: competing: type: object properties: status: type: string comment: type: string event_ids: type: array items: type: string responses: '202': description: Registration process started content: application/json: schema: type: object properties: status: type: string example: accepted message: type: string example: Started Registration Process '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden (registration closed, etc.) "/v1/competitions/{competitionId}/registrations/{id}": get: summary: Get registration by ID or user ID description: | Retrieve a registration by either: - Registration ID (numeric) - User ID (numeric, with competition context) tags: - registrations operationId: getRegistrationByIdentifier security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string - name: id in: path required: true schema: type: integer description: Registration ID or User ID responses: '200': description: Registration details content: application/json: schema: "$ref": "#/components/schemas/RegistrationDataV2" '401': description: Unauthorized '404': description: Registration not found "/v1/competitions/{competitionId}/registrations/{id}/update": patch: summary: Update registration tags: - registrations operationId: updateRegistration security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer - name: competitionId in: path required: true schema: type: string requestBody: content: application/json: schema: type: object properties: competing: type: object properties: status: type: string comment: type: string event_ids: type: array items: type: string responses: '200': description: Registration updated content: application/json: schema: type: object properties: status: type: string registration: "$ref": "#/components/schemas/RegistrationDataV2" '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '404': description: Registration not found "/v1/competitions/{competitionId}/registrations/{id}/history": get: summary: Get registration history tags: - registrations operationId: getRegistrationHistory security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer - name: competitionId in: path required: true schema: type: string responses: '200': description: Registration history content: application/json: schema: type: array items: type: object '401': description: Unauthorized '404': description: Registration not found "/v1/competitions/{competitionId}/registrations/{id}/payments": get: summary: Get registration payments tags: - registrations operationId: getRegistrationPayments security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer - name: competitionId in: path required: true schema: type: string responses: '200': description: Registration payment info content: application/json: schema: type: object '401': description: Unauthorized '404': description: Registration not found "/v1/competitions/{competitionId}/registrations/{id}/payment_ticket": get: summary: Get payment ticket for registration tags: - registrations operationId: getPaymentTicket security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer - name: iso_donation_amount in: query required: false schema: type: integer - name: competitionId in: path required: true schema: type: string responses: '200': description: Payment client secret content: application/json: schema: type: object properties: client_secret: type: string '401': description: Unauthorized '403': description: Forbidden '404': description: Registration not found "/v1/competitions/{competitionId}/registrations/admin": get: summary: Get admin view of registrations tags: - registrations operationId: getRegistrationsAdmin security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: All registrations with admin info content: application/json: schema: type: array items: "$ref": "#/components/schemas/RegistrationDataV2" '401': description: Unauthorized '403': description: Forbidden '404': description: Competition not found "/v1/competitions/{competitionId}/registrations/bulk_auto_accept": patch: summary: Bulk auto-accept registrations tags: - registrations operationId: bulkAutoAcceptRegistrations security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Bulk auto-accept result content: application/json: schema: type: object properties: accepted_count: type: integer '401': description: Unauthorized '403': description: Forbidden '404': description: Competition not found "/v1/competitions/{competitionId}/registrations/bulk_update": patch: summary: Bulk update registrations tags: - registrations operationId: bulkUpdateRegistrations security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string requestBody: content: application/json: schema: type: object required: - requests properties: requests: type: array items: type: object properties: user_id: type: integer competing: type: object properties: status: type: string comment: type: string event_ids: type: array items: type: string admin_comment: type: string responses: '200': description: Registrations updated content: application/json: schema: type: object properties: status: type: string updated_registrations: type: object additionalProperties: "$ref": "#/components/schemas/RegistrationDataV2" '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden '422': description: Unprocessable entity "/v1/competitions/{competitionId}/registration_config": get: summary: Get registration config for a competition tags: - competitions - registrations operationId: competitionRegistrationConfig parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Successful response content: application/json: schema: type: array items: "$ref": "#/components/schemas/RegistrationConfig" security: - bearerAuth: [] "/v1/competitions/{competitionId}/live/rounds": get: summary: Gets Live Admin Information tags: - live operationId: liveAdmin parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Returns Live Admin Information with Rounds content: application/json: schema: type: object required: - rounds properties: rounds: type: array items: "$ref": "#/components/schemas/LiveRoundAdmin" security: - bearerAuth: [] "/v1/competitions/{competitionId}/live/rounds/{roundId}/clear": put: summary: Clears a round deleting all results tags: - live operationId: clearRound parameters: - name: competitionId in: path required: true schema: type: string - name: roundId in: path required: true schema: type: string responses: '200': description: Returns number of results clear content: application/json: schema: type: object required: - status - recreated_rows properties: status: type: string recreated_rows: type: number security: - bearerAuth: [] "/v1/competitions/{competitionId}/live/rounds/{roundId}/open": put: summary: Opens a round and locks the previous round if necessary tags: - live operationId: openRound parameters: - name: competitionId in: path required: true schema: type: string - name: roundId in: path required: true schema: type: string responses: '200': description: Returns number of locked an created results content: application/json: schema: type: object required: - status - created_rows - locked_rows properties: status: type: string created_rows: type: number locked_rows: type: number security: - bearerAuth: [] "/v1/competitions/{competitionId}/live/rounds/{roundId}/{registrationId}": post: summary: Add or update live result tags: - live operationId: addOrUpdateLiveResult security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string - name: roundId in: path required: true schema: type: string - name: registrationId in: path required: true schema: type: integer requestBody: content: application/json: schema: type: object required: - attempts properties: attempts: type: array items: type: object properties: value: type: integer attempt_number: type: integer responses: '200': description: Result queued for update content: application/json: schema: type: object properties: status: type: string example: ok '400': description: Bad request '401': description: Unauthorized '403': description: Forbidden patch: summary: Update live result tags: - live operationId: updateLiveResult security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string - name: roundId in: path required: true schema: type: string - name: registrationId in: path required: true schema: type: integer requestBody: content: application/json: schema: type: object required: - attempts properties: attempts: type: array items: type: object properties: value: type: integer attempt_number: type: integer responses: '200': description: Result queued for update content: application/json: schema: type: object properties: status: type: string example: ok "/v1/competitions/{competitionId}/live/rounds/{roundId}/{registrationId}/quit": put: summary: Quit competitor from round tags: - live operationId: quitCompetitorFromRound security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string - name: roundId in: path required: true schema: type: string - name: registrationId in: path required: true schema: type: integer responses: '200': description: Competitor quit from round content: application/json: schema: type: object properties: status: type: string example: ok quit: type: integer '400': description: Cannot quit competitor with results '401': description: Unauthorized '403': description: Forbidden "/v0/me": get: summary: Get current authenticated user tags: - users operationId: getMe security: - bearerAuth: [] responses: '200': description: Successful response with current user info content: application/json: schema: type: object properties: me: "$ref": "#/components/schemas/Person" "/v0/auth/results": get: summary: Check if user can admin results tags: - system operationId: authResults responses: '200': description: User can admin results content: application/json: schema: type: object properties: status: type: string example: ok '401': description: Please log in '403': description: Cannot administer results security: - bearerAuth: [] "/v0/users/me/personal_records": get: summary: Get current user's personal records tags: - users operationId: getUserPersonalRecords security: - bearerAuth: [] responses: '200': description: Personal records for current user content: application/json: schema: type: object properties: single: type: array items: "$ref": "#/components/schemas/WcifPersonalBest" average: type: array items: "$ref": "#/components/schemas/WcifPersonalBest" '401': description: Unauthorized "/v0/users/me/preferred_events": get: summary: Get current user's preferred events tags: - users operationId: getUserPreferredEvents security: - bearerAuth: [] responses: '200': description: List of preferred event IDs content: application/json: schema: type: array items: type: string example: '333' '401': description: Unauthorized "/v0/users/me/bookmarks": get: summary: Get current user's bookmarked competitions tags: - users operationId: getUserBookmarks security: - bearerAuth: [] responses: '200': description: List of bookmarked competition IDs content: application/json: schema: type: array items: type: string example: WC2025 '401': description: Unauthorized "/v0/users/me/permissions": get: summary: Get user's permissions tags: - users operationId: userPermissions security: - bearerAuth: [] responses: '200': description: Successfully retrieved permissions content: application/json: schema: "$ref": "#/components/schemas/UserPermissions" "/v0/user_groups": get: summary: Get user groups tags: - users operationId: userGroups parameters: - name: isActive in: query schema: type: boolean description: Filter by whether the group is active - name: isHidden in: query schema: type: boolean description: Filter by whether the group is hidden - name: groupType in: query schema: type: string description: Filter by group type (e.g., "officers") - name: sort in: query schema: type: string description: Sort by a specific field (e.g., "start_date", "-created_at") responses: '200': description: A list of user groups content: application/json: schema: type: array items: "$ref": "#/components/schemas/UserGroup" security: - bearerAuth: [] "/v0/user_roles": get: summary: Get user roles tags: - users operationId: userRoles parameters: - name: isActive in: query schema: type: boolean description: Filter by whether the group is active - name: isGroupHidden in: query schema: type: boolean description: Filter by whether the group is hidden - name: userId in: query schema: type: integer description: Filter by user ID - name: groupId in: query schema: type: integer description: Filter by group ID - name: status in: query schema: type: string description: Filter by metadata status (e.g., "chair") - name: groupType in: query schema: type: string description: Filter by group type (e.g., "officers") - name: parentGroupId in: query schema: type: number description: Filter by parent Group - name: isLead in: query schema: type: boolean description: Filter by whether the user is the lead of the group - name: sort in: query schema: type: string description: Sort by a specific field (e.g., "start_date", "-created_at") - name: perPage in: query schema: type: integer default: 100 description: Number of results per page responses: '200': description: A list of user roles content: application/json: schema: type: array items: "$ref": "#/components/schemas/UserRole" security: - bearerAuth: [] post: summary: Create user role tags: - user_roles operationId: createUserRole security: - bearerAuth: [] requestBody: content: application/json: schema: type: object required: - userId properties: userId: type: integer groupId: type: integer groupType: type: string status: type: string location: type: string endDate: type: string format: date banReason: type: string scope: type: string responses: '200': description: Role created content: application/json: schema: type: object properties: success: type: boolean '401': description: Unauthorized '422': description: Invalid group type or other validation error "/v0/user_roles/{id}": patch: summary: Update user role tags: - user_roles operationId: updateUserRole security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer requestBody: content: application/json: schema: type: object properties: status: type: string groupId: type: integer location: type: string endDate: type: string format: date banReason: type: string scope: type: string responses: '200': description: Role updated content: application/json: schema: type: object properties: success: type: boolean '401': description: Unauthorized '422': description: Invalid parameters delete: summary: Delete user role tags: - user_roles operationId: deleteUserRole security: - bearerAuth: [] parameters: - name: id in: path required: true schema: type: integer responses: '200': description: Role deleted content: application/json: schema: type: object properties: success: type: boolean '401': description: Unauthorized "/v0/user_roles/search": get: summary: Search user roles tags: - user_roles operationId: searchUserRoles parameters: - name: query in: query required: true schema: type: string - name: groupType in: query required: true schema: type: string enum: - delegate_regions - delegate_probation - translators - officers - teams_committees - councils - board - banned_competitors responses: '200': description: Matching roles content: application/json: schema: type: object properties: result: type: array items: "$ref": "#/components/schemas/UserRole" security: - bearerAuth: [] "/v0/competitions/{competitionId}/wcif": get: summary: Get competition WCIF (requires manage permission) tags: - competitions operationId: getCompetitionWcif security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string responses: '200': description: Competition WCIF content: application/json: schema: "$ref": "#/components/schemas/WcifSchedule" '403': description: Not authorized to manage competition '404': description: Competition not found patch: summary: Update competition WCIF tags: - competitions operationId: updateCompetitionWcif security: - bearerAuth: [] parameters: - name: competitionId in: path required: true schema: type: string requestBody: content: application/json: schema: "$ref": "#/components/schemas/WcifSchedule" responses: '200': description: WCIF updated successfully content: application/json: schema: type: object properties: status: type: string example: Successfully saved WCIF '400': description: Validation error content: application/json: schema: type: object properties: status: type: string error: type: string '403': description: Not authorized '404': description: Competition not found "/v0/registration-data": post: summary: Get registration data for multiple competitions tags: - competitions operationId: getRegistrationData requestBody: content: application/json: schema: type: object required: - ids properties: ids: type: array items: type: string responses: '200': description: Registration data for competitions content: application/json: schema: type: array items: type: object properties: id: type: string registration_status: type: string enum: - not_open - open - closed security: - bearerAuth: [] components: securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT schemas: RegistrationDataV2: type: object required: - id - registrant_id - user_id - user - competing properties: id: type: integer registrant_id: type: integer user_id: type: integer guests: type: integer user: type: object required: - id - name - gender - country_iso2 - wca_id properties: id: type: integer name: type: string gender: type: string country_iso2: type: string wca_id: type: string competing: type: object required: - event_ids properties: event_ids: type: array items: type: string registration_status: type: string registered_on: type: string format: datetime comment: type: string admin_comment: type: string payment: type: object properties: has_paid: type: boolean payment_status: type: string paid_amount_iso: type: integer currency_code: type: string updated_at: type: string format: datetime BaseRegistrationConfig: type: object properties: key: type: string isEditable: type: boolean parameters: type: object required: - key - isEditable RequirementsStepConfig: allOf: - "$ref": "#/components/schemas/BaseRegistrationConfig" WcifAttemptResult: type: integer WcifQualificationAttemptResult: type: object properties: whenDate: type: string format: date type: type: string example: attemptResult resultType: type: string enum: - single - average level: "$ref": "#/components/schemas/WcifAttemptResult" required: - whenDate - type - resultType - level WcifRanking: type: integer WcifQualificationRanking: type: object properties: whenDate: type: string format: date type: type: string example: ranking resultType: type: string enum: - single - average level: "$ref": "#/components/schemas/WcifRanking" required: - whenDate - type - resultType - level WcifQualificationAnyResult: type: object properties: whenDate: type: string format: date type: type: string example: anyResult resultType: type: string enum: - single - average required: - whenDate - type - resultType WcifQualification: oneOf: - "$ref": "#/components/schemas/WcifQualificationAttemptResult" - "$ref": "#/components/schemas/WcifQualificationRanking" - "$ref": "#/components/schemas/WcifQualificationAnyResult" discriminator: propertyName: type mapping: attemptResult: "#/components/schemas/WcifQualificationAttemptResult" ranking: "#/components/schemas/WcifQualificationRanking" anyResult: "#/components/schemas/WcifQualificationAnyResult" WcifPersonalBest: type: object required: - eventId - best - worldRanking - continentalRanking - nationalRanking - type properties: eventId: type: string example: '333' best: "$ref": "#/components/schemas/WcifAttemptResult" worldRanking: type: integer continentalRanking: type: integer nationalRanking: type: integer type: type: string enum: - single - average CompetingStepConfig: allOf: - "$ref": "#/components/schemas/BaseRegistrationConfig" - type: object properties: parameters: type: object properties: events_per_registration_limit: type: integer allow_registration_edits: type: boolean guest_entry_status: type: string enum: - unclear - free - restricted guests_per_registration_limit: type: integer guests_enabled: type: boolean uses_qualification?: type: boolean allow_registration_without_qualification: type: boolean force_comment_in_registration: type: boolean qualification_wcif: type: object additionalProperties: "$ref": "#/components/schemas/WcifQualification" event_ids: type: array items: type: string preferredEvents: type: array items: type: string personalRecords: type: object properties: single: type: array items: "$ref": "#/components/schemas/WcifPersonalBest" average: type: array items: "$ref": "#/components/schemas/WcifPersonalBest" required: - single - average required: - allow_registration_edits - guest_entry_status - guests_enabled - uses_qualification? - allow_registration_without_qualification - force_comment_in_registration - qualification_wcif - event_ids - preferredEvents - personalRecords required: - parameters PaymentStepConfig: allOf: - "$ref": "#/components/schemas/BaseRegistrationConfig" - type: object properties: parameters: type: object properties: stripePublishableKey: type: string connectedAccountId: type: string required: - stripePublishableKey - connectedAccountId required: - parameters ApprovalStepConfig: allOf: - "$ref": "#/components/schemas/BaseRegistrationConfig" - type: object properties: parameters: type: object properties: auto_accept_enabled?: type: boolean auto_accept_preference: type: string enum: - disabled - bulk - live required: - auto_accept_enabled? required: - parameters RegistrationConfig: oneOf: - "$ref": "#/components/schemas/RequirementsStepConfig" - "$ref": "#/components/schemas/CompetingStepConfig" - "$ref": "#/components/schemas/PaymentStepConfig" - "$ref": "#/components/schemas/ApprovalStepConfig" discriminator: propertyName: key mapping: requirements: "#/components/schemas/RequirementsStepConfig" competing: "#/components/schemas/CompetingStepConfig" payment: "#/components/schemas/PaymentStepConfig" approval: "#/components/schemas/ApprovalStepConfig" WcifTimeLimit: type: object properties: centiseconds: type: integer example: 18000 cumulativeRoundIds: type: array items: type: string required: - centiseconds - cumulativeRoundIds WcifCutoff: type: object properties: numberOfAttempts: type: integer example: 2 attemptResult: "$ref": "#/components/schemas/WcifAttemptResult" required: - numberOfAttempts - attemptResult WcifAdvancementConditionRanking: type: object properties: type: type: string example: ranking level: "$ref": "#/components/schemas/WcifRanking" required: - type - level WcifPercent: type: integer WcifAdvancementConditionPercent: type: object properties: type: type: string example: percent level: "$ref": "#/components/schemas/WcifPercent" required: - type - level WcifAdvancementConditionAttemptResult: type: object properties: type: type: string example: attemptResult level: "$ref": "#/components/schemas/WcifAttemptResult" required: - type - level WcifAdvancementCondition: oneOf: - "$ref": "#/components/schemas/WcifAdvancementConditionRanking" - "$ref": "#/components/schemas/WcifAdvancementConditionPercent" - "$ref": "#/components/schemas/WcifAdvancementConditionAttemptResult" discriminator: propertyName: type mapping: ranking: "#/components/schemas/WcifAdvancementConditionRanking" percent: "#/components/schemas/WcifAdvancementConditionPercent" attemptResult: "#/components/schemas/WcifAdvancementConditionAttemptResult" WcifAttempt: type: object properties: result: "$ref": "#/components/schemas/WcifAttemptResult" reconstruction: type: string required: - result WcifResult: type: object properties: personId: type: integer example: 1 ranking: type: integer example: 10 attempts: type: array items: "$ref": "#/components/schemas/WcifAttempt" best: "$ref": "#/components/schemas/WcifAttemptResult" average: "$ref": "#/components/schemas/WcifAttemptResult" required: - personId - attempts - best - average WcifScramble: type: string WcifScrambleSet: type: object properties: id: type: integer example: 1 scrambles: type: array items: "$ref": "#/components/schemas/WcifScramble" extraScrambles: type: array items: "$ref": "#/components/schemas/WcifScramble" required: - id - scrambles - extraScrambles WcifRound: type: object properties: id: type: string example: 333-r1 format: type: string enum: - '1' - '2' - '3' - '5' - a - m timeLimit: "$ref": "#/components/schemas/WcifTimeLimit" cutoff: "$ref": "#/components/schemas/WcifCutoff" advancementCondition: "$ref": "#/components/schemas/WcifAdvancementCondition" results: type: array items: "$ref": "#/components/schemas/WcifResult" scrambleSetCount: type: integer scrambleSets: type: array items: "$ref": "#/components/schemas/WcifScrambleSet" extensions: type: array required: - id - format - results - scrambleSetCount - scrambleSets - extensions BaseAdminRound: allOf: - "$ref": "#/components/schemas/WcifRound" - type: object required: - state properties: state: type: string OpenRound: allOf: - "$ref": "#/components/schemas/BaseAdminRound" - type: object required: - total_competitors - competitors_live_results_entered properties: total_competitors: type: number competitors_live_results_entered: type: number LockedRound: allOf: - "$ref": "#/components/schemas/BaseAdminRound" - type: object required: - total_competitors properties: total_competitors: type: number PendingRound: allOf: - "$ref": "#/components/schemas/BaseAdminRound" ReadyRound: allOf: - "$ref": "#/components/schemas/BaseAdminRound" LiveRoundAdmin: oneOf: - "$ref": "#/components/schemas/OpenRound" - "$ref": "#/components/schemas/LockedRound" - "$ref": "#/components/schemas/PendingRound" - "$ref": "#/components/schemas/ReadyRound" discriminator: propertyName: state mapping: open: "#/components/schemas/OpenRound" locked: "#/components/schemas/LockedRound" pending: "#/components/schemas/PendingRound" ready: "#/components/schemas/ReadyRound" LiveAttempt: type: object required: - value - attempt_number properties: value: type: integer attempt_number: type: integer LiveResult: type: object required: - registration_id - round_id - global_pos - local_pos - best - average - single_record_tag - average_record_tag - advancing - advancing_questionable - event_id - attempts properties: registration_id: type: integer round_id: type: integer global_pos: type: integer local_pos: type: integer best: type: integer average: type: integer single_record_tag: type: string average_record_tag: type: string advancing: type: boolean advancing_questionable: type: boolean event_id: type: string attempts: type: array items: "$ref": "#/components/schemas/LiveAttempt" LiveCompetitor: type: object required: - id - registrant_id - name - country_iso2 - user_id properties: id: type: number registrant_id: type: number user_id: type: number name: type: string country_iso2: type: string LiveRound: allOf: - "$ref": "#/components/schemas/WcifRound" - type: object properties: results: type: array items: "$ref": "#/components/schemas/LiveResult" competitors: type: array items: "$ref": "#/components/schemas/LiveCompetitor" round_id: type: number state_hash: type: string required: - results - competitors - round_id - state_hash UserAvatar: type: object required: - url - is_default properties: url: type: string format: uri example: https://avatars.worldcubeassociation.org/uploads/user/avatar/2099EXAM/1535183030.jpg thumb_url: type: string format: uri example: https://avatars.worldcubeassociation.org/uploads/user/avatar/2099EXAM/1535183030_thumb.jpg is_default: type: boolean WcifRegistration: type: object required: - wcaRegistrationId - eventIds - status - isCompeting properties: wcaRegistrationId: type: number eventIds: type: array items: type: string status: type: string isCompeting: type: boolean WcifAssignment: type: object required: - activityId - stationNumber - assignmentCode properties: activityId: type: number stationNumber: type: number assignmentCode: type: string WcifPerson: type: object required: - registrantId - name - wcaUserId - countryIso2 - gender - roles - assignments - personalBests - extensions properties: registrantId: type: number name: type: string wcaUserId: type: number countryIso2: type: string gender: type: string birthdate: type: string format: date email: type: string format: email avatar: "$ref": "#/components/schemas/UserAvatar" roles: type: array items: type: string enum: - delegate - trainee-delegate - organizer registration: "$ref": "#/components/schemas/WcifRegistration" assignments: type: array items: "$ref": "#/components/schemas/WcifAssignment" personalBests: type: array items: "$ref": "#/components/schemas/WcifPersonalBest" extensions: type: array LivePerson: allOf: - "$ref": "#/components/schemas/WcifPerson" - type: object properties: results: type: array items: "$ref": "#/components/schemas/LiveResult" required: - results TeamMembership: type: object required: - id - friendly_id - leader - senior_member properties: id: type: integer friendly_id: type: string example: wst leader: type: boolean senior_member: type: boolean name: type: string wca_id: type: string avatar: "$ref": "#/components/schemas/UserAvatar" Person: type: object required: - id - name - wca_id - country_iso2 - delegate_status - teams - url - avatar properties: id: type: integer example: 267 name: type: string example: Tim Reynolds gender: type: string example: m wca_id: type: string example: 2005REYN01 country_iso2: type: string example: US delegate_status: type: string example: delegate teams: type: array items: "$ref": "#/components/schemas/TeamMembership" url: type: string format: uri example: https://www.worldcubeassociation.org/persons/2005REYN01 avatar: "$ref": "#/components/schemas/UserAvatar" SearchResultCompetition: type: object properties: id: type: string example: WC2025 name: type: string example: WCA World Championship 2025 city: type: string example: Seattle country_iso2: type: string example: US start_date: type: string format: date end_date: type: string format: date class: type: string example: competition SearchResultUser: type: object properties: id: type: integer example: 1 name: type: string example: John Doe wca_id: type: string example: 2016DOE01 class: type: string example: user SearchResultRegulation: type: object properties: id: type: string example: A1 content: type: string class: type: string example: regulation SearchResultIncident: type: object properties: id: type: integer example: 1 title: type: string example: Timer malfunction incident class: type: string example: incident SearchResultPost: type: object properties: id: type: integer example: 123 title: type: string example: World Championship 2025 Announcement class: type: string example: post SearchResultPerson: type: object properties: id: type: string example: 2016DOE01 name: type: string example: John Doe wca_id: type: string example: 2016DOE01 class: type: string example: person Organizer: allOf: - "$ref": "#/components/schemas/Person" - type: object properties: delegate_status: type: string example: regional_delegate email: type: string format: email example: 255@worldcubeassociation.org avatar: "$ref": "#/components/schemas/UserAvatar" CompetitionInfo: type: object required: - id - name - information - venue - contact - registration_open - registration_close - use_wca_registration - guests_enabled - announced_at - base_entry_fee_lowest_denomination - currency_code - start_date - end_date - enable_donations - competitor_limit - on_the_spot_registration - refund_policy_percent - refund_policy_limit_date - guests_entry_fee_lowest_denomination - qualification_results - external_registration_page - event_restrictions - waiting_list_deadline_date - event_change_deadline_date - guest_entry_status - allow_registration_edits - allow_registration_without_qualification - competitor_can_cancel - url - website - short_name - city - venue_address - latitude_degrees - longitude_degrees - country_iso2 - event_ids - main_event_id - number_of_bookmarks - using_payment_integrations? - uses_qualification? - uses_cutoff? - competition_series_ids - registration_full? - registration_full_and_accepted? - part_of_competition_series? - registration_full_and_accepted? - delegates - organizers - tab_names - class properties: id: type: string example: WC2003 name: type: string example: WCA World Championship 2003 information: type: string example: First WCA World Championship venue: type: string example: Toronto contact: type: string format: uri example: https://www.example.com registration_open: type: string format: date-time example: '2025-01-03T14:00:00.000Z' registration_close: type: string format: date-time example: '2025-01-10T14:00:00.000Z' use_wca_registration: type: boolean example: true guests_enabled: type: boolean example: false announced_at: type: string format: date-time example: '2024-10-08T22:00:00.000Z' base_entry_fee_lowest_denomination: type: integer example: 12000 currency_code: type: string example: USD start_date: type: string format: date example: '2025-07-03' end_date: type: string format: date example: '2025-07-06' enable_donations: type: boolean example: false competitor_limit: type: integer example: 2000 extra_registration_requirements: type: string example: '' on_the_spot_registration: type: boolean example: false refund_policy_percent: type: integer example: 50 refund_policy_limit_date: type: string format: date-time example: '2025-05-15T06:59:00.000Z' guests_entry_fee_lowest_denomination: type: integer example: 1000 qualification_results: type: boolean example: true event_restrictions: type: boolean example: false cancelled_at: type: - string - 'null' waiting_list_deadline_date: type: string format: date-time example: '2025-05-29T06:59:00.000Z' event_change_deadline_date: type: string format: date-time example: '2025-05-29T06:59:00.000Z' competitor_can_cancel: type: string example: not_accepted url: type: string format: uri example: https://www.worldcubeassociation.org/competitions/WC2003 website: type: string format: uri example: https://cubingusa.org/worlds city: type: string example: Seattle, Washington venue_address: type: string example: 770 Don Mills Rd, North York, ON M3C IT3, Canada venue_details: type: string example: The big convention center latitude_degrees: type: number format: float example: 47.611387 longitude_degrees: type: number format: float example: -122.332554 country_iso2: type: string example: US event_ids: type: array items: type: string example: - '333' main_event_id: type: string example: '333' number_of_bookmarks: type: integer example: 123 uses_qualification?: type: boolean registration_full?: type: boolean example: true registration_full_and_accepted?: type: boolean example: true tab_names: type: array items: type: string delegates: type: array items: "$ref": "#/components/schemas/Person" organizers: type: array items: "$ref": "#/components/schemas/Organizer" CompetitionPermissions: oneOf: - type: array items: type: string - type: string format: Wildcard enum: - "*" UserPermissions: type: object required: - can_access_panels - can_administer_competitions - can_attend_competitions - can_create_groups - can_edit_delegate_report - can_edit_groups - can_organize_competitions - can_read_groups_current - can_read_groups_past - can_request_to_edit_others_profile - can_view_delegate_admin_page - can_view_delegate_report properties: can_attend_competitions: type: object required: - scope properties: scope: "$ref": "#/components/schemas/CompetitionPermissions" until: type: - string - 'null' format: date-time can_organize_competitions: type: object required: - scope properties: scope: "$ref": "#/components/schemas/CompetitionPermissions" can_administer_competitions: type: object required: - scope properties: scope: "$ref": "#/components/schemas/CompetitionPermissions" can_view_delegate_admin_page: type: object required: - scope properties: scope: "$ref": "#/components/schemas/CompetitionPermissions" can_view_delegate_report: type: object required: - scope properties: scope: "$ref": "#/components/schemas/CompetitionPermissions" can_edit_delegate_report: type: object required: - scope properties: scope: "$ref": "#/components/schemas/CompetitionPermissions" can_create_groups: type: object required: - scope properties: scope: type: array items: type: string can_read_groups_current: type: object required: - scope properties: scope: type: array items: type: string can_read_groups_past: type: object required: - scope properties: scope: type: array items: type: string can_edit_groups: type: object required: - scope properties: scope: type: array items: type: string can_access_panels: type: object required: - scope properties: scope: type: array items: type: string can_request_to_edit_others_profile: type: object required: - scope properties: scope: oneOf: - type: array items: type: string - type: string format: Wildcard enum: - "*" Rank: type: object required: - id - person_id - event_id - best - world_rank - continent_rank - country_rank properties: id: type: integer person_id: type: string event_id: type: string best: type: integer world_rank: type: integer continent_rank: type: integer country_rank: type: integer Medals: type: object required: - gold - silver - bronze - total properties: gold: type: integer silver: type: integer bronze: type: integer total: type: integer Records: type: object required: - national - continental - world - total properties: national: type: integer continental: type: integer world: type: integer total: type: integer SingleAndAverageRank: type: object required: - average - single properties: average: "$ref": "#/components/schemas/Rank" single: "$ref": "#/components/schemas/Rank" PersonInfo: type: object required: - person - medals - records - personal_records - championship_podiums - competition_count - total_solves properties: person: "$ref": "#/components/schemas/Person" previous_persons: type: array items: type: object ranks_single: type: array items: "$ref": "#/components/schemas/Rank" ranks_average: type: array items: "$ref": "#/components/schemas/Rank" medals: "$ref": "#/components/schemas/Medals" records: "$ref": "#/components/schemas/Records" personal_records: type: object additionalProperties: "$ref": "#/components/schemas/SingleAndAverageRank" championship_podiums: type: object properties: world: type: array items: type: object continental: type: array items: type: object greater_china: type: array items: type: object national: type: array items: type: object competition_count: type: integer total_solves: type: integer Result: type: object required: - id - pos - best - average - name - country_iso2 - competition_id - event_id - round_type_id - format_id - wca_id - attempts - best_index - worst_index - regional_single_record - regional_average_record properties: id: type: integer pos: type: integer best: type: integer average: type: integer name: type: string country_iso2: type: string competition_id: type: string event_id: type: string round_type_id: type: string format_id: type: string wca_id: type: string attempts: type: array items: type: integer best_index: type: integer worst_index: type: integer regional_single_record: type: - string - 'null' regional_average_record: type: - string - 'null' Results: type: array items: "$ref": "#/components/schemas/Result" Competitions: type: array items: "$ref": "#/components/schemas/CompetitionInfo" UserGroup: type: object required: - id - name - group_type - is_active - is_hidden - created_at - updated_at properties: id: type: integer name: type: string group_type: type: string parent_group_id: type: - integer - 'null' is_active: type: boolean is_hidden: type: boolean metadata_id: type: - integer - 'null' metadata_type: type: - string - 'null' created_at: type: string format: date-time updated_at: type: string format: date-time lead_user: "$ref": "#/components/schemas/Person" metadata: type: object properties: id: type: integer status: type: string created_at: type: string format: date-time updated_at: type: string format: date-time email: type: string format: email preferred_contact_mode: type: string friendly_id: type: string UserRole: type: object required: - id - start_date - end_date - group - user - metadata properties: id: type: integer start_date: type: string format: date end_date: type: - string - 'null' format: date group: "$ref": "#/components/schemas/UserGroup" user: "$ref": "#/components/schemas/Person" metadata: type: object properties: id: type: integer status: type: string created_at: type: string format: date-time updated_at: type: string format: date-time email: type: string format: email class: type: string Country: type: object required: - id - name - iso2 - continent_id properties: id: type: string example: USA name: type: string example: United States iso2: type: string example: US continent_id: type: string example: _North America RegionalOrganization: type: object required: - name - country_iso2 - website properties: name: type: string country_iso2: type: string website: type: string logo_url: type: string format: uri WcifCountryCode: type: string example: US WcifActivityCode: type: string example: 333-r1-g1 WcifActivity: type: object properties: id: type: integer name: type: string activityCode: "$ref": "#/components/schemas/WcifActivityCode" startTime: type: string format: date-time endTime: type: string format: date-time childActivities: type: array items: "$ref": "#/components/schemas/WcifActivity" scrambleSetId: type: integer extensions: type: array required: - id - name - activityCode - startTime - endTime - childActivities - extensions WcifRoom: type: object properties: id: type: integer name: type: string color: type: string activities: type: array items: "$ref": "#/components/schemas/WcifActivity" extensions: type: array required: - id - name - color - activities - extensions WcifVenue: type: object properties: id: type: integer name: type: string latitudeMicrodegrees: type: integer longitudeMicrodegrees: type: integer countryIso2: "$ref": "#/components/schemas/WcifCountryCode" timezone: type: string rooms: type: array items: "$ref": "#/components/schemas/WcifRoom" extensions: type: array required: - id - name - latitudeMicrodegrees - longitudeMicrodegrees - countryIso2 - timezone - rooms - extensions WcifSchedule: type: object properties: startDate: type: string format: date numberOfDays: type: integer venues: type: array items: "$ref": "#/components/schemas/WcifVenue" required: - startDate - numberOfDays - venues ExtendedResult: type: object required: - id - pos - person_id - person_name - country_id - competition_country_id - competition_id - competition_name - start_date - event_id - round_type_id - round_id - format_id - value1 - value2 - value3 - value4 - value5 - best - average - regional_single_record - regional_average_record - updated_at - value properties: type: type: string id: type: integer example: 6709306 pos: type: integer example: 1 person_id: type: string example: 2019WANY36 person_name: type: string example: Yiheng Wang (王艺衡) country_id: type: string example: China competition_country_id: type: string example: China competition_id: type: string example: HangzhouOpen2024 competition_name: type: string example: Hangzhou Open 2024 event_id: type: string example: '222' round_type_id: type: string example: '2' round_id: type: - string - 'null' example: format_id: type: string example: a value1: type: integer example: 126 value2: type: integer example: 84 value3: type: integer example: 91 value4: type: integer example: 89 value5: type: integer example: 85 best: type: integer example: 84 average: type: integer example: 88 regional_single_record: type: - string - 'null' example: regional_average_record: type: - string - 'null' example: WR updated_at: type: string format: date-time example: '2024-12-19T13:40:19.000Z' start_date: type: string format: date value: type: integer example: 88 Record: type: object required: - id - pos - person_id - person_name - country_id - competition_country_id - competition_id - competition_name - start_date - event_id - round_type_id - round_id - format_id - value1 - value2 - value3 - value4 - value5 - best - average - regional_single_record - regional_average_record - updated_at - value properties: type: type: string id: type: integer example: 6709306 pos: type: integer example: 1 person_id: type: string example: 2019WANY36 person_name: type: string example: Yiheng Wang (王艺衡) country_id: type: string example: China competition_country_id: type: string example: China competition_id: type: string example: HangzhouOpen2024 competition_name: type: string example: Hangzhou Open 2024 event_id: type: string example: '222' round_type_id: type: string example: '2' round_id: type: - string - 'null' example: format_id: type: string example: a value1: type: integer example: 126 value2: type: integer example: 84 value3: type: integer example: 91 value4: type: integer example: 89 value5: type: integer example: 85 best: type: integer example: 84 average: type: integer example: 88 regional_single_record: type: - string - 'null' example: regional_average_record: type: - string - 'null' example: WR updated_at: type: string format: date-time example: '2024-12-19T13:40:19.000Z' start_date: type: string format: date value: type: integer example: 88 RecordByEvent: type: object additionalProperties: type: array items: "$ref": "#/components/schemas/Record" ExportInfo: type: object required: - export_date - sql_url - sql_filesize_bytes - tsv_url - tsv_filesize_bytes - readme properties: export_date: type: string format: date sql_url: type: string format: uri sql_filesize_bytes: type: number tsv_url: type: string format: uri tsv_filesize_bytes: type: number readme: type: string developer_url: type: string format: uri CompetitionIndex: type: object required: - id - name - short_display_name - start_date - end_date - registration_open - registration_close - announced_at - country_iso2 - city - venue - latitude_degrees - longitude_degrees - event_ids - main_event_id - competitor_limit - championship_types properties: id: type: string name: type: string short_display_name: type: string start_date: type: string format: date end_date: type: string format: date registration_open: type: string format: date-time registration_close: type: string format: date-time announced_at: type: string format: date-time country_iso2: type: string city: type: string venue: type: string latitude_degrees: type: number format: float longitude_degrees: type: number format: float event_ids: type: array items: type: string main_event_id: type: string competitor_limit: type: integer championship_types: type: array items: type: string example: world results_submitted_at: type: string format: date-time results_posted_at: type: string format: date-time report_posted_at: type: string format: date-time report_posted_by_user: type: integer delegates: type: array items: type: object required: - id - name - avatar properties: id: type: integer name: type: string avatar: "$ref": "#/components/schemas/UserAvatar" MyCompetition: type: object required: - id - name - website - start_date - end_date - registration_open - url - city - country_iso2 - results_posted? - report_posted? - visible? - confirmed? - cancelled? - short_display_name - championships properties: id: type: string name: type: string website: type: string start_date: type: string format: date end_date: type: string format: date registration_open: type: string format: date url: type: string format: uri city: type: string country_iso2: type: string results_posted?: type: boolean report_posted?: type: boolean visible?: type: boolean confirmed?: type: boolean cancelled?: type: boolean short_display_name: type: string championships: type: array items: type: string registration_status: type: string CompetingStatus: type: string enum: - pending - accepted - cancelled - rejected - waiting_list General404: type: object required: - error - data properties: error: type: string data: type: object required: - model - id properties: model: type: string id: type: string Competition404: allOf: - "$ref": "#/components/schemas/General404" - type: object properties: data: type: object required: - model - id properties: model: type: string enum: - Competition id: type: string WcifEvent: type: object properties: id: type: string example: '333' rounds: type: array items: "$ref": "#/components/schemas/WcifRound" competitorLimit: type: integer qualification: "$ref": "#/components/schemas/WcifQualification" extensions: type: array required: - id - rounds - extensions Tabs: type: object required: - id - competition_id - content - name - display_order properties: id: type: string competition_id: type: string name: type: string content: type: string display_order: type: integer RegistrationData: type: object properties: id: type: integer competition_id: type: string user_id: type: integer event_ids: type: array items: type: string required: - id - competition_id - user_id - event_ids Scramble: type: object required: - id - competition_id - event_id - round_id - round_type_id - group_id - is_extra - scramble - scramble_num properties: id: type: number competition_id: type: string event_id: type: string round_type_id: type: string round_id: type: number group_id: type: string is_extra: type: string scramble_num: type: number scramble: type: string PsychSheet: type: object required: - sort_by - sort_by_second - sorted_rankings properties: sort_by: type: string sort_by_second: type: string sorted_rankings: type: array items: type: object required: - name - user_id - wca_id - country_iso2 - average_best - average_rank - single_best - single_rank - tied_previous - pos properties: name: type: string user_id: type: integer wca_id: type: string country_iso2: type: string average_best: type: integer average_rank: type: integer single_best: type: integer single_rank: type: integer tied_previous: type: boolean pos: type: integer Translation: type: object required: - version - language - language_english - url properties: version: type: string language: type: string language_english: type: string url: type: string RegulationsTranslations: type: object required: - current - outdated properties: current: type: array items: "$ref": "#/components/schemas/Translation" outdated: type: array items: "$ref": "#/components/schemas/Translation" Incident: type: object required: - id - title - public_summary - created_at - updated_at - resolved_at - digest_worthy - url - tags - competitions properties: id: type: string title: type: string private_description: type: string public_summary: type: string created_at: type: string format: date-time updated_at: type: string format: date-time resolved_at: type: string format: date-time digest_worthy: type: boolean digest_sent_at: type: string format: date-time url: type: string format: uri tags: type: array items: type: object required: - name - content_html - url properties: name: type: string id: type: number url: type: string format: uri content_html: type: string competitions: type: array items: type: object required: - id - name properties: id: type: string name: type: string comments: type: string responses: CompetitionNotFound: description: Competition not found content: application/json: schema: "$ref": "#/components/schemas/Competition404"