Skip to main content

Connecting to a Meeting Space

Before you can push bookings to a meeting space, you must have an approved connection for that space in third_party mode. This is a one-time setup per space.

5.1 Step-by-Step​

  1. Org admin creates the meeting space (or picks an existing one) and sets its operating_mode to third_party. This is done inside ZenSpace — you do not do this.

  2. Org admin issues an API key for your bridge. They share the plain key out-of-band.

  3. Your bridge POSTs a connection request (see 5.2). This creates a connection in pending state.

  4. The admin approves the connection in the ZenSpace admin UI. ZenSpace POSTs a notification to your webhook_url.

  5. Your bridge starts pushing bookings once the approval webhook arrives.

5.2 POST /api/third-party/connection-request​

The only endpoint external integrators call to register. All other connection-management endpoints (approve, decline, suspend, list, update, delete) are admin-only.

Field Reference​

FieldTypeRequiredNotes
organization_idUUIDyesThe organization that owns the space.
space_idUUIDyesMust belong to the organization, must already have a space group assigned.
third_party_modeenumyesOne of: Google Calendar, Outlook Calendar, Microsoft Outlook, Apple Calendar, Other.
detailobjectyesSnapshot of your view of the space.
detail.namestringnoDisplayed if the ZenSpace space has no name.
detail.capacitynumbernoSeating capacity.
detail.timezoneIANA stringnoe.g. America/Los_Angeles.
detail.addressstringnoStreet address.
detail.pricing.base_pricenumbernoOnly base_price is read during sync.
detail.business_hoursobjectnoMap of weekday → { open, close } or null.
webhook_urlURLstrongly rec.Where ZenSpace POSTs status-change and booking-event notifications.

5.3 Approval Behavior​

When the admin approves your request, ZenSpace does a one-way, non-destructive sync from your detail payload onto the meeting space. Only empty fields on the ZenSpace side are populated:

detail fieldSynced when ZenSpace side is...
namenull or empty
capacitynull / undefined / 0
pricing.base_pricenull or undefined
business_hoursno existing rows

Send your best data up front. You do not get a second chance to overwrite unless the admin manually clears the field first.

5.4 Connection Lifecycle​

The connection state machine:

  • pending → approved: booking events start flowing. Metadata sync runs.

  • pending → declined: terminal. To try again, submit a new request.

  • approved → suspended: booking events stop. Admin can re-approve later.

  • Only one approved connection per (space_id, third_party_mode) pair.