Skip to main content

Webhooks

Webhooks let FeedSync notify your own systems in real time whenever your listings change. Each webhook belongs to a site and sends an HTTP POST to a URL you control.

What is a webhook?​

When a listing event occurs, FeedSync sends a JSON POST to your configured URL. Your server receives it and can do anything — update a database, refresh a cache, trigger a workflow. (When you connect a WordPress site, a webhook is created for you automatically — see WordPress.)

Adding a webhook​

  1. Open a site on the Sites tab.
  2. Add a webhook and enter the destination URL (must be publicly reachable).
  3. A signing secret is generated — you'll use it to verify requests.
  4. Optionally limit the webhook to certain listing types.

Event types​

EventFired when
listing.createdA listing is processed for the first time.
listing.updatedAn existing listing's data changes.
listing.status_changedA listing's status changes (e.g. current → sold).
listing.imagesA listing's images/media change.
listing.deletedA listing is deleted.
system.pingA test event you can trigger to verify connectivity.

Payload​

FeedSync sends a JSON body describing the event and the affected listing, for example:

{
"event": "listing.status_changed",
"listing": {
"feedsync_unique_id": "CPN2540-1P1329",
"status": "sold",
"under_offer": false,
"type": "residential",
"full_address": "22 Brisbane Street, Bondi Junction NSW 2022",
"price": 3900000,
"bedrooms": 4,
"bathrooms": 2,
"mod_time": "2024-06-15T09:30:00"
}
}

Verifying the signature​

Every request includes an X-Webhook-Signature header — an HMAC‑SHA256 of the raw request body, keyed with your webhook secret, in the form sha256=<hash>. Verify it before trusting the payload:

$payload   = file_get_contents('php://input');
$expected = 'sha256=' . hash_hmac('sha256', $payload, $yourWebhookSecret);
$received = $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '';

if (!hash_equals($expected, $received)) {
http_response_code(401);
exit;
}
tip

Compute the HMAC over the exact raw body you received — don't re-encode the JSON first, or the signature won't match.

Delivery & retries​

  • Return a 2xx quickly to acknowledge receipt.
  • If your endpoint errors or times out, FeedSync retries (with a delay you can configure).
  • After repeated consecutive failures a webhook is paused automatically, and after continued failures it's disabled, so a dead endpoint doesn't pile up. Fix the endpoint and re-enable the webhook to resume.

Testing​

Send a system.ping, or point a webhook at a tool like webhook.site to inspect exactly what FeedSync delivers.