v1.0 API is public

Build on top of Veloscal

Integrate powerful scheduling infrastructure directly into your product. Embed booking flows, sync calendars, and automate workflows with a few lines of code.

Embedded Booking

Add a customizable booking page directly to your website or app. Keep users in your flow.

Read Guide

Webhooks

Listen for real-time events like `booking.created` or `booking.canceled` to trigger your own workflows.

Read Guide

REST API

Programmatically manage availability, event types, and bookings. Build custom UI on top of our engine.

Coming Soon

Embedding the Booking Flow

The 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.

1Construct the URL

Append `?embed=true` to your booking page URL. This activates the embedded layout mode.

https://veloscal.com/acme/consultation?embed=true

2Add the Iframe

Place the iframe code where you want the booking calendar to appear. We recommend a minimum height of 600px for the best experience.

index.html
<iframe src="https://veloscal.com/acme/consultation?embed=true" width="100%" height="700" frameborder="0"></iframe>

Interactive Preview

Your Widget Here

Customizing Appearance

You can customize the look and feel of the embedded booking page by passing additional query parameters.

Parameters

ParameterTypeDescription
primaryColorhex codeOverrides the brand color for buttons and highlights (e.g. #ff0000).
hideDetailsbooleanSet to true to hide the left sidebar (event details) and show only the calendar/form.

Example

https://veloscal.com/acme/consultation?embed=true&primaryColor=%23ef4444&hideDetails=true

Authentication

Veloscal 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...

Webhooks

Subscribe to events to trigger workflows in your application. Manage your endpoints in the Admin Dashboard.

Supported Events

booking.created

Fired when a new booking is confirmed.

booking.rescheduled

Fired when a booking is moved to a new time. (Includes reference to old booking ID)

booking.cancelled

Fired when a booking is cancelled.

mediated.candidate.booked

Fired when a candidate books a slot on a mediated event. id is the booked slot.

mediated.candidate.cancelled

Fired when a booked mediated slot is cancelled.

Payload

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"
}
FieldTypeDescription
idstringStable identity of the record: the booking, or the booked slot for mediated events. The same id is sent on the matching cancel event.
statusstringCONFIRMED or CANCELLED.
hostobject | nullThe 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.
externalRefstring | nullYour 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.