Access & visibility
Allow meetings.CreateCalendarEvent on your API key. Resource write permissions: core:CalendarEvent.
Workspace access by default. Private member data requires approved member delegation through Brigg-Act-As; the key supplies permissions while private ownership and project boundaries remain enforced.
Request fields
Send a JSON object with the following fields. Required fields must be included; omit optional fields you do not need.
titlestringRequiredDisplay title.
At least 1 character.
startstringRequiredStart timestamp with an explicit time zone, for example 2026-11-10T10:00:00+01:00. Brigg normalizes it to UTC. Do not send a date without a time zone.
endstringRequiredEnd timestamp with an explicit time zone, strictly later than start. Returned calendar times use UTC.
locationstringOptionalPhysical address or meeting location supplied to invitees.
descriptionstringOptionalDescriptive text.
agendastringOptionalDiscussion topics planned for the meeting.
notesstringOptionalNotes supplied for the calendar event.
attendeesarray of stringOptionalWorkspace member account IDs from List colleagues, not Person record IDs or email addresses. Members without an email address are returned in send.skipped.
visibilityarray of stringOptionalReserved compatibility field; it currently has no effect. Omit it. It cannot make the calendar event private or grant access to attendees.
At least 1 item.
send_invitebooleanOptionalSend email invitations after saving the event. Defaults to false. Requires at least one attendee with an email address.
messagestringOptionalThe cover note of the mail, instead of the default.
Choose the calendar you mean
This creates a Brigg-owned calendar record. Use Create connected calendar event to write to Google or Microsoft instead. Use Create meeting for a meeting record with notes and summaries. These are different resources.
Omit send_invite or set it to false to save without email. To send invitations, find member account IDs with List colleagues and set send_invite: true. Email addresses and customer Person IDs are not accepted as attendee identities by this operation.
Handle invitation delivery separately
The calendar event is saved before invitations are attempted. send.message_ids lists submitted emails, not proof of delivery. send.skipped contains member IDs without usable email addresses. If send.rate_limited is true, the event exists but invitations were not sent. Do not create the event again.
After resolving delivery or quota issues, use Update calendar event with the returned id, send_update: true and a new idempotency key. Retrying the original create with its original key returns that create's recorded outcome; it does not constitute a new send attempt.
Response
Returns 200 OK with a JSON body.
idstringRequiredBrigg calendar record ID. Use it with Get calendar event or Update calendar event.
uidstringRequiredCalendar invitation UID, distinct from the Brigg record ID.
sequencenumberRequiredCalendar invitation revision number.
sendobjectOptionalInvitation attempt result. Absent when no invitation attempt was made; the saved event exists independently of this result.
Nested fields
message_idsmap of stringRequiredRecipient email address to delivery message ID.
skippedarray of stringRequiredAttendee account ids with no email address.
rate_limitedbooleanOptionalThe org's invite quota was hit — the event write landed, no mail went out.
Errors & retries
Set BRIGG_REQUEST_ID once for each logical action. The samples send it as Idempotency-Key. Reuse the same value and body on retries, including after a timeout; a missing response does not prove the action failed.
For rate limits, follow the server’s retry guidance and back off. See HTTP errors and safe retries and limits.
| HTTP status | Code | What to do |
|---|---|---|
| 400 | invalid_json |
Send a JSON object with Content-Type: application/json. |
| 400 | invalid_input |
Check the request fields and types. Supply a stable Idempotency-Key containing 1–200 characters. |
| 401 | invalid_key |
The workspace API key is missing, invalid or revoked. |
| 403 | forbidden |
Check the key’s operation and resource grants. If Brigg-Act-As is supplied, the key must be authorized to delegate to that member. |
| 404 | not_found |
The requested operation or resource is not available to this credential. |
| 429 | rate_limited |
Wait for Retry-After before retrying. Reuse the original Idempotency-Key. |
Next steps
JSON schemas
Use the complete schemas for validation or client generation.
Full request JSON schema
{
"type": "object",
"properties": {
"title": {
"type": "string",
"minLength": 1,
"description": "Display title."
},
"start": {
"type": "string",
"description": "Start timestamp with an explicit time zone, for example 2026-11-10T10:00:00+01:00. Brigg normalizes it to UTC. Do not send a date without a time zone."
},
"end": {
"type": "string",
"description": "End timestamp with an explicit time zone, strictly later than start. Returned calendar times use UTC."
},
"location": {
"type": "string",
"description": "Physical address or meeting location supplied to invitees."
},
"description": {
"type": "string",
"description": "Descriptive text."
},
"agenda": {
"type": "string",
"description": "Discussion topics planned for the meeting."
},
"notes": {
"type": "string",
"description": "Notes supplied for the calendar event."
},
"attendees": {
"type": "array",
"items": {
"type": "string"
},
"description": "Workspace member account IDs from [List colleagues](/developers/reference/workspace/ListColleagues), not Person record IDs or email addresses. Members without an email address are returned in send.skipped."
},
"visibility": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Reserved compatibility field; it currently has no effect. Omit it. It cannot make the calendar event private or grant access to attendees."
},
"send_invite": {
"type": "boolean",
"description": "Send email invitations after saving the event. Defaults to false. Requires at least one attendee with an email address."
},
"message": {
"type": "string",
"description": "The cover note of the mail, instead of the default."
}
},
"required": [
"title",
"start",
"end"
],
"additionalProperties": false,
"examples": [
{
"title": "Northstar project kickoff",
"start": "2026-11-10T09:00:00.000Z",
"end": "2026-11-10T09:45:00.000Z"
}
]
}Full response JSON schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Brigg calendar record ID. Use it with [Get calendar event](/developers/reference/meetings/GetCalendarEvent) or [Update calendar event](/developers/reference/meetings/UpdateCalendarEvent)."
},
"uid": {
"type": "string",
"description": "Calendar invitation UID, distinct from the Brigg record ID."
},
"sequence": {
"type": "number",
"description": "Calendar invitation revision number."
},
"send": {
"type": "object",
"description": "Invitation attempt result. Absent when no invitation attempt was made; the saved event exists independently of this result.",
"properties": {
"message_ids": {
"description": "Recipient email address to delivery message ID.",
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"skipped": {
"type": "array",
"items": {
"type": "string"
},
"description": "Attendee account ids with no email address."
},
"rate_limited": {
"type": "boolean",
"description": "The org's invite quota was hit — the event write landed, no mail went out."
}
},
"required": [
"message_ids",
"skipped"
],
"additionalProperties": false
}
},
"required": [
"id",
"uid",
"sequence"
],
"additionalProperties": false,
"examples": [
{
"id": "e_calendar_kickoff",
"uid": "kickoff@example.com",
"sequence": 0
}
]
}