PATCH
/v1/me/calendar/events/{id}Every field is optional; what you leave out stays as it was.
Say which appearance you mean
On a repeating appointment, send occurrence_start and scope. Without them
the change lands on the appearance the rule puts first, with scope defaulting
to this. See the overview.
Request
Everything create takes, plus:
| Field | Description |
|---|---|
occurrence_start | Which appearance, as the moment the rule originally put it. Copy it from the list |
scope | this, following or all. Defaults to this |
calendar_id | Moves the appointment to another calendar, by its id. Must be one you may write in |
tag_ids | Replaces the labels wholesale, so send the whole list. An empty array takes them all off. Left out means unchanged |
reminders | Replaces your own reminders, so send the whole list. A colleague's on a shared calendar stay. Left out: unchanged |
curl -X PATCH https://api.proppertrading.com/v1/me/calendar/events/evt_k7m2p9x4q8r3t6v5 \
-H "Authorization: Bearer ptat_9f2c1a44_3b8e7d2f5c9a1b4e6d8f0a2c4e6b8d1f" \
-H "Content-Type: application/json" \
-d '{
"starts_at": "2026-08-24T08:00:00Z",
"ends_at": "2026-08-24T08:30:00Z",
"occurrence_start": "2026-08-24T07:00:00Z",
"scope": "this"
}'
Response
200, with the row that was actually written. On scope: "this" that is a new
row standing in for the one appearance, so its id differs from the one you
sent. Use the one that comes back.
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | validation_failed | A field was wrong. error.param names it |
| 403 | insufficient_scope | This device does not hold calendar:write |
| 403 | calendar_read_only | The account may read that calendar but not write in it, or it is a followed calendar, which nobody writes in |
| 404 | resource_not_found | No such appointment here |