Skip to main content
Register a URL once and LumisReach POSTs an sms.received event to it every time someone texts one of your numbers, telling you who texted (their number and contact record), which of your numbers they texted, and what they said. Works for every number on your account, whichever carrier it runs on.

1. Register your endpoint

Leave out phone_number_id to hear about texts to all your numbers. The URL must be public HTTPS. The response includes a secret (whsec_…). It is shown only once: store it now, you need it to verify deliveries. Lost it? Delete the webhook and create a new one.

2. Receive sms.received

Respond with any 2xx within 10 seconds. To see the full thread with this person, call GET /v1/history/texts?phone_number=<from>; for everything else you know about them, call GET /v1/contacts/<data.contact.id>.

3. Verify the signature

X-LumisReach-Signature-256 is the hex HMAC-SHA256 of the raw request body, keyed with your webhook secret. It is the same scheme LumisReach call webhooks use.
Compute it over the body exactly as received, before any JSON parsing.

Retries

The first delivery is made right away. If your server errors, times out, or returns a non-2xx (redirects are not followed), it is retried 3 more times: after 1, 5 and 30 minutes. Every attempt is recorded in the webhook delivery log in your dashboard.

Test it

POST /v1/sms/webhooks/{id}/test sends a sample, correctly signed event with "test": true and tells you how your server responded.