Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/Tymeslot/tymeslot/llms.txt

Use this file to discover all available pages before exploring further.

Tymeslot webhooks let you react to booking activity in real time. Whenever a meeting is created, cancelled, or rescheduled, Tymeslot sends an HTTP POST request with a signed JSON payload to an HTTPS endpoint you control. You can feed that data straight into n8n, Zapier, Make, or your own backend — no polling required.
Webhooks require the Pro plan on the managed cloud. If you self-host Tymeslot, all webhook features are available at no extra cost — the automations_allowed feature gate is unrestricted by default on self-hosted instances.

Available events

Tymeslot fires webhooks for three meeting lifecycle events, sourced directly from Tymeslot.Webhooks.available_events/0:
EventTrigger
meeting.createdA new booking is confirmed
meeting.cancelledAn existing booking is cancelled
meeting.rescheduledA booking’s time is changed
You choose which events each webhook subscribes to when you create it in Dashboard → Automation → Webhooks. A single endpoint can subscribe to one, two, or all three events.

How delivery works

When a subscribed event fires, Tymeslot schedules delivery via an Oban background job. The job sends an HTTP POST to your URL with the following headers:
HeaderValue
Content-Typeapplication/json
User-AgentTymeslot-Webhooks/1.0
X-Tymeslot-TimestampISO 8601 UTC timestamp of the request
X-Tymeslot-TokenHMAC-signed token — use this to verify the sender
The endpoint must return a 2xx status code to be considered successful. Any other status code (or a network failure) counts as a failed delivery.
After 10 consecutive delivery failures, Tymeslot automatically disables the webhook and records a disabled_reason. You can re-enable it at any time from Dashboard → Automation → Webhooks — re-enabling also resets the failure counter.

Verifying the token

The X-Tymeslot-Token header contains the webhook’s signing secret. Reject any request that is missing the header or presents a token that doesn’t match the one shown in your dashboard. Store the secret securely and never commit it to version control.

Payload structure

Every meeting-event payload follows the same envelope. Fields are sourced directly from Tymeslot.Webhooks.PayloadBuilder.build_payload/3:
{
  "event": "meeting.created",
  "timestamp": "2024-01-15T10:30:00Z",
  "webhook_id": "123",
  "data": {
    "meeting": {
      "id": 1,
      "uid": "abc123def456",
      "title": "30-minute call",
      "summary": "Quick catch-up",
      "description": "Let's connect and discuss the project.",
      "start_time": "2024-01-15T14:00:00Z",
      "end_time": "2024-01-15T14:30:00Z",
      "duration": 30,
      "status": "confirmed",
      "meeting_type": "30min",
      "location": "Google Meet",
      "organizer": {
        "name": "Sarah Chen",
        "email": "sarah@example.com",
        "title": "Product Manager",
        "user_id": 42
      },
      "attendee": {
        "name": "Alex Rivera",
        "email": "alex@example.com",
        "phone": "+1 555 0100",
        "company": "Acme Corp",
        "timezone": "America/New_York",
        "message": "Looking forward to it!"
      },
      "urls": {
        "view": "https://tymeslot.app/sarah/meeting/abc123def456",
        "reschedule": "https://tymeslot.app/sarah/meeting/abc123def456/reschedule",
        "cancel": "https://tymeslot.app/sarah/meeting/abc123def456/cancel",
        "meeting": "https://meet.google.com/abc-defg-hij"
      },
      "video": {
        "enabled": true,
        "room_id": "room_xyz789",
        "organizer_url": "https://meet.google.com/abc-defg-hij?authuser=1",
        "attendee_url": "https://meet.google.com/abc-defg-hij",
        "created_at": "2024-01-14T09:00:00Z",
        "expires_at": "2024-01-15T14:30:00Z"
      },
      "created_at": "2024-01-14T09:00:00Z",
      "updated_at": "2024-01-15T10:30:00Z"
    }
  }
}
When video is not enabled, the video object is simply { "enabled": false }.

Cancellation payload

When event is "meeting.cancelled", the meeting object includes an additional cancellation field:
{
  "event": "meeting.cancelled",
  "data": {
    "meeting": {
      "status": "cancelled",
      "cancellation": {
        "cancelled_at": "2024-01-15T11:00:00Z",
        "reason": "Scheduling conflict"
      }
    }
  }
}

Payload field reference

event
string
required
The event type. One of meeting.created, meeting.cancelled, meeting.rescheduled.
timestamp
string
required
ISO 8601 UTC timestamp of when the webhook was dispatched.
webhook_id
string
required
The numeric ID of the webhook configuration that triggered this delivery, as a string.
data.meeting
object
required
The full meeting record at the time the event fired.

Test payload

Use the Test button in the dashboard, or call the connection-test function directly. Tymeslot sends a minimal test payload with no meeting data:
{
  "event": "webhook.test",
  "timestamp": "2024-01-15T10:30:00Z",
  "webhook_id": "test",
  "data": {
    "message": "This is a test webhook from Tymeslot. If you receive this, your webhook is configured correctly!",
    "test": true
  }
}
A 2xx response from your endpoint confirms the URL is reachable and the connection is healthy.

Auto-disable behaviour

Tymeslot tracks consecutive failures on every webhook (failure_count on the WebhookSchema). The counter resets to zero on any successful delivery. If failure_count reaches 10, the webhook is automatically disabled:
  • is_active is set to false
  • disabled_at is stamped with the current UTC time
  • disabled_reason records the error that triggered the final failure
To re-enable, go to Dashboard → Automation → Webhooks, find the disabled webhook (it is marked with a “Disabled” badge), and click Re-enable. This resets the failure counter and resumes delivery.

Integration examples

  1. Create a new workflow in n8n.
  2. Add a Webhook trigger node.
  3. Copy the generated webhook URL into Tymeslot’s webhook settings.
  4. Set the Authentication dropdown in n8n to Header Auth, key X-Tymeslot-Token, value matching your webhook token.
  5. Add downstream nodes (e.g. send a Slack message, create a CRM contact) connected to the trigger.
  6. Activate the workflow and click Test in Tymeslot to verify end-to-end delivery.

Build docs developers (and LLMs) love