---
title: "Prepare a title/start/end change without writing to the provider; review with the user, then PATCH with confirm:true"
method: POST
path: "/v1/integrations/{id}/events/{eventId}/propose"
---

# Prepare a title/start/end change without writing to the provider; review with the user, then PATCH with confirm:true

`POST /v1/integrations/{id}/events/{eventId}/propose`

## Request

- Base URL: `https://volai.cz`
- URL: `https://volai.cz/v1/integrations/{id}/events/{eventId}/propose`
- Auth: HTTP bearer

Prepares a proposed change to an event's title, start or end WITHOUT writing to the provider (`patch` and `sourceRevision` like `PATCH .../events/{eventId}`, but without `confirm`) - a pure function over the stored integration type, it never calls the provider. Show the proposal (`proposal.patch`) to the user for explicit approval, then send `PATCH .../events/{eventId}` with the same values and `confirm: true`.

## Path parameters

- `id` string, required
- `eventId` string, required

## Request body

- object
  - `calendarId` string, required: Calendar id from list_calendars, for example primary.
  - `sourceRevision` string, required: Provider revision of the event exactly as returned by get_calendar_event. The update is rejected with calendar_stale_revision if it changed since.
  - `patch` object, required: The title, start and end fields to change, exactly as reviewed and approved by the user in propose_calendar_update.
    - `title` string: New event title, up to 500 characters. Include only the fields you are changing in this patch.
    - `start` string: New start time, RFC 3339 with an offset, for example 2026-09-08T09:00:00+02:00, or an all-day date as YYYY-MM-DD. Apple floating times may omit the offset.
    - `end` string: New end time in the same format as start. All-day end dates are exclusive, so use the day after the last day.

## Response `200`

Proposed patch for human review

- object
  - `proposal` object, required
    - `calendarId` string, required
    - `externalId` string, required
    - `sourceRevision` string, required
    - `patch` object, required
      - `title` string: New event title, up to 500 characters. Include only the fields you are changing in this patch.
      - `start` string: New start time, RFC 3339 with an offset, for example 2026-09-08T09:00:00+02:00, or an all-day date as YYYY-MM-DD. Apple floating times may omit the offset.
      - `end` string: New end time in the same format as start. All-day end dates are exclusive, so use the day after the last day.
    - `provider` 'google-calendar' | 'apple-calendar', required
    - `proposedAt` string, required
    - `requiresExplicitConfirmation` true, required

## Other responses

- `400`: Error codes: validation (request), calendar_unsupported (request), calendar_invalid_patch (request).
- `401`: Error codes: unauthorized (request).
- `403`: Error codes: account_suspended (account).
- `404`: Error codes: calendar_not_found (account).
- `429`: Error codes: rate_limited (busy).
- `500`: Error codes: internal_error (service).

---

[API](https://skmtc.dev/volai/apis/volai-rest-api.md) · [All operations](https://skmtc.dev/volai/apis/volai-rest-api/llms.txt) · [OpenAPI document](https://skmtc.dev/volai/apis/volai-rest-api/revisions/12029b05e2fa?raw)
