This is not the same as Lookup Webhooks, which deliver Company
Lookup job results (
company_lookup.completed). The two are unrelated — make sure you are
wiring up the one you want.Registering an endpoint
Go to Settings → API & webhooks in the Huntd Dashboard.1
Add your URL
It must be a public
https:// URL. Redirects are not followed.2
Copy your signing secret
You receive a signing secret (
whsec_…). Unlike an API key it stays readable, because you
need it to verify our signature. It grants no access to Huntd.3
Send a test
Use the Send test button to fire a synthetic event, so you can confirm your receiver works
before any real traffic arrives.
The request we send
Fields
string
Event type. Only
signup exists today.string
UTC timestamp of when we detected the signup.
string
Your organization’s domain.
string
When we confirmed this person is a user.
string
When we last confirmed they were not a user. The signup happened between these two
timestamps.
Verifying the signature
Compute HMAC-SHA256 over`${timestamp}.${rawBody}` using your signing secret, and compare it
to X-Huntd-Signature.
The timestamp is part of the signed material, so a captured payload cannot be replayed with a
fresh header. Reject anything older than about 5 minutes.
Delivery behaviour
- Acknowledge with any
2xx. The timeout is 10 seconds — respond fast and do your work asynchronously. - Retries: 5 attempts with backoff — 1 minute, 5 minutes, 30 minutes, 2 hours, 6 hours — after which the delivery is marked failed.
- Redirects are not followed.
- No replay on registration. A newly registered endpoint starts from “now”. To backfill, use
/people?discovered_days=N.
At-least-once delivery
Each event is queued at most once per endpoint, so retrying a failed delivery does not create duplicates. But if we time out after your server already processed the event, the retry is a genuine duplicate.Unknown event types
Onlyevent: "signup" exists today, but the payload is event-typed via both the event field and
the X-Huntd-Event header. Ignore event types you do not recognize rather than erroring, so
new event types do not break your receiver.
Two caveats worth reading
Timing — this is not real-time
Timing — this is not real-time
The event fires when Huntd detects the signup, not the moment it happens. We re-verify
accounts daily and check for changes hourly, so an event typically arrives within a few
hours.That is timely enough for a Slack alert and saves you polling entirely — but do not build
anything that assumes sub-minute delivery.
Entitlement — Signup Signals must be enabled
Entitlement — Signup Signals must be enabled
Signup webhooks only deliver for organizations with Signup Signals enabled. Without it you
can still register an endpoint and use Send test successfully, but no live events will
ever arrive.If your test works and real events never come, check your entitlement first.