openapi: 3.0.3 info: title: ThrillWiki API version: 1.0.0 description: Comprehensive theme park and ride information API contact: name: ThrillWiki API Support email: api@thrillwiki.com url: https://thrillwiki.com/support license: name: MIT url: https://opensource.org/licenses/MIT paths: /api/accounts/auth-status/: post: operationId: accounts_auth_status_create description: Check if user is authenticated and return user data tags: - accounts security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body /api/accounts/login/: post: operationId: accounts_login_create description: API endpoint for user login tags: - accounts security: - {} responses: '200': description: No response body /api/accounts/logout/: post: operationId: accounts_logout_create description: API endpoint for user logout tags: - accounts security: - cookieAuth: [] - tokenAuth: [] responses: '200': description: No response body /api/accounts/password/change/: post: operationId: accounts_password_change_create description: API endpoint to change password tags: - accounts security: - cookieAuth: [] - tokenAuth: [] responses: '200': description: No response body /api/accounts/password/reset/: post: operationId: accounts_password_reset_create description: API endpoint to request password reset tags: - accounts security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body /api/accounts/signup/: post: operationId: accounts_signup_create description: API endpoint for user registration tags: - accounts security: - {} responses: '200': description: No response body /api/accounts/social/providers/: get: operationId: accounts_social_providers_retrieve description: API endpoint to get available social authentication providers tags: - accounts security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body /api/accounts/user/: get: operationId: accounts_user_retrieve description: API endpoint to get current user information tags: - accounts security: - cookieAuth: [] - tokenAuth: [] responses: '200': description: No response body /api/legacy/v1/parks/: get: operationId: legacy_v1_parks_retrieve description: Handle GET requests for listing resources. tags: - legacy security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body post: operationId: legacy_v1_parks_create description: Handle POST requests for creating resources. tags: - legacy security: - cookieAuth: [] - tokenAuth: [] responses: '201': description: No response body /api/legacy/v1/parks/{slug}/: get: operationId: legacy_v1_parks_retrieve_2 description: Handle GET requests for retrieving a single resource. parameters: - in: path name: slug schema: type: string required: true tags: - legacy security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body put: operationId: legacy_v1_parks_update description: Handle PUT/PATCH requests for updating resources. parameters: - in: path name: slug schema: type: string required: true tags: - legacy security: - cookieAuth: [] - tokenAuth: [] responses: '200': description: No response body delete: operationId: legacy_v1_parks_destroy description: Handle DELETE requests for destroying resources. parameters: - in: path name: slug schema: type: string required: true tags: - legacy security: - cookieAuth: [] - tokenAuth: [] responses: '204': description: No response body /api/legacy/v1/parks/{slug}/reviews/: get: operationId: legacy_v1_parks_reviews_retrieve description: |- Get reviews for a specific park. GET /api/v1/parks/{slug}/reviews/ parameters: - in: path name: slug schema: type: string required: true tags: - legacy security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body /api/legacy/v1/parks/stats/: get: operationId: legacy_v1_parks_stats_retrieve description: |- Get park statistics. GET /api/v1/parks/stats/ tags: - legacy security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body /api/parks/: get: operationId: parks_list description: |- Frontend-compatible API endpoint for parks. GET /api/parks/ - List all parks GET /api/parks/{slug}/ - Get park detail GET /api/search/parks/ - Search parks parameters: - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string - name: page required: false in: query description: A page number within the paginated result set. schema: type: integer - name: search required: false in: query description: A search term. schema: type: string tags: - parks security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedParkFrontendList' description: '' /api/parks/{slug}/: get: operationId: parks_retrieve description: |- Frontend-compatible API endpoint for parks. GET /api/parks/ - List all parks GET /api/parks/{slug}/ - Get park detail GET /api/search/parks/ - Search parks parameters: - in: path name: slug schema: type: string required: true tags: - parks security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/ParkDetailFrontend' description: '' /api/parks/{slug}/rides/: get: operationId: parks_rides_retrieve description: |- Get rides for a specific park. GET /api/parks/{slug}/rides/ parameters: - in: path name: slug schema: type: string required: true tags: - parks security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/ParkFrontend' description: '' /api/parks/search/: get: operationId: parks_search_retrieve description: |- Search parks endpoint for frontend. GET /api/search/parks/?q=search_term tags: - parks security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/ParkFrontend' description: '' /api/rides/: get: operationId: rides_list description: |- Frontend-compatible API endpoint for rides. GET /api/rides/ - List all rides GET /api/rides/{park_slug}/{ride_slug}/ - Get ride detail GET /api/search/rides/ - Search rides parameters: - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string - name: page required: false in: query description: A page number within the paginated result set. schema: type: integer - name: search required: false in: query description: A search term. schema: type: string tags: - rides security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedRideFrontendList' description: '' /api/rides/{id}/: get: operationId: rides_retrieve description: |- Frontend-compatible API endpoint for rides. GET /api/rides/ - List all rides GET /api/rides/{park_slug}/{ride_slug}/ - Get ride detail GET /api/search/rides/ - Search rides parameters: - in: path name: id schema: type: integer description: A unique integer value identifying this ride. required: true tags: - rides security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/RideDetailFrontend' description: '' /api/rides/by-park/{park_slug}/: get: operationId: rides_by_park_retrieve description: |- Get rides for a specific park by park slug. GET /api/rides/by-park/{park_slug}/ parameters: - in: path name: park_slug schema: type: string required: true tags: - rides security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/RideFrontend' description: '' /api/rides/search/: get: operationId: rides_search_retrieve description: |- Search rides endpoint for frontend. GET /api/search/rides/?q=search_term tags: - rides security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/RideFrontend' description: '' /api/v1/parks/: get: operationId: v1_parks_list description: Retrieve a paginated list of theme parks with filtering and search capabilities. summary: List parks parameters: - in: query name: country schema: type: string description: Filter by country - in: query name: ordering schema: type: string description: Order results by field (name, opening_date, average_rating, etc.) - name: page required: false in: query description: A page number within the paginated result set. schema: type: integer - in: query name: search schema: type: string description: Search parks by name or description - in: query name: state schema: type: string description: Filter by state/province - in: query name: status schema: type: string description: Filter by park status (OPERATING, CLOSED_PERM, etc.) tags: - Parks security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedParkListOutputList' examples: ParkListExample: value: count: 123 next: http://api.example.org/accounts/?page=4 previous: http://api.example.org/accounts/?page=2 results: - id: 1 name: Cedar Point slug: cedar-point status: OPERATING description: America's Roller Coast average_rating: 4.5 coaster_count: 17 ride_count: 70 location: city: Sandusky state: Ohio country: United States operator: id: 1 name: Cedar Fair slug: cedar-fair summary: Example park list response description: A typical park in the list view description: '' post: operationId: v1_parks_create description: Create a new theme park. Requires authentication. summary: Create park tags: - Parks requestBody: content: application/json: schema: $ref: '#/components/schemas/ParkCreateInputRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ParkCreateInputRequest' multipart/form-data: schema: $ref: '#/components/schemas/ParkCreateInputRequest' required: true security: - cookieAuth: [] - tokenAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/ParkDetailOutput' examples: ParkDetailExample: value: id: 1 name: Cedar Point slug: cedar-point status: OPERATING description: America's Roller Coast opening_date: '1870-01-01' website: https://cedarpoint.com size_acres: 364.0 average_rating: 4.5 coaster_count: 17 ride_count: 70 location: latitude: 41.4793 longitude: -82.6833 city: Sandusky state: Ohio country: United States operator: id: 1 name: Cedar Fair slug: cedar-fair summary: Example park detail response description: A complete park detail response description: '' '400': content: application/json: schema: type: object additionalProperties: {} description: '' '401': content: application/json: schema: type: object additionalProperties: {} description: '' /api/v1/parks/{slug}/: get: operationId: v1_parks_retrieve description: Retrieve detailed information about a specific park. summary: Get park details parameters: - in: path name: slug schema: type: string required: true tags: - Parks security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/ParkDetailOutput' examples: ParkDetailExample: value: id: 1 name: Cedar Point slug: cedar-point status: OPERATING description: America's Roller Coast opening_date: '1870-01-01' website: https://cedarpoint.com size_acres: 364.0 average_rating: 4.5 coaster_count: 17 ride_count: 70 location: latitude: 41.4793 longitude: -82.6833 city: Sandusky state: Ohio country: United States operator: id: 1 name: Cedar Fair slug: cedar-fair summary: Example park detail response description: A complete park detail response description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' put: operationId: v1_parks_update description: Update a park's information. Requires authentication. summary: Update park parameters: - in: path name: slug schema: type: string required: true tags: - Parks requestBody: content: application/json: schema: $ref: '#/components/schemas/ParkUpdateInputRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/ParkUpdateInputRequest' multipart/form-data: schema: $ref: '#/components/schemas/ParkUpdateInputRequest' security: - cookieAuth: [] - tokenAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ParkDetailOutput' examples: ParkDetailExample: value: id: 1 name: Cedar Point slug: cedar-point status: OPERATING description: America's Roller Coast opening_date: '1870-01-01' website: https://cedarpoint.com size_acres: 364.0 average_rating: 4.5 coaster_count: 17 ride_count: 70 location: latitude: 41.4793 longitude: -82.6833 city: Sandusky state: Ohio country: United States operator: id: 1 name: Cedar Fair slug: cedar-fair summary: Example park detail response description: A complete park detail response description: '' '400': content: application/json: schema: type: object additionalProperties: {} description: '' '401': content: application/json: schema: type: object additionalProperties: {} description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' patch: operationId: v1_parks_partial_update description: Partially update a park's information. Requires authentication. summary: Partially update park parameters: - in: path name: slug schema: type: string required: true tags: - Parks requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedParkUpdateInputRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedParkUpdateInputRequest' multipart/form-data: schema: $ref: '#/components/schemas/PatchedParkUpdateInputRequest' security: - cookieAuth: [] - tokenAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ParkDetailOutput' examples: ParkDetailExample: value: id: 1 name: Cedar Point slug: cedar-point status: OPERATING description: America's Roller Coast opening_date: '1870-01-01' website: https://cedarpoint.com size_acres: 364.0 average_rating: 4.5 coaster_count: 17 ride_count: 70 location: latitude: 41.4793 longitude: -82.6833 city: Sandusky state: Ohio country: United States operator: id: 1 name: Cedar Fair slug: cedar-fair summary: Example park detail response description: A complete park detail response description: '' '400': content: application/json: schema: type: object additionalProperties: {} description: '' '401': content: application/json: schema: type: object additionalProperties: {} description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' delete: operationId: v1_parks_destroy description: Delete a park. Requires authentication and appropriate permissions. summary: Delete park parameters: - in: path name: slug schema: type: string required: true tags: - Parks security: - cookieAuth: [] - tokenAuth: [] responses: '204': description: No response body '401': content: application/json: schema: type: object additionalProperties: {} description: '' '403': content: application/json: schema: type: object additionalProperties: {} description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' /api/v1/parks/{slug}/reviews/: get: operationId: v1_parks_reviews_list description: Retrieve reviews for a specific park. summary: Get park reviews parameters: - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string - name: page required: false in: query description: A page number within the paginated result set. schema: type: integer - name: search required: false in: query description: A search term. schema: type: string - in: path name: slug schema: type: string required: true tags: - Parks - Reviews security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedParkReviewOutputList' description: '' /api/v1/parks/stats/: get: operationId: v1_parks_stats_retrieve description: Retrieve global statistics about all parks in the system. summary: Get park statistics tags: - Parks - Statistics security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/ParkStatsOutput' description: '' /api/v1/ref/parks/: get: operationId: v1_ref_parks_list description: |- Read-only ViewSet for parks. Provides list and retrieve operations for parks without modification capabilities. Useful for reference data. parameters: - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string - name: page required: false in: query description: A page number within the paginated result set. schema: type: integer - name: search required: false in: query description: A search term. schema: type: string tags: - v1 security: - cookieAuth: [] - tokenAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedParkListOutputList' examples: ParkListExample: value: count: 123 next: http://api.example.org/accounts/?page=4 previous: http://api.example.org/accounts/?page=2 results: - id: 1 name: Cedar Point slug: cedar-point status: OPERATING description: America's Roller Coast average_rating: 4.5 coaster_count: 17 ride_count: 70 location: city: Sandusky state: Ohio country: United States operator: id: 1 name: Cedar Fair slug: cedar-fair summary: Example park list response description: A typical park in the list view description: '' /api/v1/ref/parks/{slug}/: get: operationId: v1_ref_parks_retrieve description: |- Read-only ViewSet for parks. Provides list and retrieve operations for parks without modification capabilities. Useful for reference data. parameters: - in: path name: slug schema: type: string required: true tags: - v1 security: - cookieAuth: [] - tokenAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/ParkDetailOutput' examples: ParkDetailExample: value: id: 1 name: Cedar Point slug: cedar-point status: OPERATING description: America's Roller Coast opening_date: '1870-01-01' website: https://cedarpoint.com size_acres: 364.0 average_rating: 4.5 coaster_count: 17 ride_count: 70 location: latitude: 41.4793 longitude: -82.6833 city: Sandusky state: Ohio country: United States operator: id: 1 name: Cedar Fair slug: cedar-fair summary: Example park detail response description: A complete park detail response description: '' /api/v1/ref/rides/: get: operationId: v1_ref_rides_list description: |- Read-only ViewSet for rides. Provides list and retrieve operations for rides without modification capabilities. Useful for reference data. parameters: - name: ordering required: false in: query description: Which field to use when ordering the results. schema: type: string - name: page required: false in: query description: A page number within the paginated result set. schema: type: integer - name: search required: false in: query description: A search term. schema: type: string tags: - v1 security: - cookieAuth: [] - tokenAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedRideListOutputList' examples: RideListExample: value: count: 123 next: http://api.example.org/accounts/?page=4 previous: http://api.example.org/accounts/?page=2 results: - id: 1 name: Steel Vengeance slug: steel-vengeance category: ROLLER_COASTER status: OPERATING description: Hybrid roller coaster park: id: 1 name: Cedar Point slug: cedar-point average_rating: 4.8 capacity_per_hour: 1200 opening_date: '2018-05-05' summary: Example ride list response description: A typical ride in the list view description: '' /api/v1/ref/rides/{slug}/: get: operationId: v1_ref_rides_retrieve description: |- Read-only ViewSet for rides. Provides list and retrieve operations for rides without modification capabilities. Useful for reference data. parameters: - in: path name: slug schema: type: string required: true tags: - v1 security: - cookieAuth: [] - tokenAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/RideDetailOutput' examples: RideDetailExample: value: id: 1 name: Steel Vengeance slug: steel-vengeance category: ROLLER_COASTER status: OPERATING description: Hybrid roller coaster featuring RMC I-Box track park: id: 1 name: Cedar Point slug: cedar-point opening_date: '2018-05-05' min_height_in: 48 capacity_per_hour: 1200 ride_duration_seconds: 150 average_rating: 4.8 manufacturer: id: 1 name: Rocky Mountain Construction slug: rocky-mountain-construction summary: Example ride detail response description: A complete ride detail response description: '' /api/v1/rides/: get: operationId: v1_rides_list description: Retrieve a paginated list of rides with filtering and search capabilities. summary: List rides parameters: - in: query name: category schema: type: string description: Filter by ride category (RC, DR, FR, WR, TR, OT) - in: query name: ordering schema: type: string description: Order results by field (name, opening_date, average_rating, etc.) - name: page required: false in: query description: A page number within the paginated result set. schema: type: integer - in: query name: park_id schema: type: integer description: Filter by park ID - in: query name: park_slug schema: type: string description: Filter by park slug - in: query name: search schema: type: string description: Search rides by name or description - in: query name: status schema: type: string description: Filter by ride status tags: - Rides security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/PaginatedRideListOutputList' examples: RideListExample: value: count: 123 next: http://api.example.org/accounts/?page=4 previous: http://api.example.org/accounts/?page=2 results: - id: 1 name: Steel Vengeance slug: steel-vengeance category: ROLLER_COASTER status: OPERATING description: Hybrid roller coaster park: id: 1 name: Cedar Point slug: cedar-point average_rating: 4.8 capacity_per_hour: 1200 opening_date: '2018-05-05' summary: Example ride list response description: A typical ride in the list view description: '' post: operationId: v1_rides_create description: Create a new ride. Requires authentication. summary: Create ride tags: - Rides requestBody: content: application/json: schema: $ref: '#/components/schemas/RideCreateInputRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RideCreateInputRequest' multipart/form-data: schema: $ref: '#/components/schemas/RideCreateInputRequest' required: true security: - cookieAuth: [] - tokenAuth: [] responses: '201': content: application/json: schema: $ref: '#/components/schemas/RideDetailOutput' examples: RideDetailExample: value: id: 1 name: Steel Vengeance slug: steel-vengeance category: ROLLER_COASTER status: OPERATING description: Hybrid roller coaster featuring RMC I-Box track park: id: 1 name: Cedar Point slug: cedar-point opening_date: '2018-05-05' min_height_in: 48 capacity_per_hour: 1200 ride_duration_seconds: 150 average_rating: 4.8 manufacturer: id: 1 name: Rocky Mountain Construction slug: rocky-mountain-construction summary: Example ride detail response description: A complete ride detail response description: '' '400': content: application/json: schema: type: object additionalProperties: {} description: '' '401': content: application/json: schema: type: object additionalProperties: {} description: '' /api/v1/rides/{slug}/: get: operationId: v1_rides_retrieve description: Retrieve detailed information about a specific ride. summary: Get ride details parameters: - in: path name: slug schema: type: string required: true tags: - Rides security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/RideDetailOutput' examples: RideDetailExample: value: id: 1 name: Steel Vengeance slug: steel-vengeance category: ROLLER_COASTER status: OPERATING description: Hybrid roller coaster featuring RMC I-Box track park: id: 1 name: Cedar Point slug: cedar-point opening_date: '2018-05-05' min_height_in: 48 capacity_per_hour: 1200 ride_duration_seconds: 150 average_rating: 4.8 manufacturer: id: 1 name: Rocky Mountain Construction slug: rocky-mountain-construction summary: Example ride detail response description: A complete ride detail response description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' put: operationId: v1_rides_update description: Update a ride's information. Requires authentication. summary: Update ride parameters: - in: path name: slug schema: type: string required: true tags: - Rides requestBody: content: application/json: schema: $ref: '#/components/schemas/RideUpdateInputRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/RideUpdateInputRequest' multipart/form-data: schema: $ref: '#/components/schemas/RideUpdateInputRequest' security: - cookieAuth: [] - tokenAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/RideDetailOutput' examples: RideDetailExample: value: id: 1 name: Steel Vengeance slug: steel-vengeance category: ROLLER_COASTER status: OPERATING description: Hybrid roller coaster featuring RMC I-Box track park: id: 1 name: Cedar Point slug: cedar-point opening_date: '2018-05-05' min_height_in: 48 capacity_per_hour: 1200 ride_duration_seconds: 150 average_rating: 4.8 manufacturer: id: 1 name: Rocky Mountain Construction slug: rocky-mountain-construction summary: Example ride detail response description: A complete ride detail response description: '' '400': content: application/json: schema: type: object additionalProperties: {} description: '' '401': content: application/json: schema: type: object additionalProperties: {} description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' patch: operationId: v1_rides_partial_update description: Partially update a ride's information. Requires authentication. summary: Partially update ride parameters: - in: path name: slug schema: type: string required: true tags: - Rides requestBody: content: application/json: schema: $ref: '#/components/schemas/PatchedRideUpdateInputRequest' application/x-www-form-urlencoded: schema: $ref: '#/components/schemas/PatchedRideUpdateInputRequest' multipart/form-data: schema: $ref: '#/components/schemas/PatchedRideUpdateInputRequest' security: - cookieAuth: [] - tokenAuth: [] responses: '200': content: application/json: schema: $ref: '#/components/schemas/RideDetailOutput' examples: RideDetailExample: value: id: 1 name: Steel Vengeance slug: steel-vengeance category: ROLLER_COASTER status: OPERATING description: Hybrid roller coaster featuring RMC I-Box track park: id: 1 name: Cedar Point slug: cedar-point opening_date: '2018-05-05' min_height_in: 48 capacity_per_hour: 1200 ride_duration_seconds: 150 average_rating: 4.8 manufacturer: id: 1 name: Rocky Mountain Construction slug: rocky-mountain-construction summary: Example ride detail response description: A complete ride detail response description: '' '400': content: application/json: schema: type: object additionalProperties: {} description: '' '401': content: application/json: schema: type: object additionalProperties: {} description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' delete: operationId: v1_rides_destroy description: Delete a ride. Requires authentication and appropriate permissions. summary: Delete ride parameters: - in: path name: slug schema: type: string required: true tags: - Rides security: - cookieAuth: [] - tokenAuth: [] responses: '204': description: No response body '401': content: application/json: schema: type: object additionalProperties: {} description: '' '403': content: application/json: schema: type: object additionalProperties: {} description: '' '404': content: application/json: schema: type: object additionalProperties: {} description: '' /api/v1/rides/stats/: get: operationId: v1_rides_stats_retrieve description: Retrieve global statistics about all rides in the system. summary: Get ride statistics tags: - Rides - Statistics security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': content: application/json: schema: $ref: '#/components/schemas/RideStatsOutput' description: '' /health/api/: get: operationId: health_api_retrieve description: Return comprehensive health check information tags: - health security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body /health/metrics/: get: operationId: health_metrics_retrieve description: Return performance metrics and analysis tags: - health security: - cookieAuth: [] - tokenAuth: [] - {} responses: '200': description: No response body components: schemas: CompanyOutput: type: object description: Shared serializer for company data. properties: id: type: integer name: type: string slug: type: string roles: type: array items: type: string required: - id - name - slug LocationOutput: type: object description: Shared serializer for location data. properties: latitude: type: string readOnly: true longitude: type: string readOnly: true city: type: string readOnly: true state: type: string readOnly: true country: type: string readOnly: true formatted_address: type: string readOnly: true required: - city - country - formatted_address - latitude - longitude - state PaginatedParkFrontendList: type: object required: - count - results properties: count: type: integer example: 123 next: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=4 previous: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=2 results: type: array items: $ref: '#/components/schemas/ParkFrontend' PaginatedParkListOutputList: type: object required: - count - results properties: count: type: integer example: 123 next: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=4 previous: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=2 results: type: array items: $ref: '#/components/schemas/ParkListOutput' PaginatedParkReviewOutputList: type: object required: - count - results properties: count: type: integer example: 123 next: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=4 previous: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=2 results: type: array items: $ref: '#/components/schemas/ParkReviewOutput' PaginatedRideFrontendList: type: object required: - count - results properties: count: type: integer example: 123 next: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=4 previous: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=2 results: type: array items: $ref: '#/components/schemas/RideFrontend' PaginatedRideListOutputList: type: object required: - count - results properties: count: type: integer example: 123 next: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=4 previous: type: string nullable: true format: uri example: http://api.example.org/accounts/?page=2 results: type: array items: $ref: '#/components/schemas/RideListOutput' ParkAreaOutput: type: object description: Output serializer for park area data. properties: id: type: integer name: type: string slug: type: string description: type: string required: - description - id - name - slug ParkCreateInputRequest: type: object description: Input serializer for creating parks. properties: name: type: string minLength: 1 maxLength: 255 description: type: string default: '' status: enum: - OPERATING - CLOSED_TEMP - CLOSED_PERM - UNDER_CONSTRUCTION - DEMOLISHED - RELOCATED type: string description: |- * `OPERATING` - Operating * `CLOSED_TEMP` - Temporarily Closed * `CLOSED_PERM` - Permanently Closed * `UNDER_CONSTRUCTION` - Under Construction * `DEMOLISHED` - Demolished * `RELOCATED` - Relocated x-spec-enum-id: 0e3d3f905847ed5f default: OPERATING opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true operating_season: type: string maxLength: 255 size_acres: type: string format: decimal pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ nullable: true website: type: string format: uri operator_id: type: integer property_owner_id: type: integer nullable: true required: - name - operator_id ParkDetailFrontend: type: object description: |- Extended frontend serializer for park details. Includes additional fields needed for park detail view. properties: id: type: integer name: type: string slug: type: string location: type: string readOnly: true operator: type: string readOnly: true openingYear: type: string readOnly: true status: type: string readOnly: true description: type: string website: type: string format: uri imageUrl: type: string readOnly: true averageRating: type: string readOnly: true rideCount: type: integer nullable: true coasterCount: type: integer nullable: true sizeAcres: type: string format: decimal pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ nullable: true operatingSeason: type: string required: - averageRating - coasterCount - description - id - imageUrl - location - name - openingYear - operatingSeason - operator - rideCount - sizeAcres - slug - status - website ParkDetailOutput: type: object description: Output serializer for park detail view. properties: id: type: integer name: type: string slug: type: string status: type: string description: type: string opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true operating_season: type: string size_acres: type: string format: decimal pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ nullable: true website: type: string format: uri average_rating: type: string format: decimal pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ nullable: true coaster_count: type: integer nullable: true ride_count: type: integer nullable: true location: allOf: - $ref: '#/components/schemas/LocationOutput' nullable: true operator: $ref: '#/components/schemas/CompanyOutput' property_owner: allOf: - $ref: '#/components/schemas/CompanyOutput' nullable: true areas: type: array items: $ref: '#/components/schemas/ParkAreaOutput' created_at: type: string format: date-time updated_at: type: string format: date-time required: - areas - average_rating - closing_date - coaster_count - created_at - description - id - location - name - opening_date - operating_season - operator - property_owner - ride_count - size_acres - slug - status - updated_at - website ParkFrontend: type: object description: |- Frontend-compatible serializer for parks. Matches the Park interface in frontend/src/stores/parks.ts properties: id: type: integer name: type: string slug: type: string location: type: string readOnly: true operator: type: string readOnly: true openingYear: type: string readOnly: true status: type: string readOnly: true description: type: string website: type: string format: uri imageUrl: type: string readOnly: true required: - description - id - imageUrl - location - name - openingYear - operator - slug - status - website ParkListOutput: type: object description: Output serializer for park list view. properties: id: type: integer name: type: string slug: type: string status: type: string description: type: string average_rating: type: string format: decimal pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ nullable: true coaster_count: type: integer nullable: true ride_count: type: integer nullable: true location: allOf: - $ref: '#/components/schemas/LocationOutput' nullable: true operator: $ref: '#/components/schemas/CompanyOutput' created_at: type: string format: date-time updated_at: type: string format: date-time required: - average_rating - coaster_count - created_at - description - id - location - name - operator - ride_count - slug - status - updated_at ParkReviewOutput: type: object description: Output serializer for park reviews. properties: id: type: integer rating: type: integer title: type: string content: type: string visit_date: type: string format: date created_at: type: string format: date-time user: type: string readOnly: true required: - content - created_at - id - rating - title - user - visit_date ParkStatsOutput: type: object description: Output serializer for park statistics. properties: total_parks: type: integer operating_parks: type: integer closed_parks: type: integer under_construction: type: integer average_rating: type: string format: decimal pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ nullable: true average_coaster_count: type: string format: decimal pattern: ^-?\d{0,3}(?:\.\d{0,2})?$ nullable: true top_countries: type: array items: type: object additionalProperties: {} recently_added_count: type: integer required: - average_coaster_count - average_rating - closed_parks - operating_parks - recently_added_count - top_countries - total_parks - under_construction ParkUpdateInputRequest: type: object description: Input serializer for updating parks. properties: name: type: string minLength: 1 maxLength: 255 description: type: string status: enum: - OPERATING - CLOSED_TEMP - CLOSED_PERM - UNDER_CONSTRUCTION - DEMOLISHED - RELOCATED type: string description: |- * `OPERATING` - Operating * `CLOSED_TEMP` - Temporarily Closed * `CLOSED_PERM` - Permanently Closed * `UNDER_CONSTRUCTION` - Under Construction * `DEMOLISHED` - Demolished * `RELOCATED` - Relocated x-spec-enum-id: 0e3d3f905847ed5f opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true operating_season: type: string maxLength: 255 size_acres: type: string format: decimal pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ nullable: true website: type: string format: uri operator_id: type: integer property_owner_id: type: integer nullable: true PatchedParkUpdateInputRequest: type: object description: Input serializer for updating parks. properties: name: type: string minLength: 1 maxLength: 255 description: type: string status: enum: - OPERATING - CLOSED_TEMP - CLOSED_PERM - UNDER_CONSTRUCTION - DEMOLISHED - RELOCATED type: string description: |- * `OPERATING` - Operating * `CLOSED_TEMP` - Temporarily Closed * `CLOSED_PERM` - Permanently Closed * `UNDER_CONSTRUCTION` - Under Construction * `DEMOLISHED` - Demolished * `RELOCATED` - Relocated x-spec-enum-id: 0e3d3f905847ed5f opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true operating_season: type: string maxLength: 255 size_acres: type: string format: decimal pattern: ^-?\d{0,8}(?:\.\d{0,2})?$ nullable: true website: type: string format: uri operator_id: type: integer property_owner_id: type: integer nullable: true PatchedRideUpdateInputRequest: type: object description: Input serializer for updating rides. properties: name: type: string minLength: 1 maxLength: 255 description: type: string category: enum: - '' - RC - DR - FR - WR - TR - OT type: string description: |- * `` - Select ride type * `RC` - Roller Coaster * `DR` - Dark Ride * `FR` - Flat Ride * `WR` - Water Ride * `TR` - Transport * `OT` - Other x-spec-enum-id: 5c57e6fc7d8e9340 status: enum: - '' - OPERATING - CLOSED_TEMP - SBNO - CLOSING - CLOSED_PERM - UNDER_CONSTRUCTION - DEMOLISHED - RELOCATED type: string description: |- * `` - Select status * `OPERATING` - Operating * `CLOSED_TEMP` - Temporarily Closed * `SBNO` - Standing But Not Operating * `CLOSING` - Closing * `CLOSED_PERM` - Permanently Closed * `UNDER_CONSTRUCTION` - Under Construction * `DEMOLISHED` - Demolished * `RELOCATED` - Relocated x-spec-enum-id: 1479301ee25596a0 post_closing_status: enum: - SBNO - CLOSED_PERM - null type: string description: |- * `SBNO` - Standing But Not Operating * `CLOSED_PERM` - Permanently Closed x-spec-enum-id: 6014d88333e8ac3f nullable: true park_id: type: integer park_area_id: type: integer nullable: true opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true status_since: type: string format: date nullable: true min_height_in: type: integer maximum: 90 minimum: 30 nullable: true max_height_in: type: integer maximum: 90 minimum: 30 nullable: true capacity_per_hour: type: integer minimum: 1 nullable: true ride_duration_seconds: type: integer minimum: 1 nullable: true manufacturer_id: type: integer nullable: true designer_id: type: integer nullable: true ride_model_id: type: integer nullable: true RideCreateInputRequest: type: object description: Input serializer for creating rides. properties: name: type: string minLength: 1 maxLength: 255 description: type: string default: '' category: enum: - '' - RC - DR - FR - WR - TR - OT type: string description: |- * `` - Select ride type * `RC` - Roller Coaster * `DR` - Dark Ride * `FR` - Flat Ride * `WR` - Water Ride * `TR` - Transport * `OT` - Other x-spec-enum-id: 5c57e6fc7d8e9340 status: enum: - '' - OPERATING - CLOSED_TEMP - SBNO - CLOSING - CLOSED_PERM - UNDER_CONSTRUCTION - DEMOLISHED - RELOCATED type: string description: |- * `` - Select status * `OPERATING` - Operating * `CLOSED_TEMP` - Temporarily Closed * `SBNO` - Standing But Not Operating * `CLOSING` - Closing * `CLOSED_PERM` - Permanently Closed * `UNDER_CONSTRUCTION` - Under Construction * `DEMOLISHED` - Demolished * `RELOCATED` - Relocated x-spec-enum-id: 1479301ee25596a0 default: OPERATING park_id: type: integer park_area_id: type: integer nullable: true opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true status_since: type: string format: date nullable: true min_height_in: type: integer maximum: 90 minimum: 30 nullable: true max_height_in: type: integer maximum: 90 minimum: 30 nullable: true capacity_per_hour: type: integer minimum: 1 nullable: true ride_duration_seconds: type: integer minimum: 1 nullable: true manufacturer_id: type: integer nullable: true designer_id: type: integer nullable: true ride_model_id: type: integer nullable: true required: - category - name - park_id RideDetailFrontend: type: object description: |- Extended frontend serializer for ride details. Includes additional fields needed for ride detail view. properties: id: type: integer name: type: string slug: type: string parkId: type: integer parkName: type: string parkSlug: type: string category: type: string readOnly: true manufacturer: type: string readOnly: true designer: type: string readOnly: true openingYear: type: string readOnly: true height: type: string readOnly: true speed: type: string readOnly: true length: type: string readOnly: true inversions: type: string readOnly: true status: type: string readOnly: true description: type: string imageUrl: type: string readOnly: true thrillLevel: type: string readOnly: true minHeightIn: type: integer nullable: true maxHeightIn: type: integer nullable: true capacityPerHour: type: integer nullable: true rideDurationSeconds: type: integer nullable: true averageRating: type: string readOnly: true closingDate: type: string format: date nullable: true statusSince: type: string format: date nullable: true coasterStats: type: string readOnly: true required: - averageRating - capacityPerHour - category - closingDate - coasterStats - description - designer - height - id - imageUrl - inversions - length - manufacturer - maxHeightIn - minHeightIn - name - openingYear - parkId - parkName - parkSlug - rideDurationSeconds - slug - speed - status - statusSince - thrillLevel RideDetailOutput: type: object description: Output serializer for ride detail view. properties: id: type: integer name: type: string slug: type: string category: type: string status: type: string post_closing_status: type: string nullable: true description: type: string park: $ref: '#/components/schemas/RideParkOutput' park_area: type: string readOnly: true opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true status_since: type: string format: date nullable: true min_height_in: type: integer nullable: true max_height_in: type: integer nullable: true capacity_per_hour: type: integer nullable: true ride_duration_seconds: type: integer nullable: true average_rating: type: string format: decimal pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ nullable: true manufacturer: type: string readOnly: true designer: type: string readOnly: true ride_model: allOf: - $ref: '#/components/schemas/RideModelOutput' nullable: true created_at: type: string format: date-time updated_at: type: string format: date-time required: - average_rating - capacity_per_hour - category - closing_date - created_at - description - designer - id - manufacturer - max_height_in - min_height_in - name - opening_date - park - park_area - post_closing_status - ride_duration_seconds - ride_model - slug - status - status_since - updated_at RideFrontend: type: object description: |- Frontend-compatible serializer for rides. Matches the Ride interface in frontend/src/stores/rides.ts properties: id: type: integer name: type: string slug: type: string parkId: type: integer parkName: type: string parkSlug: type: string category: type: string readOnly: true manufacturer: type: string readOnly: true designer: type: string readOnly: true openingYear: type: string readOnly: true height: type: string readOnly: true speed: type: string readOnly: true length: type: string readOnly: true inversions: type: string readOnly: true status: type: string readOnly: true description: type: string imageUrl: type: string readOnly: true thrillLevel: type: string readOnly: true required: - category - description - designer - height - id - imageUrl - inversions - length - manufacturer - name - openingYear - parkId - parkName - parkSlug - slug - speed - status - thrillLevel RideListOutput: type: object description: Output serializer for ride list view. properties: id: type: integer name: type: string slug: type: string category: type: string status: type: string description: type: string park: $ref: '#/components/schemas/RideParkOutput' average_rating: type: string format: decimal pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ nullable: true capacity_per_hour: type: integer nullable: true opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true created_at: type: string format: date-time updated_at: type: string format: date-time required: - average_rating - capacity_per_hour - category - closing_date - created_at - description - id - name - opening_date - park - slug - status - updated_at RideModelOutput: type: object description: Output serializer for ride model data. properties: id: type: integer name: type: string description: type: string category: type: string manufacturer: type: string readOnly: true required: - category - description - id - manufacturer - name RideParkOutput: type: object description: Output serializer for ride's park data. properties: id: type: integer name: type: string slug: type: string required: - id - name - slug RideStatsOutput: type: object description: Output serializer for ride statistics. properties: total_rides: type: integer operating_rides: type: integer closed_rides: type: integer under_construction: type: integer rides_by_category: type: object additionalProperties: {} average_rating: type: string format: decimal pattern: ^-?\d{0,1}(?:\.\d{0,2})?$ nullable: true average_capacity: type: string format: decimal pattern: ^-?\d{0,6}(?:\.\d{0,2})?$ nullable: true top_manufacturers: type: array items: type: object additionalProperties: {} recently_added_count: type: integer required: - average_capacity - average_rating - closed_rides - operating_rides - recently_added_count - rides_by_category - top_manufacturers - total_rides - under_construction RideUpdateInputRequest: type: object description: Input serializer for updating rides. properties: name: type: string minLength: 1 maxLength: 255 description: type: string category: enum: - '' - RC - DR - FR - WR - TR - OT type: string description: |- * `` - Select ride type * `RC` - Roller Coaster * `DR` - Dark Ride * `FR` - Flat Ride * `WR` - Water Ride * `TR` - Transport * `OT` - Other x-spec-enum-id: 5c57e6fc7d8e9340 status: enum: - '' - OPERATING - CLOSED_TEMP - SBNO - CLOSING - CLOSED_PERM - UNDER_CONSTRUCTION - DEMOLISHED - RELOCATED type: string description: |- * `` - Select status * `OPERATING` - Operating * `CLOSED_TEMP` - Temporarily Closed * `SBNO` - Standing But Not Operating * `CLOSING` - Closing * `CLOSED_PERM` - Permanently Closed * `UNDER_CONSTRUCTION` - Under Construction * `DEMOLISHED` - Demolished * `RELOCATED` - Relocated x-spec-enum-id: 1479301ee25596a0 post_closing_status: enum: - SBNO - CLOSED_PERM - null type: string description: |- * `SBNO` - Standing But Not Operating * `CLOSED_PERM` - Permanently Closed x-spec-enum-id: 6014d88333e8ac3f nullable: true park_id: type: integer park_area_id: type: integer nullable: true opening_date: type: string format: date nullable: true closing_date: type: string format: date nullable: true status_since: type: string format: date nullable: true min_height_in: type: integer maximum: 90 minimum: 30 nullable: true max_height_in: type: integer maximum: 90 minimum: 30 nullable: true capacity_per_hour: type: integer minimum: 1 nullable: true ride_duration_seconds: type: integer minimum: 1 nullable: true manufacturer_id: type: integer nullable: true designer_id: type: integer nullable: true ride_model_id: type: integer nullable: true securitySchemes: cookieAuth: type: apiKey in: cookie name: sessionid tokenAuth: type: apiKey in: header name: Authorization description: Token-based authentication with required prefix "Token" tags: - name: Parks description: Theme park operations - name: Rides description: Ride information and management - name: Statistics description: Statistical endpoints providing aggregated data and insights - name: Reviews description: User reviews and ratings for parks and rides - name: locations description: Geographic location services - name: accounts description: User account management - name: media description: Media and image management - name: moderation description: Content moderation - name: Parks description: Operations related to theme parks, including CRUD operations and statistics - name: Rides description: Operations related to rides and attractions within theme parks - name: Statistics description: Statistical endpoints providing aggregated data and insights - name: Reviews description: User reviews and ratings for parks and rides servers: - url: https://api.thrillwiki.com/v1 description: Production server - url: https://staging-api.thrillwiki.com/v1 description: Staging server - url: http://localhost:8000/api/v1 description: Development server