Skip to main content
POST
Availability: Agency plan, on https://app.gethuntd.com. Other plans receive 403 ENDPOINT_NOT_ON_PLAN. Counts against your monthly checks per source. Contact Huntd to enable it.

Overview

Check whether one email address is a user of up to 20 products. In this API a product is called a source, named by a slug such as gong or extend. This is an async operation:
  1. Submit an email and a list of sources
  2. Receive a job_id and a poll_after time immediately (202 Accepted)
  3. Once poll_after has passed, poll Get Email Check Result until status is completed
  4. Read sources[slug].is_user: true, false, or null
The response is always 202 with a job, even when every answer is already cached (then status is completed and poll_after is null), so your client only needs one code path.

Timing

  • Checks only run Monday to Friday, 09:00 to 18:00 in your account’s timezone. A job submitted on Friday evening starts on Monday morning, and its poll_after says so.
  • A fresh check takes minutes, not seconds. A cached answer is instant.
  • poll_after can be days away. In production, save job_id and poll_after and check back from a scheduled job instead of keeping a process asleep.

Which Sources You Can Check

A source slug is accepted only when all three are true. Each failure has its own error: Access is checked first, so you never learn about sources you haven’t bought. The sources you have access to are listed in the Huntd dashboard.

Limits

  • The per-source limit is all-or-nothing: if any source in the request is over its limit, the whole request is refused and nothing is used up.
  • Monthly checks reset at the start of each UTC calendar month and count cached answers too. Ask your account manager to change tier.
  • RATE_LIMITED and RATE_LIMIT_EXCEEDED carry Retry-After (seconds); QUOTA_EXCEEDED doesn’t, because it lasts until the next month.

Errors

A request that returns an error created no job and used no monthly checks, so it’s always safe to retry.

Authorizations

X-API-Key
string
header
required

API key in format: hntd_{id}_{secret}. Create one in Settings → API & webhooks. Authorization: Bearer is also accepted.

Body

application/json
email
string<email>
required

The one address to check. Lowercased and trimmed for you.

Maximum string length: 320
Example:

"dana@acme.com"

sources
string[]
required

Source slugs to check the address against (1 to 20). A source is a product such as gong or extend. Duplicates are ignored.

Required array length: 1 - 20 elements
Example:

Response

Job accepted. Always 202, even when every answer came from cache.

success
enum<boolean>
Available options:
true
job_id
string<uuid>

Pass to Get Email Check Result. Opaque: don't parse it.

Example:

"8f4c2a90-6c1e-4b58-9a2f-1d3e5b7c9011"

email
string

The address as it will be checked, after lowercasing and trimming.

Example:

"dana@acme.com"

sources
string[]

The sources this job covers, duplicates removed.

Example:
status
enum<string>

queued if at least one source needs a fresh check; completed if every answer came from cache.

Available options:
queued,
completed
poll_after
string<date-time> | null

Earliest moment work can start (UTC). Don't poll before it. null when every answer came from cache.