Skip to content

Reschedule one of the caller's own events (user)

A patch, not a replacement: every field is sometimes, and an omitted field is left untouched by the provider (null means "do not send", not "clear").

attendees and online_meeting are deliberately NOT accepted here: a reschedule must never re-notify or silently drop the invite list, or create/remove an online-meeting link as a side effect of moving the time.

Rate limited to 15 requests/minute (throttle:calendar-write).

HTTP: bearerAuth

User bearer token. Default authentication for customer-facing endpoints. Obtain a token by calling POST /login with your credentials, then send it on every subsequent request as Authorization: Bearer <token>. The token inherits the permissions and PBX scope of the authenticated user.

HTTP Authorization Scheme
bearer
Bearer format
Bearer <token>
event path · string *
accept header · string
example: application/json

Request body · application/json

Request schema
subjectstring
length: 0–255
startstring · date-time
Required if `end` is present.
endstring · date-time
Required if `start` is present. Must be after `start`.
timezonestring | null
bodystring | null
length: 0–20000
locationstring | null
length: 0–255

Responses

Response schema
dataobject
A single calendar event, normalised away from whichever provider (Microsoft or Google) produced it. This is the shape returned by `GET /me/calendar/events/{event}`, `POST /me/calendar/events`, `PATCH /me/calendar/events/{event}`, `GET /me/calendar/next` and `GET /users/{user}/calendar/next`. **Not the shape of `GET /me/calendar/agenda` or `GET /users/{user}/calendar/agenda`.** Those two endpoints currently serialise the underlying event data directly (camelCase field names, e.g. `seriesMasterId` instead of `series_master_id`), while every other endpoint on this page goes through this snake_case model. This is a known, tracked inconsistency in the API today, not a documentation error; see the `agenda` operations for the exact camelCase shape they return.
id*string
Provider-native event id. Opaque; do not parse it.
example: AAMkAGI1AAAtOTU1AAA=
deleted*boolean
True when the provider is reporting this event as removed. A deleted event carries no other field but `id` (and `calendar_id`, if known) - every other field is absent rather than stale.
example:
series_master_idstring | null
Id of the recurring series this event belongs to, or null for a non-recurring event.
subjectstring | null
Event title. Null when the provider did not say.
example: Weekly Sync
startstring | null · date-time
Start time, always UTC regardless of the mailbox's own timezone.
example: 2026-09-08T09:00:00Z
endstring | null · date-time
End time, always UTC regardless of the mailbox's own timezone.
example: 2026-09-08T09:30:00Z
is_all_day*boolean
example:
is_cancelled*boolean
True when the organizer cancelled the event (distinct from `deleted`, a tombstone).
example:
show_asstring | null
How the event presents the owner's availability. Null when the provider did not say.
enum: free tentative busy oof workingElsewhere null
example: busy
sensitivitystring | null
How private the owner marked the event. Null when the provider did not say.
enum: normal personal private confidential null
example: normal
responsestring | null
The mailbox owner's own answer to the invitation.
enum: none organizer tentativelyAccepted accepted declined notResponded null
example: accepted
calendar_idstring | null
Which calendar the event came from. Null means the mailbox's primary calendar.
attendeesarray<object>
Invitees. Null when the provider did not say (never an empty array standing in for "no attendees", which is itself a distinct fact).
emailstring · email
example: jane.smith@example.com
namestring | null
example: Jane Smith
typestring
enum: required optional
example: required
responsestring | null
enum: none organizer tentativelyAccepted accepted declined notResponded null
example: accepted
organizer_emailstring | null · email
example: jane.smith@example.com
locationstring | null
example: Conference Room 2
online_meetingstring | null
Provider-native online-meeting join URL. Null when the event has none.
example: https://meet.example.com/abc-defg-hij
Unauthenticated. The `Authorization: Bearer <token>` header was missing, malformed, or names a token that has been revoked or deleted.
Response schema
messagestring
The calendar assistant is not enabled for this account. Returned when there is no `user_provider_mappings` row for the caller carrying the assistant capability, or the capability is present but switched off. There is deliberately no fallback to "assume Microsoft" here, unlike other capabilities on the same table.
Response schema
messagestring
The event id does not resolve on this mailbox.
Response schema
messagestring
`end` present without `start` (or vice versa), or `end` not after `start`.
Response schema
messagestring
errorsobject
Free-form object
Too Many Requests. The rate limit for this action has been exceeded. Retry after the window indicated by the Retry-After header.
Response schema
messagestring
patch https://cockpit.voxbi.com/api/v1/me/calendar/events/{event}
Base URL
Request sample
curl -X PATCH 'https://cockpit.voxbi.com/api/v1/me/calendar/events/{event}' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  --data '{"start":"2026-09-08T10:00:00Z","end":"2026-09-08T10:30:00Z"}'
const response = await fetch('https://cockpit.voxbi.com/api/v1/me/calendar/events/{event}', {
  method: 'PATCH',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': `Bearer ${YOUR_TOKEN}`,
  },
  body: JSON.stringify({
    "start": "2026-09-08T10:00:00Z",
    "end": "2026-09-08T10:30:00Z"
}),
});

const data = await response.json();
console.log(data);
import requests

response = requests.patch('https://cockpit.voxbi.com/api/v1/me/calendar/events/{event}',
    headers={'Authorization': f'Bearer {YOUR_TOKEN}'},
    json={
    "start": "2026-09-08T10:00:00Z",
    "end": "2026-09-08T10:30:00Z"
}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
    'http' => [
        'method'  => 'PATCH',
        'header'  => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
        'content' => '{
    \"start\": \"2026-09-08T10:00:00Z\",
    \"end\": \"2026-09-08T10:30:00Z\"
}',
    ],
]);

$response = file_get_contents('https://cockpit.voxbi.com/api/v1/me/calendar/events/{event}', false, $context);
$data = json_decode($response, true);
print_r($data);
Sample request
{ … }
"start": "2026-09-08T10:00:00Z",
"end": "2026-09-08T10:30:00Z"
}
No example for this status.
{ … }
"message": "Unauthenticated."
}
Content-Type string
example: application/json
{ … }
"message": "The calendar assistant is not enabled for this account."
}
{ … }
"message": "This event no longer exists."
}
{ … }
"message": "The given data was invalid.",
"errors": { … }
"end": [ … ]
"The end field must be a date after start."
]
}
}
{ … }
"message": "Too Many Attempts."
}
Retry-After integer
Seconds to wait before retrying.
example: 60
Content-Type string
example: application/json