Beta Early access — you're seeing this before public launch. Browse our books See terms of early access

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