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/apiRequests 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" } }| Status | Meaning |
|---|---|
400 | Something in the request is invalid. The message says what. |
401 | No key, or the key is wrong, expired or deleted. |
403 | Not allowed. code plan_required or plan_limit: your plan doesn't include it. |
404 | Not found (or not yours). |
409 | Conflict, e.g. slot_unavailable when the time was just taken. |
Availability#
GET
/api/slotsPublicOpen start times for a link, grouped by day in the time zone you ask for.
| Query | Description |
|---|---|
eventTypeIdrequired | The link's id: it's in the link's address in your dashboard (/links/evt_…), or from GET /api/event-types. |
startDaterequired | First day, YYYY-MM-DD. |
endDaterequired | Last day, YYYY-MM-DD. |
timeZonerequired | IANA time zone for grouping days, e.g. Africa/Lagos. |
duration | Length 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/bookingsPublicBook 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.| Body | Description |
|---|---|
eventTypeIdrequired | The link's id. |
startTimerequired | One of the start times from /api/slots. |
attendeerequired | { name, email, timeZone } |
duration | Minutes, for links with several lengths. |
guests | Extra email addresses to invite (up to 10). |
notes | Notes for the host. |
responses | Answers to the link's own questions, keyed by question name. |
location | { type, value } when the link lets people choose where to meet. |
country | The 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. |
rescheduleUid | Move 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 keyYour 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}PublicOne 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 keyCancel. 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 keyConfirm a booking waiting for your approval.
POST
/api/bookings/{uid}/rejectAPI keyDecline it. Body:
{ "reason": "…" }.POST
/api/bookings/{uid}/request-rescheduleAPI keyAsk the person to pick a new time (they get an email with a link).
POST
/api/bookings/{uid}/no-showAPI keyMark who didn't show up. Body:
{ "attendee": true } and/or { "host": true }.Links#
Links are called event types in the API.
GET
/api/event-typesAPI keyYour links and your teams' links.
POST
/api/event-typesAPI keyCreate a link. Minimum body:
{ "title": "Intro call", "slug": "intro", "length": 30 }.GET
/api/event-types/{id}API keyOne link with all its settings.
PATCH
/api/event-types/{id}API keyChange any settings you send; the rest stay as they are.
DELETE
/api/event-types/{id}API keyDelete 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 keyYour working-hours schedules.
POST
/api/schedulesAPI keyCreate a schedule.
PATCH
/api/schedules/{id}API keyChange weekly hours, date overrides or the time zone.
DELETE
/api/schedules/{id}API keyDelete a schedule.
Your account#
GET
/api/meAPI keyWho 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.