Adding scheduling to your app requires three things: check availability, create a booking, and handle confirmation. Vennio provides a REST API and JavaScript SDK that do all three in a few lines of code.
To add scheduling to your app with Vennio:
@vennio/sdkGET /v1/availability/slots to show open times to your userPOST /v1/bookings when the user picks a slotVennio handles the rest: calendar event creation, confirmation emails to both parties, double-booking prevention, and webhook delivery.
npm install @vennio/sdk
Use a secret key (vennio_sk_live_*) only in server-side code. For client-side booking widgets, use @vennio/react with a publishable key (vennio_pk_live_*).
Query availability for your business. Returns open time slots accounting for existing calendar events and bookings.
import { createVennioClient } from '@vennio/sdk'
const client = createVennioClient({ apiKey: process.env.VENNIO_API_KEY })
const res = await client.availability.getSlots({
query: {
business_id: 'YOUR_BUSINESS_ID',
duration_minutes: 30,
timezone: 'America/New_York',
},
})
console.log(res.data.slots)
// [
// { start: "2026-04-01T09:00:00-05:00", end: "2026-04-01T09:30:00-05:00", ... },
// { start: "2026-04-01T10:00:00-05:00", end: "2026-04-01T10:30:00-05:00", ... }
// ]
curl "https://api.vennio.app/v1/availability/slots?business_id=YOUR_BUSINESS_ID&duration_minutes=30&timezone=America%2FNew_York" \
-H "Authorization: Bearer vennio_sk_live_YOUR_KEY"
Once the user picks a slot, create the booking. Vennio confirms it immediately and fires side effects automatically.
const bookingRes = await client.bookings.create({
body: {
business_id: 'YOUR_BUSINESS_ID',
customer_email: 'customer@example.com',
customer_name: 'Jane Doe',
start_time: '2026-04-01T09:00:00-05:00',
end_time: '2026-04-01T09:30:00-05:00',
},
})
const booking = bookingRes.data.booking
console.log('Booking confirmed:', booking.id, booking.status)
// Booking confirmed: 550e8400-... confirmed
curl -X POST https://api.vennio.app/v1/bookings \
-H "Authorization: Bearer vennio_sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"business_id": "YOUR_BUSINESS_ID",
"customer_email": "customer@example.com",
"customer_name": "Jane Doe",
"start_time": "2026-04-01T09:00:00-05:00",
"end_time": "2026-04-01T09:30:00-05:00"
}'
{
"booking": {
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "confirmed",
"business_id": "YOUR_BUSINESS_ID",
"customer_name": "Jane Doe",
"customer_email": "customer@example.com",
"start_time": "2026-04-01T09:00:00-05:00",
"end_time": "2026-04-01T09:30:00-05:00",
"created_at": "2026-03-31T10:00:00Z"
}
}
If you want a shareable booking link without building a custom UI, create a Venn Link. Vennio hosts the booking page for you.
curl -X POST https://api.vennio.app/v1/venn-links \
-H "Authorization: Bearer vennio_sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "30-minute intro call",
"duration_minutes": 30,
"business_id": "YOUR_BUSINESS_ID"
}'
The response includes a url field — share that link and customers can book directly without any frontend work on your part.
booking.created and booking.cancelled