Webhooks and the API
Send new bookings, moves, cancellations and status changes to Zapier, Make or your own server as they happen, and let an AI agent or your own code run the calendar with your permissions.
Two doors let other software work with your calendar. Webhooks send new bookings, moves, cancellations and status changes out as they happen, to Zapier, Make or your own server. The Agent API lets software you choose, from an AI agent to your own code, read and change bookings with your permissions.
Webhooks
Admins open Calendar → Settings and, under "Connect other apps", press "Set up webhooks" ("Manage webhooks" once you have one). Paste the address your other app gave you into "Address (https)", tick what to send, and press "Add endpoint":
- "New appointment" (the word follows your kind of business), for every new booking: online, at the desk, a walk-in, or through the API;
- "Moved to a new time", which also covers a change of person or of length;
- "Cancelled";
- "Status changed (arrived, done, no-show, approved, declined)".
In Zapier, the address comes from a "Webhooks by Zapier · Catch Hook" trigger; in Make, from a "Custom webhook". "Send test" sends a sample booking and shows what the receiver answered. A calendar can send to up to 5 addresses, each with its own choice of updates; to change an address, remove it and add the new one.
Each update is a signed JSON POST carrying the booking (who, what, when, the price, the client's contact details and address, their note and their answers to your questions) and the calendar it belongs to. It never carries the client's private booking link or your team's notes. Each address has its own "Signing secret": check the webhook-signature header with it to know an update really came from eKard. Signatures follow the Standard Webhooks spec, so its libraries can check them, and "New secret" replaces the secret at once.
If the receiver doesn't answer, an update is retried for about 15 minutes. After 10 updates in a row fail, the address pauses itself and the calendar's admins get one email. Updates from while it was paused aren't sent later: fix the receiver, press "Send test", then "Turn back on".
The Agent API
Your API key is under AI Agents, in the menu under your name. Copy the block there into an AI agent such as Claude Code, Codex or Cursor, or use the key in your own code. The key acts as you, and in a calendar it has your role: an admin's key can do what an admin can, a front-desk login's key what the front desk can, and a team member's key works only their own appointments. "Generate new key" stops the old one at once.
The API covers what the calendar does. For the desk: your calendars and their day or week, free times and why a time isn't free, booking (walk-ins included), moving, changing the length, cancelling with a reason, statuses and their undo, approving and declining requests, marking a booking confirmed, team notes, marking paid and advances received, and clients: search, add, edit, block and merge. For admins, setup too: a new calendar, settings, services and price-list imports, the team with their hours, special days and time off, blocked time, logins and invitations, single-use links, webhooks, importing clients, and the takings. A booking made through the API emails the client like any other, and changes have limits per minute and per day; an agent that reaches one is told how long to wait.
Connecting Google Calendar or Outlook still needs a browser, for Google's or Microsoft's own consent screen; once it's connected, its settings work through the API too.
The full reference, with every endpoint, the webhook payload and its headers, and how to check a signature, is at ekard.app/api/v1/docs. It's plain text written for agents to read, so you can point yours straight at it. The page for AI agents and developers has the overview.
Webhook updates carry clients' names, phone numbers, emails, addresses and answers to your questions, and an API key can act as you. Send webhooks only to services you trust, and keep the key private: if it leaks, generate a new one.