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

# API Overview

> Complete REST API reference

## Base URL

```
https://api.syncline.run
```

All API requests use HTTPS. HTTP requests will be redirected.

## Authentication

All endpoints (except `/health`) require an API key in the `X-API-Key` header.

```bash theme={null}
X-API-Key: sk_live_abc123...
```

See [Authentication](/authentication) for details.

## Endpoints

### Core Endpoints

<CardGroup cols={2}>
  <Card title="Find Availability" icon="calendar" href="/api-reference/find-availability">
    Find time slots where attendees are available
  </Card>

  <Card title="Schedule Meeting" icon="plus" href="/api-reference/schedule-meeting">
    Create a calendar event with Google Meet
  </Card>

  <Card title="Check Availability" icon="clock" href="/api-reference/check-availability">
    Check a single user's calendar
  </Card>

  <Card title="Update Preferences" icon="sliders" href="/api-reference/update-preferences">
    Update user scheduling preferences
  </Card>
</CardGroup>

## Request Format

All POST requests use JSON:

```bash theme={null}
curl -X POST https://api.syncline.run/v1/availability \
  -H "X-API-Key: sk_live_abc123..." \
  -H "Content-Type: application/json" \
  -d '{"attendees": ["alice@example.com", "bob@example.com"]}'
```

## Response Format

All responses are JSON:

```json theme={null}
{
  "slots": [...],
  "total_found": 5
}
```

## Error Handling

Errors follow this format:

```json theme={null}
{
  "error": {
    "code": "invalid_attendees",
    "message": "Attendee list must contain exactly 2 email addresses",
    "field": "attendees"
  }
}
```

### HTTP Status Codes

| Code  | Meaning                                   |
| ----- | ----------------------------------------- |
| `200` | Success                                   |
| `400` | Bad Request - Invalid parameters          |
| `401` | Unauthorized - Invalid or missing API key |
| `404` | Not Found - Resource doesn't exist        |
| `429` | Rate Limit Exceeded                       |
| `500` | Internal Server Error                     |

## Rate Limits

* **Rate**: 100 requests/minute per API key (varies by plan)

Rate limit headers in response:

```
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 95
X-RateLimit-Reset: 1700000000
```

## Pagination

Currently, all endpoints return complete results (no pagination needed).

Typical response sizes:

* `find_mutual_availability`: 5 slots
* `check_availability`: Full day view
* `schedule_meeting`: Single meeting object

## Idempotency

Meeting creation supports idempotency keys:

```bash theme={null}
curl -X POST https://api.syncline.run/v1/schedule \
  -H "Idempotency-Key: unique-request-id-123" \
  -H "X-API-Key: sk_live_abc123..." \
  ...
```

If you retry with the same key within 24 hours, you'll get the original response (no duplicate meeting created).

## Timezones

All datetime fields use ISO 8601 format with timezone:

```json theme={null}
{
  "start_time": "2025-11-20T10:00:00-08:00"
}
```

Syncline handles timezone conversion automatically. Users see times in their preferred timezone.

## Webhooks

<Info>
  Coming soon! Register webhooks to receive real-time updates about meetings.
</Info>

## Client Libraries

Official SDKs coming soon:

* Python
* JavaScript/TypeScript
* Go
* Ruby

For now, use any HTTP client. See [examples](/examples/networking-bot) for reference implementations.

## Changelog

Track API changes:

* **v1.0.0** (2025-11-15): Initial release

Breaking changes will be announced 30 days in advance.

## Next Steps

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

  <Card title="Schedule Meeting" href="/api-reference/schedule-meeting">
    Create calendar events
  </Card>
</CardGroup>
