Webhooks
TL;DR
POST /v1/webhookswith a URL and event list. Repull sends HMAC-SHA256 signed JSON payloads on reservation changes, guest messages, listing & calendar updates, payments, and account events.
Receive real-time HTTP POST notifications when events happen in connected PMS accounts. Instead of polling the API, webhooks push data to your server the moment something changes.
How It Works
- You register a webhook URL and select which event types to subscribe to
- When an event occurs (e.g. a new reservation is created), Repull sends an HTTP POST to your URL
- The request body contains the full event payload with all relevant data
- Your server verifies the HMAC-SHA256 signature and processes the event
- Return a 2xx status within 5 seconds to acknowledge receipt
Available Events
| Event | Description |
|---|---|
reservation.created | A new reservation arrived from any connected channel or direct booking |
reservation.updated | Dates, guest count, status, or pricing changed on a reservation |
reservation.cancelled | A reservation was cancelled by the guest, host, or platform |
reservation.message.received | A new inbound guest message arrived on a reservation thread |
listing.created | A new property was synced from a connected PMS or channel |
listing.updated | Listing content, amenities, photos, or status changed |
listing.deleted | A property was removed from Repull or the upstream PMS |
calendar.updated | Availability or pricing for a listing was updated |
account.created | An OAuth or API credential connection was completed |
account.disconnected | A connection was revoked, expired, or rejected upstream |
ai.operation.completed | An async AI run (review response, message draft, pricing) finished |
ai.operation.failed | An async AI run terminated with an error and will not retry |
payment.completed | A guest payment was successfully captured |
payment.refunded | A previous payment was refunded in part or in full |
repull.ping | A diagnostic delivery used to verify endpoint reachability |
See Event Types for the full payload schema of each event.
Quick Example
Create a webhook subscription that listens for new and updated reservations:
curl -X POST https://api.repull.dev/v1/webhooks \
-H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://your-app.com/webhooks",
"events": ["reservation.created", "reservation.updated"]
}'Security
Every delivery is signed with HMAC-SHA256 using a per-subscription signing secret. Always verify the X-Repull-Signature header before processing events. See Verify Signatures for implementation examples in Node.js and Python.
Reliability
Failed deliveries are automatically retried up to 5 times with exponential backoff. You can also manually replay any delivery from the last 7 days. See Retries & Replay for details.
AI