Calendar
Calendar routes create Google Calendar events, sync meeting transcripts, and check availability. Requires the Google Calendar connector to be configured with a service account.
Routes
POST /api/calendar/events
Create a Google Calendar event and store it in the CRM.
Auth: Required
Request body:
| Field | Type | Required | Description |
|---|---|---|---|
title | string | yes | Event title |
start | string | yes | ISO 8601 datetime (e.g. 2026-05-15T10:00:00) |
end | string | yes (or duration_minutes) | ISO 8601 end time |
duration_minutes | number | no | Alternative to end. Calculated from start. |
description | string | no | Event description |
location | string | no | Physical location |
timezone | string | no | Default: America/New_York |
attendees | array | no | [{ "email": "...", "name": "..." }] |
meet | boolean | no | true to attach a Google Meet link |
candidate_id | string | no | Link to CRM candidate |
company_id | string | no | Link to CRM company |
Response: 201 Created
{
"ok": true,
"data": {
"event_id": "google_event_id_abc123",
"event_url": "https://calendar.google.com/...",
"meet_url": "https://meet.google.com/abc-defg-hij",
"meet_space_id": "conferences/abc123",
"calendar_id": "cal_a1b2c3d4"
}
}POST /api/calendar/transcripts/sync
Poll Google Meet API for transcripts from recent SM-hosted meetings and save them as CRM activities.
Auth: Required
Google Workspace requirement
Requires Google Workspace Business Standard or higher with meeting transcripts enabled. The Google service account must have meetings.space.readonly scope granted via Google Admin Console Domain-wide delegation.
Body:
{
"hours_back": 48,
"dry_run": false
}| Field | Type | Description |
|---|---|---|
hours_back | number | How far back to look. Default: 48 |
dry_run | boolean | If true, logs what would be synced without writing. Default: false |
Response:
{
"ok": true,
"data": {
"synced": 3,
"skipped": 1,
"errors": []
}
}PATCH /api/calendar/events/:id
Update a calendar event (in both Google Calendar and CRM).
Auth: Required
Path params: id — CRM calendar event ID (cal_...)
Body: Any subset of title, start, end, description, location, attendees.
GET /api/calendar/availability
Check Paula's calendar availability for booking slots.
Auth: Required (also called by booking pages with a token)
Query params:
| Param | Type | Description |
|---|---|---|
date_from | string | Start date (ISO) |
date_to | string | End date (ISO) |
duration_minutes | number | Meeting duration. Default: 30 |
timezone | string | Default: America/New_York |
Response:
{
"ok": true,
"data": {
"slots": [
{ "start": "2026-05-15T10:00:00-04:00", "end": "2026-05-15T10:30:00-04:00" },
{ "start": "2026-05-15T14:00:00-04:00", "end": "2026-05-15T14:30:00-04:00" }
]
}
}