:::endpoint PATCH /v1/me/calendar/events/{id}

Every field is optional; what you leave out stays as it was.

:::warning 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](/docs/api/calendar/overview).
:::

## Request

Everything [create](/docs/api/calendar/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. 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 |

```bash
curl -X PATCH https://api.proppertrading.com/v1/me/calendar/events/4471 \
  -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 |
| 404    | `resource_not_found` | No such appointment here                               |