Events API
Base path: /api/orgs/{organizationId}/events
All endpoints require Authorization: Bearer <token>.
Events
Create Event
POST /api/orgs/{organizationId}/events
Authorization: Bearer <adminToken>
{
"title": "Annual General Meeting 2024",
"description": "Our yearly AGM open to all members.",
"eventType": "IN_PERSON",
"category": "MEETING",
"startDate": "2024-06-15T14:00:00Z",
"endDate": "2024-06-15T17:00:00Z",
"venueName": "City Hall — Room 201",
"address": {
"street": "123 Main St",
"city": "Toronto",
"province": "ON",
"postalCode": "M5H 1A1",
"country": "CA"
},
"locationTypeNote": "Parking available on site",
"registrationRequired": true,
"maxAttendees": 100,
"waitingListEnabled": true,
"isFree": false,
"basePrice": 15.00,
"memberPrice": 0.00,
"earlyBirdPrice": 10.00,
"currency": "CAD"
}
Event Types: IN_PERSON, VIRTUAL, HYBRID
List Events
GET /api/orgs/{organizationId}/events
Authorization: Bearer <token>
Query Parameters:
| Param | Type | Description |
|---|---|---|
status | string | DRAFT, PUBLISHED, CANCELLED, COMPLETED |
category | string | Filter by category |
from | date | Start date filter (ISO 8601) |
to | date | End date filter |
search | string | Search by title |
page | int | Page number |
size | int | Page size |
Get Event
GET /api/orgs/{organizationId}/events/{eventId}
Authorization: Bearer <token>
Update Event
PUT /api/orgs/{organizationId}/events/{eventId}
Authorization: Bearer <adminToken>
Delete Event
DELETE /api/orgs/{organizationId}/events/{eventId}
Authorization: Bearer <adminToken>
Publish Event
POST /api/orgs/{organizationId}/events/{eventId}/publish
Authorization: Bearer <adminToken>
Transitions the event from DRAFT to PUBLISHED. Notifies registered members.
Cancel Event
POST /api/orgs/{organizationId}/events/{eventId}/cancel
Authorization: Bearer <adminToken>
{
"reason": "Venue unavailable — will be rescheduled."
}
Notifies all registrants by email.
Bulk Import Events
POST /api/orgs/{organizationId}/events/import
Authorization: Bearer <adminToken>
Content-Type: multipart/form-data
file=<csv-file>
Accepted format: CSV with columns matching the event creation fields.
Event Registrations
Register for Event
POST /api/orgs/{organizationId}/events/{eventId}/registrations
Authorization: Bearer <token>
{
"userId": "user-uuid",
"ticketType": "MEMBER",
"notes": "Dietary restriction: vegetarian"
}
Response 201:
{
"id": "reg-uuid",
"status": "CONFIRMED",
"ticketType": "MEMBER",
"confirmedAt": "2024-05-10T09:00:00Z"
}
If the event is at capacity and waitingListEnabled is true, the status will be WAITLISTED.
List Registrations
GET /api/orgs/{organizationId}/events/{eventId}/registrations
Authorization: Bearer <adminToken>
Query Parameters:
| Param | Type | Description |
|---|---|---|
status | string | PENDING, CONFIRMED, WAITLISTED, CANCELLED |
page | int | Page number |
size | int | Page size |
Get Registration
GET /api/orgs/{organizationId}/events/{eventId}/registrations/{registrationId}
Authorization: Bearer <token>
Update Registration Status
PATCH /api/orgs/{organizationId}/events/{eventId}/registrations/{registrationId}/status
Authorization: Bearer <adminToken>
{ "status": "CONFIRMED" }
Used to move waitlisted attendees to confirmed when spots open up.
Cancel Registration
DELETE /api/orgs/{organizationId}/events/{eventId}/registrations/{registrationId}
Authorization: Bearer <token>
Members can cancel their own registration. Admins can cancel any registration.
Event Responses (Surveys)
Submit Response
POST /api/orgs/{organizationId}/events/{eventId}/responses/{responseId}/submit
Authorization: Bearer <token>
{
"answers": [
{ "questionId": "q1", "answer": "Very satisfied" },
{ "questionId": "q2", "answer": "The networking session" }
]
}
List Responses
GET /api/orgs/{organizationId}/events/{eventId}/responses
Authorization: Bearer <adminToken>
Get Response
GET /api/orgs/{organizationId}/events/{eventId}/responses/{responseId}
Authorization: Bearer <adminToken>