Files
thrillwiki_django_no_react/backend/schema.yml
pacnpal 67db0aa46e feat(rides): populate slugs for existing RideModel records and ensure uniqueness
- Added migration 0011 to populate unique slugs for existing RideModel records based on manufacturer and model names.
- Implemented logic to ensure slug uniqueness during population.
- Added reverse migration to clear slugs if needed.

feat(rides): enforce unique slugs for RideModel

- Created migration 0012 to alter the slug field in RideModel to be unique.
- Updated the slug field to include help text and a maximum length of 255 characters.

docs: integrate Cloudflare Images into rides and parks models

- Updated RidePhoto and ParkPhoto models to use CloudflareImagesField for image storage.
- Enhanced API serializers for rides and parks to support Cloudflare Images, including new fields for image URLs and variants.
- Provided comprehensive OpenAPI schema metadata for new fields.
- Documented database migrations for the integration.
- Detailed configuration settings for Cloudflare Images.
- Updated API response formats to include Cloudflare Images URLs and variants.
- Added examples for uploading photos via API and outlined testing procedures.
2025-08-28 15:12:39 -04:00

6691 lines
189 KiB
YAML

openapi: 3.0.3
info:
title: ThrillWiki API
version: 1.0.0
description: Comprehensive theme park and ride information API
paths:
/api/v1/accounts/profiles/:
get:
operationId: v1_accounts_profiles_list
description: Retrieve a list of user profiles.
summary: List user profiles
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:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedUserProfileOutputList'
description: ''
post:
operationId: v1_accounts_profiles_create
description: Create a new user profile.
summary: Create user profile
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfileCreateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserProfileCreateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserProfileCreateInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfileOutput'
description: ''
/api/v1/accounts/profiles/{id}/:
get:
operationId: v1_accounts_profiles_retrieve
description: Retrieve a specific user profile by ID.
summary: Get user profile
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this user profile.
required: true
tags:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfileOutput'
description: ''
put:
operationId: v1_accounts_profiles_update
description: Update a user profile.
summary: Update user profile
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this user profile.
required: true
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfileUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/UserProfileUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/UserProfileUpdateInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfileOutput'
description: ''
patch:
operationId: v1_accounts_profiles_partial_update
description: Partially update a user profile.
summary: Partially update user profile
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this user profile.
required: true
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedUserProfileUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedUserProfileUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedUserProfileUpdateInputRequest'
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfileOutput'
description: ''
delete:
operationId: v1_accounts_profiles_destroy
description: Delete a user profile.
summary: Delete user profile
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this user profile.
required: true
tags:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'204':
description: No response body
/api/v1/accounts/profiles/me/:
get:
operationId: v1_accounts_profiles_me_retrieve
description: Retrieve the current authenticated user's profile.
summary: Get current user's profile
tags:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserProfileOutput'
description: ''
/api/v1/accounts/toplist-items/:
get:
operationId: v1_accounts_toplist_items_list
description: Retrieve a list of top list items.
summary: List top list items
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:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedTopListItemOutputList'
description: ''
post:
operationId: v1_accounts_toplist_items_create
description: Add a new item to a top list.
summary: Create top list item
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopListItemCreateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TopListItemCreateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TopListItemCreateInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListItemOutput'
description: ''
/api/v1/accounts/toplist-items/{id}/:
get:
operationId: v1_accounts_toplist_items_retrieve
description: Retrieve a specific top list item by ID.
summary: Get top list item
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list item.
required: true
tags:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListItemOutput'
description: ''
put:
operationId: v1_accounts_toplist_items_update
description: Update a top list item.
summary: Update top list item
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list item.
required: true
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopListItemUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TopListItemUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TopListItemUpdateInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListItemOutput'
description: ''
patch:
operationId: v1_accounts_toplist_items_partial_update
description: Partially update a top list item.
summary: Partially update top list item
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list item.
required: true
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedTopListItemUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedTopListItemUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedTopListItemUpdateInputRequest'
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListItemOutput'
description: ''
delete:
operationId: v1_accounts_toplist_items_destroy
description: Remove an item from a top list.
summary: Delete top list item
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list item.
required: true
tags:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'204':
description: No response body
/api/v1/accounts/toplist-items/reorder/:
post:
operationId: v1_accounts_toplist_items_reorder_create
description: Reorder items within a top list.
summary: Reorder top list items
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopListItemOutputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TopListItemOutputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TopListItemOutputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
properties:
success:
type: boolean
description: ''
/api/v1/accounts/toplists/:
get:
operationId: v1_accounts_toplists_list
description: Retrieve a list of top lists.
summary: List top lists
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:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedTopListOutputList'
description: ''
post:
operationId: v1_accounts_toplists_create
description: Create a new top list.
summary: Create top list
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopListCreateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TopListCreateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TopListCreateInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListOutput'
description: ''
/api/v1/accounts/toplists/{id}/:
get:
operationId: v1_accounts_toplists_retrieve
description: Retrieve a specific top list by ID.
summary: Get top list
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list.
required: true
tags:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListOutput'
description: ''
put:
operationId: v1_accounts_toplists_update
description: Update a top list.
summary: Update top list
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list.
required: true
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopListUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TopListUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TopListUpdateInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListOutput'
description: ''
patch:
operationId: v1_accounts_toplists_partial_update
description: Partially update a top list.
summary: Partially update top list
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list.
required: true
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedTopListUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedTopListUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedTopListUpdateInputRequest'
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListOutput'
description: ''
delete:
operationId: v1_accounts_toplists_destroy
description: Delete a top list.
summary: Delete top list
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list.
required: true
tags:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'204':
description: No response body
/api/v1/accounts/toplists/{id}/duplicate/:
post:
operationId: v1_accounts_toplists_duplicate_create
description: Create a copy of an existing top list for the current user.
summary: Duplicate top list
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this top list.
required: true
tags:
- Accounts
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/TopListOutputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/TopListOutputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/TopListOutputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/TopListOutput'
description: ''
/api/v1/accounts/toplists/my_lists/:
get:
operationId: v1_accounts_toplists_my_lists_list
description: Retrieve all top lists belonging to the current user.
summary: Get current user's top lists
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:
- Accounts
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedTopListOutputList'
description: ''
/api/v1/auth/login/:
post:
operationId: v1_auth_login_create
description: Authenticate user with username/email and password.
summary: User login
tags:
- Authentication
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LoginInputRequest'
examples:
LoginInputExample:
value:
username: thrillseeker
password: securepassword123
summary: Example login request
description: Login with username or email and password
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/LoginInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/LoginInputRequest'
required: true
security:
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LoginOutput'
examples:
LoginOutputExample:
value:
token: abc123def456ghi789
user:
id: 1
username: thrillseeker
email: user@example.com
first_name: John
last_name: Doe
message: Login successful
summary: Example login response
description: Successful login response with token and user data
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/auth/logout/:
post:
operationId: v1_auth_logout_create
description: Logout the current user and invalidate their token.
summary: User logout
tags:
- Authentication
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/LogoutOutputRequest'
examples:
LogoutOutputExample:
value:
message: Logout successful
summary: Example logout response
description: Successful logout response
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/LogoutOutputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/LogoutOutputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LogoutOutput'
examples:
LogoutOutputExample:
value:
message: Logout successful
summary: Example logout response
description: Successful logout response
description: ''
'401':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/auth/password/change/:
post:
operationId: v1_auth_password_change_create
description: Change the current user's password.
summary: Change password
tags:
- Authentication
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PasswordChangeInputRequest'
examples:
PasswordChangeInputExample:
value:
old_password: oldpassword123
new_password: newpassword456
new_password_confirm: newpassword456
summary: Example password change request
description: Change current user's password
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PasswordChangeInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PasswordChangeInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PasswordChangeOutput'
examples:
PasswordChangeOutputExample:
value:
detail: Password changed successfully
summary: Example password change response
description: Password changed successfully response
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
'401':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/auth/password/reset/:
post:
operationId: v1_auth_password_reset_create
description: Send a password reset email to the user.
summary: Request password reset
tags:
- Authentication
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PasswordResetInputRequest'
examples:
PasswordResetInputExample:
value:
email: user@example.com
summary: Example password reset request
description: Request password reset email
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PasswordResetInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PasswordResetInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PasswordResetOutput'
examples:
PasswordResetOutputExample:
value:
detail: Password reset email sent
summary: Example password reset response
description: Password reset email sent response
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/auth/providers/:
get:
operationId: v1_auth_providers_retrieve
description: Retrieve available social authentication providers.
summary: Get social providers
tags:
- Authentication
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/auth/signup/:
post:
operationId: v1_auth_signup_create
description: Register a new user account.
summary: User registration
tags:
- Authentication
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SignupInputRequest'
examples:
SignupInputExample:
value:
username: newuser
email: newuser@example.com
password: securepassword123
password_confirm: securepassword123
first_name: Jane
last_name: Smith
summary: Example registration request
description: Register a new user account
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/SignupInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/SignupInputRequest'
required: true
security:
- {}
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/SignupOutput'
examples:
SignupOutputExample:
value:
token: abc123def456ghi789
user:
id: 2
username: newuser
email: newuser@example.com
first_name: Jane
last_name: Smith
message: Registration successful
summary: Example registration response
description: Successful registration response with token and user
data
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/auth/status/:
post:
operationId: v1_auth_status_create
description: Check if user is authenticated and return user data.
summary: Check authentication status
tags:
- Authentication
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AuthStatusOutputRequest'
examples:
AuthStatusAuthenticatedExample:
value:
authenticated: true
user:
id: 1
username: thrillseeker
email: user@example.com
first_name: John
last_name: Doe
summary: Example authenticated status
description: Response when user is authenticated
AuthStatusUnauthenticatedExample:
value:
authenticated: false
user: null
summary: Example unauthenticated status
description: Response when user is not authenticated
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/AuthStatusOutputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/AuthStatusOutputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/AuthStatusOutput'
examples:
AuthStatusAuthenticatedExample:
value:
authenticated: true
user:
id: 1
username: thrillseeker
email: user@example.com
first_name: John
last_name: Doe
summary: Example authenticated status
description: Response when user is authenticated
AuthStatusUnauthenticatedExample:
value:
authenticated: false
user: null
summary: Example unauthenticated status
description: Response when user is not authenticated
description: ''
/api/v1/auth/user/:
get:
operationId: v1_auth_user_retrieve
description: Retrieve information about the currently authenticated user.
summary: Get current user
tags:
- Authentication
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UserOutput'
examples:
UserOutputExample:
value:
id: 1
username: thrillseeker
email: user@example.com
first_name: John
last_name: Doe
is_active: true
date_joined: '2024-01-01T00:00:00Z'
summary: Example user response
description: A typical user object in API responses
description: ''
'401':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/core/entities/not-found/:
post:
operationId: v1_core_entities_not_found_create
description: Handle entity not found scenarios with fuzzy matching suggestions
and authentication prompts
summary: Handle entity not found
tags:
- Core
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
description: No response body
/api/v1/core/entities/search/:
post:
operationId: v1_core_entities_search_create
description: Perform fuzzy entity search with authentication prompts for entity
creation
summary: Fuzzy entity search
tags:
- Core
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
description: No response body
/api/v1/core/entities/suggestions/:
get:
operationId: v1_core_entities_suggestions_retrieve
description: Lightweight endpoint for quick entity suggestions (e.g., autocomplete)
summary: Quick entity suggestions
tags:
- Core
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
description: No response body
/api/v1/email/send/:
post:
operationId: v1_email_send_create
description: Send an email via the email service.
summary: Send email
tags:
- Email
requestBody:
content:
type:
schema:
type: object
additionalProperties: {}
description: Unspecified request body
properties:
schema:
to:
type: string
format: email
description: Recipient email address
subject:
type: string
description: Email subject
text:
type: string
description: Email body text
from_email:
type: string
format: email
description: Sender email address (optional)
required:
schema:
type: object
additionalProperties: {}
description: Unspecified request body
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
properties:
message:
type: string
response:
type: object
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
'500':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/health/:
get:
operationId: v1_health_retrieve
description: Get comprehensive health check information including system metrics.
summary: Health check
tags:
- Health
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/HealthCheckOutput'
description: ''
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/HealthCheckOutput'
description: ''
/api/v1/health/performance/:
get:
operationId: v1_health_performance_retrieve
description: Get performance metrics and database analysis (debug mode only).
summary: Performance metrics
tags:
- Health
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PerformanceMetricsOutput'
description: ''
'403':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/health/simple/:
get:
operationId: v1_health_simple_retrieve
description: Simple health check endpoint for load balancers.
summary: Simple health check
tags:
- Health
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SimpleHealthOutput'
description: ''
'503':
content:
application/json:
schema:
$ref: '#/components/schemas/SimpleHealthOutput'
description: ''
/api/v1/history/parks/{park_slug}/:
get:
operationId: v1_history_parks_list
description: Retrieve history timeline for a specific park including all changes
over time.
summary: Get park history
parameters:
- in: query
name: end_date
schema:
type: string
format: date
description: Filter events before this date (YYYY-MM-DD)
- in: query
name: event_type
schema:
type: string
description: Filter by event type (created, updated, deleted)
- in: query
name: limit
schema:
type: integer
description: 'Number of history events to return (default: 50, max: 500)'
- in: query
name: offset
schema:
type: integer
description: Offset for pagination
- 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
- in: path
name: park_slug
schema:
type: string
required: true
- in: query
name: start_date
schema:
type: string
format: date
description: Filter events after this date (YYYY-MM-DD)
tags:
- History
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedParkHistoryEventList'
description: ''
/api/v1/history/parks/{park_slug}/detail/:
get:
operationId: v1_history_parks_detail_retrieve
description: Retrieve complete history for a park including current state and
timeline.
summary: Get complete park history
parameters:
- in: path
name: park_slug
schema:
type: string
required: true
tags:
- History
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ParkHistoryOutput'
description: ''
/api/v1/history/parks/{park_slug}/rides/{ride_slug}/:
get:
operationId: v1_history_parks_rides_list
description: Retrieve history timeline for a specific ride including all changes
over time.
summary: Get ride history
parameters:
- in: query
name: end_date
schema:
type: string
format: date
description: Filter events before this date (YYYY-MM-DD)
- in: query
name: event_type
schema:
type: string
description: Filter by event type (created, updated, deleted)
- in: query
name: limit
schema:
type: integer
description: 'Number of history events to return (default: 50, max: 500)'
- in: query
name: offset
schema:
type: integer
description: Offset for pagination
- 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
- in: path
name: park_slug
schema:
type: string
required: true
- in: path
name: ride_slug
schema:
type: string
required: true
- in: query
name: start_date
schema:
type: string
format: date
description: Filter events after this date (YYYY-MM-DD)
tags:
- History
- Rides
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedRideHistoryEventList'
description: ''
/api/v1/history/parks/{park_slug}/rides/{ride_slug}/detail/:
get:
operationId: v1_history_parks_rides_detail_retrieve
description: Retrieve complete history for a ride including current state and
timeline.
summary: Get complete ride history
parameters:
- in: path
name: park_slug
schema:
type: string
required: true
- in: path
name: ride_slug
schema:
type: string
required: true
tags:
- History
- Rides
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RideHistoryOutput'
description: ''
/api/v1/history/timeline/:
get:
operationId: v1_history_timeline_list
description: Retrieve a unified timeline of all changes across parks, rides,
and companies.
summary: Unified history timeline
parameters:
- in: query
name: end_date
schema:
type: string
format: date
description: Filter events before this date (YYYY-MM-DD)
- in: query
name: event_type
schema:
type: string
description: Filter by event type (created, updated, deleted)
- in: query
name: limit
schema:
type: integer
description: 'Number of history events to return (default: 100, max: 1000)'
- in: query
name: model_type
schema:
type: string
description: Filter by model type (park, ride, company)
- in: query
name: offset
schema:
type: integer
description: Offset for pagination
- 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
- in: query
name: significance
schema:
type: string
description: Filter by change significance (major, minor, routine)
- in: query
name: start_date
schema:
type: string
format: date
description: Filter events after this date (YYYY-MM-DD)
tags:
- History
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedUnifiedHistoryTimelineList'
description: ''
/api/v1/history/timeline/{id}/:
get:
operationId: v1_history_timeline_retrieve
description: Retrieve a specific item from the unified history timeline.
summary: Get unified history timeline item
parameters:
- in: path
name: id
schema:
type: string
required: true
tags:
- History
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/UnifiedHistoryTimeline'
description: ''
/api/v1/maps/bounds/:
get:
operationId: v1_maps_bounds_retrieve
description: Get locations within specific geographic bounds.
summary: Get locations within bounds
parameters:
- in: query
name: east
schema:
type: number
description: Eastern longitude bound
required: true
- in: query
name: north
schema:
type: number
description: Northern latitude bound
required: true
- in: query
name: south
schema:
type: number
description: Southern latitude bound
required: true
- in: query
name: types
schema:
type: string
description: Comma-separated location types (park,ride)
- in: query
name: west
schema:
type: number
description: Western longitude bound
required: true
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/maps/cache/:
post:
operationId: v1_maps_cache_create
description: Invalidate specific cache entries.
summary: Invalidate specific cache entries
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
delete:
operationId: v1_maps_cache_destroy
description: Clear all map cache (admin only).
summary: Clear map cache
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/maps/cache/invalidate/:
post:
operationId: v1_maps_cache_invalidate_create
description: Invalidate specific cache entries.
summary: Invalidate specific cache entries
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
delete:
operationId: v1_maps_cache_invalidate_destroy
description: Clear all map cache (admin only).
summary: Clear map cache
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/maps/locations/:
get:
operationId: v1_maps_locations_retrieve
description: Get map locations with optional clustering and filtering.
summary: Get map locations
parameters:
- in: query
name: cluster
schema:
type: boolean
description: 'Enable location clustering for high-density areas. Default:
false'
examples:
EnableClustering:
value: true
summary: Enable clustering
DisableClustering:
value: false
summary: Disable clustering
- in: query
name: east
schema:
type: number
description: Eastern longitude bound (-180 to 180). Must be greater than west
bound.
examples:
Example:
value: -82.6
- in: query
name: north
schema:
type: number
description: Northern latitude bound (-90 to 90). Used with south, east, west
to define geographic bounds.
examples:
Example:
value: 41.5
- in: query
name: q
schema:
type: string
description: Text search query. Searches park/ride names, cities, and states.
examples:
ParkName:
value: Cedar Point
summary: Park name
RideType:
value: roller coaster
summary: Ride type
Location:
value: Ohio
- in: query
name: south
schema:
type: number
description: Southern latitude bound (-90 to 90). Must be less than north
bound.
examples:
Example:
value: 41.4
- in: query
name: types
schema:
type: string
description: 'Comma-separated location types to include. Valid values: ''park'',
''ride''. Default: ''park,ride'''
examples:
AllTypes:
value: park,ride
summary: All types
ParksOnly:
value: park
summary: Parks only
RidesOnly:
value: ride
summary: Rides only
- in: query
name: west
schema:
type: number
description: Western longitude bound (-180 to 180). Used with other bounds
for geographic filtering.
examples:
Example:
value: -82.8
- in: query
name: zoom
schema:
type: integer
description: Map zoom level (1-20). Higher values show more detail. Used for
clustering decisions.
examples:
Example:
value: 10
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/MapLocationsResponse'
examples:
MapLocationsResponseExample:
value:
status: success
data:
locations:
- id: 1
type: park
name: Cedar Point
slug: cedar-point
latitude: 41.4793
longitude: -82.6833
status: OPERATING
clusters: []
bounds:
north: 41.5
south: 41.4
east: -82.6
west: -82.8
total_count: 1
clustered: false
summary: Example map locations response
description: Response containing locations and optional clusters
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'500':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/maps/locations/{location_type}/{location_id}/:
get:
operationId: v1_maps_locations_retrieve_2
description: Get detailed information about a specific location.
summary: Get location details
parameters:
- in: path
name: location_id
schema:
type: integer
description: ID of the location
required: true
- in: path
name: location_type
schema:
type: string
description: Type of location
required: true
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/MapLocationDetail'
examples:
MapLocationDetailExample:
value:
id: 1
type: park
name: Cedar Point
slug: cedar-point
description: America's Roller Coast
latitude: 41.4793
longitude: -82.6833
status: OPERATING
location:
street_address: 1 Cedar Point Dr
city: Sandusky
state: Ohio
country: United States
postal_code: '44870'
formatted_address: 1 Cedar Point Dr, Sandusky, Ohio, 44870,
United States
stats:
coaster_count: 17
ride_count: 70
average_rating: 4.5
nearby_locations: []
summary: Example map location detail response
description: Detailed information about a specific location
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'404':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'500':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/maps/search/:
get:
operationId: v1_maps_search_retrieve
description: Search locations by text query with optional bounds filtering.
summary: Search map locations
parameters:
- in: query
name: page
schema:
type: integer
description: Page number
- in: query
name: page_size
schema:
type: integer
description: Results per page
- in: query
name: q
schema:
type: string
description: Search query
required: true
- in: query
name: types
schema:
type: string
description: Comma-separated location types (park,ride)
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/MapSearchResponse'
examples:
MapSearchResponseExample:
value:
status: success
data:
results:
- id: 1
type: park
name: Cedar Point
slug: cedar-point
latitude: 41.4793
longitude: -82.6833
query: cedar point
total_count: 1
page: 1
page_size: 20
summary: Example map search response
description: Response containing search results
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'500':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/maps/stats/:
get:
operationId: v1_maps_stats_retrieve
description: Get map service statistics and performance metrics.
summary: Get map service statistics
tags:
- Maps
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/parks/:
get:
operationId: v1_parks_retrieve
description: List parks with basic filtering and pagination.
summary: List parks with filtering and pagination
parameters:
- in: query
name: country
schema:
type: string
- in: query
name: page
schema:
type: integer
- in: query
name: page_size
schema:
type: integer
- in: query
name: search
schema:
type: string
- in: query
name: state
schema:
type: string
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
post:
operationId: v1_parks_create
description: Create a new park.
summary: Create a new park
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'201':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/parks/{park_pk}/photos/:
get:
operationId: v1_parks_photos_list
description: Retrieve a paginated list of park photos with filtering capabilities.
summary: List park photos
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
- in: path
name: park_pk
schema:
type: integer
required: true
- name: search
required: false
in: query
description: A search term.
schema:
type: string
tags:
- Park Media
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedParkPhotoListOutputList'
description: ''
post:
operationId: v1_parks_photos_create
description: Upload a new photo for a park. Requires authentication.
summary: Upload park photo
parameters:
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoCreateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ParkPhotoCreateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ParkPhotoCreateInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoOutput'
examples:
ParkPhotoWithCloudflareImages:
value:
id: 456
image: https://imagedelivery.net/account-hash/def456ghi789/public
image_url: https://imagedelivery.net/account-hash/def456ghi789/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/def456ghi789/thumbnail
medium: https://imagedelivery.net/account-hash/def456ghi789/medium
large: https://imagedelivery.net/account-hash/def456ghi789/large
public: https://imagedelivery.net/account-hash/def456ghi789/public
caption: Beautiful park entrance
alt_text: Main entrance gate with decorative archway
is_primary: true
is_approved: true
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T11:00:00Z'
uploaded_by_username: parkfan456
file_size: 1536000
dimensions:
- 1600
- 900
park_slug: cedar-point
park_name: Cedar Point
summary: Complete park photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'401':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/parks/{park_pk}/photos/{id}/:
get:
operationId: v1_parks_photos_retrieve
description: Retrieve detailed information about a specific park photo.
summary: Get park photo details
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this park photo.
required: true
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoOutput'
examples:
ParkPhotoWithCloudflareImages:
value:
id: 456
image: https://imagedelivery.net/account-hash/def456ghi789/public
image_url: https://imagedelivery.net/account-hash/def456ghi789/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/def456ghi789/thumbnail
medium: https://imagedelivery.net/account-hash/def456ghi789/medium
large: https://imagedelivery.net/account-hash/def456ghi789/large
public: https://imagedelivery.net/account-hash/def456ghi789/public
caption: Beautiful park entrance
alt_text: Main entrance gate with decorative archway
is_primary: true
is_approved: true
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T11:00:00Z'
uploaded_by_username: parkfan456
file_size: 1536000
dimensions:
- 1600
- 900
park_slug: cedar-point
park_name: Cedar Point
summary: Complete park photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
description: ''
'404':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
put:
operationId: v1_parks_photos_update
description: Update park photo information. Requires authentication and ownership
or admin privileges.
summary: Update park photo
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this park photo.
required: true
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ParkPhotoUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ParkPhotoUpdateInputRequest'
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoOutput'
examples:
ParkPhotoWithCloudflareImages:
value:
id: 456
image: https://imagedelivery.net/account-hash/def456ghi789/public
image_url: https://imagedelivery.net/account-hash/def456ghi789/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/def456ghi789/thumbnail
medium: https://imagedelivery.net/account-hash/def456ghi789/medium
large: https://imagedelivery.net/account-hash/def456ghi789/large
public: https://imagedelivery.net/account-hash/def456ghi789/public
caption: Beautiful park entrance
alt_text: Main entrance gate with decorative archway
is_primary: true
is_approved: true
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T11:00:00Z'
uploaded_by_username: parkfan456
file_size: 1536000
dimensions:
- 1600
- 900
park_slug: cedar-point
park_name: Cedar Point
summary: Complete park photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'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: ''
patch:
operationId: v1_parks_photos_partial_update
description: Partially update park photo information. Requires authentication
and ownership or admin privileges.
summary: Partially update park photo
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this park photo.
required: true
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedParkPhotoUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedParkPhotoUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedParkPhotoUpdateInputRequest'
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoOutput'
examples:
ParkPhotoWithCloudflareImages:
value:
id: 456
image: https://imagedelivery.net/account-hash/def456ghi789/public
image_url: https://imagedelivery.net/account-hash/def456ghi789/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/def456ghi789/thumbnail
medium: https://imagedelivery.net/account-hash/def456ghi789/medium
large: https://imagedelivery.net/account-hash/def456ghi789/large
public: https://imagedelivery.net/account-hash/def456ghi789/public
caption: Beautiful park entrance
alt_text: Main entrance gate with decorative archway
is_primary: true
is_approved: true
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T11:00:00Z'
uploaded_by_username: parkfan456
file_size: 1536000
dimensions:
- 1600
- 900
park_slug: cedar-point
park_name: Cedar Point
summary: Complete park photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'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: ''
delete:
operationId: v1_parks_photos_destroy
description: Delete a park photo. Requires authentication and ownership or admin
privileges.
summary: Delete park photo
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this park photo.
required: true
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
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/{park_pk}/photos/{id}/set_primary/:
post:
operationId: v1_parks_photos_set_primary_create
description: Set this photo as the primary photo for the park
summary: Set photo as primary
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this park photo.
required: true
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoOutputRequest'
examples:
ParkPhotoWithCloudflareImages:
value:
id: 456
image: https://imagedelivery.net/account-hash/def456ghi789/public
image_url: https://imagedelivery.net/account-hash/def456ghi789/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/def456ghi789/thumbnail
medium: https://imagedelivery.net/account-hash/def456ghi789/medium
large: https://imagedelivery.net/account-hash/def456ghi789/large
public: https://imagedelivery.net/account-hash/def456ghi789/public
caption: Beautiful park entrance
alt_text: Main entrance gate with decorative archway
is_primary: true
is_approved: true
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T11:00:00Z'
uploaded_by_username: parkfan456
file_size: 1536000
dimensions:
- 1600
- 900
park_slug: cedar-point
park_name: Cedar Point
summary: Complete park photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ParkPhotoOutputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ParkPhotoOutputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'400':
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/{park_pk}/photos/{id}/set_primary_legacy/:
post:
operationId: v1_parks_photos_set_primary_legacy_create
description: Legacy set primary action for backwards compatibility
summary: Set photo as primary (legacy)
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this park photo.
required: true
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoOutputRequest'
examples:
ParkPhotoWithCloudflareImages:
value:
id: 456
image: https://imagedelivery.net/account-hash/def456ghi789/public
image_url: https://imagedelivery.net/account-hash/def456ghi789/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/def456ghi789/thumbnail
medium: https://imagedelivery.net/account-hash/def456ghi789/medium
large: https://imagedelivery.net/account-hash/def456ghi789/large
public: https://imagedelivery.net/account-hash/def456ghi789/public
caption: Beautiful park entrance
alt_text: Main entrance gate with decorative archway
is_primary: true
is_approved: true
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T11:00:00Z'
uploaded_by_username: parkfan456
file_size: 1536000
dimensions:
- 1600
- 900
park_slug: cedar-point
park_name: Cedar Point
summary: Complete park photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ParkPhotoOutputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ParkPhotoOutputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'403':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/parks/{park_pk}/photos/bulk_approve/:
post:
operationId: v1_parks_photos_bulk_approve_create
description: Bulk approve or reject multiple park photos (admin only)
summary: Bulk approve/reject photos
parameters:
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoApprovalInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/ParkPhotoApprovalInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/ParkPhotoApprovalInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'403':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/parks/{park_pk}/photos/stats/:
get:
operationId: v1_parks_photos_stats_retrieve
description: Get photo statistics for the park
summary: Get park photo statistics
parameters:
- in: path
name: park_pk
schema:
type: integer
required: true
tags:
- Park Media
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/ParkPhotoStatsOutput'
description: ''
'404':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'500':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/parks/{id}/:
get:
operationId: v1_parks_retrieve_2
summary: Retrieve, update or delete a park
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
put:
operationId: v1_parks_update
summary: Retrieve, update or delete a park
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
patch:
operationId: v1_parks_partial_update
summary: Retrieve, update or delete a park
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
delete:
operationId: v1_parks_destroy
summary: Retrieve, update or delete a park
parameters:
- in: path
name: id
schema:
type: integer
required: true
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: Unspecified response body
description: ''
/api/v1/parks/filter-options/:
get:
operationId: v1_parks_filter_options_retrieve
description: Return static/dynamic filter options used by the frontend.
summary: Get filter options for parks
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/parks/search-suggestions/:
get:
operationId: v1_parks_search_suggestions_retrieve
summary: Search suggestions for park search box
parameters:
- in: query
name: q
schema:
type: string
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
description: No response body
/api/v1/parks/search/companies/:
get:
operationId: v1_parks_search_companies_retrieve
summary: Search companies (operators/property owners) for autocomplete
parameters:
- in: query
name: q
schema:
type: string
tags:
- Parks
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rankings/:
get:
operationId: v1_rankings_list
description: Get the current ride rankings calculated using the Internet Roller
Coaster Poll algorithm.
summary: List ride rankings
parameters:
- in: query
name: category
schema:
type: string
enum:
- DR
- FR
- OT
- RC
- TR
- WR
description: Filter by ride category (RC, DR, FR, WR, TR, OT)
- in: query
name: min_riders
schema:
type: integer
description: Minimum number of mutual riders required
- in: query
name: ordering
schema:
type: string
description: Order results (rank, -rank, winning_percentage, -winning_percentage)
- name: page
required: false
in: query
description: A page number within the paginated result set.
schema:
type: integer
- in: query
name: park
schema:
type: string
description: Filter by park slug
- in: query
name: ride__category
schema:
type: string
enum:
- ''
- DR
- FR
- OT
- RC
- TR
- WR
description: |-
* `` - Select ride type
* `RC` - Roller Coaster
* `DR` - Dark Ride
* `FR` - Flat Ride
* `WR` - Water Ride
* `TR` - Transport
* `OT` - Other
tags:
- Rankings
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedRideRankingList'
examples:
RideRankingExample:
value:
count: 123
next: http://api.example.org/accounts/?page=4
previous: http://api.example.org/accounts/?page=2
results:
- id: 1
rank: 1
ride:
id: 123
name: Steel Vengeance
slug: steel-vengeance
park:
id: 45
name: Cedar Point
slug: cedar-point
category: RC
wins: 523
losses: 87
ties: 45
winning_percentage: 0.8234
mutual_riders_count: 1250
comparison_count: 655
average_rating: 9.2
last_calculated: '2024-01-15T02:00:00Z'
rank_change: 2
previous_rank: 3
summary: Example ranking response
description: A ride ranking with all metrics
description: ''
/api/v1/rankings/{ride_slug}/:
get:
operationId: v1_rankings_retrieve
description: Get detailed ranking information for a specific ride.
summary: Get ranking details
parameters:
- in: path
name: ride_slug
schema:
type: string
required: true
tags:
- Rankings
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RideRankingDetail'
description: ''
'404':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rankings/{ride_slug}/comparisons/:
get:
operationId: v1_rankings_comparisons_retrieve
description: Get head-to-head comparisons for a specific ride
summary: Get ride comparisons
parameters:
- in: path
name: ride_slug
schema:
type: string
required: true
tags:
- Rankings
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rankings/{ride_slug}/history/:
get:
operationId: v1_rankings_history_list
description: Get historical ranking data for a specific ride.
summary: Get ranking history
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
- in: query
name: ride__category
schema:
type: string
enum:
- ''
- DR
- FR
- OT
- RC
- TR
- WR
description: |-
* `` - Select ride type
* `RC` - Roller Coaster
* `DR` - Dark Ride
* `FR` - Flat Ride
* `WR` - Water Ride
* `TR` - Transport
* `OT` - Other
- in: path
name: ride_slug
schema:
type: string
required: true
tags:
- Rankings
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedRankingSnapshotList'
description: ''
/api/v1/rankings/calculate/:
post:
operationId: v1_rankings_calculate_create
description: Manually trigger a ranking calculation (admin only).
summary: Trigger ranking calculation
tags:
- Rankings
- Admin
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'403':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rankings/statistics/:
get:
operationId: v1_rankings_statistics_retrieve
description: Get overall statistics about the ranking system.
summary: Get ranking statistics
tags:
- Rankings
- Statistics
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RankingStats'
description: ''
/api/v1/rides/:
get:
operationId: v1_rides_list
description: List rides with basic filtering and pagination.
summary: List rides with filtering and pagination
parameters:
- in: query
name: page
schema:
type: integer
- in: query
name: page_size
schema:
type: integer
- in: query
name: park_slug
schema:
type: string
- in: query
name: search
schema:
type: string
tags:
- Rides
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/RideListOutput'
examples:
RideListExample:
value:
- 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.
summary: Create a new ride
tags:
- Rides
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: ''
/api/v1/rides/{id}/:
get:
operationId: v1_rides_retrieve
summary: Retrieve, update or delete a ride
parameters:
- in: path
name: id
schema:
type: integer
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: ''
put:
operationId: v1_rides_update
summary: Retrieve, update or delete a ride
parameters:
- in: path
name: id
schema:
type: integer
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: ''
patch:
operationId: v1_rides_partial_update
summary: Retrieve, update or delete a ride
parameters:
- in: path
name: id
schema:
type: integer
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: ''
delete:
operationId: v1_rides_destroy
summary: Retrieve, update or delete a ride
parameters:
- in: path
name: id
schema:
type: integer
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: ''
/api/v1/rides/{ride_pk}/photos/:
get:
operationId: v1_rides_photos_list
description: Retrieve a paginated list of ride photos with filtering capabilities.
summary: List ride photos
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
- in: path
name: ride_pk
schema:
type: integer
required: true
- name: search
required: false
in: query
description: A search term.
schema:
type: string
tags:
- Ride Media
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/PaginatedRidePhotoListOutputList'
description: ''
post:
operationId: v1_rides_photos_create
description: Upload a new photo for a ride. Requires authentication.
summary: Upload ride photo
parameters:
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoCreateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/RidePhotoCreateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/RidePhotoCreateInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoOutput'
examples:
RidePhotoWithCloudflareImages:
value:
id: 123
image: https://imagedelivery.net/account-hash/abc123def456/public
image_url: https://imagedelivery.net/account-hash/abc123def456/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/abc123def456/thumbnail
medium: https://imagedelivery.net/account-hash/abc123def456/medium
large: https://imagedelivery.net/account-hash/abc123def456/large
public: https://imagedelivery.net/account-hash/abc123def456/public
caption: Amazing roller coaster photo
alt_text: Steel roller coaster with multiple inversions
is_primary: true
is_approved: true
photo_type: exterior
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T10:00:00Z'
uploaded_by_username: photographer123
file_size: 2048576
dimensions:
- 1920
- 1080
ride_slug: steel-vengeance
ride_name: Steel Vengeance
park_slug: cedar-point
park_name: Cedar Point
summary: Complete ride photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'401':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rides/{ride_pk}/photos/{id}/:
get:
operationId: v1_rides_photos_retrieve
description: Retrieve detailed information about a specific ride photo.
summary: Get ride photo details
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this ride photo.
required: true
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoOutput'
examples:
RidePhotoWithCloudflareImages:
value:
id: 123
image: https://imagedelivery.net/account-hash/abc123def456/public
image_url: https://imagedelivery.net/account-hash/abc123def456/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/abc123def456/thumbnail
medium: https://imagedelivery.net/account-hash/abc123def456/medium
large: https://imagedelivery.net/account-hash/abc123def456/large
public: https://imagedelivery.net/account-hash/abc123def456/public
caption: Amazing roller coaster photo
alt_text: Steel roller coaster with multiple inversions
is_primary: true
is_approved: true
photo_type: exterior
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T10:00:00Z'
uploaded_by_username: photographer123
file_size: 2048576
dimensions:
- 1920
- 1080
ride_slug: steel-vengeance
ride_name: Steel Vengeance
park_slug: cedar-point
park_name: Cedar Point
summary: Complete ride photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
description: ''
'404':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
put:
operationId: v1_rides_photos_update
description: Update ride photo information. Requires authentication and ownership
or admin privileges.
summary: Update ride photo
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this ride photo.
required: true
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/RidePhotoUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/RidePhotoUpdateInputRequest'
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoOutput'
examples:
RidePhotoWithCloudflareImages:
value:
id: 123
image: https://imagedelivery.net/account-hash/abc123def456/public
image_url: https://imagedelivery.net/account-hash/abc123def456/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/abc123def456/thumbnail
medium: https://imagedelivery.net/account-hash/abc123def456/medium
large: https://imagedelivery.net/account-hash/abc123def456/large
public: https://imagedelivery.net/account-hash/abc123def456/public
caption: Amazing roller coaster photo
alt_text: Steel roller coaster with multiple inversions
is_primary: true
is_approved: true
photo_type: exterior
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T10:00:00Z'
uploaded_by_username: photographer123
file_size: 2048576
dimensions:
- 1920
- 1080
ride_slug: steel-vengeance
ride_name: Steel Vengeance
park_slug: cedar-point
park_name: Cedar Point
summary: Complete ride photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'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: ''
patch:
operationId: v1_rides_photos_partial_update
description: Partially update ride photo information. Requires authentication
and ownership or admin privileges.
summary: Partially update ride photo
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this ride photo.
required: true
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/PatchedRidePhotoUpdateInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/PatchedRidePhotoUpdateInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/PatchedRidePhotoUpdateInputRequest'
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoOutput'
examples:
RidePhotoWithCloudflareImages:
value:
id: 123
image: https://imagedelivery.net/account-hash/abc123def456/public
image_url: https://imagedelivery.net/account-hash/abc123def456/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/abc123def456/thumbnail
medium: https://imagedelivery.net/account-hash/abc123def456/medium
large: https://imagedelivery.net/account-hash/abc123def456/large
public: https://imagedelivery.net/account-hash/abc123def456/public
caption: Amazing roller coaster photo
alt_text: Steel roller coaster with multiple inversions
is_primary: true
is_approved: true
photo_type: exterior
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T10:00:00Z'
uploaded_by_username: photographer123
file_size: 2048576
dimensions:
- 1920
- 1080
ride_slug: steel-vengeance
ride_name: Steel Vengeance
park_slug: cedar-point
park_name: Cedar Point
summary: Complete ride photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'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: ''
delete:
operationId: v1_rides_photos_destroy
description: Delete a ride photo. Requires authentication and ownership or admin
privileges.
summary: Delete ride photo
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this ride photo.
required: true
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
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/{ride_pk}/photos/{id}/set_primary/:
post:
operationId: v1_rides_photos_set_primary_create
description: Set this photo as the primary photo for the ride
summary: Set photo as primary
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this ride photo.
required: true
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoOutputRequest'
examples:
RidePhotoWithCloudflareImages:
value:
id: 123
image: https://imagedelivery.net/account-hash/abc123def456/public
image_url: https://imagedelivery.net/account-hash/abc123def456/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/abc123def456/thumbnail
medium: https://imagedelivery.net/account-hash/abc123def456/medium
large: https://imagedelivery.net/account-hash/abc123def456/large
public: https://imagedelivery.net/account-hash/abc123def456/public
caption: Amazing roller coaster photo
alt_text: Steel roller coaster with multiple inversions
is_primary: true
is_approved: true
photo_type: exterior
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T10:00:00Z'
uploaded_by_username: photographer123
file_size: 2048576
dimensions:
- 1920
- 1080
ride_slug: steel-vengeance
ride_name: Steel Vengeance
park_slug: cedar-point
park_name: Cedar Point
summary: Complete ride photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/RidePhotoOutputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/RidePhotoOutputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'400':
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/{ride_pk}/photos/{id}/set_primary_legacy/:
post:
operationId: v1_rides_photos_set_primary_legacy_create
description: Legacy set primary action for backwards compatibility
summary: Set photo as primary (legacy)
parameters:
- in: path
name: id
schema:
type: integer
description: A unique integer value identifying this ride photo.
required: true
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoOutputRequest'
examples:
RidePhotoWithCloudflareImages:
value:
id: 123
image: https://imagedelivery.net/account-hash/abc123def456/public
image_url: https://imagedelivery.net/account-hash/abc123def456/public
image_variants:
thumbnail: https://imagedelivery.net/account-hash/abc123def456/thumbnail
medium: https://imagedelivery.net/account-hash/abc123def456/medium
large: https://imagedelivery.net/account-hash/abc123def456/large
public: https://imagedelivery.net/account-hash/abc123def456/public
caption: Amazing roller coaster photo
alt_text: Steel roller coaster with multiple inversions
is_primary: true
is_approved: true
photo_type: exterior
created_at: '2023-01-01T12:00:00Z'
updated_at: '2023-01-01T12:00:00Z'
date_taken: '2023-01-01T10:00:00Z'
uploaded_by_username: photographer123
file_size: 2048576
dimensions:
- 1920
- 1080
ride_slug: steel-vengeance
ride_name: Steel Vengeance
park_slug: cedar-point
park_name: Cedar Point
summary: Complete ride photo response
description: Example response showing all fields including Cloudflare
Images URLs and variants
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/RidePhotoOutputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/RidePhotoOutputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'403':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rides/{ride_pk}/photos/bulk_approve/:
post:
operationId: v1_rides_photos_bulk_approve_create
description: Bulk approve or reject multiple ride photos (admin only)
summary: Bulk approve/reject photos
parameters:
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoApprovalInputRequest'
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/RidePhotoApprovalInputRequest'
multipart/form-data:
schema:
$ref: '#/components/schemas/RidePhotoApprovalInputRequest'
required: true
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'400':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'403':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rides/{ride_pk}/photos/stats/:
get:
operationId: v1_rides_photos_stats_retrieve
description: Get photo statistics for the ride
summary: Get ride photo statistics
parameters:
- in: path
name: ride_pk
schema:
type: integer
required: true
tags:
- Ride Media
security:
- cookieAuth: []
- tokenAuth: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/RidePhotoStatsOutput'
description: ''
'404':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
'500':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rides/filter-options/:
get:
operationId: v1_rides_filter_options_retrieve
description: Return static/dynamic filter options used by the frontend.
summary: Get filter options for rides
tags:
- Rides
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rides/search-suggestions/:
get:
operationId: v1_rides_search_suggestions_retrieve
summary: Search suggestions for ride search box
parameters:
- in: query
name: q
schema:
type: string
tags:
- Rides
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
description: No response body
/api/v1/rides/search/companies/:
get:
operationId: v1_rides_search_companies_retrieve
summary: Search companies (manufacturers/designers) for autocomplete
parameters:
- in: query
name: q
schema:
type: string
tags:
- Rides
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/rides/search/ride-models/:
get:
operationId: v1_rides_search_ride_models_retrieve
summary: Search ride models for autocomplete
parameters:
- in: query
name: q
schema:
type: string
tags:
- Rides
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
description: No response body
/api/v1/stats/:
get:
operationId: get_platform_stats
description: "Returns comprehensive aggregate statistics about the ThrillWiki\
\ platform.\n \n This endpoint provides detailed counts and\
\ breakdowns of all major entities including:\n - Parks, rides, and\
\ roller coasters\n - Companies (manufacturers, operators, designers,\
\ property owners)\n - Photos and reviews\n - Ride categories\
\ (roller coasters, dark rides, flat rides, etc.)\n - Status breakdowns\
\ (operating, closed, under construction, etc.)\n \n Results\
\ are cached for 5 minutes for optimal performance and automatically \n \
\ invalidated when relevant data changes.\n \n **No authentication\
\ required** - this is a public endpoint."
summary: Get platform statistics
tags:
- Statistics
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/Stats'
examples:
SampleResponse:
value:
total_parks: 7
total_rides: 10
total_manufacturers: 6
total_operators: 7
total_designers: 4
total_property_owners: 0
total_roller_coasters: 8
total_photos: 0
total_park_photos: 0
total_ride_photos: 0
total_reviews: 8
total_park_reviews: 4
total_ride_reviews: 4
roller_coasters: 10
operating_parks: 7
operating_rides: 10
last_updated: '2025-08-28T17:34:59.677143+00:00'
relative_last_updated: just now
summary: Sample Response
description: Example of platform statistics response
description: ''
'500':
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: Error message if statistics calculation fails
description: ''
/api/v1/trending/content/:
get:
operationId: v1_trending_content_retrieve
description: Retrieve trending parks and rides based on view counts, ratings,
and recency.
summary: Get trending content
parameters:
- in: query
name: limit
schema:
type: integer
default: 20
description: 'Number of trending items to return (default: 20, max: 100)'
- in: query
name: timeframe
schema:
type: string
enum:
- day
- month
- week
default: week
description: 'Timeframe for trending calculation (day, week, month) - default:
week'
tags:
- Trending
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
/api/v1/trending/new/:
get:
operationId: v1_trending_new_retrieve
description: Retrieve recently added parks and rides.
summary: Get new content
parameters:
- in: query
name: days
schema:
type: integer
default: 30
description: 'Number of days to look back for new content (default: 30, max:
365)'
- in: query
name: limit
schema:
type: integer
default: 20
description: 'Number of new items to return (default: 20, max: 100)'
tags:
- Trending
security:
- cookieAuth: []
- tokenAuth: []
- {}
responses:
'200':
content:
application/json:
schema:
type: object
additionalProperties: {}
description: ''
components:
schemas:
AuthStatusOutput:
type: object
description: Output serializer for authentication status.
properties:
authenticated:
type: boolean
description: Whether user is authenticated
user:
allOf:
- $ref: '#/components/schemas/UserOutput'
nullable: true
description: User information if authenticated
required:
- authenticated
- user
AuthStatusOutputRequest:
type: object
description: Output serializer for authentication status.
properties:
authenticated:
type: boolean
description: Whether user is authenticated
user:
allOf:
- $ref: '#/components/schemas/UserOutputRequest'
nullable: true
description: User information if authenticated
required:
- authenticated
- user
CategoryEnum:
enum:
- RC
- DR
- FR
- WR
- PK
type: string
description: |-
* `RC` - Roller Coaster
* `DR` - Dark Ride
* `FR` - Flat Ride
* `WR` - Water Ride
* `PK` - Park
HealthCheckOutput:
type: object
description: Output serializer for health check responses.
properties:
status:
$ref: '#/components/schemas/HealthCheckOutputStatusEnum'
timestamp:
type: string
format: date-time
version:
type: string
environment:
type: string
response_time_ms:
type: number
format: double
checks:
type: object
additionalProperties: {}
metrics:
type: object
additionalProperties: {}
required:
- checks
- environment
- metrics
- response_time_ms
- status
- timestamp
- version
HealthCheckOutputStatusEnum:
enum:
- healthy
- unhealthy
type: string
description: |-
* `healthy` - healthy
* `unhealthy` - unhealthy
HistorySummary:
type: object
description: Serializer for history summary information.
properties:
total_events:
type: integer
first_recorded:
type: string
format: date-time
nullable: true
last_modified:
type: string
format: date-time
nullable: true
required:
- first_recorded
- last_modified
- total_events
LoginInputRequest:
type: object
description: Input serializer for user login.
properties:
username:
type: string
minLength: 1
description: Username or email address
maxLength: 150
password:
type: string
writeOnly: true
minLength: 1
description: User password
required:
- password
- username
LoginOutput:
type: object
description: Output serializer for login response.
properties:
token:
type: string
description: Authentication token
user:
allOf:
- $ref: '#/components/schemas/UserOutput'
description: User information
message:
type: string
description: Success message
required:
- message
- token
- user
LogoutOutput:
type: object
description: Output serializer for logout response.
properties:
message:
type: string
description: Success message
required:
- message
LogoutOutputRequest:
type: object
description: Output serializer for logout response.
properties:
message:
type: string
minLength: 1
description: Success message
required:
- message
MapLocationDetail:
type: object
description: Serializer for detailed map location information.
properties:
id:
type: integer
type:
type: string
name:
type: string
slug:
type: string
description:
type: string
latitude:
type: number
format: double
nullable: true
longitude:
type: number
format: double
nullable: true
status:
type: string
location:
type: object
additionalProperties: {}
readOnly: true
stats:
type: object
additionalProperties: {}
readOnly: true
nearby_locations:
type: array
items:
type: object
additionalProperties: {}
readOnly: true
required:
- description
- id
- latitude
- location
- longitude
- name
- nearby_locations
- slug
- stats
- status
- type
MapLocationsResponse:
type: object
description: Response serializer for map locations endpoint.
properties:
status:
type: string
default: success
locations:
type: array
items:
type: object
additionalProperties: {}
clusters:
type: array
items:
type: object
additionalProperties: {}
bounds:
type: object
additionalProperties: {}
total_count:
type: integer
default: 0
clustered:
type: boolean
default: false
required:
- locations
MapSearchResponse:
type: object
description: Response serializer for map search endpoint.
properties:
status:
type: string
default: success
results:
type: array
items:
type: object
additionalProperties: {}
query:
type: string
total_count:
type: integer
default: 0
page:
type: integer
default: 1
page_size:
type: integer
default: 20
required:
- query
- results
PaginatedParkHistoryEventList:
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/ParkHistoryEvent'
PaginatedParkPhotoListOutputList:
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/ParkPhotoListOutput'
PaginatedRankingSnapshotList:
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/RankingSnapshot'
PaginatedRideHistoryEventList:
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/RideHistoryEvent'
PaginatedRidePhotoListOutputList:
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/RidePhotoListOutput'
PaginatedRideRankingList:
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/RideRanking'
PaginatedTopListItemOutputList:
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/TopListItemOutput'
PaginatedTopListOutputList:
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/TopListOutput'
PaginatedUnifiedHistoryTimelineList:
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/UnifiedHistoryTimeline'
PaginatedUserProfileOutputList:
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/UserProfileOutput'
ParkHistoryEvent:
type: object
description: Serializer for park history events.
properties:
pgh_id:
type: integer
readOnly: true
pgh_created_at:
type: string
format: date-time
readOnly: true
pgh_label:
type: string
readOnly: true
pgh_obj_id:
type: integer
readOnly: true
pgh_context:
readOnly: true
nullable: true
pgh_data:
readOnly: true
event_type:
type: string
readOnly: true
changes:
type: object
additionalProperties: {}
readOnly: true
required:
- changes
- event_type
- pgh_context
- pgh_created_at
- pgh_data
- pgh_id
- pgh_label
- pgh_obj_id
ParkHistoryOutput:
type: object
description: Output serializer for complete park history.
properties:
park:
type: object
additionalProperties: {}
readOnly: true
current_state:
type: object
additionalProperties: {}
readOnly: true
summary:
$ref: '#/components/schemas/HistorySummary'
events:
type: array
items:
$ref: '#/components/schemas/ParkHistoryEvent'
required:
- current_state
- events
- park
- summary
ParkPhotoApprovalInputRequest:
type: object
description: Input serializer for bulk photo approval operations.
properties:
photo_ids:
type: array
items:
type: integer
description: List of photo IDs to approve
approve:
type: boolean
default: true
description: Whether to approve (True) or reject (False) the photos
required:
- photo_ids
ParkPhotoCreateInputRequest:
type: object
description: Input serializer for creating park photos.
properties:
image:
type: string
format: binary
description: Park photo stored on Cloudflare Images
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
is_primary:
type: boolean
required:
- image
ParkPhotoListOutput:
type: object
description: Optimized output serializer for park photo lists.
properties:
id:
type: integer
readOnly: true
image:
type: string
format: uri
readOnly: true
description: Park photo stored on Cloudflare Images
caption:
type: string
readOnly: true
is_primary:
type: boolean
readOnly: true
is_approved:
type: boolean
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
uploaded_by_username:
type: string
readOnly: true
required:
- caption
- created_at
- id
- image
- is_approved
- is_primary
- uploaded_by_username
ParkPhotoOutput:
type: object
description: Enhanced output serializer for park photos with Cloudflare Images
support.
properties:
id:
type: integer
readOnly: true
image:
type: string
format: uri
description: Park photo stored on Cloudflare Images
image_url:
type: string
format: uri
nullable: true
description: Full URL to the Cloudflare Images asset
readOnly: true
image_variants:
type: object
additionalProperties:
type: string
format: uri
description: Available Cloudflare Images variants with their URLs
readOnly: true
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
is_primary:
type: boolean
is_approved:
type: boolean
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
date_taken:
type: string
format: date-time
nullable: true
uploaded_by_username:
type: string
readOnly: true
file_size:
type: integer
nullable: true
description: File size in bytes
readOnly: true
dimensions:
type: array
items:
type: integer
nullable: true
description: Image dimensions as [width, height] in pixels
readOnly: true
park_slug:
type: string
readOnly: true
park_name:
type: string
readOnly: true
required:
- created_at
- dimensions
- file_size
- id
- image
- image_url
- image_variants
- park_name
- park_slug
- updated_at
- uploaded_by_username
ParkPhotoOutputRequest:
type: object
description: Enhanced output serializer for park photos with Cloudflare Images
support.
properties:
image:
type: string
format: binary
description: Park photo stored on Cloudflare Images
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
is_primary:
type: boolean
is_approved:
type: boolean
date_taken:
type: string
format: date-time
nullable: true
required:
- image
ParkPhotoStatsOutput:
type: object
description: Output serializer for park photo statistics.
properties:
total_photos:
type: integer
approved_photos:
type: integer
pending_photos:
type: integer
has_primary:
type: boolean
recent_uploads:
type: integer
required:
- approved_photos
- has_primary
- pending_photos
- recent_uploads
- total_photos
ParkPhotoUpdateInputRequest:
type: object
description: Input serializer for updating park photos.
properties:
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
is_primary:
type: boolean
PasswordChangeInputRequest:
type: object
description: Input serializer for password change.
properties:
old_password:
type: string
writeOnly: true
minLength: 1
description: Current password
new_password:
type: string
writeOnly: true
minLength: 1
description: New password
new_password_confirm:
type: string
writeOnly: true
minLength: 1
description: New password confirmation
required:
- new_password
- new_password_confirm
- old_password
PasswordChangeOutput:
type: object
description: Output serializer for password change response.
properties:
detail:
type: string
description: Success message
required:
- detail
PasswordResetInputRequest:
type: object
description: Input serializer for password reset request.
properties:
email:
type: string
format: email
minLength: 1
description: Email address for password reset
required:
- email
PasswordResetOutput:
type: object
description: Output serializer for password reset response.
properties:
detail:
type: string
description: Success message
required:
- detail
PatchedParkPhotoUpdateInputRequest:
type: object
description: Input serializer for updating park photos.
properties:
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
is_primary:
type: boolean
PatchedRidePhotoUpdateInputRequest:
type: object
description: Input serializer for updating ride photos.
properties:
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
photo_type:
$ref: '#/components/schemas/PhotoTypeEnum'
is_primary:
type: boolean
PatchedTopListItemUpdateInputRequest:
type: object
properties:
object_id:
type: integer
maximum: 2147483647
minimum: 0
rank:
type: integer
maximum: 2147483647
minimum: 0
notes:
type: string
top_list:
type: integer
content_type:
type: integer
PatchedTopListUpdateInputRequest:
type: object
properties:
title:
type: string
minLength: 1
maxLength: 100
category:
$ref: '#/components/schemas/CategoryEnum'
description:
type: string
PatchedUserProfileUpdateInputRequest:
type: object
properties:
display_name:
type: string
minLength: 1
description: This is the name that will be displayed on the site
maxLength: 50
avatar:
type: string
format: binary
pronouns:
type: string
maxLength: 50
bio:
type: string
maxLength: 500
twitter:
type: string
format: uri
maxLength: 200
instagram:
type: string
format: uri
maxLength: 200
youtube:
type: string
format: uri
maxLength: 200
discord:
type: string
maxLength: 100
coaster_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
dark_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
flat_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
water_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
PerformanceMetricsOutput:
type: object
description: Output serializer for performance metrics.
properties:
timestamp:
type: string
format: date-time
database_analysis:
type: object
additionalProperties: {}
cache_performance:
type: object
additionalProperties: {}
recent_slow_queries:
type: array
items: {}
required:
- cache_performance
- database_analysis
- recent_slow_queries
- timestamp
PhotoTypeEnum:
enum:
- exterior
- queue
- station
- onride
- construction
- other
type: string
description: |-
* `exterior` - Exterior View
* `queue` - Queue Area
* `station` - Station
* `onride` - On-Ride
* `construction` - Construction
* `other` - Other
RankingSnapshot:
type: object
description: Serializer for ranking history snapshots.
properties:
id:
type: integer
readOnly: true
ride:
type: integer
ride_name:
type: string
readOnly: true
park_name:
type: string
readOnly: true
rank:
type: integer
maximum: 2147483647
minimum: 0
winning_percentage:
type: string
format: decimal
pattern: ^-?\d{0,1}(?:\.\d{0,4})?$
snapshot_date:
type: string
format: date
description: Date when this ranking snapshot was taken
required:
- id
- park_name
- rank
- ride
- ride_name
- snapshot_date
- winning_percentage
RankingStats:
type: object
description: Serializer for ranking system statistics.
properties:
total_ranked_rides:
type: integer
total_comparisons:
type: integer
last_calculation_time:
type: string
format: date-time
calculation_duration:
type: number
format: double
top_rated_ride:
type: object
additionalProperties: {}
most_compared_ride:
type: object
additionalProperties: {}
biggest_rank_change:
type: object
additionalProperties: {}
required:
- biggest_rank_change
- calculation_duration
- last_calculation_time
- most_compared_ride
- top_rated_ride
- total_comparisons
- total_ranked_rides
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: object
additionalProperties: {}
nullable: true
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: object
additionalProperties: {}
nullable: true
readOnly: true
designer:
type: object
additionalProperties: {}
nullable: true
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
RideHistoryEvent:
type: object
description: Serializer for ride history events.
properties:
pgh_id:
type: integer
readOnly: true
pgh_created_at:
type: string
format: date-time
readOnly: true
pgh_label:
type: string
readOnly: true
pgh_obj_id:
type: integer
readOnly: true
pgh_context:
readOnly: true
nullable: true
pgh_data:
readOnly: true
event_type:
type: string
readOnly: true
changes:
type: object
additionalProperties: {}
readOnly: true
required:
- changes
- event_type
- pgh_context
- pgh_created_at
- pgh_data
- pgh_id
- pgh_label
- pgh_obj_id
RideHistoryOutput:
type: object
description: Output serializer for complete ride history.
properties:
ride:
type: object
additionalProperties: {}
readOnly: true
current_state:
type: object
additionalProperties: {}
readOnly: true
summary:
$ref: '#/components/schemas/HistorySummary'
events:
type: array
items:
$ref: '#/components/schemas/RideHistoryEvent'
required:
- current_state
- events
- ride
- summary
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: object
additionalProperties: {}
nullable: true
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
RidePhotoApprovalInputRequest:
type: object
description: Input serializer for photo approval operations.
properties:
photo_ids:
type: array
items:
type: integer
description: List of photo IDs to approve
approve:
type: boolean
default: true
description: Whether to approve (True) or reject (False) the photos
required:
- photo_ids
RidePhotoCreateInputRequest:
type: object
description: Input serializer for creating ride photos.
properties:
image:
type: string
format: binary
description: Ride photo stored on Cloudflare Images
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
photo_type:
$ref: '#/components/schemas/PhotoTypeEnum'
is_primary:
type: boolean
required:
- image
RidePhotoListOutput:
type: object
description: Simplified output serializer for ride photo lists.
properties:
id:
type: integer
readOnly: true
image:
type: string
format: uri
readOnly: true
description: Ride photo stored on Cloudflare Images
caption:
type: string
readOnly: true
photo_type:
allOf:
- $ref: '#/components/schemas/PhotoTypeEnum'
readOnly: true
is_primary:
type: boolean
readOnly: true
is_approved:
type: boolean
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
uploaded_by_username:
type: string
readOnly: true
required:
- caption
- created_at
- id
- image
- is_approved
- is_primary
- photo_type
- uploaded_by_username
RidePhotoOutput:
type: object
description: Output serializer for ride photos with Cloudflare Images support.
properties:
id:
type: integer
readOnly: true
image:
type: string
format: uri
description: Ride photo stored on Cloudflare Images
image_url:
type: string
format: uri
nullable: true
description: Full URL to the Cloudflare Images asset
readOnly: true
image_variants:
type: object
additionalProperties:
type: string
format: uri
description: Available Cloudflare Images variants with their URLs
readOnly: true
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
is_primary:
type: boolean
is_approved:
type: boolean
photo_type:
$ref: '#/components/schemas/PhotoTypeEnum'
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
date_taken:
type: string
format: date-time
nullable: true
uploaded_by_username:
type: string
readOnly: true
file_size:
type: integer
nullable: true
description: File size in bytes
readOnly: true
dimensions:
type: array
items:
type: integer
nullable: true
description: Image dimensions as [width, height] in pixels
readOnly: true
ride_slug:
type: string
readOnly: true
ride_name:
type: string
readOnly: true
park_slug:
type: string
readOnly: true
park_name:
type: string
readOnly: true
required:
- created_at
- dimensions
- file_size
- id
- image
- image_url
- image_variants
- park_name
- park_slug
- ride_name
- ride_slug
- updated_at
- uploaded_by_username
RidePhotoOutputRequest:
type: object
description: Output serializer for ride photos with Cloudflare Images support.
properties:
image:
type: string
format: binary
description: Ride photo stored on Cloudflare Images
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
is_primary:
type: boolean
is_approved:
type: boolean
photo_type:
$ref: '#/components/schemas/PhotoTypeEnum'
date_taken:
type: string
format: date-time
nullable: true
required:
- image
RidePhotoStatsOutput:
type: object
description: Output serializer for ride photo statistics.
properties:
total_photos:
type: integer
approved_photos:
type: integer
pending_photos:
type: integer
has_primary:
type: boolean
recent_uploads:
type: integer
by_type:
type: object
additionalProperties:
type: integer
description: Photo counts by type
required:
- approved_photos
- by_type
- has_primary
- pending_photos
- recent_uploads
- total_photos
RidePhotoUpdateInputRequest:
type: object
description: Input serializer for updating ride photos.
properties:
caption:
type: string
maxLength: 255
alt_text:
type: string
maxLength: 255
photo_type:
$ref: '#/components/schemas/PhotoTypeEnum'
is_primary:
type: boolean
RideRanking:
type: object
description: Serializer for ride rankings.
properties:
id:
type: integer
readOnly: true
rank:
type: integer
maximum: 2147483647
minimum: 0
description: Overall rank position (1 = best)
ride:
type: object
additionalProperties: {}
readOnly: true
wins:
type: integer
maximum: 2147483647
minimum: 0
description: Number of rides this ride beats in pairwise comparisons
losses:
type: integer
maximum: 2147483647
minimum: 0
description: Number of rides that beat this ride in pairwise comparisons
ties:
type: integer
maximum: 2147483647
minimum: 0
description: Number of rides with equal preference in pairwise comparisons
winning_percentage:
type: string
format: decimal
pattern: ^-?\d{0,1}(?:\.\d{0,4})?$
description: Win percentage where ties count as 0.5
mutual_riders_count:
type: integer
maximum: 2147483647
minimum: 0
description: Total number of users who have rated this ride
comparison_count:
type: integer
maximum: 2147483647
minimum: 0
description: Number of other rides this was compared against
average_rating:
type: string
format: decimal
pattern: ^-?\d{0,1}(?:\.\d{0,2})?$
nullable: true
description: Average rating from all users who have rated this ride
last_calculated:
type: string
format: date-time
description: When this ranking was last calculated
rank_change:
type: integer
nullable: true
readOnly: true
previous_rank:
type: integer
nullable: true
readOnly: true
required:
- id
- previous_rank
- rank
- rank_change
- ride
- winning_percentage
RideRankingDetail:
type: object
description: Detailed serializer for a specific ride's ranking.
properties:
id:
type: integer
readOnly: true
rank:
type: integer
maximum: 2147483647
minimum: 0
description: Overall rank position (1 = best)
ride:
type: object
additionalProperties: {}
readOnly: true
wins:
type: integer
maximum: 2147483647
minimum: 0
description: Number of rides this ride beats in pairwise comparisons
losses:
type: integer
maximum: 2147483647
minimum: 0
description: Number of rides that beat this ride in pairwise comparisons
ties:
type: integer
maximum: 2147483647
minimum: 0
description: Number of rides with equal preference in pairwise comparisons
winning_percentage:
type: string
format: decimal
pattern: ^-?\d{0,1}(?:\.\d{0,4})?$
description: Win percentage where ties count as 0.5
mutual_riders_count:
type: integer
maximum: 2147483647
minimum: 0
description: Total number of users who have rated this ride
comparison_count:
type: integer
maximum: 2147483647
minimum: 0
description: Number of other rides this was compared against
average_rating:
type: string
format: decimal
pattern: ^-?\d{0,1}(?:\.\d{0,2})?$
nullable: true
description: Average rating from all users who have rated this ride
last_calculated:
type: string
format: date-time
description: When this ranking was last calculated
calculation_version:
type: string
description: Algorithm version used for calculation
maxLength: 10
head_to_head_comparisons:
type: array
items:
type: object
additionalProperties: {}
readOnly: true
ranking_history:
type: array
items:
type: object
additionalProperties: {}
readOnly: true
required:
- head_to_head_comparisons
- id
- rank
- ranking_history
- ride
- winning_percentage
SignupInputRequest:
type: object
description: Input serializer for user registration.
properties:
username:
type: string
minLength: 1
description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
pattern: ^[\w.@+-]+$
maxLength: 150
email:
type: string
format: email
title: Email address
maxLength: 254
password:
type: string
writeOnly: true
minLength: 1
description: User password
password_confirm:
type: string
writeOnly: true
minLength: 1
description: Password confirmation
first_name:
type: string
maxLength: 150
last_name:
type: string
maxLength: 150
required:
- password
- password_confirm
- username
SignupOutput:
type: object
description: Output serializer for registration response.
properties:
token:
type: string
description: Authentication token
user:
allOf:
- $ref: '#/components/schemas/UserOutput'
description: User information
message:
type: string
description: Success message
required:
- message
- token
- user
SimpleHealthOutput:
type: object
description: Output serializer for simple health check.
properties:
status:
$ref: '#/components/schemas/SimpleHealthOutputStatusEnum'
timestamp:
type: string
format: date-time
error:
type: string
required:
- status
- timestamp
SimpleHealthOutputStatusEnum:
enum:
- ok
- error
type: string
description: |-
* `ok` - ok
* `error` - error
Stats:
type: object
description: |-
Serializer for platform statistics response.
This serializer defines the structure of the statistics API response,
including all the various counts and breakdowns available.
properties:
total_parks:
type: integer
description: Total number of parks in the database
total_rides:
type: integer
description: Total number of rides in the database
total_manufacturers:
type: integer
description: Total number of ride manufacturers
total_operators:
type: integer
description: Total number of park operators
total_designers:
type: integer
description: Total number of ride designers
total_property_owners:
type: integer
description: Total number of property owners
total_roller_coasters:
type: integer
description: Total number of roller coasters with detailed stats
total_photos:
type: integer
description: Total number of photos (parks + rides combined)
total_park_photos:
type: integer
description: Total number of park photos
total_ride_photos:
type: integer
description: Total number of ride photos
total_reviews:
type: integer
description: Total number of reviews (parks + rides)
total_park_reviews:
type: integer
description: Total number of park reviews
total_ride_reviews:
type: integer
description: Total number of ride reviews
roller_coasters:
type: integer
description: Number of rides categorized as roller coasters
dark_rides:
type: integer
description: Number of rides categorized as dark rides
flat_rides:
type: integer
description: Number of rides categorized as flat rides
water_rides:
type: integer
description: Number of rides categorized as water rides
transport_rides:
type: integer
description: Number of rides categorized as transport rides
other_rides:
type: integer
description: Number of rides categorized as other
operating_parks:
type: integer
description: Number of currently operating parks
temporarily_closed_parks:
type: integer
description: Number of temporarily closed parks
permanently_closed_parks:
type: integer
description: Number of permanently closed parks
under_construction_parks:
type: integer
description: Number of parks under construction
demolished_parks:
type: integer
description: Number of demolished parks
relocated_parks:
type: integer
description: Number of relocated parks
operating_rides:
type: integer
description: Number of currently operating rides
temporarily_closed_rides:
type: integer
description: Number of temporarily closed rides
sbno_rides:
type: integer
description: Number of rides standing but not operating
closing_rides:
type: integer
description: Number of rides in the process of closing
permanently_closed_rides:
type: integer
description: Number of permanently closed rides
under_construction_rides:
type: integer
description: Number of rides under construction
demolished_rides:
type: integer
description: Number of demolished rides
relocated_rides:
type: integer
description: Number of relocated rides
last_updated:
type: string
description: ISO timestamp when these statistics were last calculated
relative_last_updated:
type: string
description: Human-readable relative time since last update (e.g., '2 minutes
ago')
required:
- last_updated
- relative_last_updated
- total_designers
- total_manufacturers
- total_operators
- total_park_photos
- total_park_reviews
- total_parks
- total_photos
- total_property_owners
- total_reviews
- total_ride_photos
- total_ride_reviews
- total_rides
- total_roller_coasters
TopListCreateInputRequest:
type: object
properties:
title:
type: string
minLength: 1
maxLength: 100
category:
$ref: '#/components/schemas/CategoryEnum'
description:
type: string
user:
type: integer
required:
- category
- title
- user
TopListItemCreateInputRequest:
type: object
properties:
object_id:
type: integer
maximum: 2147483647
minimum: 0
rank:
type: integer
maximum: 2147483647
minimum: 0
notes:
type: string
top_list:
type: integer
content_type:
type: integer
required:
- content_type
- object_id
- rank
- top_list
TopListItemOutput:
type: object
properties:
id:
type: integer
readOnly: true
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
object_id:
type: integer
maximum: 2147483647
minimum: 0
rank:
type: integer
maximum: 2147483647
minimum: 0
notes:
type: string
top_list:
type: integer
content_type:
type: integer
required:
- content_type
- created_at
- id
- object_id
- rank
- top_list
- updated_at
TopListItemOutputRequest:
type: object
properties:
object_id:
type: integer
maximum: 2147483647
minimum: 0
rank:
type: integer
maximum: 2147483647
minimum: 0
notes:
type: string
top_list:
type: integer
content_type:
type: integer
required:
- content_type
- object_id
- rank
- top_list
TopListItemUpdateInputRequest:
type: object
properties:
object_id:
type: integer
maximum: 2147483647
minimum: 0
rank:
type: integer
maximum: 2147483647
minimum: 0
notes:
type: string
top_list:
type: integer
content_type:
type: integer
required:
- content_type
- object_id
- rank
- top_list
TopListOutput:
type: object
properties:
id:
type: integer
readOnly: true
user:
allOf:
- $ref: '#/components/schemas/User'
readOnly: true
items:
type: array
items:
$ref: '#/components/schemas/TopListItemOutput'
readOnly: true
title:
type: string
maxLength: 100
category:
$ref: '#/components/schemas/CategoryEnum'
description:
type: string
created_at:
type: string
format: date-time
readOnly: true
updated_at:
type: string
format: date-time
readOnly: true
required:
- category
- created_at
- id
- items
- title
- updated_at
- user
TopListOutputRequest:
type: object
properties:
title:
type: string
minLength: 1
maxLength: 100
category:
$ref: '#/components/schemas/CategoryEnum'
description:
type: string
required:
- category
- title
TopListUpdateInputRequest:
type: object
properties:
title:
type: string
minLength: 1
maxLength: 100
category:
$ref: '#/components/schemas/CategoryEnum'
description:
type: string
required:
- category
- title
UnifiedHistoryTimeline:
type: object
description: Serializer for unified history timeline.
properties:
summary:
type: object
additionalProperties: {}
readOnly: true
events:
type: array
items:
type: object
additionalProperties: {}
readOnly: true
required:
- events
- summary
User:
type: object
description: User serializer for API responses
properties:
id:
type: integer
readOnly: true
username:
type: string
description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
pattern: ^[\w.@+-]+$
maxLength: 150
email:
type: string
format: email
title: Email address
maxLength: 254
first_name:
type: string
maxLength: 150
last_name:
type: string
maxLength: 150
date_joined:
type: string
format: date-time
readOnly: true
is_active:
type: boolean
readOnly: true
title: Active
description: Designates whether this user should be treated as active. Unselect
this instead of deleting accounts.
avatar_url:
type: string
nullable: true
description: Get user avatar URL
readOnly: true
required:
- avatar_url
- date_joined
- id
- is_active
- username
UserOutput:
type: object
description: Output serializer for user data.
properties:
id:
type: integer
readOnly: true
username:
type: string
description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
pattern: ^[\w.@+-]+$
maxLength: 150
email:
type: string
format: email
title: Email address
maxLength: 254
first_name:
type: string
maxLength: 150
last_name:
type: string
maxLength: 150
is_active:
type: boolean
title: Active
description: Designates whether this user should be treated as active. Unselect
this instead of deleting accounts.
date_joined:
type: string
format: date-time
readOnly: true
required:
- date_joined
- id
- username
UserOutputRequest:
type: object
description: Output serializer for user data.
properties:
username:
type: string
minLength: 1
description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
pattern: ^[\w.@+-]+$
maxLength: 150
email:
type: string
format: email
title: Email address
maxLength: 254
first_name:
type: string
maxLength: 150
last_name:
type: string
maxLength: 150
is_active:
type: boolean
title: Active
description: Designates whether this user should be treated as active. Unselect
this instead of deleting accounts.
required:
- username
UserProfileCreateInputRequest:
type: object
properties:
display_name:
type: string
minLength: 1
description: This is the name that will be displayed on the site
maxLength: 50
avatar:
type: string
format: binary
pronouns:
type: string
maxLength: 50
bio:
type: string
maxLength: 500
twitter:
type: string
format: uri
maxLength: 200
instagram:
type: string
format: uri
maxLength: 200
youtube:
type: string
format: uri
maxLength: 200
discord:
type: string
maxLength: 100
coaster_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
dark_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
flat_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
water_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
user:
type: integer
required:
- display_name
- user
UserProfileOutput:
type: object
properties:
id:
type: integer
readOnly: true
user:
allOf:
- $ref: '#/components/schemas/User'
readOnly: true
avatar_url:
type: string
format: uri
nullable: true
readOnly: true
profile_id:
type: string
readOnly: true
description: Unique identifier for this profile that remains constant
display_name:
type: string
description: This is the name that will be displayed on the site
maxLength: 50
avatar:
type: string
format: uri
pronouns:
type: string
maxLength: 50
bio:
type: string
maxLength: 500
twitter:
type: string
format: uri
maxLength: 200
instagram:
type: string
format: uri
maxLength: 200
youtube:
type: string
format: uri
maxLength: 200
discord:
type: string
maxLength: 100
coaster_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
dark_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
flat_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
water_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
required:
- avatar_url
- display_name
- id
- profile_id
- user
UserProfileUpdateInputRequest:
type: object
properties:
display_name:
type: string
minLength: 1
description: This is the name that will be displayed on the site
maxLength: 50
avatar:
type: string
format: binary
pronouns:
type: string
maxLength: 50
bio:
type: string
maxLength: 500
twitter:
type: string
format: uri
maxLength: 200
instagram:
type: string
format: uri
maxLength: 200
youtube:
type: string
format: uri
maxLength: 200
discord:
type: string
maxLength: 100
coaster_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
dark_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
flat_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
water_ride_credits:
type: integer
maximum: 2147483647
minimum: -2147483648
required:
- display_name
UserRequest:
type: object
description: User serializer for API responses
properties:
username:
type: string
minLength: 1
description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
only.
pattern: ^[\w.@+-]+$
maxLength: 150
email:
type: string
format: email
title: Email address
maxLength: 254
first_name:
type: string
maxLength: 150
last_name:
type: string
maxLength: 150
required:
- username
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