> ## Documentation Index
> Fetch the complete documentation index at: https://docs.syncline.run/llms.txt
> Use this file to discover all available pages before exploring further.

# POST /v1/schedule

> Schedule a meeting at a specific time chosen by you

## 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

```bash theme={null}
POST https://api.syncline.run/v1/schedule
```

### Request Body

<ParamField body="attendees" type="array" required>
  Array of exactly 2 email addresses
</ParamField>

<ParamField body="start_time" type="string" required>
  ISO 8601 timestamp for meeting start (e.g., "2025-01-22T14:00:00Z")
</ParamField>

<ParamField body="duration_minutes" type="integer" required>
  Meeting duration in minutes
</ParamField>

<ParamField body="title" type="string" required>
  Meeting title
</ParamField>

<ParamField body="description" type="string">
  Meeting description/agenda
</ParamField>

<ParamField body="location" type="string">
  Defaults to "Google Meet" for video conference
</ParamField>

### Example Request

```json theme={null}
{
  "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)

```json theme={null}
{
  "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:

* **Developer**: 25 meetings/month
* **Starter**: 250 meetings/month
* **Pro**: 1,000 meetings/month
* **Scale**: 5,000 meetings/month
* **Enterprise**: Unlimited

## Example

```javascript theme={null}
// 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();
```

## Related Endpoints

<CardGroup cols={2}>
  <Card title="Find Availability" icon="calendar" href="/api-reference/find-availability">
    Find mutual availability first
  </Card>

  <Card title="Auto Schedule" icon="sparkles" href="/api-reference/schedule-auto">
    Let AI pick the time
  </Card>
</CardGroup>
