Get the caller's next meeting (user)
The next upcoming event on the caller's own agenda within the next 14
days, skipping anything the caller has declined and anything with no
usable start/end window. Unlike GET /me/calendar/agenda, this endpoint
returns the snake_case CalendarEvent model.
If the assistant is not enabled, or there is no upcoming meeting, this
answers 200 with the data key omitted entirely rather than a 403
or null.
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>
accept
header · string
example:
application/jsonResponses
OK. `data` is omitted when there is no not-enabled assistant or no upcoming meeting.
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 Syncstartstring | null · date-time
Start time, always UTC regardless of the mailbox's own timezone.
example:
2026-09-08T09:00:00Zendstring | null · date-time
End time, always UTC regardless of the mailbox's own timezone.
example:
2026-09-08T09:30:00Zis_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 nullexample:
busysensitivitystring | null
How private the owner marked the event. Null when the provider did not say.
enum:
normal personal private confidential nullexample:
normalresponsestring | null
The mailbox owner's own answer to the invitation.
enum:
none organizer tentativelyAccepted accepted declined notResponded nullexample:
acceptedcalendar_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.comnamestring | null
example:
Jane Smithtypestring
enum:
required optionalexample:
requiredresponsestring | null
enum:
none organizer tentativelyAccepted accepted declined notResponded nullexample:
acceptedorganizer_emailstring | null · email
example:
jane.smith@example.comlocationstring | null
example:
Conference Room 2online_meetingstring | null
Provider-native online-meeting join URL. Null when the event has none.
example:
https://meet.example.com/abc-defg-hijUnauthenticated. The `Authorization: Bearer <token>` header was missing,
malformed, or names a token that has been revoked or deleted.
Response schema
messagestring
get
https://cockpit.voxbi.com/api/v1/me/calendar/next
Base URL
Request sample
curl -X GET 'https://cockpit.voxbi.com/api/v1/me/calendar/next' \
-H 'Authorization: Bearer YOUR_TOKEN'
const response = await fetch('https://cockpit.voxbi.com/api/v1/me/calendar/next', {
method: 'GET',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${YOUR_TOKEN}`,
},
});
const data = await response.json();
console.log(data);
import requests
response = requests.get('https://cockpit.voxbi.com/api/v1/me/calendar/next',
headers={'Authorization': f'Bearer {YOUR_TOKEN}'}
)
response.raise_for_status()
data = response.json()
print(data)
<?php
$context = stream_context_create([
'http' => [
'method' => 'GET',
'header' => "Content-Type: application/json\r\nAuthorization: Bearer YOUR_TOKEN",
],
]);
$response = file_get_contents('https://cockpit.voxbi.com/api/v1/me/calendar/next', false, $context);
$data = json_decode($response, true);
print_r($data);
{ … }
"data": { … }
"id": "AAMkAGI1AAAtOTU1AAA=",
"deleted": false,
"series_master_id": null,
"subject": "Weekly Sync",
"start": "2026-09-08T09:00:00Z",
"end": "2026-09-08T09:30:00Z",
"is_all_day": false,
"is_cancelled": false,
"show_as": "busy",
"sensitivity": "normal",
"response": "accepted",
"calendar_id": null,
"attendees": [ … ],
{ … }
"email": "jane.smith@example.com",
"name": "Jane Smith",
"type": "required",
"response": "accepted"
}
],
"organizer_email": "jane.smith@example.com",
"location": "Conference Room 2",
"online_meeting": "https://meet.example.com/abc-defg-hij"
}
}
{ … }
"message": "Unauthenticated."
}
Content-Type
string
example:
application/json