Customer Meeting Booking in Public API

This guide explains how to book a meeting through the Public API, allowing customers to search for available time slots, reserve a slot, and create a meeting.

Customer Meeting Booking Sequence Diagram

Link to Postman-collection: &money Public API

1. Fetching Configuration Details

Before customers can book a meeting, you need to retrieve relevant configuration details:

Fetch Meeting Themes

GET /bookme/meeting-topics

Parameters:

  • customerCategoryId - Optional filter for customer category ID
  • isCustomer - Flag indicating if the request is for a customer (required)

Response: Returns a list of available meeting topics.

Fetch Customer Types

GET /config/customer-types

Response: Returns available customer types.

Fetch Employees

GET /config/employees

Response: Returns a list of employees who can be booked.

Fetch Rooms

GET /config/rooms

Response: Returns available rooms for meetings.

2. Fetching Available Time Slots

Once the customer has selected meeting parameters, retrieve the available time slots:

GET /bookme/time-slots/available?requireEmployeeParticipation=true&lookForwardTime=7.00:00:00&...

Key Query Parameters:

Parameter Required Description Example Value
requireEmployeeParticipation Yes If true: all specified employees must be available. If false: at least one must be available true
explicitEmployeeIds No Specific employee IDs. Omit for Local/ServiceGroup employees [] or ["uuid1"]
employeeTypes No Employee pool types (V2). At least one required. Only used when requireEmployeeParticipation=false ["Local", "ServiceGroup"]
startDate No Search start date/time 2025-10-09T08:00:00Z
lookForwardTime No How far ahead to search "7.00:00:00" (7 days)
topic No Meeting theme ID "theme-uuid"
customerTypeId No Customer category ID "category-uuid"
meetingTypes No Types of meetings ["physical", "online"]
customerLocation No Customer’s location "Copenhagen"
meetingLocation No Meeting location "Branch-North"
requireRoom No Must have room available true
specificRooms No Specific room IDs ["room-uuid"]

Response: Returns a list of available time slots based on the search filters.

3. Reserving a Time Slot

After choosing an available time slot, the customer must reserve it. Reservations expire after exactly 5 minutes if not confirmed by creating a meeting.

POST /bookme/time-slots/reserve
Content-Type: application/json
Authorization: Bearer <access_token>

Request Body:

{
  "timeSlot": {
    "startDate": "2025-03-15T10:00:00Z",
    "endDate": "2025-03-15T11:00:00Z",
    "status": "Reserved",
    "employeeId": "employee-uuid",
    "roomId": "room-uuid"  // Optional, if room is required
  },
  "token": "session-token-uuid"  // Unique UUID for this customer session
}

Response: Confirms the reservation of the selected time slot.

4. Creating a Meeting

Once the time slot is reserved, finalize the meeting by creating a meeting record:

POST /bookme/meetings
Content-Type: application/json
Authorization: Bearer <access_token>

Request Body:

{
  "bookedBy": "customer",
  "customerCategoryId": "123",
  "timeSlotId": "12345",
  "type": "physical",
  "themeId": "111",
  "roomId": "222",
  "employeeId": "333",
  "customerId": "67890",
  "description": "Meeting description"
}

Response: Returns confirmation of the created meeting.

Downloading an ICS File

To download the meeting details in iCal format, use the following endpoint:

POST /bookme/meetings/{meetingId}/ical
Accept: text/calendar
Authorization: Bearer <access_token>

Request Body: All properties are optional in the request body. If a property is not provided, the default value will be used.

{
  "title": "Meeting title",
  "description": "Meeting description"
}

Response: Returns the meeting details in iCal format.

Security and Authentication

  • All API requests require OAuth2 authentication
  • Include a valid Bearer token in the Authorization header

Error Handling

Status Code Description
401 Unauthorized Missing or invalid authentication token
403 Forbidden Access is forbidden
404 Not Found Invalid resource (theme, employee, room, etc.)
409 Conflict Resource conflict (e.g., time slot already booked)
500 Internal Server Error Server-side error