Skip to main content

N8N Integration

N8N is an open-source, self-hostable workflow automation tool. This guide shows you how to connect Reservly to N8N so you can trigger workflows from booking events and call Reservly's API from any workflow.

What You'll Build

Automated workflows that respond to Reservly booking events in real time or pull booking data on a schedule. Two connection types:

  1. Webhook node— receives push events from Reservly when bookings are created, updated, or cancelled.
  2. HTTP Request node— calls Reservly's API to fetch services, check slots, or create bookings.

Prerequisites

  • A Reservly account with an API key (write scope for booking, read scope for fetching data).
  • An N8N instance (cloud or self-hosted).

Step 1: Set Up a Webhook Trigger Node

Create a new workflow in N8N. Add a Webhook node as the trigger.

  1. Add a Webhook node and set the HTTP method to POST.
  2. Switch to the Production tab and copy the production URL. It looks like:
N8N webhook URL (example)
https://your-n8n.example.com/webhook/abc-123-def
text
  1. In your Reservly dashboard, go to Settings → Integrations → Webhooks.
  2. Click Add Webhook, paste the N8N URL, and select the events you want (e.g., booking.created, booking.cancelled).
  3. Save and click Send Test. Back in N8N, you should see the test payload arrive. Click Save & Activate to enable the workflow.

Step 2: Set Up an HTTP Request Node

To pull data from Reservly (services, slots, bookings), add an HTTP Request node.

Fetching Services

HTTP Request node settings
Method: GET
URL:    https://reservly.io/api/public/luxe-salon/services
text

Checking Availability

HTTP Request node settings
Method: GET
URL:    https://reservly.io/api/public/luxe-salon/slots?date=2026-04-15&service_id=SERVICE_ID
text

Creating a Booking

For write operations, add your API key in the Authentication section or as a header.

HTTP Request node settings
Method:  POST
URL:     https://reservly.io/api/public/luxe-salon/book
Headers:
  Content-Type:  application/json
  Authorization: Bearer rsvly_YOUR_API_KEY
text
Request body
{
  "service_ids": ["SERVICE_ID"],
  "date": "2026-04-15",
  "time": "10:00",
  "customer_name": "Jane Smith",
  "customer_email": "jane@example.com"
}
json

Step 3: Example Workflows

Workflow 1: Booking Created → WhatsApp Message via Twilio

Trigger: Webhook (booking.created) → Action: Twilio node → Send WhatsApp message. Map the customer phone and booking details into the message.

WhatsApp message template
Hi {{$json.booking.customer_name}}, your {{$json.booking.service_name}} is confirmed for {{$json.booking.date}} at {{$json.booking.time}}. See you then!
text

Workflow 2: Daily Booking Digest Email

Trigger: Cron node (daily at 7 AM) → HTTP Request (fetch today's slots/bookings) → Send Email node. Use the cron trigger to run the workflow every morning, pull the day's bookings via the API, and email a summary to the business owner.

curl equivalent for fetching today's bookings
curl "https://reservly.io/api/public/luxe-salon/slots?date=2026-04-15" \
  -H "Authorization: Bearer rsvly_YOUR_API_KEY"
bash

Workflow 3: New Customer → Add to CRM

Trigger: Webhook (booking.created) → IF node (check if customer is new) → HTTP Request to HubSpot or Salesforce API to create a new contact. Map customer_name and customer_email from the webhook payload.

Tips

  • Use the IF node to filter events. For example, only process booking.created events and ignore updates.
  • For self-hosted N8N, make sure your instance is publicly accessible (or use a tunnel like ngrok) so Reservly can reach the webhook URL.
  • Set up error handling with the Error Trigger node to catch failed API calls.

Next Steps