API Reference
The LinkTime REST API gives you programmatic access to bookings, contacts, event types, and availability. 12 endpoints, Bearer token auth, JSON responses.
Getting Started
API keys require a Pro or Business plan.
- Upgrade to Pro or Business
- Go to Settings → API Keys in your dashboard
- Click “Create API Key”
- Copy the key (shown once — cannot be retrieved later)
- Test it:
curl -H "Authorization: Bearer YOUR_API_KEY" \ https://linktime.io/api/v1/me
Authentication
All /api/v1/* endpoints require an API key sent as a Bearer token in the Authorization header.
Authorization: Bearer lt_live_...
API keys start with lt_live_. Each key is scoped to the user who created it.
User
/api/v1/meGet the authenticated user's profile information.
Response
{ "id": "...", "email": "...", "name": "...", "username": "...", "plan": "PRO", "effectivePlan": "PRO" }Bookings
/api/v1/bookingsList bookings with optional filters.
Query Parameters
page (default 1), limit (default 20, max 100), status (CONFIRMED|CANCELLED|all), from (ISO date), to (ISO date)
Response
{ "data": [...], "pagination": { "page": 1, "limit": 20, "total": 156, "totalPages": 8 } }/api/v1/bookings/:idGet full booking detail including event type, contact, and email logs.
Response
{ "id": "...", "startTime": "...", "endTime": "...", "status": "CONFIRMED", "inviteeName": "...", "eventType": {...}, "contact": {...} }/api/v1/bookings/:id/cancelCancel a booking. Removes calendar events, updates CRM, sends notifications, fires webhooks.
Request Body
{ "reason": "Schedule conflict" }Response
{ "success": true }Contacts
/api/v1/contactsList and search contacts with pagination.
Query Parameters
search (name/email/company), page, limit
Response
{ "data": [{ "id": "...", "name": "...", "email": "...", "meetingCount": 3, ... }], "pagination": {...} }/api/v1/contactsCreate a new contact. Fires contact.created webhook.
Request Body
{ "name": "Jane Doe", "email": "[email protected]", "phone": "+1...", "company": "Acme", "notes": "..." }Response
{ "id": "...", "name": "Jane Doe", "email": "[email protected]", ... }/api/v1/contacts/:idGet contact detail with upcoming and past meetings.
Response
{ "id": "...", "name": "...", "upcomingMeetings": [...], "pastMeetings": [...], "meetingCount": 5 }/api/v1/contacts/:idUpdate a contact. All fields optional. Email uniqueness is enforced.
Request Body
{ "name": "Jane Smith", "company": "NewCo" }Response
{ "id": "...", "name": "Jane Smith", ... }/api/v1/contacts/:idDelete a contact permanently.
Response
{ "success": true }Event Types
/api/v1/event-typesList all active event types.
Response
{ "data": [{ "id": "...", "name": "30 Minute Meeting", "slug": "30-min", "durationMinutes": 30, ... }], "pagination": {...} }/api/v1/event-types/:idGet full event type detail including scheduling configuration.
Response
{ "id": "...", "name": "...", "slug": "...", "durationMinutes": 30, "bufferBefore": 5, "bufferAfter": 10, ... }Availability
/api/v1/availability/:slugGet available time slots for an event type. Accounts for calendar events, buffer times, and scheduling rules.
Query Parameters
timezone (required), startDate (ISO, default: today), endDate (ISO, default: +7 days)
Response
{ "data": [{ "date": "2026-02-15", "time": "10:00", "startTime": "...", "endTime": "..." }], "eventType": {...}, "timezone": "..." }Public Booking Endpoint
This endpoint does not require an API key — it's the same endpoint used by the booking page and embed widget.
/api/bookingsCreate a new booking for an available time slot. Triggers calendar event creation, confirmation emails, and webhooks.
Request Body
{ "eventTypeId": "...", "inviteeName": "Jane", "inviteeEmail": "[email protected]", "inviteeTimezone": "America/New_York", "startTime": "2026-02-15T15:00:00.000Z" }Pagination
List endpoints return paginated results:
{
"data": [...],
"pagination": {
"page": 1,
"limit": 20,
"total": 156,
"totalPages": 8
}
}page— defaults to 1, minimum 1limit— defaults to 20, maximum 100
Errors
All errors return a JSON object with an error field:
{
"error": "Booking not found"
}
// Validation errors include field details:
{
"error": "Invalid request data",
"details": { "email": "Invalid email format" }
}| Status | Meaning |
|---|---|
| 400 | Bad request (invalid params or body) |
| 401 | Missing, invalid, expired, or inactive API key |
| 404 | Resource not found or not owned by you |
| 409 | Conflict (e.g. duplicate contact email) |
| 429 | Rate limit exceeded |
| 500 | Internal server error |
Rate Limits
- API key endpoints: 60 requests/minute per API key
- Pre-auth brute force protection: 5 requests/minute per IP (before key validation)
- Public booking endpoint: 10 requests/minute per IP
When rate limited, the API returns 429 with a Retry-After header.
Webhook Events
Subscribe to events via webhooks. Configure them in your dashboard — not through the API.
| Event | Description |
|---|---|
booking.created | A new booking has been confirmed |
booking.cancelled | A booking has been cancelled |
booking.rescheduled | A booking has been moved to a new time |
payment.received | Payment completed for a paid booking |
contact.created | A new contact was added |
Need help?
Our support team is here to help with API questions.
Contact Support →