For the complete documentation index, see llms.txt.

Quick Start

Get an API key. Create a booking. List bookings. Check your calendar. Under 5 minutes.

Prerequisites


Step 1 — Get your API key

Create your first API key at vennio.app/api-keys. Copy the secret key — it starts with vennio_sk_live_.

export VENNIO_API_KEY="vennio_sk_live_YOUR_KEY"
export BUSINESS_ID="YOUR_BUSINESS_ID"

Your business ID is shown on the dashboard home page.

Keep secret keys server-side

Secret keys (vennio_sk_live_*) must never be exposed in client-side code or version control. Store them in environment variables.


Step 2 — Create a booking

curl -X POST https://api.vennio.app/v1/bookings \
  -H "Authorization: Bearer $VENNIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "business_id": "'"$BUSINESS_ID"'",
    "customer_email": "customer@example.com",
    "customer_name": "Jane Doe",
    "start_time": "2026-05-01T09:00:00Z",
    "end_time": "2026-05-01T09:30:00Z",
    "notes": "Intro call"
  }'
{
  "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-05-01T09:00:00Z",
    "end_time": "2026-05-01T09:30:00Z",
    "created_at": "2026-04-11T10:00:00Z"
  }
}

Vennio automatically creates a calendar event, sends confirmation emails, and fires a booking.created webhook.

Testing without side effects

Add "demo_mode": true to your request body to run the full API flow without creating a calendar event or sending emails. Use this in development and CI.


Step 3 — List your bookings

curl "https://api.vennio.app/v1/bookings?business_id=$BUSINESS_ID&status=confirmed&limit=10" \
  -H "Authorization: Bearer $VENNIO_API_KEY"
{
  "bookings": [
    {
      "id": "550e8400-e29b-41d4-a716-446655440000",
      "status": "confirmed",
      "customer_name": "Jane Doe",
      "customer_email": "customer@example.com",
      "start_time": "2026-05-01T09:00:00Z",
      "end_time": "2026-05-01T09:30:00Z"
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Filter parameters:

Parameter Type Description
business_id UUID Filter by business
status string confirmed, cancelled, or completed
from ISO 8601 Bookings starting after this time
to ISO 8601 Bookings starting before this time
limit integer Page size (default: 20, max: 100)
cursor string Pagination cursor from previous response

Step 4 — Check your calendar connection

List connected calendars to confirm Vennio can read and write availability:

curl https://api.vennio.app/v1/calendars \
  -H "Authorization: Bearer $VENNIO_API_KEY"
{
  "calendars": [
    {
      "id": "cal_abc123",
      "name": "Work",
      "provider": "google",
      "primary": true,
      "selected": true
    }
  ],
  "providers": [
    {
      "name": "google",
      "connected": true,
      "calendar_count": 3
    }
  ]
}

If no calendars are connected, go to the dashboard and complete the Google or Microsoft OAuth flow. See Integration Patterns for embedding the connect flow in your product.

To manually trigger a sync:

curl -X POST https://api.vennio.app/v1/calendars/sync \
  -H "Authorization: Bearer $VENNIO_API_KEY"
{
  "events_synced": 24,
  "last_sync": "2026-04-11T10:05:00Z"
}

SDK alternative

If you prefer typed methods over raw HTTP, install @vennio/sdk:

npm install @vennio/sdk
import { createVennioClient } from '@vennio/sdk'

const client = createVennioClient({ apiKey: process.env.VENNIO_API_KEY })

// Create a booking
const res = await client.bookings.create({
  body: {
    business_id: process.env.BUSINESS_ID,
    customer_email: 'customer@example.com',
    customer_name: 'Jane Doe',
    start_time: '2026-05-01T09:00:00Z',
    end_time: '2026-05-01T09:30:00Z',
  },
})

console.log('Booking created:', res.data.booking.id)

// List bookings
const list = await client.bookings.list({
  query: { business_id: process.env.BUSINESS_ID, status: 'confirmed' },
})

console.log(`${list.data.bookings.length} bookings found`)

What you built

In 4 steps you:

Next steps