🔔 What are webhooks?
A webhook is a lightweight HTTP request sent from Ownright to your server when a specific event occurs. For example, when a referral is converted into a matter, you’ll receive a webhook event immediately — no need to poll for updates. Webhooks enable:- Real-time updates to your internal systems
- Triggering business logic or workflows (e.g. status sync, UI changes)
- Scalable and event-driven integrations
🎯 Why we use webhooks
Real estate transactions move fast. Webhooks help you:- Stay informed the moment a matter progresses
- Automatically update client records or timelines
- Reduce polling overhead and keep your app performant
📬 Webhook subscriptions
To get started with webhooks you will need to create a “webhook subscription”. Webhook subcriptions allow you to register your server to receive specific events. Each subscription includes:- A callback URL: The endpoint Ownright will send events to
- A list of event types the URL should receive
- A webhook secret (configured in your Partner Dashboard) to verify authenticity
Registering a webhook subscription
Webhook subscriptions are registered via the API. In the future, this will be available through the Partner Dashboard. When creating a subscription, Ownright will:- Generate a verification token
- Send an HTTP POST request to your callback URL with the token
- Expect a response with the same token in the body
Verification example
Request sent by Ownright:📦 Receiving webhook events
When an event occurs, we send an HTTP POST request to your callback URL with a JSON payload.| Header | HTTP Status |
|---|---|
X-Ownright-Webhook-Signature | HMAC SHA256 signature of the request |
X-Ownright-Webhook-Timestamp | Timestamp of the request (used to prevent replay attacks) |
Verifying the webhook
To confirm that a webhook request is legitimate:- Concatenate:
"{timestamp}.{raw_request_body}" - Hash it using
HMAC SHA256with your webhook secret - Compare the result to the value in
X-Ownright-Webhook-Signature
Tip: You can also use the timestamp to reject requests that are too old (e.g.,
more than 5 minutes) to guard against replay attacks.
🗂 Supported events
Some of the key webhook events you can subscribe to include:referral.state_changed– A referral’s lifecycle stage has changed (i.e. converted to matter)matter.state_changed– A matter’s lifecycle stage has changed (i.e. closing completed)
💡 Best practices
- Respond with a 2xx status code within 5 seconds to acknowledge receipt
- Retry logic is built in — failed deliveries will be retried with exponential backoff
- Your webhook URL should be HTTPS and publicly accessible
- Always verify webhook signatures for security