Integrate powerful scheduling infrastructure directly into your product. Embed booking flows, sync calendars, and automate workflows with a few lines of code.
Add a customizable booking page directly to your website or app. Keep users in your flow.
Read GuideListen for real-time events like `booking.created` or `booking.canceled` to trigger your own workflows.
Read GuideProgrammatically manage availability, event types, and bookings. Build custom UI on top of our engine.
Coming SoonThe easiest way to integrate Veloscal is using our iframe embed. By adding the `?embed=true` query parameter, we automatically strip standard headers and padding, allowing the widget to blend perfectly into your application.
Append `?embed=true` to your booking page URL. This activates the embedded layout mode.
https://veloscal.com/acme/consultation?embed=truePlace the iframe code where you want the booking calendar to appear. We recommend a minimum height of 600px for the best experience.
<iframe src="https://veloscal.com/acme/consultation?embed=true" width="100%" height="700" frameborder="0"></iframe>
Your Widget Here
You can customize the look and feel of the embedded booking page by passing additional query parameters.
| Parameter | Type | Description |
|---|---|---|
| primaryColor | hex code | Overrides the brand color for buttons and highlights (e.g. #ff0000). |
| hideDetails | boolean | Set to true to hide the left sidebar (event details) and show only the calendar/form. |
https://veloscal.com/acme/consultation?embed=true&primaryColor=%23ef4444&hideDetails=trueVeloscal includes a signature header in every webhook request to verify that the request originated from us. Each request includes a X-Veloscal-Signature header.
X-Veloscal-Signature: t=1698223344,v1=5257a869e7ece...
Subscribe to events to trigger workflows in your application. Manage your endpoints in the Admin Dashboard.
Fired when a new booking is confirmed.
Fired when a booking is moved to a new time. (Includes reference to old booking ID)
Fired when a booking is cancelled.
Fired when a candidate books a slot on a mediated event. id is the booked slot.
Fired when a booked mediated slot is cancelled.
Every event is a JSON body with the fields below, plus event-specific details such as the guest, times, and meeting link. The event name is sent in the X-Veloscal-Event header.
{
"id": "clx7...",
"status": "CONFIRMED",
"eventTypeId": "clx2...",
"eventTitle": "Intro call",
"startTime": "2026-09-15T14:00:00.000Z",
"endTime": "2026-09-15T14:30:00.000Z",
"guestName": "Ada Lovelace",
"guestEmail": "ada@example.com",
"meetingLink": "https://meet.google.com/abc-defg-hij",
"host": {
"id": "clx1...",
"name": "Robert",
"email": "robert@acme.com"
},
"externalRef": "interview_8827"
}| Field | Type | Description |
|---|---|---|
| id | string | Stable identity of the record: the booking, or the booked slot for mediated events. The same id is sent on the matching cancel event. |
| status | string | CONFIRMED or CANCELLED. |
| host | object | null | The member the guest is meeting, as { id, name, email }. For mediated events this is the mediator who owns the calendar invite. null only when no host could be assigned. On booking.rescheduled it is the host of the new booking, which round-robin may have changed. |
| externalRef | string | null | Your own reference, echoed back verbatim. Set it by linking guests to ?externalRef=… on the booking page, or on a candidate when creating a mediated event. Always present as a key; null when none was given. |