Create an Event
Programmatically book a scheduled event on a Zeeg scheduling page by providing an invitee, a chosen time slot, and any required custom answers.
curl --request POST \
--url https://api.zeeg.me/v2/event \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"date": "2026-04-15",
"name": "Sophie Laurent",
"email": "sophie.laurent@northwind.io",
"timeZone": "Europe/Paris",
"start": "09:00"
}
'{
"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-15T07:00:00.000000Z",
"endTime": "2026-04-15T07: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": null,
"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": {}
}
],
"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:00.000000Z",
"currentTime": "2026-04-10T08:30:00+00:00"
}Authorizations
Body
- Required fields may vary based on the event type's configuration.
- Before creating an event, verify availability using the availability endpoint.
- Validate any required custom fields (guests, phone, questions) by checking the event type's settings first.
The event date in YYYY-MM-DD format.
Invitee's full name.
Invitee's email address.
Invitee's IANA timezone identifier.
"Europe/Paris"
Start time in HH:mm format (in the specified timeZone).
"09:00"
The scheduling page's id, as GET /event-types returns it. Replaces ownerSlug, eventTypeSlug and sharedLink.
The slug of the scheduling page owner, can be a user or a team. Required with eventTypeSlug unless eventTypeId or sharedLink is sent.
The slug of the scheduling page.
Optional. Meeting duration in minutes, one of the durations the scheduling page offers. When omitted, or when the page does not offer it, the booking takes the page's default duration.
Invitee's phone number (required for "PHONE_CALL" location type).
Array of additional guest email addresses.
The location type the invitee books. If the scheduling page offers one or more locations, this field is required, and the request fails with 422 when it is absent. If the scheduling page offers no location, omit it.
Send the type the scheduling page is configured with. A type the page does not offer fails with 422.
Accepted values:
"IN_PERSON": Physical in-person meeting (requireslocationOptionswith address and details)."PHONE_CALL": Phone call meeting (requireslocationOptions.callTypeandphonefield)."CUSTOM": Free-text location. The scheduling page holds the text, so send nolocationOptions."GOOGLE_MEET","MICROSOFT_TEAMS","MICROSOFT_SKYPE","ZOOM","WEBEX","DEMODESK","ALFAVIEW","WHATSAPP","WHEREBY","JITSI": The scheduling page holds the account or the link, so send nolocationOptions.
Additional location details, required for certain location types:
- For in-person meetings (
location: "IN_PERSON"): provideaddressanddetails. - For phone call meetings (
location: "PHONE_CALL"): providecallType(e.g."I_WILL_CALL").
Optional. The per-location stable key from the scheduling page's location resource (key field, e.g. loc_42, or room_<resourceId> for a room). Pins the exact location row when the scheduling page offers several locations of the same type; recommended whenever it is available, and the only reliable way to target a specific same-type location on a paid scheduling page (where paid option values are withheld until payment).
"loc_42"
Array of question-answer pairs for custom invitee questions configured on the scheduling page.
Custom URL parameters to pass through.
The shared link token, required when booking via a shared or collective scheduling link.
Response
OK
A scheduled event resource. This is the single canonical shape returned by all scheduled-event endpoints and embedded in the AI agent call webhook payload.
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.
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 POST \
--url https://api.zeeg.me/v2/event \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"date": "2026-04-15",
"name": "Sophie Laurent",
"email": "sophie.laurent@northwind.io",
"timeZone": "Europe/Paris",
"start": "09:00"
}
'{
"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-15T07:00:00.000000Z",
"endTime": "2026-04-15T07: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": null,
"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": {}
}
],
"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:00.000000Z",
"currentTime": "2026-04-10T08:30:00+00:00"
}