RentalTideRentalTideDocs
Dashboard

Webhooks

Receive signed, retried event notifications from RentalTide — the event catalog, payload shape, and signature verification.

Webhooks let your app react to things happening in a merchant's account (bookings, payments, …) without polling. RentalTide signs every delivery and retries failures with exponential backoff.

Setup

  1. Register a Webhook URL and a Webhook secret on your app in the partner portal.
  2. Request the webhooks:receive scope.
  3. Verify the signature on every request before trusting it.

Use the Test webhook button in the developer portal to send a signed sample delivery to your endpoint at any time.

Event catalog

EventWhen
booking.createdA new booking/order was created.
booking.updatedA booking changed (notes, timing, add-ons, assets).
booking.status_changedA booking moved to a new status.
booking.checked_inA booking was checked in.
booking.cancelledA booking was cancelled.
booking.rescheduledA booking was rescheduled.
payment.receivedA payment was recorded against a booking.
payment.refundedA refund was issued.
customer.createdA new customer was created.
customer.updatedA customer record was updated.
app.installedYour app was installed by a merchant (provision here).
app.uninstalledYour app was uninstalled (deprovision / clean up here).

The same list ships as WEBHOOK_EVENT_CATALOG in @rentaltide/app-sdk.

Payload

Every delivery is a JSON POST:

HTTP
POST /your-webhook-endpoint
Content-Type: application/json
X-RentalTide-Event: booking.created
X-RentalTide-Signature: v1=<hmac-sha256-hex>
X-RentalTide-Timestamp: 2026-05-22T18:04:11.000Z

{
  "event": "booking.created",
  "timestamp": "2026-05-22T18:04:11.000Z",
  "data": { "rentalId": "bkg_…", "...": "..." }
}

Verify the signature

The signature is v1= + HMAC_SHA256(secret, "{X-RentalTide-Timestamp}.{rawBody}") in hex. Compute it over the raw request body and compare in constant time. Reject deliveries whose timestamp is more than 5 minutes old (replay protection).

JavaScript

A complete runnable receiver is in the with-backend example.

Delivery & retries

  • Respond 2xx quickly to acknowledge. Do slow work asynchronously.
  • Non-2xx (or a timeout) is retried with exponential backoff — 1m → 5m → 15m → 1h → 6h — up to 6 attempts, then the delivery is marked dead.
  • Deliveries can arrive more than once; make your handler idempotent (e.g. dedupe on the data ids).
Was this page helpful?
Need help? Contact Support.See what’s new. Check out changelog.Questions? Book a video chat.
Ask AI
Responses are generated using AI and may contain mistakes.
Ask questions about RentalTide and get help with your integration.