Skip to main content
Register an HTTPS endpoint and Huntd will POST to it when someone at one of your tracked accounts signs up for a source.
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
Unique event ID. Key on this for idempotency — see delivery.
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.
Use the raw request body, before JSON parsing. Re-serializing a parsed object changes the bytes and the signature will not match.
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.
Key on id and make your handler idempotent. This is the single most common source of double-processing.

Unknown event types

Only event: "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

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.
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.