Skip to main content

Overview

The /schedule endpoint creates a meeting at a specific time you’ve already selected. Use this when you’ve used /availability to find slots and want the user to pick, or when you have a predetermined time. For AI-powered automatic scheduling, use /schedule/auto instead.

Authentication

Requires Platform API Key in the X-API-Key header.

Request

POST https://api.syncline.run/v1/schedule

Request Body

attendees
array
required
Array of exactly 2 email addresses
start_time
string
required
ISO 8601 timestamp for meeting start (e.g., “2025-01-22T14:00:00Z”)
duration_minutes
integer
required
Meeting duration in minutes
title
string
required
Meeting title
description
string
Meeting description/agenda
location
string
Defaults to “Google Meet” for video conference

Example Request

{
  "attendees": ["alice@example.com", "bob@example.com"],
  "start_time": "2025-01-22T14:00:00Z",
  "duration_minutes": 30,
  "title": "Product Demo",
  "description": "Walkthrough of new features",
  "location": "Google Meet"
}

Response

Success Response (200 OK)

{
  "success": true,
  "meeting_id": "evt_7d8f9e3a2b1c",
  "start_time": "2025-01-22T14:00:00Z",
  "end_time": "2025-01-22T14:30:00Z",
  "title": "Product Demo",
  "attendees": ["alice@example.com", "bob@example.com"],
  "location": "Google Meet",
  "meet_link": "https://meet.google.com/abc-defg-hij"
}

Error Responses

Same error responses as /schedule/auto.

Usage Limits

Each successful schedule counts toward your monthly meeting limit based on plan:
  • Free: 100 meetings/month
  • Starter: 1,000 meetings/month
  • Growth: 5,000 meetings/month
  • Enterprise: Unlimited

Example

// First, find availability
const availResponse = await fetch('https://api.syncline.run/v1/availability', {
  method: 'POST',
  headers: {
    'X-API-Key': 'sk_live_...',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    attendees: ['alice@example.com', 'bob@example.com'],
    duration_minutes: 30
  })
});

const { slots } = await availResponse.json();

// User picks slot[2]
const chosenSlot = slots[2];

// Schedule at that time
const scheduleResponse = await fetch('https://api.syncline.run/v1/schedule', {
  method: 'POST',
  headers: {
    'X-API-Key': 'sk_live_...',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    attendees: ['alice@example.com', 'bob@example.com'],
    start_time: chosenSlot.start_time,
    duration_minutes: 30,
    title: 'Product Demo'
  })
});

const meeting = await scheduleResponse.json();