Setup
- Open your workflow app and go to Webhooks in the sidebar.
- On the Outgoing tab, click Add endpoint.
- Enter the destination URL, select the events to subscribe to, and save.
- Copy the signing secret — you’ll use it to verify incoming requests.
Events
Delivery
Requests are delivered asynchronously. HASP retries failed deliveries up to 5 times with exponential backoff:
A delivery is considered successful if the endpoint returns any
2xx status code within 10 seconds. Redirects are not followed.
Request Format
Verifying Signatures
Every delivery includes aHasp-Signature header using the same scheme Stripe uses: t={unix_timestamp},v1={hmac-hex}. The signed value is "{timestamp}.{raw_body}", HMAC-SHA256’d with your endpoint’s secret — binding the signature to a point in time so a captured request can’t be replayed later.
While a secret rotation is within its 7-day grace period (see Rotating the Signing Secret), the header carries two v1 entries — one signed with the new secret, one with the old:
t and every v1 value, recompute the expected signature with whichever secret(s) you have deployed, and accept the delivery if any v1 value matches.
Idempotency
TheX-Hasp-Webhook-Id header contains the delivery ULID. Store this value and check for duplicates before processing — network failures can cause the same delivery to arrive more than once.
Rotating the Signing Secret
CallPOST /v1/webhooks/{endpoint_id}/rotate-secret (see Rotate the signing secret). The previous secret remains valid for signing for 7 days after rotation — every delivery during that window carries both signatures (see Verifying Signatures above), so you can deploy the new secret without missing or rejecting a delivery.