Webhooks

Set up webhook endpoints to receive real-time event notifications.

Overview

Webhooks notify your application when events occur in soft.house. Configure an endpoint URL and weโ€™ll send HTTP POST requests with event data.

Setting Up Webhooks

1. Create a Webhook Endpoint

Add an endpoint in your Dashboard (self-service coming v0.2; email developers@soft.house to configure webhooks in the interim):

https://your-app.com/webhooks/soft-house

2. Select Events

Choose which events to receive:

EventDescription
wish.createdNew wish created
wish.updatedWish status changed
wish.fulfilledWish successfully completed
mandate.createdNew mandate issued
mandate.expiredMandate expired
payment.succeededPayment completed
payment.failedPayment failed

3. Verify Signatures

All webhooks include an HMAC signature for verification:

import crypto from 'crypto';

function verifyWebhook(payload: string, signature: string, secret: string): boolean {
  const expected = crypto
    .createHmac('sha256', secret)
    .update(payload)
    .digest('hex');

  return crypto.timingSafeEqual(
    Buffer.from(signature),
    Buffer.from(expected)
  );
}

Webhook Payload

{
  "id": "evt_abc123",
  "type": "wish.fulfilled",
  "created_at": "2026-01-20T10:35:00Z",
  "data": {
    "id": "wish_abc123",
    "status": "fulfilled",
    "query": "Find me a laptop"
  }
}

Retry Policy

Failed deliveries are retried with exponential backoff:

AttemptDelay
1Immediate
25 minutes
330 minutes
42 hours
524 hours

After 5 failed attempts, the webhook is disabled and youโ€™ll receive an email notification.

Best Practices

  • Always verify webhook signatures before processing
  • Return 200 status quickly; process events asynchronously
  • Handle duplicate deliveries (use event id for deduplication)
  • Set up monitoring for webhook failures