Skip to main content
Bookings go into the calendar of ImpelLabs, so a booking works without any other calendar. You can read free times, book a time by hand, move or cancel a booking, and define the services that customers book. A service can have its own public booking page. A call uses the token of a member. What the member sees depends on the role.
  • An owner or an admin sees every booking.
  • Other members see their own bookings, the bookings of their people, and the bookings of the conversations they see.
  • Only an owner or an admin can create, change or archive a service. Other members get a 403 with Owners and admins change what customers can book.
Times are stored in UTC. Send every time with its offset, like 2026-11-03T09:00:00+04:00. A time without an offset returns 400.

Read free times

The query takes these keys. Each key is optional. The reply has slots, app, duration_minutes and zone. Each slot has start, end, host (id and name), host_time and customer_time.

Make a booking

The reply is the booking, with status 201.
The request takes starts_at (required), host_id, service_id, duration_minutes, title, location, notes, customer_name, customer_phone, customer_email, contact_id, case_id and key. With no host_id, a service that belongs to the business has no host and any other booking is hosted by the caller. The booking goes through the same checks as a booking by an agent. When the time is not free, the call returns 400 with a detail sentence. Send the same key again to book once: a retry makes the same booking. The list is {"bookings": [...]}, ordered by start time. A booking that ended more than an hour ago is left out unless you send from. A new starts_at in a PATCH moves the booking and checks the time again. status takes booked, done, cancelled or no_show. A change to cancelled tells the host. PATCH also takes title, location, notes, customer_name, customer_phone, customer_email and archived: true.

Services

A service is something a customer can book: its length, its place, its notice, its hosts and its own page.
currency is a three-letter code. send_confirmations switches the booking confirmation workflow on or off.

Hours and time off

Each time off is {id?, starts_at, ends_at, reason?, cover_id?}. The list replaces the current and later ones. A time off ends after it starts. Empty hours means the business hours apply. A member who is not a manager gets 403 on the members list.

The public booking page

A service with a slug has a public page. It needs no token. The page uses these two calls. You can call them from your own site.
The GET reply has slug, name, description, minutes, location_type, business, zone and slots. Each slot has start, end, host_id and time. Free times start on a quarter hour, and the page looks ahead at most 21 days. The POST takes start, name and email (all required), and phone, host_id, zone and b. It returns ok set to true and a booking object with starts_at, ends_at, title and location. The person is found or made from the email. The booking goes into the calendar of the business, and the booking confirmation workflow tells the customer when it is on. A link that came from a broadcast email carries b, and the booking then adds the person to that broadcast campaign.