API Reference

Core APIs: Events, Registrations, Users, Members

The fundamental CRUD endpoints for events, registrations, users, and members.


Events

Manage events: create, read, update, delete, and image upload.

MethodPathAuthDescription
POST/eventsπŸ”“Create a new event
GET/eventsπŸ”“List all events
GET/events/{eventId}/{year}πŸ”“Get a single event
PATCH/events/{eventId}/{year}πŸ”“Update an event
DELETE/events/{eventId}/{year}πŸ”‘Delete an event (admin only)
GET/events/nearest🌐Get the nearest upcoming event
POST/events/uploadπŸ”“Get a presigned S3 URL for image upload

POST /events: Create Event

Request Body:

FieldTypeRequiredDescription
idstringβœ…Event slug (e.g., "blueprint")
yearnumberβœ…Event year (e.g., 2026)
enamestringβœ…Display name
descriptionstringEvent description
capacnumberMax capacity
startDatestringISO date string
endDatestringISO date string
elocationstringVenue location
imageUrlstringEvent banner image URL
isPublishedbooleanWhether visible to users
isApplicationBasedbooleanRequires application to register
pricingobject{ nonMember: number, member: number }
registrationQuestionsarrayCustom registration form questions

GET /events/{eventId}/{year}

Supports optional query parameters:

  • ?count=true includes registration count
  • ?users=true includes full user details for each registration

Response: Full event object with all fields above, plus isCompleted flag.

GET /events/nearest

Returns the single event with the closest future startDate. No auth required, used for landing pages.


Registrations

Handle event registration, check-in, waitlisting, and bulk operations.

MethodPathAuthDescription
POST/registrationsπŸ”“Register for an event
PUT/registrations/{eventId}/{year}πŸ”“Update a registration
GET/registrationsπŸ”“List registrations (with filters)
DELETE/registrations/{eventId}/{year}πŸ”“Delete a registration
DELETE/registrations/delete/{eventId}/{year}πŸ”“Bulk delete registrations
GET/registrations/leaderboard/{eventId}/{year}πŸ”“Event leaderboard (points)
PUT/registrations/massUpdate/{eventId}/{year}πŸ”“Bulk update registrations

POST /registrations: Register

Request Body:

FieldTypeRequiredDescription
eventIDstringβœ…Event ID
yearnumberβœ…Event year
emailstringβœ…User's email
basicInformationobject{ fname, lname }
dynamicResponsesobjectAnswers to custom registration questions
isPartnerbooleanWhether this is a partner registration

What happens on registration:

  1. Checks if event exists and has capacity
  2. If full β†’ auto-sets status to waitlist
  3. Creates registration record
  4. Sends QR code email via SendGrid
  5. Sends calendar invite (ICS file)
  6. Sends SNS notification to Slack

Registration Statuses

StatusDescription
registeredConfirmed registration
waitlistOn the waitlist (event at capacity)
checkedInChecked in at event
incompleteStarted but didn't finish registration
cancelledCancelled by user or admin
acceptedApplication accepted (application-based events)
acceptedPendingAccepted, awaiting payment
acceptedCompleteAccepted and paid
rejectedApplication rejected

GET /registrations: Query Filters

Query ParamDescription
eventIDFilter by event ID
yearFilter by year
emailFilter by user email
eventID;yearFilter by composite event key

Users

User account management.

MethodPathAuthDescription
POST/usersπŸ”“Create user
GET/users/check/{email}🌐Check if user exists
GET/users/isMember/{email}🌐Check membership status
GET/users/{email}πŸ”“Get user details
GET/usersπŸ”‘List all users (admin)
PATCH/users/{email}πŸ”“Update user
PATCH/users/favEvent/{email}πŸ”“Toggle favorite event
DELETE/users/{email}πŸ”“Delete user

User Schema

FieldTypeDescription
idstringEmail address (primary key)
fnamestringFirst name
lnamestringLast name
emailstringEmail address
adminbooleanAuto-set if email contains @ubcbiztech.com
isMemberbooleanHas active membership
facultystringFaculty/school
majorstringArea of study
yearstringAcademic year
studentIdstringStudent number
dietstringDietary restrictions
genderstringGender identity
educationstringEducation level
favEventsarrayFavorited event IDs

Immutable Fields

The id and email fields cannot be changed after creation. The admin field is auto-detected from the email domain.


Members

Club membership CRUD.

MethodPathAuthDescription
POST/membersπŸ”“Create member
GET/members/{email}πŸ”“Get member by email
GET/members/profileID/{profileID}πŸ”“Get member email by profile ID
GET/membersπŸ”‘List all members (admin)
PATCH/members/{email}πŸ”“Update member
DELETE/members/{email}πŸ”“Delete member
POST/members/grantπŸ”‘Admin: grant membership (creates user + member + profile in one call)

Member Schema

FieldTypeDescription
idstringEmail address (primary key)
profileIDstringHuman-readable profile identifier
firstNamestringFirst name
pronounsstringPreferred pronouns
facultystringFaculty
majorstringMajor
yearstringAcademic year
internationalbooleanInternational student status
prevMemberbooleanWas a member before
educationstringEducation level (undergrad, grad, etc.)
heardFromstringHow they heard about BizTech
topicsarrayTopics of interest
adminbooleanAdmin status
discordIdstringDiscord user ID
Previous
Overview