Zapier Integration
Connect LinkTime to 7,000+ apps using native Zapier triggers. No code required.
What You Can Do
LinkTime's native Zapier app gives you instant (real-time) triggers for all booking events. Unlike generic webhook integrations, you get a first-class experience with:
- Instant triggers — no polling delays, events fire in real-time
- Event-type filtering — only trigger for specific event types
- Dedicated rescheduled event — no workaround needed (cancel + create)
- Payment and contact triggers — beyond just bookings
- Available on all plans — including Free
Architecture Overview
LinkTime uses Zapier's REST Hook model — the fastest and most reliable trigger type Zapier offers. Here's how it works:
1. You create a Zap with a LinkTime trigger 2. Zapier sends a subscribe request to LinkTime's API 3. LinkTime creates a webhook pointing to Zapier's hook URL 4. When an event happens (e.g., booking created): a. LinkTime fires the webhook to Zapier's URL b. Zapier receives the payload instantly c. Your Zap actions run (Slack message, CRM update, etc.) 5. If you turn off the Zap, Zapier sends an unsubscribe request 6. LinkTime deletes the webhook automatically
This is the same model used by Stripe, GitHub, and other top Zapier integrations. There's no polling — events arrive in real-time, typically within 1-2 seconds.
Setup Guide
Step 1: Generate an API Key
- 1
Go to API Keys Settings
Navigate to Settings → API Keys in your LinkTime dashboard.
- 2
Create a new API key
Click "Create API Key", give it a name like "Zapier Integration", and copy the key immediately. You won't be able to see it again.
Step 2: Connect in Zapier
- 1
Find LinkTime in Zapier
Go to zapier.com and create a new Zap. Search for "LinkTime" as your trigger app, or use the invite link shared by our team (the app is currently private/invite-only).
- 2
Enter your API key
Paste the API key you generated in Step 1. Zapier will verify it works and show "Connected as [your name]".
- 3
Choose a trigger
Select one of the 5 available triggers (see reference below). Optionally filter by event type for booking triggers.
API Key Management
API keys authenticate your Zapier connection to LinkTime. Each key starts with lt_live_ and is 72 characters long.
Plan Limits
| Plan | API Keys |
|---|---|
| Free | 2 keys |
| Pro | Unlimited |
| Organization | Unlimited |
Key Rotation (Zero Downtime)
All plans allow at least 2 simultaneous keys, so you can rotate without disrupting your Zaps:
- Create a new API key
- Update the key in Zapier's connection settings
- Verify your Zaps still work
- Delete the old key
Security Best Practices
- • Never share API keys in public repositories or chat messages
- • Rotate keys every 90 days (recommended) or immediately if compromised
- • Use a descriptive name for each key (e.g., "Zapier - Sales Automation")
- • Keys are hashed with SHA-256 before storage — we never store the raw key
Trigger Reference
| Trigger | Event Key | Description | Event Filter |
|---|---|---|---|
| Booking Created | booking.created | Fires instantly when a new booking is confirmed. | Yes |
| Booking Cancelled | booking.cancelled | Fires instantly when a booking is cancelled. | Yes |
| Booking Rescheduled | booking.rescheduled | Fires instantly when a booking is moved to a new time. Includes both old and new times. | Yes |
| Payment Received | payment.received | Fires when a payment is completed for a paid booking. | - |
| New Contact | contact.created | Fires when a new contact is added (from a booking, payment, or manually). | - |
Payload Examples
All payloads share an envelope with apiVersion, event, timestamp, and data. The data field varies by event type.
booking.created
{
"apiVersion": "2025-02-09",
"event": "booking.created",
"timestamp": "2026-02-09T10:00:00.000Z",
"data": {
"id": "cm6abc123def456",
"eventType": {
"id": "cm6evt789ghi012",
"name": "30-Minute Consultation",
"slug": "30-min-consultation",
"duration": 30
},
"startTime": "2026-02-10T14:00:00.000Z",
"endTime": "2026-02-10T14:30:00.000Z",
"status": "confirmed",
"invitee": {
"name": "John Smith",
"email": "[email protected]",
"timezone": "America/New_York"
},
"host": {
"id": "user_abc123",
"name": "Sarah Johnson",
"email": "[email protected]"
},
"meetingLink": "https://meet.google.com/abc-defg-hij",
"location": "Google Meet",
"notes": "Looking forward to discussing the project.",
"isRecurring": false,
"recurringGroupId": null
}
}booking.cancelled
Same structure as booking.created, plus an optional cancelReason field:
{
"apiVersion": "2025-02-09",
"event": "booking.cancelled",
"timestamp": "2026-02-09T15:30:00.000Z",
"data": {
"id": "cm6abc123def456",
"eventType": { "id": "...", "name": "...", "slug": "...", "duration": 30 },
"startTime": "2026-02-10T14:00:00.000Z",
"endTime": "2026-02-10T14:30:00.000Z",
"status": "cancelled",
"invitee": { "name": "John Smith", "email": "[email protected]", "timezone": "America/New_York" },
"host": { "id": "user_abc123", "name": "Sarah Johnson", "email": "[email protected]" },
"cancelReason": "Schedule conflict — need to reschedule next week.",
...
}
}booking.rescheduled
Includes the new time in startTime/endTime and the old time in previousStartTime/previousEndTime:
{
"apiVersion": "2025-02-09",
"event": "booking.rescheduled",
"timestamp": "2026-02-09T16:00:00.000Z",
"data": {
"id": "cm6abc123def456",
"eventType": { "id": "...", "name": "...", "slug": "...", "duration": 30 },
"startTime": "2026-02-12T10:00:00.000Z",
"endTime": "2026-02-12T10:30:00.000Z",
"previousStartTime": "2026-02-10T14:00:00.000Z",
"previousEndTime": "2026-02-10T14:30:00.000Z",
"status": "confirmed",
"invitee": { "name": "John Smith", "email": "[email protected]", "timezone": "America/New_York" },
"host": { "id": "user_abc123", "name": "Sarah Johnson", "email": "[email protected]" },
...
}
}payment.received
{
"apiVersion": "2025-02-09",
"event": "payment.received",
"timestamp": "2026-02-09T10:05:00.000Z",
"data": {
"bookingId": "cm6abc123def456",
"amount": 5000,
"currency": "usd",
"paymentMethod": "card",
"transactionId": "pi_3abc123def456"
}
}Note: Amount is in cents (5000 = $50.00).
contact.created
{
"apiVersion": "2025-02-09",
"event": "contact.created",
"timestamp": "2026-02-09T10:00:00.000Z",
"data": {
"id": "cm6contact789",
"name": "John Smith",
"email": "[email protected]",
"phone": "+1-555-0123",
"company": "Acme Corp",
"notes": null,
"createdAt": "2026-02-09T10:00:00.000Z",
"source": "booking"
}
}The source field can be "booking", "manual", or "payment".
Output Field Types
| Field | Type | Notes |
|---|---|---|
| id | string | CUID format |
| startTime / endTime | string (ISO 8601) | Always UTC |
| duration | number | Minutes |
| amount | number | Cents (5000 = $50.00) |
| isRecurring | boolean | true/false |
| cancelReason, notes, etc. | string | null | Optional fields |
Event-Type Filtering
When setting up a booking trigger (created, cancelled, or rescheduled), you can optionally select a specific event type from a dropdown. This means the Zap will only fire for bookings of that type — perfect if you want different workflows for different meeting types.
Example
You have "Sales Demo" and "Support Call" event types. You want new sales demos to go to Salesforce, but support calls to go to Zendesk. Create two Zaps with different event-type filters — each fires only for the right type.
Tip: Leave the event-type filter empty to trigger for all event types — useful for general notifications like "post every new booking to Slack."
Security & Rate Limits
API Key Security
- • Keys are hashed with SHA-256 before database storage — raw keys are never persisted
- • Authentication via
X-API-Keyheader - • Each key is scoped to a single user account
Webhook Payload Signing
All webhook payloads (including those sent to Zapier) include an X-LinkTime-Signature header with an HMAC-SHA256 signature. This allows you to verify that payloads genuinely came from LinkTime.
Rate Limits
| Tier | Limit | Scope |
|---|---|---|
| Pre-auth (invalid key) | 5 requests/min | Per IP address |
| Post-auth (valid key) | 60 requests/min | Per user |
Zapier's subscribe/unsubscribe and performList calls count against the post-auth limit. Under normal usage, you won't hit these limits.
Error Reference
| Status | Meaning | Action |
|---|---|---|
| 401 | Invalid or missing API key | Check key is correct and active |
| 403 | Plan limit reached (e.g., max API keys or webhooks) | Upgrade plan or delete unused keys/webhooks |
| 429 | Rate limit exceeded | Wait and retry (Zapier handles this automatically) |
| 500 | Server error | Retry after a moment; contact support if persistent |
Payload Versioning
Every payload includes an apiVersion field (currently "2025-02-09").
Compatibility Promise
- • Adding new fields — always safe, never requires a version bump
- • Renaming or removing fields — requires a new apiVersion
- • Changing field types — requires a new apiVersion
Your Zaps should be resilient to new fields being added at any time. Zapier's platform handles this gracefully — new fields simply appear as available mapping options.
Popular Workflows
New Booking to HubSpot Contact
HubSpot
New Booking to Salesforce Lead
Salesforce
New Booking to Slack Channel
Slack
Booking Cancelled to Slack Alert
Slack
New Booking to Google Sheets Row
Google Sheets
New Contact to Mailchimp List
Mailchimp
Payment Received to Slack Notification
Slack
New Booking to Notion Database
Notion
LinkTime vs. Competitors on Zapier
| Feature | Calendly | Cal.com | LinkTime |
|---|---|---|---|
| Event-type filter | No | No | Yes |
| Rescheduled trigger | No | Yes | Yes |
| Payment trigger | No | Yes | Yes |
| Contact trigger | No | No | Yes |
| Free plan access | No | Yes | Yes |
Troubleshooting
Connection test fails
Make sure you copied the full API key (starts with lt_live_, 72 characters total). Check that the key is active in Settings → API Keys.
Zap doesn't fire
Check if you have an event-type filter set — the trigger will only fire for that specific event type. Also verify the Zap is turned on (not paused) in Zapier.
Webhook limit reached
Each Zap creates a webhook. Free plans allow 2 total webhooks (manual + Zapier combined). Upgrade to Pro for unlimited.
I see a "Zapier" webhook in my settings
That's expected! When you create a Zap, LinkTime creates a webhook behind the scenes. These are labeled "Zapier" in your webhook list and are managed automatically — they'll be removed when you turn off the Zap.
How do I rotate my API key?
See the API Key Management section above for the zero-downtime rotation process.
"LinkTime" doesn't appear in Zapier search
The LinkTime Zapier app is currently invite-only (not yet published to the public marketplace). Ask our team for the invite link, or check your email for an invitation.
Ready to get started?
Generate an API key and build your first Zap in under 2 minutes.