uExcelerate Calendar Service (1.0.0)

Download OpenAPI specification:

Calendar microservice — events, availability, holidays, calendar integrations (Google, Microsoft, Apple)

Events

Calendar event CRUD and approval flows

Get events for a date

Returns events for a specific date pulled in real-time from every connected calendar (Google, Microsoft, Apple) and merged with internal session records. Public route — kept un-authenticated for legacy callers and debugging. Source: src/routes/calendarRoutes.ts

query Parameters
date
required
string <date>
Example: date=2026-12-25

Holiday date (no time component)

userId
string <uuid>
Example: userId=550e8400-e29b-41d4-a716-446655440000

Owning user UUID

timezone
string
Example: timezone=Asia/Kolkata

IANA timezone identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Create an event

Creates a calendar event (1:1 or group coaching session) and fans it out across every connected calendar provider for the participants. Sends external-provider notifications to attendees per the connected calendar (Google / Microsoft / Apple) and updates the linked session record in the database. Owner can be ADMIN, COACH, or COACHEE; participant arrays are conditionally required based on owner. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
sessionId
required
string

Linked session UUID (coaching or group session)

title
required
string

Human-readable event title (shown in calendar UI)

sessionLink
string <uri>

Virtual meeting URL embedded in the event invite

startTime
required
string <date-time>

ISO 8601 timestamp in UTC

endTime
required
string <date-time>

ISO 8601 timestamp in UTC

timezone
string
Default: "UTC"

IANA timezone identifier

location
string

Free-text location (physical address or virtual meeting link description)

owner
required
string
Enum: "ADMIN" "COACH" "COACHEE"

Role that owns / created the event

coachId
Array of integers[ items >= 1 ]

Coach user ID (string for query params; numeric in create-event arrays)

learnerId
Array of integers[ items >= 1 ]

Learner user ID (string for query params; numeric in create-event arrays)

adminId
integer >= 1

Admin user ID

autoApproval
boolean

When true, skip the manager-approval flow and schedule immediately

Responses

Request samples

Content type
application/json
{
  • "sessionId": "550e8400-e29b-41d4-a716-446655440000",
  • "title": "Coaching Session — Sprint Planning",
  • "sessionLink": "https://zoom.us/j/123456789",
  • "startTime": "2026-05-13T10:00:00.000Z",
  • "endTime": "2026-05-13T11:00:00.000Z",
  • "timezone": "Asia/Kolkata",
  • "location": "Virtual",
  • "owner": "COACH",
  • "coachId": "12345",
  • "learnerId": "67890",
  • "adminId": 1,
  • "autoApproval": true
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Update an event

Updates an existing event's metadata (title, time, attendees, location). If the event has external-provider IDs stored, syncs the change back to every connected calendar so the change is reflected in attendees' native calendar apps. Owner + participants are required when scheduling fields change. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
sessionId
required
string

Linked session UUID (coaching or group session)

title
string

Human-readable event title (shown in calendar UI)

sessionLink
string <uri>

Virtual meeting URL embedded in the event invite

startTime
string <date-time>

ISO 8601 timestamp in UTC

endTime
string <date-time>

ISO 8601 timestamp in UTC

timezone
string

IANA timezone identifier

location
string

Free-text location (physical address or virtual meeting link description)

owner
string
Enum: "ADMIN" "COACH" "COACHEE"

Role that owns / created the event

coachId
Array of integers[ items >= 1 ]

Coach user ID (string for query params; numeric in create-event arrays)

learnerId
Array of integers[ items >= 1 ]

Learner user ID (string for query params; numeric in create-event arrays)

adminId
integer >= 1

Admin user ID

Responses

Request samples

Content type
application/json
{
  • "sessionId": "550e8400-e29b-41d4-a716-446655440000",
  • "title": "Coaching Session — Sprint Planning",
  • "sessionLink": "https://zoom.us/j/123456789",
  • "startTime": "2026-05-13T10:00:00.000Z",
  • "endTime": "2026-05-13T11:00:00.000Z",
  • "timezone": "Asia/Kolkata",
  • "location": "Virtual",
  • "owner": "COACH",
  • "coachId": "12345",
  • "learnerId": "67890",
  • "adminId": 1
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Delete an event

Cancels an event and propagates the cancellation to every external calendar provider where it was created. Triggers cancellation notifications to attendees through each provider. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
sessionId
required
string

Linked session UUID (coaching or group session)

Responses

Request samples

Content type
application/json
{
  • "sessionId": "550e8400-e29b-41d4-a716-446655440000"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Approve a pending event

Approves a pending (manager-approval-required) session and pushes it out to all connected calendars. Used by the admin / manager approval flow when auto-approval is disabled. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
sessionId
required
string

Linked session UUID (coaching or group session)

Responses

Request samples

Content type
application/json
{
  • "sessionId": "550e8400-e29b-41d4-a716-446655440000"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

List invite deliveries for an event

Returns per-recipient invite delivery status (sent / bounced / complaint / delivered) for an event. Powered by SES delivery webhooks captured at /api/v1/ses/notifications. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
path Parameters
eventId
required
string
Example: 550e8400-e29b-41d4-a716-446655440000

Calendar event identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Resend invites for an event

Manually re-sends ICS invites for an event. By default re-targets only recipients whose previous delivery failed (bounced / complaint). Useful for recovering from transient SES failures. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
path Parameters
eventId
required
string
Example: 550e8400-e29b-41d4-a716-446655440000

Calendar event identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

List external attendees for a session

Returns ad-hoc external email attendees attached to a session — guests that are not registered uExcelerate users. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
path Parameters
sessionId
required
string
Example: 550e8400-e29b-41d4-a716-446655440000

Linked session UUID (coaching or group session)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Replace external attendees for a session

Replaces the entire set of ad-hoc external attendees for a session and sends an ICS invite email to each new attendee. sessionType distinguishes coaching vs group session storage. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
path Parameters
sessionId
required
string
Example: 550e8400-e29b-41d4-a716-446655440000

Linked session UUID (coaching or group session)

query Parameters
sessionType
required
string
Enum: "coaching" "group"
Example: sessionType=coaching

Session category

Request Body schema: application/json
required
required
Array of objects

Array of attendee email addresses

Responses

Request samples

Content type
application/json
{
  • "attendees": [
    ]
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Availability

User availability windows and slot lookups

Get roles for the authenticated user

Returns the role list assigned to the authenticated user (some combination of Coach / Learner / Admin). Drives role-switching in the frontend. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Get user availability

Retrieves the requesting user's weekly availability windows across all assigned roles. Used by the coach scheduling UI and the slot-finder algorithm. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Update user availability

Replaces the authenticated user's weekly availability windows for a given role. Optional useDefaultAvailability=true falls back to organization defaults. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
role
required
string

Role context for the request (Coach / Learner / Admin)

timezone
required
string

IANA timezone identifier

useDefaultAvailability
boolean

When true, fall back to the organization default availability windows

required
object

Responses

Request samples

Content type
application/json
{
  • "role": "Coach",
  • "timezone": "Asia/Kolkata",
  • "useDefaultAvailability": false,
  • "availability": {
    }
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Update user timezone

Updates the authenticated user's preferred IANA timezone for a given role. Affects slot rendering and external-calendar event times. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
role
required
string

Role context for the request (Coach / Learner / Admin)

timezone
required
string

IANA timezone identifier

Responses

Request samples

Content type
application/json
{
  • "role": "Coach",
  • "timezone": "Asia/Kolkata"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Get available slots (one-on-one)

Returns bookable slots for a one-on-one session on a given date. Both coachId and learnerId are required; the intersection of their availability + free/busy + holiday calendars drives the slot color/availability. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
query Parameters
date
required
string <date>
Example: date=2026-12-25

Holiday date (no time component)

role
required
string
Example: role=Coach

Role context for the request (Coach / Learner / Admin)

timezone
string
Example: timezone=Asia/Kolkata

IANA timezone identifier

coachId
required
string
Example: coachId=12345

Coach user ID (string for query params; numeric in create-event arrays)

learnerId
required
string
Example: learnerId=67890

Learner user ID (string for query params; numeric in create-event arrays)

sessionId
string
Example: sessionId=550e8400-e29b-41d4-a716-446655440000

Linked session UUID (coaching or group session)

reschedule
string
Enum: "true" "false"
Example: reschedule=false

When "true", exclude the given sessionId from busy lookups so its current slot stays available

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Get available slots (admin / array-based)

Array-based slot lookup used by the admin scheduling flow. Selection logic — 1 coach + 1 learner = intersection of both; 1 coach + many learners = coach availability only; many coaches + 1 learner = learner availability only; many + many = default availability windows. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
query Parameters
date
required
string <date>
Example: date=2026-12-25

Holiday date (no time component)

role
required
string
Example: role=Coach

Role context for the request (Coach / Learner / Admin)

timezone
string
Example: timezone=Asia/Kolkata

IANA timezone identifier

coachId
string
Example: coachId=12345

Coach user ID (string for query params; numeric in create-event arrays)

learnerId
string
Example: learnerId=67890

Learner user ID (string for query params; numeric in create-event arrays)

string or Array of strings

Comma-separated list or repeated query param of coach user IDs

string or Array of strings

Comma-separated list or repeated query param of learner user IDs

sessionId
string
Example: sessionId=550e8400-e29b-41d4-a716-446655440000

Linked session UUID (coaching or group session)

reschedule
string
Enum: "true" "false"
Example: reschedule=false

When "true", exclude the given sessionId from busy lookups so its current slot stays available

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Get month calendar (color-coded)

Returns a month view color-coded by availability, holidays, and existing events for a single coach/learner pairing. coachId is required when role=Coach; learnerId is required when role=Learner. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
query Parameters
year
required
string
Example: year=2026

Four-digit year

month
required
string
Example: month=5

Month number (1–12)

role
required
string
Example: role=Coach

Role context for the request (Coach / Learner / Admin)

timezone
string
Example: timezone=Asia/Kolkata

IANA timezone identifier

coachId
string
Example: coachId=12345

Coach user ID (string for query params; numeric in create-event arrays)

learnerId
string
Example: learnerId=67890

Learner user ID (string for query params; numeric in create-event arrays)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Get month calendar (admin / array-based)

Array-based month calendar for admin flows. Same coach/learner selection logic as /available-slots-admin. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
query Parameters
year
required
string
Example: year=2026

Four-digit year

month
required
string
Example: month=5

Month number (1–12)

role
required
string
Example: role=Coach

Role context for the request (Coach / Learner / Admin)

timezone
string
Example: timezone=Asia/Kolkata

IANA timezone identifier

coachId
string
Example: coachId=12345

Coach user ID (string for query params; numeric in create-event arrays)

learnerId
string
Example: learnerId=67890

Learner user ID (string for query params; numeric in create-event arrays)

string or Array of strings

Comma-separated list or repeated query param of coach user IDs

string or Array of strings

Comma-separated list or repeated query param of learner user IDs

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Get unavailability calendar

Returns user + role-specific holidays and unavailability blocks for a given month. Used to grey out dates in the calendar UI. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
query Parameters
year
required
string
Example: year=2026

Four-digit year

month
required
string
Example: month=5

Month number (1–12)

role
required
string
Example: role=Coach

Role context for the request (Coach / Learner / Admin)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Check user availability at specific time (legacy)

Public legacy endpoint used by the legacy uex-server to check whether a user is free at a specific dateTime. Bypasses bearer auth for service-to-service calls. Source: src/routes/legacyRoutes.ts

query Parameters
userId
required
string <uuid>
Example: userId=550e8400-e29b-41d4-a716-446655440000

Owning user UUID

role
required
string
Example: role=Coach

Role context for the request (Coach / Learner / Admin)

dateTime
required
string <date-time>
Example: dateTime=2026-05-13T10:00:00.000Z

ISO 8601 timestamp to check

timezone
string
Example: timezone=Asia/Kolkata

IANA timezone identifier

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Check user setup status (legacy)

Public legacy endpoint used by the legacy uex-server to check whether a user has completed calendar setup (any connection + any availability window). Source: src/routes/legacyRoutes.ts

query Parameters
userId
required
string <uuid>
Example: userId=550e8400-e29b-41d4-a716-446655440000

Owning user UUID

role
required
string
Example: role=Coach

Role context for the request (Coach / Learner / Admin)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Holidays

Holiday management

List user holidays

Returns all holidays (personal time off) for the authenticated user across all roles. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Create a holiday

Creates a holiday / personal time off entry covering a date range (inclusive) for the authenticated user and a specific role. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
name
required
string

Display name

role
required
string

Role context for the request (Coach / Learner / Admin)

startDate
required
string <date>

Holiday start date (inclusive)

endDate
required
string <date>

Holiday end date (inclusive)

Responses

Request samples

Content type
application/json
{
  • "name": "Christmas Day",
  • "role": "Coach",
  • "startDate": "2026-12-25",
  • "endDate": "2026-12-26"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Delete a holiday

Deletes a holiday entry by its UUID. The owning user must match the authenticated user. Source: src/routes/availabilityRoutes.ts

Authorizations:
bearerAuth
path Parameters
holidayId
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the holiday entry

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Connections

External calendar provider connections (Google, Microsoft, Apple)

Get OAuth authorization URL

Returns the OAuth 2.0 authorization URL the client should redirect the user to in order to grant calendar access. Supports google, outlook, and apple (CalDAV). Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
path Parameters
provider
required
string
Enum: "google" "outlook" "apple"
Example: google

Calendar provider being connected

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Google OAuth callback

OAuth 2.0 callback from Google. Receives the authorization code, exchanges it for access + refresh tokens, and persists the calendar connection for the user identified by the signed state parameter. Not called directly by clients — registered as a redirect URI with Google. Source: src/routes/calendarRoutes.ts

query Parameters
code
required
string
Example: code=4/0AY0e-g7abc...

OAuth 2.0 authorization code returned by the provider

state
required
string
Example: state=eyJ1c2VySWQiOiI1NTBlODQwMC0uLi4ifQ

Signed state token issued during /auth/{provider}; correlates the callback to the originating user

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Outlook OAuth callback

OAuth 2.0 callback from Microsoft (Outlook / Microsoft 365). Receives the authorization code, exchanges it for tokens via the Graph identity platform, and persists the connection. Not called directly by clients — registered as a redirect URI with Microsoft. Source: src/routes/calendarRoutes.ts

query Parameters
code
required
string
Example: code=4/0AY0e-g7abc...

OAuth 2.0 authorization code returned by the provider

state
required
string
Example: state=eyJ1c2VySWQiOiI1NTBlODQwMC0uLi4ifQ

Signed state token issued during /auth/{provider}; correlates the callback to the originating user

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Connect Apple Calendar

Connects an Apple iCloud Calendar via CalDAV using an app-specific password. Validates the credentials against the supplied CalDAV server URL and stores the connection. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
username
required
string <email>

Apple ID / iCloud account email used for CalDAV auth

password
required
string

App-specific password issued by Apple for CalDAV access

serverUrl
required
string <uri>

CalDAV server URL

Responses

Request samples

Content type
application/json
{}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Auto-connect calendar (service-to-service)

Service-to-service endpoint called by auth-service immediately after a user signs in with Google or Microsoft. Reuses the OAuth tokens already collected during login to auto-provision a calendar connection — the user does not see a second consent screen. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
Request Body schema: application/json
required
userId
required
integer <uuid> >= 1

Owning user UUID

provider
required
string
Enum: "GOOGLE" "OUTLOOK"

Calendar provider being connected

email
required
string <email>

Email address

accessToken
required
string

OAuth 2.0 access token issued by the provider

refreshToken
string

OAuth 2.0 refresh token used to mint new access tokens

tokenExpiresAt
string <date-time>

ISO 8601 timestamp at which the access token expires

calendarId
string

Provider-specific calendar ID to attach this connection to

calendarName
string

Human-readable name of the provider calendar

Responses

Request samples

Content type
application/json
{
  • "userId": "550e8400-e29b-41d4-a716-446655440000",
  • "provider": "google",
  • "email": "attendee@example.com",
  • "accessToken": "ya29.a0AfH6SMB...",
  • "refreshToken": "1//0gabcRefreshTokenExample",
  • "tokenExpiresAt": "2026-05-13T10:30:00.000Z",
  • "calendarId": "primary",
  • "calendarName": "Work Calendar"
}

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

List connected calendars

Lists every external calendar connection the authenticated user has active (Google, Microsoft, Apple). Used by the settings UI to render connection cards and by the event creator to decide which providers to fan out to. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Disconnect a calendar

Disconnects an external calendar connection by its UUID, revoking stored tokens. Future events for this user will no longer fan out to that provider. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth
path Parameters
connectionId
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the calendar connection

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Check user connectivity status

Returns the authenticated user's calendar-connection and availability-setup completeness for a given role. Drives the onboarding checklist. Source: src/routes/statusRoutes.ts

Authorizations:
bearerAuth
query Parameters
role
required
string
Example: role=Coach

Role context for the request (Coach / Learner / Admin)

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Notifications

Calendar-related notifications

Get calendar notification status

Returns whether the authenticated user should see the calendar setup / welcome banner. Used by the frontend to drive a one-time onboarding nudge. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Dismiss calendar notification

Marks the calendar welcome notification as seen for the authenticated user so it stops appearing on subsequent logins. Source: src/routes/calendarRoutes.ts

Authorizations:
bearerAuth

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

AWS SES → SNS delivery webhook

Amazon SES event webhook (bounces, complaints, deliveries) delivered via SNS. Body is the raw SES SNS notification payload. No bearer auth — verified via SNS signature (verification is currently TODO). Source: src/routes/calendarRoutes.ts

Request Body schema: application/json
required
property name*
additional property
any

Responses

Request samples

Content type
application/json
{ }

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}

Health

Service health checks

Service health check

Lightweight health probe used by load balancers and container orchestrators. Returns 200 when the service process is up; does not verify DB or downstream connectivity. Source: src/server.ts

Responses

Response samples

Content type
application/json
{
  • "success": true,
  • "message": "Operation completed successfully",
  • "data": {
    }
}