REST API endpoints for the Wakeve event planning application.
Production Base URL: https://api.wakeve.app
Local Development Base URL: http://localhost:8080 after running ./gradlew server:run
Content-Type: application/json
Authentication: Bearer token for protected user flows. Some legacy examples below omit auth only to show payload shape.
List all events.
Response:
{
"events": [
{
"id": "event-123",
"title": "Séminaire d'équipe",
"description": "...",
"eventType": "TEAM_BUILDING",
"eventTypeCustom": null,
"expectedParticipants": 20,
"minParticipants": 15,
"maxParticipants": 25,
"organizerId": "user-123",
"status": "DRAFT",
"createdAt": "2025-12-31T10:00:00Z",
"updatedAt": "2025-12-31T10:00:00Z"
}
]
}Get a specific event by ID.
Response:
{
"id": "event-123",
"title": "Séminaire d'équipe",
"description": "...",
"eventType": "TEAM_BUILDING",
"eventTypeCustom": null,
"expectedParticipants": 20,
"minParticipants": 15,
"maxParticipants": 25,
"organizerId": "user-123",
"status": "DRAFT",
"proposedSlots": [
{
"id": "slot-1",
"start": "2025-06-15T14:00:00Z",
"end": "2025-06-15T18:00:00Z",
"timezone": "Europe/Paris",
"timeOfDay": "SPECIFIC"
}
],
"deadline": "2025-06-01T23:59:59Z",
"createdAt": "2025-12-31T10:00:00Z",
"updatedAt": "2025-12-31T10:00:00Z"
}Create a new event.
Request:
{
"title": "Séminaire d'équipe",
"description": "...",
"organizerId": "user-123",
"eventType": "TEAM_BUILDING",
"eventTypeCustom": null,
"expectedParticipants": 20,
"minParticipants": 15,
"maxParticipants": 25,
"proposedSlots": [
{
"start": "2025-06-15T14:00:00Z",
"end": "2025-06-15T18:00:00Z",
"timezone": "Europe/Paris",
"timeOfDay": "SPECIFIC"
},
{
"start": null,
"end": null,
"timezone": "Europe/Paris",
"timeOfDay": "AFTERNOON"
}
],
"deadline": "2025-06-01T23:59:59Z"
}Response: 201 Created with event object
Update event status.
Request:
{
"status": "POLLING"
}Response: 200 OK with updated event
Get participants for an event.
Response:
{
"participants": ["user-123", "user-456", "user-789"]
}Add a participant to an event.
Request:
{
"participantId": "user-456"
}Response: 201 Created
Get poll results for an event.
Response:
{
"eventId": "event-123",
"votes": {
"slot-1": {
"user-123": "YES",
"user-456": "MAYBE"
}
}
}Submit votes for time slots.
Request:
{
"votes": [
{
"slotId": "slot-1",
"vote": "YES"
},
{
"slotId": "slot-2",
"vote": "NO"
}
]
}Response: 200 OK
Get all potential locations for an event.
Response:
[
{
"id": "loc-1",
"eventId": "event-123",
"name": "Paris",
"locationType": "CITY",
"address": null,
"coordinates": null,
"createdAt": "2025-12-31T10:00:00Z"
},
{
"id": "loc-2",
"eventId": "event-123",
"name": "Château de Versailles",
"locationType": "SPECIFIC_VENUE",
"address": "Place d'Armes, 78000 Versailles",
"coordinates": {
"latitude": 48.8049,
"longitude": 2.1204
},
"createdAt": "2025-12-31T10:05:00Z"
}
]Add a potential location to an event.
Request:
{
"name": "Paris",
"locationType": "CITY",
"address": null,
"coordinates": null
}Response: 201 Created with location object
Remove a potential location from an event.
Response: 204 No Content
{
id: string,
title: string,
description: string,
organizerId: string,
eventType: EventType,
eventTypeCustom?: string,
expectedParticipants?: number,
minParticipants?: number,
maxParticipants?: number,
status: EventStatus,
proposedSlots: TimeSlot[],
deadline: string,
finalDate?: string,
createdAt: string,
updatedAt: string
}type EventType = "BIRTHDAY" | "WEDDING" | "TEAM_BUILDING" | "CONFERENCE" |
"WORKSHOP" | "PARTY" | "SPORTS_EVENT" | "CULTURAL_EVENT" |
"FAMILY_GATHERING" | "OTHER" | "CUSTOM"{
id: string,
start?: string, // ISO date-time, can be null if timeOfDay != SPECIFIC
end?: string, // ISO date-time, can be null if timeOfDay != SPECIFIC
timezone: string,
timeOfDay: TimeOfDay
}type TimeOfDay = "ALL_DAY" | "MORNING" | "AFTERNOON" | "EVENING" | "SPECIFIC"{
id: string,
eventId: string,
name: string,
locationType: LocationType,
address?: string,
coordinates?: {
latitude: number,
longitude: number
},
createdAt: string
}type LocationType = "CITY" | "REGION" | "SPECIFIC_VENUE" | "ONLINE"All endpoints may return error responses:
{
"error": "Error message",
"code": "ERROR_CODE"
}VALIDATION_ERROR: Invalid input dataNOT_FOUND: Resource not foundFORBIDDEN: Action not allowed (e.g., update non-DRAFT event)INTERNAL_ERROR: Server error
titleanddescriptionare required- If
eventType = CUSTOM,eventTypeCustommust be provided - If
minParticipantsandmaxParticipantsprovided:max >= min - All participant counts must be non-negative
- If
timeOfDay = SPECIFIC,startandendare required - If
timeOfDay != SPECIFIC,startandendcan be null
nameis requiredlocationTypeis requiredaddressandcoordinatesare optional- Can only be added/removed when event is in DRAFT status
200 OK: Request successful201 Created: Resource created204 No Content: Resource deleted400 Bad Request: Validation error404 Not Found: Resource not found403 Forbidden: Action not allowed500 Internal Server Error: Server error