# info.description
This is the documentation for the backend that powers the Penn Clubs and Hub@Penn
websites. The backend is written with [Django](https://www.djangoproject.com/) and the
[Django Rest Framework](https://www.django-rest-framework.org/).

This documentation is intended to help frontend developers and external
developers know which parameters they should be passing to various endpoints.
There are test cases that will fail if the documentation on the API
falls beneath a certain threshold.

# paths./api/settings/.get.description
Cache the settings endpoint for 5 minutes or until user data is updated.

# paths./api/settings/.put.description
Clear the cache when putting user settings.

# paths./api/settings/.patch.description
Clear the cache when patching user settings.

# paths./api/settings/invites/.get.description
Return the club code, invite id and token of
the email invitations for the current user.

# paths./api/settings/zoom/meetings/.post.description
Create a new Zoom meeting for this event
or try to fix the existing zoom meeting.

# paths./api/clubs/{club_code}/public-visibility/{token}/.get.operationId
Retrieve Club Public Visibility Magic Link

# paths./api/clubs/{club_code}/public-visibility/{token}/.get.description
Toggle a club's public visibility via a signed, time-limited link.

This endpoint always responds with a redirect:
- On success, redirects to the club page with
  `visibility_updated=public|private`.
- On error (expired/invalid/missing), redirects to the club edit page with
  `visibility_link=expired|invalid|missing`.

# paths./api/clubs/{club_code}/public-visibility/{token}/.get.responses.302.description
Redirect to club page or club edit page.

# paths./api/settings/calendar_url/.get.description
Retrieve the calendar URL with the appropriate uuid for the given user.

# paths./api/favouriteevents/.get.description
Return a list of events, ordered in increasing order of start time (from time
of API call) corresponding to clubs that a user has favourited

# paths./api/calendar/{user_secretuuid}/.get.description
Return a .ics file of the user's favorite club events.

# paths./api/calendar/{user_secretuuid}/.get.parameters[].description
If specified, either only show global events if true or exclude global events if false.

# paths./api/calendar/{user_secretuuid}/.get.parameters[].description
If set to true, show all events instead of only subscribed events.

# paths./api/scripts/.get.description
Return a list of valid management scripts to execute.

# paths./api/options/.get.description
Return a list of options, with some options dynamically generated.
This response is intended for site-wide global variables.

# paths./api/webhook/meeting/.get.responses.200.content.application/json.schema.properties.attending.description
Number of users currently attending the meeting. Includes the club officers.

# paths./api/webhook/meeting/.get.responses.200.content.application/json.schema.properties.officers.description
Number of officers attending the meeting.

# paths./api/webhook/meeting/.get.responses.200.content.application/json.schema.properties.attended.description
Number of users that attended the meeting before. Does not include currently attending users.

# paths./api/webhook/meeting/.get.responses.200.content.application/json.schema.properties.time.description
Number of seconds that the median user attended the meeting.

# paths./api/webhook/meeting/.post.description
Trigger this webhook. Should be triggered when a Zoom event occurs.
Not available to the public, requires Zoom verification token.

# paths./api/whartonapplications/status/.get.operationId
List Statuses For Wharton Application Submissions

# paths./api/whartonapplications/status/.get.description
Return aggregate status for Wharton application submissions

Query parameters:
- cycle: (optional) Filter by application cycle ID

# paths./api/health/.get.description
Health check endpoint to confirm the backend is running.

# paths./api/settings/queue/.patch.operationId
Partial Update Registration Queue Settings

# paths./api/clubs/.get.description
Return a list of all clubs. Responses cached for 1 hour

Responses are cached only for non-superusers without elevated permissions.

# paths./api/clubs/.get.parameters[].description
A page number within the paginated result set.

# paths./api/clubs/.get.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/.post.description
Add a new club record.
After creation, the club will need to go through the approval process.

# paths./api/clubs/constitutions/.get.description
A special endpoint for SAC affiliated clubs to check if
they have uploaded a club constitution.

# paths./api/clubs/directory/.get.description
Custom return endpoint for the directory page, allows the page to load faster.

# paths./api/clubs/fields/.get.description
Return the list of fields that can be exported in the Excel file.
The list of fields is taken from the associated serializer, with model names
overriding the serializer names if they exist. Custom fields are also available
with certain permission levels.

# paths./api/clubs/group_activity_options/.get.description
Get all active group activity assessment options.

# paths./api/clubs/group_activity_options/.get.responses.200.content.application/json.schema.items.properties.is_active.description
Whether this option is currently available

# paths./api/clubs/{code}/.get.description
Retrieve data about a specific club. Responses cached for 1 hour. Caching is
disabled for users with elevated view perms so that changes without approval
granted don't spill over to public.

# paths./api/clubs/{code}/.get.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{code}/.put.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{code}/.patch.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{code}/.delete.description
Delete a club. Consider marking the club as inactive instead of deleting the club.

# paths./api/clubs/{code}/.delete.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{code}/alumni/.get.description
Return the members of this club who are no longer active.

# paths./api/clubs/{code}/analytics/.get.description
Returns a list of all analytics (club visits, favorites,
subscriptions) for a club.

# paths./api/clubs/{code}/analytics/.get.responses.200.content.application/json.schema.properties.max.description
The maximum value among all categories. Useful when deciding how tall a line chart should be.

# paths./api/clubs/{code}/analytics_pie_charts/.get.description
Returns demographic information about bookmarks
and subscriptions in pie chart format.

# paths./api/clubs/{code}/booths/.get.description
Getting all booths associated with a club

# paths./api/clubs/{code}/children/.get.description
Return a recursive list of all children that this club is a parent of.

# paths./api/clubs/{code}/children/.get.responses.200.content.application/json.schema.properties.children.description
An array of clubs containing the fields in this object.

# paths./api/clubs/{code}/club_detail_diff/.get.description
Return old and new data for a club that is pending approval.

# paths./api/clubs/{code}/history/.get.description
Return a simplified approval history for the club.

# paths./api/clubs/{code}/history/.get.responses.200.content.application/json.schema.items.properties.approved_by.description
The full name of the user who approved the club.

# paths./api/clubs/{code}/history/.get.responses.200.content.application/json.schema.items.properties.history_date.description
The time in which the specific version of the club was saved at.

# paths./api/clubs/{code}/notes-about/.get.description
Return a list of notes about this club, used by members of parent organizations.

# paths./api/clubs/{code}/owned_badges/.get.description
Return a list of badges that this club is an owner of.
The club will be able to assign these badges to other clubs.

# paths./api/clubs/{code}/parents/.get.description
Return a recursive list of all parents that this club is a child to.

# paths./api/clubs/{code}/parents/.get.responses.200.content.application/json.schema.properties.children.description
An array of clubs containing the fields in this object.

# paths./api/clubs/{code}/qr/.get.description
Return a QR code png image representing a link to the club on Penn Clubs.

# paths./api/clubs/{code}/qr/.get.responses.200.description
Return a png image representing a QR code to the fair page.

# paths./api/clubs/{code}/subscription/.get.description
Return a list of all students that have subscribed to the club,
including their names and emails.

If a student has indicated that they want to share their bookmarks as well,
include this information in the results.

# paths./api/clubfairs/.get.description
Return a list of ongoing and upcoming club fairs.

# paths./api/clubfairs/current/.get.description
Return only the current club fair instance in a list or an empty list
if there is no fair going on.

# paths./api/clubfairs/{id}/.put.description
Update some attributes related to an existing club fair.
All fields must be specified.

# paths./api/clubfairs/{id}/.patch.description
Update some attributes related to an existing club fair.
Only specified fields are updated.

# paths./api/clubfairs/{id}/events/.get.description
Return all of the events related to this club fair
and whether they are properly configured.

# paths./api/clubfairs/{id}/events/.get.responses.200.content.application/json.schema.items.properties.approved.description
Whether this club has been approved by the approval authority or not.

# paths./api/clubfairs/{id}/events/.get.responses.200.content.application/json.schema.items.properties.badges.description
A list of badges associated with this club and fair.

# paths./api/clubfairs/{id}/live/.get.description
Returns all events, grouped by event id, with the number of participants
currently in the meeting, the officers or owners in the meeting, and the
number of participants who have already attended the meeting.

# paths./api/events/.get.description
Return a list of events for the entire site.

# paths./api/events/.get.parameters[].description
A page number within the paginated result set.

# paths./api/events/.get.parameters[].description
Which field to use when ordering the results.

# paths./api/events/.post.description
Has the option to create a recurring event by specifying an offset and an
end date. Additionaly, do not let non-superusers create events with the
`FAIR` type through the API.

# paths./api/events/.post.requestBody.content.application/json.schema.allOf[].properties.offset.description
The offset between recurring events, in days. Only specify this if the event is recurring.

# paths./api/events/.post.requestBody.content.application/json.schema.allOf[].properties.end_date.description
The date when all items in the recurring event series should end. Only specify this if the event is recurring.

# paths./api/events/fair/.get.description
Get the minimal information required for a fair directory listing.
Groups by the start date of the event, and then the event category.
Each event's club must have an associated fair badge in order to be displayed.

# paths./api/events/fair/.get.parameters[].description
A date in YYYY-MM-DD format. If specified, will preview how this endpoint looked on the specified date.

# paths./api/events/fair/.get.parameters[].description
A fair id. If specified, will preview how this endpoint will look for that fair. Overrides the date field if both are specified.

# paths./api/events/owned/.get.description
Return all events that the user has officer permissions over.

# paths./api/events/{id}/.get.parameters[].description
Which field to use when ordering the results.

# paths./api/events/{id}/.put.parameters[].description
Which field to use when ordering the results.

# paths./api/events/{id}/.patch.parameters[].description
Which field to use when ordering the results.

# paths./api/events/{id}/.delete.description
Do not let non-superusers delete events with the FAIR type through the API.
Check if there are bought or held tickets before deletion.

# paths./api/events/{id}/.delete.parameters[].description
Which field to use when ordering the results.

# paths./api/categories/{id}/.get.parameters[].description
A unique integer value identifying this category.

# paths./api/eligibilities/{id}/.get.parameters[].description
A unique integer value identifying this eligibility.

# paths./api/favorites/.get.description
Return a list of clubs that the logged in user has favorited.

# paths./api/subscriptions/.get.description
Return a list of clubs that the logged in user has subscribed to.

# paths./api/clubvisits/.get.description
Return a list of clubs that the logged in user has visited.

# paths./api/searches/.get.description
Superuser sees all queries, any other user sees only their own

# paths./api/memberships/.get.description
Return a list of clubs that the logged in user is a member of.

# paths./api/memberships/admin/.get.description
Endpoint used to retrieve the clubs that the logged-in user is an admin of

# paths./api/requests/membership/.get.description
Return a list of clubs that the logged in user has sent membership request to.

# paths./api/requests/membership/.post.description
If a membership request object already exists, reuse it.

# paths./api/requests/membership/{club__code}/.delete.description
Don't actually delete the membership request when it is withdrawn.

This is to keep track of repeat membership requests and avoid spamming the club
owners with requests.

# paths./api/requests/ownership/.get.description
Return a list of clubs that the logged in user has sent ownership request to.

# paths./api/requests/ownership/.post.description
Implement 6-month cooldown rule for ownership requests:
- If no request was made within the past 6 months, allow new request
- If withdrawn request was made within the past 6 months, allow resubmission
- If pending/accepted/denied request was made within the past 6 months,
  deny new request

# paths./api/requests/ownership/{club__code}/.delete.description
Don't actually delete the ownership request when it is withdrawn.

This is to keep track of repeat ownership requests and avoid spamming the club
owners with requests.

# paths./api/tickets/cart/.get.description
Validate tickets in a cart and return them. Replace in-cart tickets that
have been bought/held by someone else.

# paths./api/tickets/{id}/.patch.description
Update a ticket's attendance (only accessible by club officers)

# paths./api/tickets/{id}/qr/.get.description
Return a QR code png image representing a link to the ticket.

# paths./api/tickets/{id}/qr/.get.responses.200.description
Return a png image representing a QR code to the ticket.

# paths./api/schools/.get.description
Retrieve a list of all of the schools (ex: Wharton, Engineering).

# paths./api/schools/.post.description
Add a new school to the list of schools.

# paths./api/schools/{id}/.get.parameters[].description
A unique integer value identifying this school.

# paths./api/schools/{id}/.put.parameters[].description
A unique integer value identifying this school.

# paths./api/schools/{id}/.patch.parameters[].description
A unique integer value identifying this school.

# paths./api/schools/{id}/.delete.description
Delete a school from the list of schools.

# paths./api/schools/{id}/.delete.parameters[].description
A unique integer value identifying this school.

# paths./api/majors/.get.description
Retrieve a list of all the majors (ex: Computer Science, BAS).

# paths./api/majors/{id}/.get.parameters[].description
A unique integer value identifying this major.

# paths./api/majors/{id}/.put.parameters[].description
A unique integer value identifying this major.

# paths./api/majors/{id}/.patch.parameters[].description
A unique integer value identifying this major.

# paths./api/majors/{id}/.delete.parameters[].description
A unique integer value identifying this major.

# paths./api/student_types/.get.description
Retrieve a list of all the student types
(ex: Online Student, Transfer Student, etc).

# paths./api/student_types/.post.description
Add a new student type to the list of student types.

# paths./api/student_types/{id}/.get.parameters[].description
A unique integer value identifying this student type.

# paths./api/student_types/{id}/.put.parameters[].description
A unique integer value identifying this student type.

# paths./api/student_types/{id}/.patch.parameters[].description
A unique integer value identifying this student type.

# paths./api/student_types/{id}/.delete.description
Remove a student type from the list of student types.

# paths./api/student_types/{id}/.delete.parameters[].description
A unique integer value identifying this student type.

# paths./api/reports/{id}/.get.description
Return a list of reports that can be generated.

# paths./api/years/.get.description
Sort items by reverse year. Since this calculation is done in Python, we need
to apply it after the SQL query has been processed.

# paths./api/years/.post.description
Add a new graduation year to the list of graduation years.

# paths./api/years/{id}/.get.description
Retrieve a single graduation year by ID.

# paths./api/years/{id}/.get.parameters[].description
A unique integer value identifying this year.

# paths./api/years/{id}/.put.parameters[].description
A unique integer value identifying this year.

# paths./api/years/{id}/.patch.parameters[].description
A unique integer value identifying this year.

# paths./api/years/{id}/.delete.description
Remove a graduation year from the list of graduation years.

# paths./api/years/{id}/.delete.parameters[].description
A unique integer value identifying this year.

# paths./api/group_activity_options/.get.description
ViewSet for managing group activity assessment options.

# paths./api/group_activity_options/{id}/.get.description
ViewSet for managing group activity assessment options.

# paths./api/group_activity_options/{id}/.get.parameters[].description
A unique integer value identifying this group activity option.

# paths./api/users/questions/.get.description
Given a prompt lists the given users responses to this particular question.
This allows us to populate the application form with the users'
previous submissions.

# paths./api/users/{username}/.get.parameters[].description
Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.

# paths./api/cycles/{id}/club_applications/.get.description
Retrieve club applications for given cycle

# paths./api/cycles/{id}/get_clubs/.get.description
Retrieve clubs associated with given cycle

# paths./api/whartonapplications/.get.operationId
List Club Applications Wharton Application

# paths./api/whartonapplications/.get.description
Cache responses for 20 minutes. Vary cache by user.

# paths./api/whartonapplications/.post.operationId
Create Club Application Wharton Application

# paths./api/whartonapplications/{id}/.get.operationId
Retrieve Club Application Wharton Application

# paths./api/whartonapplications/{id}/.put.operationId
Update Club Application Wharton Application

# paths./api/whartonapplications/{id}/.patch.operationId
Partial Update Club Application Wharton Application

# paths./api/whartonapplications/{id}/.delete.operationId
Destroy Club Application Wharton Application

# paths./api/templates/{id}/.get.operationId
Retrieve Club Approval Response Template

# paths./api/templates/{id}/.patch.operationId
Partial Update Club Approval Response Template

# paths./api/clubs/{club_code}/members/.get.description
Return a list of members that are in the club.
Returns more information about each member if the logged in user
is a superuser or in the club.

# paths./api/clubs/{club_code}/members/{person__username}/.get.description
Return information about a specific membership between a student and the club.

# paths./api/clubs/{club_code}/members/{person__username}/.put.description
Update the role/title/status for a membership.
You must specify all fields or use a patch request.

# paths./api/clubs/{club_code}/members/{person__username}/.patch.description
Update the role/title/status for a membership.
Specify only the fields you want to change.

# paths./api/clubs/{club_code}/events/.get.parameters[].description
A page number within the paginated result set.

# paths./api/clubs/{club_code}/events/.get.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{club_code}/events/.post.description
Has the option to create a recurring event by specifying an offset and an
end date. Additionaly, do not let non-superusers create events with the
`FAIR` type through the API.

# paths./api/clubs/{club_code}/events/.post.requestBody.content.application/json.schema.allOf[].properties.offset.description
The offset between recurring events, in days. Only specify this if the event is recurring.

# paths./api/clubs/{club_code}/events/.post.requestBody.content.application/json.schema.allOf[].properties.end_date.description
The date when all items in the recurring event series should end. Only specify this if the event is recurring.

# paths./api/clubs/{club_code}/events/{id}/.get.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{club_code}/events/{id}/.put.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{club_code}/events/{id}/.patch.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{club_code}/events/{id}/.delete.description
Do not let non-superusers delete events with the FAIR type through the API.
Check if there are bought or held tickets before deletion.

# paths./api/clubs/{club_code}/events/{id}/.delete.parameters[].description
Which field to use when ordering the results.

# paths./api/clubs/{club_code}/assets/.get.description
Return a list of files that belong to this club.

# paths./api/clubs/{club_code}/assets/.post.description
Upload a new file to the club file repository.

# paths./api/clubs/{club_code}/assets/{id}/.get.description
Retrieve the contents of the specific file that belongs to this club.

# paths./api/clubs/{club_code}/assets/{id}/.delete.description
Delete a file from the club file repository.

# paths./api/clubs/{club_code}/notes/.get.description
Return a list of notes that this club has created for other clubs.

# paths./api/clubs/{club_code}/notes/{id}/.get.description
Return a specific note that this club has created for another club.

# paths./api/clubs/{club_code}/notes/{id}/.delete.description
Destroy an existing note on another club.

# paths./api/clubs/{club_code}/testimonials/.get.description
Return a list of testimonials for this club.

# paths./api/clubs/{club_code}/testimonials/{id}/.put.description
Update a testimonial for this club.
All fields must be specified.

# paths./api/clubs/{club_code}/testimonials/{id}/.patch.description
Update a testimonial for this club.
Specify only the fields you want to update.

# paths./api/clubs/{club_code}/questions/.get.description
Return a list of questions and answers for this club.

# paths./api/clubs/{club_code}/questions/{id}/.put.description
Change the question or the answer for this club.

# paths./api/clubs/{club_code}/membershiprequests/.get.description
Return a list of users who have sent membership request to the club.

# paths./api/clubs/{club_code}/membershiprequests/{requester__username}/.delete.description
Delete a membership request for a specific user.

# paths./api/clubs/{club_code}/ownershiprequests/.get.description
Return a list of users who have sent ownership request to the club.

# paths./api/clubs/{club_code}/ownershiprequests/all/.get.description
View unaddressed ownership requests, sorted by date.

# paths./api/clubs/{club_code}/ownershiprequests/{requester__username}/.delete.description
Delete a ownership request for a specific user.

# paths./api/clubs/{club_code}/advisors/.get.description
Return a list of advisors for this club for club administrators.

# paths./api/clubs/{club_code}/applications/.get.description
Retrieve a list of applications of the club.

# paths./api/clubs/{club_code}/applications/current/.get.description
Return the ongoing application(s) for this club

# paths./api/clubs/{club_code}/applications/{id}/.get.description
Cache responses for one hour. This is what people
see when viewing an individual club's application

# paths./api/clubs/{club_code}/applications/{id}/.patch.operationId
Partial Update Writable Club Application

# paths./api/clubs/{club_code}/applications/{application_pk}/submissions.get.description
Manually cache responses (to support invalidation)
Responses are invalidated on status / reason updates and email sending

# paths./api/clubs/{club_code}/applications/{application_pk}/submissions.get.description
Given some application submissions, export them to CSV.
Deprecated in favor of client-side export.

Cached for 2 hours.

# paths./api/clubs/{club_code}/applications/{application_pk}/submissions.get.description
Export all application submissions for a particular cycle

# paths./api/events/{event_id}/showings/{id}/.patch.operationId
Partial Update Event Showing Write (Global)

# paths./api/events/{event_id}/showings/{id}/.patch.description
Do not let club admins modify the ticket drop time
if tickets have potentially been sold through the checkout process.

# paths./api/events/{event_id}/showings/{id}/.delete.description
Check if any showing has bought or held tickets

# paths./api/events/{event_id}/showings/{id}/tickets/.get.description
Get information about tickets for this showing

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/.patch.description
Do not let club admins modify the ticket drop time
if tickets have potentially been sold through the checkout process.

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/.delete.description
Check if any showing has bought or held tickets

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/tickets/.get.description
Get information about tickets for this showing

# paths./api/clubs/{club_code}/invite/.post.description
Send out invites and add invite objects
given a list of comma or newline separated emails.

# paths./api/clubs/bulk/.post.description
An endpoint to perform certain club edit operations in bulk.

# paths./api/clubs/bulk/.post.requestBody.content.application/json.schema.properties.clubs.description
A list of club codes, separated by comma, newline, space, or tab.

# paths./api/clubs/bulk/.post.responses.200.content.application/json.schema.properties.success.description
Whether or not this club has been registered.

# paths./api/clubs/bulk/.post.responses.200.content.application/json.schema.properties.message.description
A success message. Only set if operation passes.

# paths./api/clubs/bulk/.post.responses.200.content.application/json.schema.properties.error.description
An error message. Only set if an error occurs.

# paths./api/clubs/email_blast/.post.description
Send email blast to targeted (active) club members.

# paths./api/clubs/email_blast/.post.requestBody.content.application/json.schema.properties.target.description
Must be one of leaders, officers, or all

# paths./api/clubs/email_blast/.post.responses.200.content.application/json.schema.properties.detail.description
A message indicating how many recipients received the blast

# paths./api/clubs/email_blast/.post.responses.400.description
Content or target field was empty or missing

# paths./api/clubs/email_blast/.post.responses.400.content.application/json.schema.properties.detail.description
Error message indicating content or target was not provided correctly

# paths./api/clubs/lookup/.post.description
An endpoint to look up club codes from club names.

# paths./api/clubs/{code}/fetch/.post.description
Fetch the ICS calendar events from the club's ICS calendar URL.

# paths./api/clubs/{code}/fetch/.delete.description
Fetch the ICS calendar events from the club's ICS calendar URL.

# paths./api/clubs/{code}/upload/.post.description
Upload the club logo.
Marks the club as pending approval since the logo has changed.
Also create a thumbnail version of the club logo.

# paths./api/clubs/{code}/upload/.post.responses.200.description
Returned if the file was successfully uploaded.

# paths./api/clubs/{code}/upload/.post.responses.200.content.application/json.schema.properties.url.description
The URL of the newly uploaded file. Only exists if the file was successfully uploaded.

# paths./api/clubs/{code}/upload/.post.responses.400.description
Returned if there was an error while uploading the file.

# paths./api/clubs/{code}/upload/.post.responses.400.content.application/json.schema.properties.url.description
The URL of the newly uploaded file. Only exists if the file was successfully uploaded.

# paths./api/clubs/{code}/upload_file/.post.responses.200.description
Returned if the file was successfully uploaded.

# paths./api/clubs/{code}/upload_file/.post.responses.200.content.application/json.schema.properties.url.description
The URL of the newly uploaded file. Only exists if the file was successfully uploaded.

# paths./api/clubs/{code}/upload_file/.post.responses.400.description
Returned if there was an error while uploading the file.

# paths./api/clubs/{code}/upload_file/.post.responses.400.content.application/json.schema.properties.url.description
The URL of the newly uploaded file. Only exists if the file was successfully uploaded.

# paths./api/clubfairs/{id}/create_events/.post.description
Create events for each club registered for this activities fair.
This endpoint will create one event per club spanning the
entire listed duration.

# paths./api/clubfairs/{id}/register/.post.description
Register a club for this club fair.
Pass in a "club" string parameter with the club code
and a "status" parameter that is true to register the club,
or false to unregister.

# paths./api/clubfairs/{id}/register/.post.requestBody.content.application/json.schema.properties.status.description
Whether to register or unregister this club for the fair. By default, the endpoint will attempt to register the club.

# paths./api/clubfairs/{id}/register/.post.requestBody.content.application/json.schema.properties.club.description
The code of the club that you are trying to register.

# paths./api/clubfairs/{id}/register/.post.requestBody.content.application/json.schema.properties.answers.description
The answers to the required fair questions. Each element in the array is an answer to a fair question, in the same order of the related fair questions.

# paths./api/clubfairs/{id}/register/.post.responses.200.content.application/json.schema.properties.success.description
Whether or not this club has been registered.

# paths./api/events/{id}/upload/.post.responses.200.description
Returned if the file was successfully uploaded.

# paths./api/events/{id}/upload/.post.responses.200.content.application/json.schema.properties.url.description
The URL of the newly uploaded file. Only exists if the file was successfully uploaded.

# paths./api/events/{id}/upload/.post.responses.400.description
Returned if there was an error while uploading the file.

# paths./api/events/{id}/upload/.post.responses.400.content.application/json.schema.properties.url.description
The URL of the newly uploaded file. Only exists if the file was successfully uploaded.

# paths./api/tickets/initiate_checkout/.post.description
Initiate checkout for all tickets in cart using CyberSource
Secure Acceptance Hosted Checkout.

NOTE: this does NOT buy tickets, it simply initiates a checkout process
which includes a 10-minute ticket hold.

Returns signed parameters for the frontend to POST to CyberSource's
hosted checkout page.

403 implies a stale cart.

# paths./api/tickets/payment_complete/.post.description
Handle the POST from CyberSource Secure Acceptance after payment.

CyberSource POSTs payment results to this endpoint. We verify the
signature, process the payment, and redirect the user to the frontend
with success/error query parameters.

This endpoint is CSRF exempt because CyberSource POSTs directly.

# paths./api/users/question_response/.post.description
Accepts a response to a question, this happens when the user submits the
application form

# paths./api/cycles/add_clubs_to_exception/.post.operationId
Add Clubs To Exception Application Cycle

# paths./api/cycles/add_clubs_to_exception/.post.description
Exempt selected clubs from application cycle deadline

# paths./api/cycles/remove_clubs_from_exception/.post.operationId
Remove Clubs From Exception Application Cycle

# paths./api/cycles/remove_clubs_from_exception/.post.description
Remove selected clubs from application cycle deadline exemption

# paths./api/clubs/{club_code}/events/{id}/upload/.post.responses.200.description
Returned if the file was successfully uploaded.

# paths./api/clubs/{club_code}/events/{id}/upload/.post.responses.200.content.application/json.schema.properties.url.description
The URL of the newly uploaded file. Only exists if the file was successfully uploaded.

# paths./api/clubs/{club_code}/events/{id}/upload/.post.responses.400.description
Returned if there was an error while uploading the file.

# paths./api/clubs/{club_code}/events/{id}/upload/.post.responses.400.content.application/json.schema.properties.url.description
The URL of the newly uploaded file. Only exists if the file was successfully uploaded.

# paths./api/clubs/{club_code}/questions/{id}/like/.post.description
Endpoint used to like a question answer.

# paths./api/clubs/{club_code}/questions/{id}/unlike/.post.description
Endpoint used to unlike a question answer.

# paths./api/clubs/{club_code}/membershiprequests/{requester__username}/.post.description
Accept a membership request as a club officer.

# paths./api/clubs/{club_code}/membershiprequests/{requester__username}/.post.responses.200.content.application/json.schema.properties.success.description
True if this request was properly processed.

# paths./api/clubs/{club_code}/ownershiprequests/{requester__username}/a.post.description
Accept an ownership request as a club owner.

# paths./api/clubs/{club_code}/ownershiprequests/{requester__username}/a.post.responses.200.content.application/json.schema.properties.success.description
True if this request was properly processed.

# paths./api/clubs/{club_code}/applications/{id}/duplicate/.post.description
Duplicate an application, setting the start and end time arbitrarily.

# paths./api/clubs/{club_code}/applications/{id}/send_emails/.post.description
Send out acceptance/rejection emails for a particular application

Dry run will validate that all emails have nonempty variables

Allow resend will renotify submissions that have already been emailed

# paths./api/clubs/{club_code}/applications/{application_pk}/questions/p.post.description
Updates the precedence of questions so they are ordered the same way as
arranged by the officer creating the application after they drag and drop
the different questions to re-order them

# paths./api/clubs/{club_code}/applications/{application_pk}/submissions.post.description
Given some application submissions, update their acceptance/rejection
reasons

# paths./api/clubs/{club_code}/applications/{application_pk}/submissions.post.description
Given some application submissions, change their status to a new one

# paths./api/events/{event_id}/showings/{id}/add_to_cart/.post.responses.403.description
Forbidden - club not approved, showing ended, or ticket limit exceeded

# paths./api/events/{event_id}/showings/{id}/email_blast/.post.description
Send an email blast to all users holding tickets.

# paths./api/events/{event_id}/showings/{id}/email_blast/.post.responses.200.content.application/json.schema.properties.detail.description
A message indicating how many recipients received the blast

# paths./api/events/{event_id}/showings/{id}/email_blast/.post.responses.400.content.application/json.schema.properties.detail.description
Error message indicating content was not provided

# paths./api/events/{event_id}/showings/{id}/email_blast/.post.responses.404.content.application/json.schema.properties.detail.description
Error message indicating event was not found

# paths./api/events/{event_id}/showings/{id}/issue_tickets/.post.description
Issue tickets that have already been created to users in bulk.

# paths./api/events/{event_id}/showings/{id}/issue_tickets/.post.responses.400.description
Invalid request parameters or insufficient tickets

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/add_to_ca.post.responses.403.description
Forbidden - club not approved, showing ended, or ticket limit exceeded

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/email_bla.post.description
Send an email blast to all users holding tickets.

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/email_bla.post.responses.200.content.application/json.schema.properties.detail.description
A message indicating how many recipients received the blast

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/email_bla.post.responses.400.content.application/json.schema.properties.detail.description
Error message indicating content was not provided

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/email_bla.post.responses.404.content.application/json.schema.properties.detail.description
Error message indicating event was not found

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/issue_tic.post.description
Issue tickets that have already been created to users in bulk.

# paths./api/clubs/{club_code}/events/{event_id}/showings/{id}/issue_tic.post.responses.400.description
Invalid request parameters or insufficient tickets

# paths./api/clubs/{club_code}/invites/{id}/resend/.put.description
Resend an email invitation that has already been issued.

# paths./api/clubs/{club_code}/invites/{id}/resend/.patch.description
Resend an email invitation that has already been issued.

# components.schemas.FavouriteEvent.properties.showings.items.properties.location_visible_to_public.description
If false, hide this showing's location from unauthenticated users.

# components.schemas.ClubList.properties.code.description
An alphanumeric string shown in the URL and used to identify this club.

# components.schemas.Club.properties.code.description
An alphanumeric string shown in the URL and used to identify this club.

# components.schemas.Club.properties.description.description
A long description for the club. Certain HTML tags are allowed.

# components.schemas.Event.properties.showings.items.properties.location_visible_to_public.description
If false, hide this showing's location from unauthenticated users.

# components.schemas.Favorite.properties.club.properties.code.description
An alphanumeric string shown in the URL and used to identify this club.

# components.schemas.UserSubscribe.properties.club.properties.code.description
An alphanumeric string shown in the URL and used to identify this club.

# components.schemas.UserClubVisit.properties.club.properties.code.description
An alphanumeric string shown in the URL and used to identify this club.

# components.schemas.UserMembership.properties.club.properties.code.description
An alphanumeric string shown in the URL and used to identify this club.

# components.schemas.Ticket.properties.showing.properties.location_visible_to_public.description
If false, hide this showing's location from unauthenticated users.

# components.schemas.Ticket.properties.event.properties.showings.items.properties.location_visible_to_public.description
If false, hide this showing's location from unauthenticated users.

# components.schemas.MinimalUserProfile.properties.username.description
Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.

# components.schemas.UserProfile.properties.username.description
Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.

# components.schemas.EventShowing.properties.location_visible_to_public.description
If false, hide this showing's location from unauthenticated users.

# components.schemas.EventWrite.properties.showings.items.properties.location_visible_to_public.description
If false, hide this showing's location from unauthenticated users.

# components.schemas.EventShowingWrite.properties.location_visible_to_public.description
If false, hide this showing's location from unauthenticated users.