API reference
Generated from the OpenAPI 3.1 document at /api/v1/openapi.json. Paths below are relative to https://sportsmgnt.com/api/v1.
Version 1.0.0 · Download the OpenAPI document · Developers
REST API of the SportsMgnt demonstration platform built by WeldonPC. All data is sample data for the fictional Kestrel Basin Parks & Recreation District and resets nightly. Responses use the envelope {"data": ..., "meta": {...}}; errors use {"error": {"code", "message", "fields"}}.
Endpoint groups
catalog
Public activity catalog (no token needed)
GET /activities
Search activity sessions (same filters as the /activities page)
No token needed
Parameters: GET /activities Name In Type Required Description qquery string No Keyword (title, description or code) categoryquery string No Category slug, e.g. aquatics agequery integer No Participant age gradequery string No School grade K or 1-12 locationquery string No Location code, e.g. L-HPCC near_locationquery string No Location code to measure distance from distancequery integer No Kilometres from near_location: 1, 3, 5 or 10 day[]query array of string (mon, tue, wed, thu, fri, sat, sun) No Days of week (mon..sun); repeat day[] timequery string No morning, afternoon or evening fromquery string No Earliest start time HH:MM toquery string No Latest end time HH:MM languagequery string No en, es or bilingual adaptivequery integer No 1 = adaptive programs only openquery integer No 1 = sessions with open seats only seasonquery string No Season code pagequery integer No Page number per_pagequery integer No Rows per page (max 100)
Responses
200 Paginated sessions 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/activities' \
-H 'Accept: application/json'
GET /activities/{code}
One activity (program code like AQ-L2, or a session code) with its sessions
No token needed
Parameters: GET /activities/{code} Name In Type Required Description codepath string Yes
Responses
200 Activity 404 Not found 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/activities/AQ-L2' \
-H 'Accept: application/json'
GET /locations
Locations of the fictional district with grid coordinates
No token needed
Responses
200 Locations 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/locations' \
-H 'Accept: application/json'
core
Health and token information
GET /health
Service health
No token needed
Responses
200 OK 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/health' \
-H 'Accept: application/json'
GET /me/token
Describe the calling token
Token required
Responses
200 The token's user, scopes and expiry 401 Missing, invalid, revoked or expired token 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/me/token' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
facilities
Facility inventory and availability (public)
GET /facilities
List facilities
Public. Filters match the web catalog.
No token needed
Parameters: GET /facilities Name In Type Required Description typequery string No Facility type locationquery integer No Location id capacityquery integer No Minimum capacity amenityquery string No Amenity key accessiblequery string No Accessibility feature key bookablequery string No 1 = bookable online only qquery string No Search text pagequery integer No Page number per_pagequery integer No Items per page (max 100)
Responses
200 OK 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/facilities' \
-H 'Accept: application/json'
GET /facilities/{slug}
One facility
No token needed
Parameters: GET /facilities/{slug} Name In Type Required Description slugpath string Yes
Responses
200 OK 404 Unknown facility
Example request curl 'https://sportsmgnt.com/api/v1/facilities/riverbend-shelter-1' \
-H 'Accept: application/json'
GET /facilities/{slug}/availability
Free and busy times per day
Agency-local times (meta.timezone). Busy blocks carry a state but never who booked them.
No token needed
Parameters: GET /facilities/{slug}/availability Name In Type Required Description slugpath string Yes fromquery string No First date (YYYY-MM-DD, default today) toquery string No Last date (default from + 6 days; at most 31 days)
Responses
200 OK 404 Unknown facility 422 Invalid date range
Example request curl 'https://sportsmgnt.com/api/v1/facilities/riverbend-shelter-1/availability' \
-H 'Accept: application/json'
household
The signed-in household (personal access token with household:read)
GET /me/calendar
Calendar items between two dates (agency time; default the next 30 days; scope household:read)
Token required
Parameters: GET /me/calendar Name In Type Required Description fromquery string (date) No toquery string (date) No
Responses
200 Calendar items 422 Invalid range 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/me/calendar' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
GET /me/cart
The household's open cart with seat-hold expiry times (scope household:read)
Token required
Responses
200 Cart 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/me/cart' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
GET /me/enrollments
Enrolments of the household, newest first (scope household:read)
Token required
Parameters: GET /me/enrollments Name In Type Required Description statusquery string No pagequery integer No per_pagequery integer No
Responses
200 Enrolments 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/me/enrollments' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
GET /me/household
The token user's active household (scope household:read)
Token required
Responses
200 Household 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/me/household' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
GET /me/members
Household members (scope household:read; no medical data)
Token required
Responses
200 Members 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/me/members' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
reservations
Facility reservation requests (token)
GET /reservations
Your household's reservations
Token scope household:read.
Token required
Parameters: GET /reservations Name In Type Required Description pagequery integer No Page number per_pagequery integer No Items per page (max 100)
Responses
200 OK 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission
Example request curl 'https://sportsmgnt.com/api/v1/reservations' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
POST /reservations
Request a reservation
Token scope reservations:write. Creates a request only: no payment is taken and nothing is confirmed here. The same validation as the web form applies (booking windows, opening hours, capacity, slot locks). Pay, sign and upload paperwork from the reservation page.
Token required
Request body
Request body: POST /reservations Property Type Required Description facilitystring Yes Facility slug householdstring No H-number; defaults to the token user's active household modestring (once, weekly, dates) No datestring (date) No daysarray of integer No ISO weekdays for mode=weekly untilstring (date) No datesarray of string (date) No startstring Yes Agency-local time, 15-minute steps endstring Yes purposestring (private, nonprofit, school, commercial) No attendeesinteger Yes titlestring No organisationstring No notesstring No on_conflictstring (block, drop) No agreementobject No Optional: sign the rental agreement now
Responses
201 Request created 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 409 A requested time is already taken (program, booking, league game or blackout) 422 Validation failed 429 Too many requests; see Retry-After
Example request curl -X POST 'https://sportsmgnt.com/api/v1/reservations' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"facility":"string","household":"string","mode":"once","date":"2026-10-12","days":[1],"until":"2026-10-12","dates":["2026-10-12"],"start":"10:00","end":"13:00","purpose":"private","attendees":1,"title":"string","organisation":"string","notes":"string","on_conflict":"block","agreement":{"signer_name":"string","consent":true}}'
GET /reservations/{id}
One reservation
Token scope household:read.
Token required
Parameters: GET /reservations/{id} Name In Type Required Description idpath string Yes
Responses
200 OK 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 404 Not found or not yours
Example request curl 'https://sportsmgnt.com/api/v1/reservations/1' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
staff
Staff back office: rosters, attendance and reports. Requires a staff token with the matching scope; the token user's role and location scope apply, and an instructor-only user sees only the sessions they teach.
POST /staff/attendance
Record attendance for a meeting
Scope staff:attendance. The token user needs attendance.mark at the meeting's location (instructor-only users: their own sessions).
Token required
Request body
Request body: POST /staff/attendance Property Type Required Description meeting_idinteger Yes recordsarray of object Yes
Responses
200 Saved 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 404 No such meeting 422 Invalid records 429 Too many requests; see Retry-After
Example request curl -X POST 'https://sportsmgnt.com/api/v1/staff/attendance' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"meeting_id":1,"records":[{"enrollment_id":1,"status":"present"}]}'
GET /staff/reports/{key}
Run a library report
Scope staff:reports. Rows are limited to the token user's location scope. Keys: enrolment, revenue_cost_center, daily_cash, transmittals, refunds_status, waitlists, facility_utilization, attendance_pct, instructor_hours, demographics, fee_assistance, inventory, donations_fund, passes, balances_aging, audit_summary.
Token required
Parameters: GET /staff/reports/{key} Name In Type Required Description keypath string Yes fromquery string (date) No toquery string (date) No locationquery integer No seasonquery integer No
Responses
200 Report rows (sample data) 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 404 Unknown report 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/staff/reports/key' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
GET /staff/rosters/{session}
Roster of a session
Scope staff:rosters. The token user needs rosters.view at the session's location; an instructor-only user must be assigned to the session.
Token required
Parameters: GET /staff/rosters/{session} Name In Type Required Description sessionpath string Yes Session code (KB-F26-1012) or numeric id
Responses
200 Roster 401 Missing, invalid, revoked or expired token 403 The token lacks a scope, or the user lacks a permission 404 No such session 429 Too many requests; see Retry-After
Example request curl 'https://sportsmgnt.com/api/v1/staff/rosters/KB-F26-1001' \
-H 'Accept: application/json' \
-H 'Authorization: Bearer YOUR_TOKEN'
Schemas
Activity object
Activity Property Type Required Description codestring Yes typestring Yes titlestring Yes descriptionstring Yes categorystring Yes agesobject Yes gradesobject No residents_onlyboolean No languagestring No adaptiveboolean No required_waiversarray of string No required_documentsarray of string No accessibility_notesstring No sessionsarray of ActivitySession Yes
ActivitySession object
ActivitySession Property Type Required Description codestring Yes program_codestring Yes titlestring Yes typestring (class, camp, overnight_camp, league, child_care, dropin, event) Yes categorystring No seasonstring No locationobject Yes facilitystring | null No start_datestring (date) Yes end_datestring (date) Yes daysarray of string Yes start_timestring Yes end_timestring Yes agesobject No languagestring No adaptiveboolean No capacityinteger Yes seats_leftinteger Yes waitlistedinteger Yes resident_price_centsinteger Yes registrationobject Yes urlstring No
AttendanceRequest object
AttendanceRequest Property Type Required Description meeting_idinteger Yes recordsarray of object Yes
AttendanceResult object
AttendanceResult Property Type Required Description dataobject No metaMeta No
AvailabilityDay object
AvailabilityDay Property Type Required Description datestring (date) Yes openboolean Yes opens_atstring Yes closes_atstring Yes freearray of object Yes busyarray of object Yes
CalendarItem object
CalendarItem Property Type Required Description typestring Yes titlestring Yes personstring | null No person_idinteger | null No starts_atstring (date-time) Yes ends_atstring (date-time) Yes locationstring Yes facilitystring | null No notesstring | null No
Cart object
Cart Property Type Required Description itemsarray of object Yes total_centsinteger Yes
Enrollment object
Enrollment Property Type Required Description idinteger Yes sessionstring Yes titlestring Yes person_idinteger Yes statusstring (pending_review, enrolled, waitlisted, offered, cancelled, transferred, completed) Yes waitlist_positioninteger | null No enrolled_atstring | null (date-time) No offer_expires_atstring | null (date-time) No start_datestring (date) No end_datestring (date) No
Error object
Error Property Type Required Description errorobject Yes
Facility object
Facility Property Type Required Description slugstring Yes namestring Yes typestring Yes locationobject Yes capacityinteger Yes amenitiesarray of string No accessible_featuresarray of string No bookable_onlineboolean Yes approval_stepsinteger Yes instant_bookingboolean Yes insurance_requiredboolean Yes deposit_centsinteger Yes min_notice_daysinteger Yes max_advance_daysinteger Yes cutoff_daysinteger Yes opens_atstring Yes closes_atstring Yes urlstring Yes
FacilityDetail
Household object
Household Property Type Required Description public_idstring Yes namestring Yes kindstring No residencystring (resident, nonresident) Yes zipstring | null No statusstring No income_statusstring No income_verified_untilstring | null (date) No rolestring | null (primary, secondary, ) Yes membersinteger Yes balance_centsinteger Yes credit_centsinteger Yes
Location object
Location Property Type Required Description codestring Yes namestring Yes addressstring Yes phonestring | null No x_kmnumber Yes y_kmnumber Yes point_of_saleboolean No hoursobject No
Member object
Member Property Type Required Description idinteger Yes first_namestring Yes last_namestring Yes ageinteger | null No relationstring Yes guardian_rolestring Yes school_gradestring | null No has_allergyboolean No
Meta Property Type Required Description totalinteger No pageinteger No per_pageinteger No
ReportResult object
ReportResult Property Type Required Description dataobject No metaobject No
Reservation object
Reservation Property Type Required Description idstring Yes statusstring (draft, submitted, in_review, approved, awaiting_payment, confirmed, denied, cancelled) Yes status_labelstring No facilityobject Yes householdstring Yes purposestring (private, nonprofit, school, commercial) Yes attendeesinteger Yes titlestring | null No current_stepinteger Yes approval_stepsinteger Yes total_centsinteger Yes deposit_centsinteger Yes amount_due_centsinteger Yes insurance_statusstring (not_required, required, submitted, approved, rejected) Yes checkpointsobject Yes datesarray of object Yes urlstring Yes
ReservationRequest object
ReservationRequest Property Type Required Description facilitystring Yes Facility slug householdstring No H-number; defaults to the token user's active household modestring (once, weekly, dates) No datestring (date) No daysarray of integer No ISO weekdays for mode=weekly untilstring (date) No datesarray of string (date) No startstring Yes Agency-local time, 15-minute steps endstring Yes purposestring (private, nonprofit, school, commercial) No attendeesinteger Yes titlestring No organisationstring No notesstring No on_conflictstring (block, drop) No agreementobject No Optional: sign the rental agreement now
Roster object
Roster Property Type Required Description dataobject No metaMeta No
RosterParticipant object
RosterParticipant Property Type Required Description enrollment_idinteger Yes person_idinteger Yes first_namestring Yes last_namestring Yes ageinteger | null No householdstring No allergyboolean Yes allergy_notestring | null No Only for users with medical.view at the session's location; each read is audited. guardian_phonestring | null No emergency_contactsarray of object No authorized_pickupsarray of string No checkin_codestring Yes Code on the participant's QR pass, for check-in.