Calendar events API
Before you start
- You need an API key and secret created in Control Panel > Security, used to obtain a bearer token. See Authentication overview.
- Every request must send the
Authorization: Bearer {{access_token}}andX-Tenant: {{tenant_id}}headers. - To create, update or delete an event you must act as a user with author rights on the target section. Calendar events belong to a section, so the authenticated user's permissions on that section apply.
Note: All examples use the base URL
{{api_domain}}/api. Replace{{api_domain}}with your intranet API domain and the{{snake_case}}placeholders with your own values.
Overview
The API exposes two related resources:
- Calendar events (
/calendar-event) — a single, one-off event. - Calendar event series (
/calendar-event-series) — a recurring event defined by recurrence settings (for example, every Tuesday). A series has the same sub-resources as a single event, plus create and update operations that accept recurrence rules.
Both resources share the same sub-resources for attendees, RSVPs (responses) and iCal export, so once you know one set you know the other. Identifiers in paths are integers.
Important: The
/api/event/{{event_id}}endpoints are a legacy version retained for backward compatibility. Use/api/calendar-event/...for new integrations. See Deprecated endpoints.
Calendar event endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /calendar-event/{{event_id}} |
Get a single event. |
| GET | /calendar-event/list?sectionId={{section_id}} |
List events in a section. |
| POST | /calendar-event |
Create an event. |
| DELETE | /calendar-event/{{event_id}} |
Delete an event. |
| GET | /calendar-event/{{event_id}}/ical |
Export the event as an iCal (.ics) file. |
| GET | /calendar-event/{{event_id}}/attendees |
List attendees. |
| GET | /calendar-event/{{event_id}}/responses/{{response}} |
List people who gave a given RSVP. |
| GET | /calendar-event/{{event_id}}/response-counts |
Get RSVP totals by response type. |
| POST | /calendar-event/{{event_id}}/respond?response={{response}} |
RSVP to the event as the authenticated user. |
| POST | /calendar-event/{{event_id}}/invite |
Invite users or groups. |
Get a calendar event
GET {{api_domain}}/api/calendar-event/{{event_id}}
Returns the event object (the same fields you supply when creating an event — see Event object fields).
List calendar events
GET {{api_domain}}/api/calendar-event/list?sectionId={{section_id}}
| Query parameter | Required | Description |
|---|---|---|
sectionId |
Yes | The section whose events you want to list. |
Create a calendar event
POST {{api_domain}}/api/calendar-event
Content-Type: application/json
{
"StartDate": "2026-06-06T07:38:18.503Z",
"EndDate": "2026-06-06T08:38:18.503Z",
"TimeZone": "GMT Standard Time",
"AllDayEvent": true,
"SectionID": 11436,
"OwnerID": 1344,
"Title": "Quarterly all-hands",
"AssetID": 0,
"Summary": "",
"Tags": "API",
"Location": "",
"Active": true,
"InAllCalendars": false,
"AttendType": "OpenAttendance",
"Category": "0",
"MaxNumberOfAttendees": 0,
"Description": "Some content goes here"
}
See Event object fields for the meaning of each field.
Delete a calendar event
DELETE {{api_domain}}/api/calendar-event/{{event_id}}
Export an event as iCal
GET {{api_domain}}/api/calendar-event/{{event_id}}/ical
Returns an iCal (.ics) representation suitable for importing into external calendar clients.
Attendees and RSVPs
GET {{api_domain}}/api/calendar-event/{{event_id}}/attendees
GET {{api_domain}}/api/calendar-event/{{event_id}}/responses/{{response}}
GET {{api_domain}}/api/calendar-event/{{event_id}}/response-counts
attendeeslists everyone attending.responses/{{response}}lists people who gave a specific RSVP, where{{response}}is one ofyes,noormaybe.response-countsreturns the totals for each response type.
Respond to an event
POST {{api_domain}}/api/calendar-event/{{event_id}}/respond?response={{response}}
| Query parameter | Required | Description |
|---|---|---|
response |
Yes | The RSVP to record for the authenticated user: Yes, No or Maybe. |
This endpoint takes no request body.
Invite users to an event
POST {{api_domain}}/api/calendar-event/{{event_id}}/invite
Content-Type: application/json
{
"Message": "Please join our event!",
"Invitations": [
{
"ID": 280,
"IsPerson": true
}
]
}
| Field | Type | Description |
|---|---|---|
Message |
string | Message included with the invitation. |
Invitations |
array | One entry per invitee. |
Invitations[].ID |
integer | The person or group identifier. |
Invitations[].IsPerson |
boolean | true to invite a person, false to invite a group. |
Event series endpoints
A series uses the same sub-resources as a single event. The differences are that create and update accept recurrence settings, and update requires a confirmRegeneration flag.
| Method | Path | Purpose |
|---|---|---|
| GET | /calendar-event-series/{{series_id}} |
Get a series. |
| POST | /calendar-event-series |
Create a series. |
| PUT | /calendar-event-series/{{series_id}}?confirmRegeneration=true |
Update a series. |
| DELETE | /calendar-event-series/{{series_id}} |
Delete a series. |
| GET | /calendar-event-series/{{series_id}}/ical |
Export the series as iCal. |
| GET | /calendar-event-series/{{series_id}}/attendees |
List attendees. |
| GET | /calendar-event-series/{{series_id}}/responses/{{response}} |
List people who gave a given RSVP. |
| GET | /calendar-event-series/{{series_id}}/response-counts |
Get RSVP totals by response type. |
| POST | /calendar-event-series/{{series_id}}/respond?response={{response}} |
RSVP to the series. |
| POST | /calendar-event-series/{{series_id}}/invite |
Invite users or groups. |
Create an event series
POST {{api_domain}}/api/calendar-event-series
Content-Type: application/json
{
"SeriesStartDate": "2026-05-29T07:38:18.521Z",
"EventStartDate": "2026-05-29T07:38:18.521Z",
"EventEndDate": "2026-05-29T08:38:18.521Z",
"TimeZone": "GMT Standard Time",
"AllDayEvent": false,
"RecurrenceSettings": {
"Type": {
"Mode": "Weekly",
"TypeSettings": {
"WeeklySelectedDays": ["Tuesday"],
"WeeklyFreq": "1"
}
},
"Ends": {
"Type": "EndBy",
"NumberOfOccurrences": 0,
"EndDate": "2026-08-31T00:00:00.000Z"
}
},
"SectionID": 11436,
"OwnerID": 1344,
"Title": "Weekly stand-up",
"AssetID": 0,
"Summary": "",
"Tags": "API"
}
Update an event series
PUT {{api_domain}}/api/calendar-event-series/{{series_id}}?confirmRegeneration=true
Content-Type: application/json
| Query parameter | Required | Description |
|---|---|---|
confirmRegeneration |
Yes | Set to true to confirm that changing the recurrence rules may regenerate the events in the series. |
The body matches the create body. The Type.Mode value (for example Daily or Weekly) determines which TypeSettings apply.
Warning: Updating recurrence settings can regenerate the events in a series, which may remove existing events and their RSVPs. Set
confirmRegeneration=trueonly when you intend this.
Reference
Event object fields
| Field | Type | Description |
|---|---|---|
StartDate |
string (ISO 8601) | Event start, in UTC. |
EndDate |
string (ISO 8601) | Event end, in UTC. |
TimeZone |
string | Windows time-zone name, for example GMT Standard Time. |
AllDayEvent |
boolean | Whether the event runs all day. |
SectionID |
integer | The section the event belongs to. |
OwnerID |
integer | The person who owns the event. |
Title |
string | Event title. |
AssetID |
integer | Optional header image asset; 0 for none. |
Summary |
string | Short summary. |
Tags |
string | Comma-separated tags. |
Location |
string | Free-text location. |
Active |
boolean | Whether the event is published. |
InAllCalendars |
boolean | Whether the event appears in all users' calendars. |
AttendType |
string | Attendance mode — see Attendance types. |
Category |
string | Category identifier. |
MaxNumberOfAttendees |
integer | Attendee cap; 0 for unlimited. |
Description |
string | Full event body. |
Series add the recurrence fields: SeriesStartDate, EventStartDate, EventEndDate and RecurrenceSettings.
Attendance types
| Value | Meaning |
|---|---|
OpenAttendance |
Anyone with access can attend without approval. |
Note:
OpenAttendance(anyone with access can attend) is the confirmed value. Other attendance modes may exist for invite-only or approval-required events; verify the exact value against your intranet before relying on it.
Response (RSVP) values
Yes, No, Maybe. The respond endpoints accept these as the response query value; the responses/{{response}} listing uses the lower-case form (yes, no, maybe).
Recurrence settings
| Field | Description |
|---|---|
Type.Mode |
Recurrence frequency, for example Daily or Weekly. |
Type.TypeSettings |
Settings specific to the mode. For Weekly: WeeklySelectedDays (array of day names) and WeeklyFreq (interval in weeks). |
Ends.Type |
How the series ends: EndAfter (a number of occurrences) or EndBy (a date). |
Ends.NumberOfOccurrences |
Used with EndAfter. |
Ends.EndDate |
Used with EndBy. |
Deprecated endpoints
| Method | Path | Replacement |
|---|---|---|
| GET | /event/{{event_id}} |
/calendar-event/{{event_id}} |
| GET | /event/{{event_id}}/ical |
/calendar-event/{{event_id}}/ical |
Note: For response body schemas, see the calendar endpoints under Events & calendar in the API reference. The request methods, paths, parameters and bodies on this page were verified against the API.