Docs menu ▾

Developers

API

A JSON API over HTTPS to read availability and manage bookings, links, schedules and webhooks from your own software.

Base URL#

Base URL
https://meet.zyluxmedia.app/api

Requests and responses are JSON. Times are ISO 8601 in UTC (e.g. 2026-10-15T09:30:00.000Z); convert to local time in your app. Money is in the currency's minor unit: 500000 NGN is ₦5,000.00.

Authentication#

Create an API key in Settings → Developer → API keys (your plan needs API access). The key is shown once: store it somewhere safe. Send it as a bearer token:

Header
Authorization: Bearer sk_live_...

Keep keys on your server

An API key acts as you: it can read and change your bookings. Call the API from your backend, never from code that runs in visitors' browsers or mobile apps. Delete a key in Settings to revoke it straight away.

A few endpoints are public and need no key: reading open times and creating a booking, exactly like your public booking page.

Errors#

Errors use normal HTTP status codes and a body like this; message is written to be shown to people.

JSON
{ "error": { "code": "slot_unavailable", "message": "That time is no longer available" } }
StatusMeaning
400Something in the request is invalid. The message says what.
401No key, or the key is wrong, expired or deleted.
403Not allowed. code plan_required or plan_limit: your plan doesn't include it.
404Not found (or not yours).
409Conflict, e.g. slot_unavailable when the time was just taken.

Availability#

GET/api/slotsPublic
Open start times for a link, grouped by day in the time zone you ask for.
QueryDescription
eventTypeIdrequiredThe link's id: it's in the link's address in your dashboard (/links/evt_…), or from GET /api/event-types.
startDaterequiredFirst day, YYYY-MM-DD.
endDaterequiredLast day, YYYY-MM-DD.
timeZonerequiredIANA time zone for grouping days, e.g. Africa/Lagos.
durationLength in minutes, for links with several lengths.
curl "https://meet.zyluxmedia.app/api/slots?eventTypeId=evt_abc123&startDate=2026-10-14&endDate=2026-10-20&timeZone=Africa/Lagos"

Bookings#

POST/api/bookingsPublic
Book a time, as your booking page does. Sends the usual confirmations and runs your workflows and webhooks. Paid links return status: "awaiting_payment": send the person to https://meet.zyluxmedia.app/booking/{uid} to pay.
BodyDescription
eventTypeIdrequiredThe link's id.
startTimerequiredOne of the start times from /api/slots.
attendeerequired{ name, email, timeZone }
durationMinutes, for links with several lengths.
guestsExtra email addresses to invite (up to 10).
notesNotes for the host.
responsesAnswers to the link's own questions, keyed by question name.
location{ type, value } when the link lets people choose where to meet.
countryThe guest's country of residence as a 2-letter code, e.g. "NG". Required on a paid link that has prices by country; it picks which one applies.
rescheduleUidMove an existing booking to this new time instead of making a new one.
curl -X POST https://meet.zyluxmedia.app/api/bookings \
  -H "Content-Type: application/json" \
  -d '{
    "eventTypeId": "evt_abc123",
    "startTime": "2026-10-15T08:30:00.000Z",
    "attendee": { "name": "Tunde Bello", "email": "[email protected]", "timeZone": "Africa/Lagos" },
    "notes": "Booked from our app"
  }'
GET/api/bookingsAPI key
Your bookings. status: upcoming (default), unconfirmed, recurring, past or cancelled. Also eventTypeId, teamId and q (search by name, email or title).
cURL
curl https://meet.zyluxmedia.app/api/bookings?status=upcoming \
  -H "Authorization: Bearer $ZYLUX_MEET_API_KEY"
GET/api/bookings/{uid}Public
One booking, with its link, host and payment. The uid works like a password for the booking: only share it with the person who booked.
POST/api/bookings/{uid}/cancelAPI key
Cancel. Body: { "reason": "…", "allRemaining": false }. Everyone is emailed; paid bookings are marked for refund.
cURL
curl -X POST https://meet.zyluxmedia.app/api/bookings/bk_7h2k9/cancel \
  -H "Authorization: Bearer $ZYLUX_MEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "reason": "Host unavailable" }'
POST/api/bookings/{uid}/confirmAPI key
Confirm a booking waiting for your approval.
POST/api/bookings/{uid}/rejectAPI key
Decline it. Body: { "reason": "…" }.
POST/api/bookings/{uid}/request-rescheduleAPI key
Ask the person to pick a new time (they get an email with a link).
POST/api/bookings/{uid}/no-showAPI key
Mark who didn't show up. Body: { "attendee": true } and/or { "host": true }.

Links are called event types in the API.

GET/api/event-typesAPI key
Your links and your teams' links.
POST/api/event-typesAPI key
Create a link. Minimum body: { "title": "Intro call", "slug": "intro", "length": 30 }.
GET/api/event-types/{id}API key
One link with all its settings.
PATCH/api/event-types/{id}API key
Change any settings you send; the rest stay as they are.
DELETE/api/event-types/{id}API key
Delete a link.
cURL
curl -X POST https://meet.zyluxmedia.app/api/event-types \
  -H "Authorization: Bearer $ZYLUX_MEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "title": "Intro call", "slug": "intro", "length": 30 }'

Availability schedules#

GET/api/schedulesAPI key
Your working-hours schedules.
POST/api/schedulesAPI key
Create a schedule.
PATCH/api/schedules/{id}API key
Change weekly hours, date overrides or the time zone.
DELETE/api/schedules/{id}API key
Delete a schedule.

Your account#

GET/api/meAPI key
Who the key belongs to: name, username, time zone and settings.
cURL
curl https://meet.zyluxmedia.app/api/me \
  -H "Authorization: Bearer $ZYLUX_MEET_API_KEY"

Webhooks

Manage webhooks over the API too (/api/webhooks). See Webhooks.