Skip to main content

Beta Status: CourtReserve Webhooks Overview

Written by Mari Bern

This feature is currently in Beta, meaning it is actively being tested and refined before a full release. It is not available to all organizations. Access is limited to clubs in CourtReserve's Early Access Groups. To request access, contact our Customer Support team via live chat or email.

CourtReserve Webhooks enable real-time, action-triggered integration with external platforms by automatically sending data to your systems the moment activity occurs within your organization. Instead of polling the API repeatedly for updates, webhooks deliver data instantly — improving efficiency, reducing unnecessary API calls, and keeping your integrations synchronized without delay.

Built for reliability and performance, webhooks support only HTTPS requests and JSON data, ensuring secure and consistent communication.

Note: CourtReserve webhooks are configured and managed at the organization level. Enterprise-level webhooks are not currently supported.


Webhook Access Setup

Webhooks are available on the Advanced, Momentum, and Enterprise plans.


How Webhooks Work

When a subscribed action, or event, occurs in CourtReserve, an HTTP POST request is automatically sent to your configured endpoint URL. The request contains a JSON payload with details about the event. Your endpoint must be publicly accessible over HTTPS and must respond with an HTTP 200 status within the configured timeout window to confirm successful receipt.


Webhook Configuration

When creating a webhook, you can configure the following parameters:

  • Endpoint URL (required): The public HTTPS URL where CourtReserve will send webhook data. Must be publicly accessible on the internet.

  • Event Types: Choose which events should trigger this webhook. Leave empty to receive all events.

  • Description (optional): A label to identify the webhook's purpose, especially useful when managing multiple webhooks.

  • Custom Headers (optional): Custom headers allow you to append additional key-value pairs to the HTTP request headers included in every webhook delivery. Common use cases include passing an Authorization token or x-api-key for endpoint authentication, or including platform-specific metadata required by your receiving system. Your developer or integration platform will supply the exact header name and value.

  • Timeout: The maximum time CourtReserve waits for your endpoint to respond before treating the delivery as failed. Configurable between 1–60 seconds (default: 30 seconds).


Webhook Event Types

CourtReserve webhooks support a comprehensive range of event types across key areas of the platform. When creating a webhook, you can select specific events to subscribe to or leave the selection empty to receive all event types.

Events & Programs

Event Type

Description

Key Data Fields

event.created

Fired when a new event or program is created

eventId, name, startDate, endDate, organizationId

event.updated

Fired when an event or program is modified

eventId, name, startDate, endDate, organizationId

event.deleted

Fired when an event or program is deleted

eventId, organizationId

event.cancelled

Fired when an event or program is cancelled

eventId, organizationId

Event Registrations

Event Type

Description

Key Data Fields

event_registration.created

Fired when a member registers for an event

registrationId, eventId, memberId, registeredAt

event_registration.cancelled

Fired when an event registration is cancelled

registrationId, eventId, memberId, cancelledAt

Members

Event Type

Description

Key Data Fields

member.created

Fired when a new member is added to an organization

memberId, firstName, lastName, email, organizationId

member.deleted

Fired when a member is removed from an organization

memberId, organizationId

member.updated

Fired when a member is modified

profile_updated, approved, declined, login_updated, family_changed, membership_assigned, membership_cancelled, membership_suspended, membership_reactivated

Reservations

Event Type

Description

Key Data Fields

reservation.created

Fired when a new reservation is created

reservationId, memberId, courtId, startTime, endTime

reservation.updated

Fired when a reservation is modified

reservationId, memberId, courtId, startTime, endTime

reservation.cancelled

Fired when a reservation is cancelled

reservationId, memberId, cancelledAt


Security & Authentication

Each webhook request includes cryptographic headers to allow your endpoint to verify the authenticity of the request and confirm it originated from CourtReserve:

  • X-CourtReserve-Timestamp: The Unix timestamp indicating when the request was sent.

  • X-CourtReserve-Signature: A cryptographic HMAC-SHA256 signature that uniquely identifies the request.

Verifying Webhook Requests

Each webhook request sent by CourtReserve includes a signature that allows your endpoint to confirm the request is legitimate. To verify a request, your endpoint should follow these steps:

  1. Extract the X-CourtReserve-Timestamp header value

  2. Build the signing string: {timestamp}.{rawBody}

  3. Compute HMAC-SHA256 using your signing secret (strip the whsec_ prefix and Base64-decode it)

  4. Compare the result with the X-CourtReserve-Signature header

Signing Secret

Your signing secret is generated when a webhook is first created and is displayed one time only. Copy and store it securely before closing the window, as it cannot be retrieved again. If your secret is ever lost or compromised, select Rotate Secret from the webhook's actions menu to invalidate the current secret and generate a new one.


Reliability & Retry Behavior

CourtReserve ensures reliable webhook delivery with automatic retry logic. If your endpoint fails to respond or returns an error, CourtReserve will automatically retry the request up to 3 times before marking it as Dead Lettered. You can monitor all delivery attempts, statuses, and outcomes through the Delivery Log associated with each webhook.

Delivery statuses include:

Pending — queued and awaiting delivery

Succeeded — successfully received by your endpoint

Failed — endpoint did not respond as expected

Dead Lettered — all retry attempts have been exhausted


Webhook Management

After creating a webhook, you can manage it using the following actions:

  • Edit: Update the endpoint URL, event types, description, custom headers, or timeout settings.

  • Delivery Log: View the complete history of webhook deliveries, including status and timestamps.

  • Send Test: Fire a test message to your endpoint to verify the connection is working without affecting real data.

  • Rotate Secret: Invalidate the current signing secret and generate a new one if compromised.

  • Enable / Disable: Temporarily pause webhook delivery without deleting the subscription.

  • Delete: Permanently remove the webhook subscription.

Did this answer your question?