List Scheduled Events
Retrieve a paginated list of scheduled events in your Zeeg workspace, with filters for status, date range, host, team, and invitee.
curl --request GET \
--url https://api.zeeg.me/v2/scheduled-events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zeeg.me/v2/scheduled-events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zeeg.me/v2/scheduled-events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zeeg.me/v2/scheduled-events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zeeg.me/v2/scheduled-events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.zeeg.me/v2/scheduled-events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/scheduled-events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"collection": [
{
"uri": "https://api.zeeg.me/v2/scheduled-events/zg-O69bac566950c6",
"uuid": "zg-O69bac566950c6",
"title": "30-Minute Discovery Call",
"type": "ONE_ON_ONE",
"startTime": "2026-04-15T09:00:00.000000Z",
"endTime": "2026-04-15T09:30:00.000000Z",
"duration": 30,
"status": "confirmed",
"eventTypeUri": "https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e",
"location": {
"type": "Google Meet",
"joinUrl": "https://meet.google.com/abc-defg-hij"
},
"maxActiveInvitees": 1,
"activeInviteesCount": 1,
"invitees": [
{
"uuid": "zg-O69bad4047abf0",
"salutation": "Ms.",
"fullName": "Sophie Laurent",
"email": "sophie.laurent@northwind.io",
"guests": [
"alex.chen@northwind.io"
],
"timeZone": "Europe/Paris",
"cancellation": {
"cancelledAt": null,
"cancelledBy": null,
"cancellerType": null,
"cancellationReason": null
},
"payment": null,
"questions": [
{
"answer": "Product demo and pricing options",
"answer_type": "STRING",
"question": "What would you like to discuss?"
}
],
"noShow": false,
"noShowAt": null,
"scheduledAt": "2026-04-10T08:30:00.000000Z",
"utm": {
"utm_campaign": "spring_launch",
"utm_source": "linkedin",
"utm_medium": "social",
"utm_content": null,
"utm_term": null
},
"customQueryParams": {
"c__ref": "nl-2026-04"
},
"cancelUrl": "https://zeeg.me/cancel/zg-O69bad4047abf0",
"rescheduleUrl": "https://zeeg.me/reschedule/zg-O69bad4047abf0",
"rescheduled": false,
"rescheduling": null,
"nextRescheduling": null
}
],
"guests": [
"alex.chen@northwind.io"
],
"hosts": [
{
"firstName": "Lena",
"lastName": "Meier",
"email": "lena.meier@horizondigital.de",
"slug": "lena-meier",
"url": "https://zeeg.me/lena-meier",
"avatarUrl": null
}
],
"teamName": "Sales",
"createdAt": "2026-04-10T08:30:00.000000Z",
"updatedAt": "2026-04-10T08:30:02.000000Z",
"currentTime": "2026-03-23T10:00:00.000000Z"
},
{
"uri": "https://api.zeeg.me/v2/scheduled-events/zg-O69bad4047abf0",
"uuid": "zg-O69bad4047abf0",
"title": "30-Minute Discovery Call",
"type": "ONE_ON_ONE",
"startTime": "2026-04-18T14:00:00.000000Z",
"endTime": "2026-04-18T14:30:00.000000Z",
"duration": 30,
"status": "cancelled",
"eventTypeUri": "https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e",
"location": {
"type": "Google Meet",
"joinUrl": "https://meet.google.com/klm-nopq-rst"
},
"maxActiveInvitees": 1,
"activeInviteesCount": 0,
"invitees": [
{
"uuid": "zg-O69bac566950c6",
"salutation": null,
"fullName": "Marco Rossi",
"email": "marco.rossi@horizondigital.de",
"guests": [],
"timeZone": "Europe/Berlin",
"cancellation": {
"cancelledAt": "2026-04-17T10:00:00.000000Z",
"cancelledBy": "marco.rossi@horizondigital.de",
"cancellerType": "host",
"cancellationReason": "Schedule conflict with another commitment."
},
"payment": null,
"questions": null,
"noShow": false,
"noShowAt": null,
"scheduledAt": "2026-04-12T11:00:00.000000Z",
"utm": {
"utm_campaign": null,
"utm_source": null,
"utm_medium": null,
"utm_content": null,
"utm_term": null
},
"customQueryParams": {},
"cancelUrl": null,
"rescheduleUrl": null,
"rescheduled": true,
"rescheduling": null,
"nextRescheduling": {
"oldStartAt": "2026-04-18T14:00:00.000000Z",
"newStartAt": "2026-04-22T09:30:00.000000Z",
"rescheduledAt": "2026-04-17T10:00:00.000000Z",
"previousEventUuid": "zg-O69bad4047abf0",
"previousInviteeUuid": "zg-O69bac566950c6",
"reason": "Requested a later slot.",
"rescheduledBy": "invitee",
"reschedulerFullName": null
}
}
],
"guests": [],
"hosts": [
{
"firstName": "Lena",
"lastName": "Meier",
"email": "lena.meier@horizondigital.de",
"slug": "lena-meier",
"url": "https://zeeg.me/lena-meier",
"avatarUrl": null
}
],
"teamName": "Sales",
"createdAt": "2026-04-12T11:00:00.000000Z",
"updatedAt": "2026-04-17T10:00:00.000000Z",
"currentTime": "2026-03-23T10:00:00.000000Z"
}
],
"pagination": {
"total": 2,
"count": 2,
"totalPages": 1,
"previousPage": null,
"currentPage": 1,
"nextPage": null
}
}{
"message": "Unauthenticated."
}{
"error": {
"type": "insufficient_scope",
"message": "Your token is missing the required scope(s). Include at least one of: events:read, events:write.",
"error_id": "9cfa47d0-d633-44ba-b3a8-0845d4fca38a",
"required_scopes": [
"events:read",
"events:write"
]
}
}{
"message": "The selected status is invalid.",
"errors": {
"status": [
"The selected status is invalid."
]
}
}Authorizations
Query Parameters
Order results based on the startTime.
asc, desc Limit the number of returned results per page.
1 <= x <= 100Filter based on event status. Possible values are: active, cancelled. Omit for all events.
confirmed, cancelled Filter for events starting after the specified time.
"2026-04-01T00:00:00.000000Z"
Filter for events starting before the specified time.
"2026-04-30T23:59:59.000000Z"
Filters results based on the scope. Currently only 'all' is supported, returning all events of the whole organization. More options coming soon.
all Filter for events hosted by a specific user in your organization based on the user's slug.
"lena-meier"
Filter for events hosted by a specific user in your organization based on the user's email address.
"lena.meier@horizondigital.de"
Filter for events of a specific invitee by their email address.
"sophie.laurent@northwind.io"
Filter for events that belong to a specific team in your organization based on the team's slug.
Case-insensitive search across the invitee name, the invitee email, the answers to booking questions, and the values of custom query parameters. The keyword matches any part of a field, and an event is returned if any of its confirmed invitees matches. Custom query parameter names are not searched, only their values. For reconciliation, use customQueryParams instead: the keyword matches partial text, so EYE-PROBE-0002 also returns an event tagged EYE-PROBE-00021.
Filter for events whose custom query parameter carries exactly this value. The value must match in full, so EYE-PROBE-0002 never returns an event tagged EYE-PROBE-00021. Write the parameter name with or without its c__ prefix — c__ticket and ticket name the same parameter, because every name here is one. Combine at most three parameters across customQueryParams and hasCustomQueryParams; they are AND-ed. Example: ?customQueryParams[c__ticket]=EYE-PROBE-0002. Send an empty value to match the events tagged with an empty one. Values are stored with any HTML tags removed, so match against the stored value: a booking tagged size<10 is stored as size.
Hide child attributes
Hide child attributes
100{ "c__ticket": "EYE-PROBE-0002" }
Filter for events that carry the named custom query parameter at any value, including an empty one. The name takes the c__ prefix or leaves it off, as in customQueryParams. Counts towards the same limit of three as customQueryParams. Repeat the name in brackets — ?hasCustomQueryParams[]=c__region, or the indexed form ?hasCustomQueryParams[0]=c__region. A bare repeated key (?hasCustomQueryParams=a&hasCustomQueryParams=b) collapses to the last value and is rejected.
3100["c__region"]
Page number for paginated results.
x >= 1Filter for events that belong to a specific event type, identified by its ID.
Response
OK
Hide child attributes
Hide child attributes
Total number of records.
x >= 0Number of records per page.
x >= 0Total number of pages.
x >= 0Current page number.
x >= 1Link to previous page, or null.
"/v2/scheduled-events?page=1"
Link to next page, or null.
"/v2/scheduled-events?page=3"
Hide child attributes
Hide child attributes
Public API URI of the scheduled event resource.
Zeeg event identifier (zg-XXX format)
"zg-O69bac566950c6"
Title of the scheduled event.
Event type kind (e.g. ONE_ON_ONE, GROUP, ROUND_ROBIN).
ISO 8601 UTC start time of the booked event.
ISO 8601 UTC end time of the booked event.
Event duration in minutes.
Booking status (e.g. confirmed, cancelled).
Public API URI of the event type this booking was made against.
Maximum number of active invitees the event allows.
Current number of active (non-cancelled) invitees.
Invitees booked on the scheduled event.
Hide child attributes
Hide child attributes
Full name of the invitee.
Email address of the invitee.
IANA time zone of the invitee.
Whether the invitee has been marked as a no-show. Always present.
ISO 8601 UTC timestamp when the invitee booked.
Zeeg attendee identifier (zg-XXX format)
"zg-O69bac566950c6"
Salutation for the invitee, if collected.
Email addresses of additional guests the invitee added. An empty array when the invitee added none.
Cancellation details. All fields are null when the invitee is not cancelled.
Hide child attributes
Hide child attributes
ISO 8601 UTC timestamp when the invitee was cancelled.
Identifier of who cancelled the booking.
Type of canceller (e.g. host, invitee).
Reason given for the cancellation.
Payment details for the booking, or null when no payment applies.
Hide child attributes
Hide child attributes
Payment provider, e.g. stripe or paypal.
pending until the transaction completes.
pending, success ISO 8601 UTC timestamp when the invitee was marked as a no-show, or null when they were not.
UTM tracking parameters captured at booking time. Always holds these five keys, in snake_case; a key holds null when the booking did not carry a value for it.
Hide child attributes
Hide child attributes
Ad-click identifiers captured at booking time, keyed by provider. Only the keys that were actually captured are present; null when none were captured.
Hide child attributes
Hide child attributes
Google Ads click ID.
Google click ID for iOS app-to-web clicks. Mutually exclusive with gclid per click.
Google click ID for web-to-app clicks. Mutually exclusive with gclid per click.
Meta click ID.
Meta browser ID cookie (_fbp) captured at booking time.
Meta click cookie (_fbc) captured at booking time.
Full URL of the host page the booking widget was embedded on.
Custom query parameters captured at booking time, keyed by the c__-prefixed parameter name. An empty object when the booking captured none.
{ "c__ref": "nl-2026-04" }
Reference code for bookings made via the AI agent; null otherwise.
Public URL the invitee uses to cancel this booking. null once the booking is cancelled.
Public URL the invitee uses to reschedule this booking. null once the booking is cancelled.
True once this booking has been superseded by a reschedule. A rescheduled booking reports status: cancelled for backward compatibility; rescheduled and nextRescheduling are how a caller tells a reschedule apart from an actual cancellation.
Present when this booking is the result of a reschedule. null when this booking was not itself created by rescheduling an earlier one.
Hide child attributes
Hide child attributes
ISO 8601 UTC start time the previous booking held before the reschedule.
ISO 8601 UTC start time the new booking was moved to.
ISO 8601 UTC timestamp when the reschedule was performed.
uuid of the superseded booking (zg-XXX format). Use it directly as the uuid path parameter of GET /scheduled-events/{uuid} to fetch that booking.
"zg-O69bad4047abf0"
uuid of the invitee on the superseded booking. No public endpoint accepts an invitee uuid as a path parameter.
"zg-O69bac566950c6"
Reason given for the reschedule, if any.
Who performed the reschedule (e.g. host, invitee).
Full name of the person who performed the reschedule, when known.
Present when this booking has been superseded by a later reschedule. null when the booking has not been rescheduled.
Hide child attributes
Hide child attributes
ISO 8601 UTC start time the previous booking held before the reschedule.
ISO 8601 UTC start time the new booking was moved to.
ISO 8601 UTC timestamp when the reschedule was performed.
uuid of the superseded booking (zg-XXX format). Use it directly as the uuid path parameter of GET /scheduled-events/{uuid} to fetch that booking.
"zg-O69bad4047abf0"
uuid of the invitee on the superseded booking. No public endpoint accepts an invitee uuid as a path parameter.
"zg-O69bac566950c6"
Reason given for the reschedule, if any.
Who performed the reschedule (e.g. host, invitee).
Full name of the person who performed the reschedule, when known.
Name of the team that owns the scheduling page the booking was made on, or null for a personal scheduling page. The key is always present. This is the same value the invitee.scheduled webhook sends as teamName for the same booking.
"Sales"
ISO 8601 UTC timestamp when the booking was created.
Email addresses of additional guests added across all invitees. An empty array when none were added.
Hosts assigned to the scheduled event.
Hide child attributes
Hide child attributes
Host's first name.
Host's email address.
Host's public profile slug.
Host's public profile URL.
Host's last name. Empty string when not set.
URL of the host's avatar image, if set.
ISO 8601 UTC timestamp when the booking was last updated.
Current server time
curl --request GET \
--url https://api.zeeg.me/v2/scheduled-events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.zeeg.me/v2/scheduled-events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.zeeg.me/v2/scheduled-events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.zeeg.me/v2/scheduled-events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.zeeg.me/v2/scheduled-events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.zeeg.me/v2/scheduled-events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.zeeg.me/v2/scheduled-events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"collection": [
{
"uri": "https://api.zeeg.me/v2/scheduled-events/zg-O69bac566950c6",
"uuid": "zg-O69bac566950c6",
"title": "30-Minute Discovery Call",
"type": "ONE_ON_ONE",
"startTime": "2026-04-15T09:00:00.000000Z",
"endTime": "2026-04-15T09:30:00.000000Z",
"duration": 30,
"status": "confirmed",
"eventTypeUri": "https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e",
"location": {
"type": "Google Meet",
"joinUrl": "https://meet.google.com/abc-defg-hij"
},
"maxActiveInvitees": 1,
"activeInviteesCount": 1,
"invitees": [
{
"uuid": "zg-O69bad4047abf0",
"salutation": "Ms.",
"fullName": "Sophie Laurent",
"email": "sophie.laurent@northwind.io",
"guests": [
"alex.chen@northwind.io"
],
"timeZone": "Europe/Paris",
"cancellation": {
"cancelledAt": null,
"cancelledBy": null,
"cancellerType": null,
"cancellationReason": null
},
"payment": null,
"questions": [
{
"answer": "Product demo and pricing options",
"answer_type": "STRING",
"question": "What would you like to discuss?"
}
],
"noShow": false,
"noShowAt": null,
"scheduledAt": "2026-04-10T08:30:00.000000Z",
"utm": {
"utm_campaign": "spring_launch",
"utm_source": "linkedin",
"utm_medium": "social",
"utm_content": null,
"utm_term": null
},
"customQueryParams": {
"c__ref": "nl-2026-04"
},
"cancelUrl": "https://zeeg.me/cancel/zg-O69bad4047abf0",
"rescheduleUrl": "https://zeeg.me/reschedule/zg-O69bad4047abf0",
"rescheduled": false,
"rescheduling": null,
"nextRescheduling": null
}
],
"guests": [
"alex.chen@northwind.io"
],
"hosts": [
{
"firstName": "Lena",
"lastName": "Meier",
"email": "lena.meier@horizondigital.de",
"slug": "lena-meier",
"url": "https://zeeg.me/lena-meier",
"avatarUrl": null
}
],
"teamName": "Sales",
"createdAt": "2026-04-10T08:30:00.000000Z",
"updatedAt": "2026-04-10T08:30:02.000000Z",
"currentTime": "2026-03-23T10:00:00.000000Z"
},
{
"uri": "https://api.zeeg.me/v2/scheduled-events/zg-O69bad4047abf0",
"uuid": "zg-O69bad4047abf0",
"title": "30-Minute Discovery Call",
"type": "ONE_ON_ONE",
"startTime": "2026-04-18T14:00:00.000000Z",
"endTime": "2026-04-18T14:30:00.000000Z",
"duration": 30,
"status": "cancelled",
"eventTypeUri": "https://api.zeeg.me/v2/event-types/80f46bf5-eb01-4c07-960e-a9a3e18aae5e",
"location": {
"type": "Google Meet",
"joinUrl": "https://meet.google.com/klm-nopq-rst"
},
"maxActiveInvitees": 1,
"activeInviteesCount": 0,
"invitees": [
{
"uuid": "zg-O69bac566950c6",
"salutation": null,
"fullName": "Marco Rossi",
"email": "marco.rossi@horizondigital.de",
"guests": [],
"timeZone": "Europe/Berlin",
"cancellation": {
"cancelledAt": "2026-04-17T10:00:00.000000Z",
"cancelledBy": "marco.rossi@horizondigital.de",
"cancellerType": "host",
"cancellationReason": "Schedule conflict with another commitment."
},
"payment": null,
"questions": null,
"noShow": false,
"noShowAt": null,
"scheduledAt": "2026-04-12T11:00:00.000000Z",
"utm": {
"utm_campaign": null,
"utm_source": null,
"utm_medium": null,
"utm_content": null,
"utm_term": null
},
"customQueryParams": {},
"cancelUrl": null,
"rescheduleUrl": null,
"rescheduled": true,
"rescheduling": null,
"nextRescheduling": {
"oldStartAt": "2026-04-18T14:00:00.000000Z",
"newStartAt": "2026-04-22T09:30:00.000000Z",
"rescheduledAt": "2026-04-17T10:00:00.000000Z",
"previousEventUuid": "zg-O69bad4047abf0",
"previousInviteeUuid": "zg-O69bac566950c6",
"reason": "Requested a later slot.",
"rescheduledBy": "invitee",
"reschedulerFullName": null
}
}
],
"guests": [],
"hosts": [
{
"firstName": "Lena",
"lastName": "Meier",
"email": "lena.meier@horizondigital.de",
"slug": "lena-meier",
"url": "https://zeeg.me/lena-meier",
"avatarUrl": null
}
],
"teamName": "Sales",
"createdAt": "2026-04-12T11:00:00.000000Z",
"updatedAt": "2026-04-17T10:00:00.000000Z",
"currentTime": "2026-03-23T10:00:00.000000Z"
}
],
"pagination": {
"total": 2,
"count": 2,
"totalPages": 1,
"previousPage": null,
"currentPage": 1,
"nextPage": null
}
}{
"message": "Unauthenticated."
}{
"error": {
"type": "insufficient_scope",
"message": "Your token is missing the required scope(s). Include at least one of: events:read, events:write.",
"error_id": "9cfa47d0-d633-44ba-b3a8-0845d4fca38a",
"required_scopes": [
"events:read",
"events:write"
]
}
}{
"message": "The selected status is invalid.",
"errors": {
"status": [
"The selected status is invalid."
]
}
}