Upsert Calendar Event
POST/calendar/event/upsert
Creates or updates a calendar event in a single call — no need to check whether the event already exists. This is the recommended endpoint for external integrations (e.g. Zapier, CRM sync) because it eliminates the if/else logic of calling add vs update.
Match priority (first match wins):
eventId— exact Terros event ID matchsourceId— external system ID, with owner → account → company fallback- Location + owner — if a location resolves and an event exists at that location for the same owner
If no match is found, a new event is created. If a match is found, the provided fields are merged into the existing event (unset fields are left unchanged).
Tips:
- Always include
sourceIdwhen syncing from an external system — it ensures idempotent writes and lets Terros track the external record ID. - For Comeback events, include
previousEventIdpointing to the original Consultation. notesis deprecated — use Workflow account notes for new integrations.
Defaults on create (applied only when the field is omitted):
eventType→ConsultationownerId→ the authenticated userduration→60minuteseventDate→ current timetitle→Untitled Event From Integration
Update behavior (when a match is found):
- Only provided fields are updated — omitted fields keep their existing values.
attendeeIdsupports explicitnullto clear the field. All other fields treatnullandundefinedthe same (preserve existing).
Outcome matching:
outcomeId is flexible — it can be:
- A Terros
EventOutcomeId(exact match) - An integration mapping string configured on the outcome
- A case-insensitive outcome name
User resolution:
ownerId, attendeeId, and dispatcherId each accept either a Terros UserId (e.g. U:abc123) or an email address. The system resolves emails to users within the authenticated company.
Request
Responses
- 200
- default
- 4XX
Success
Error
Unauthorized