A quick search casts the widest net: give it one term — a domain, an email, an IP — and it searches every related data source at once, returning one merged result. It’s the natural starting point — run it to see what’s out there across every source, then dig deeper into the ones that matter.
Pick your search
Each search takes a singlesearch_term, matched to its type:
What each search covers
The term you pick decides which sources run. The platform fans the search out to every source that applies and returns the findings grouped by source. Breadth varies with the term — a domain reaches 12 sources, a credit card reaches 3. Source names below are the product names you’ll see in the response’sfeature_names.
See which sources each search covers
See which sources each search covers
A ✓ means that search type reaches that source; rows run from broadest coverage to narrowest. (Host = host name · File = file name · Card = credit card.)
How it works
These searches run asynchronously: you submit a search, get back a record with anid, then poll that record until every source has reported.
1
Submit the search
POST your term to the matching endpoint. It returns a search record (201) carrying an id.2
Poll for results
Fetch the record by its →
id. Its result fills in per source as each one reports back.retrieve_quick_search_record_with_status_updateReading the results
A search record carries:feature_names— the sources searched, by their product name (Leaks,Credentials,SSL Transparency Logs,Cyber Intel, …).services_slugs— the same sources by their internal slug.result— a map keyed by source slug, one entry per source.follow_up_token— see below.
result entry has a status, plus either inline data (the source answered immediately) or a task_id (still working — poll for it). Entries also carry their own scoped follow_up_token.
status:
An async source keeps the status reported by its own status endpoint, so it doesn’t land on
ok — it starts as submitted and finishes on a source-specific terminal value such as finished, Completed, or Complete, then exposes a task_id.
Read it per source, not all-or-nothing. The search fans out in parallel — some sources answer instantly, others take longer, and one failing never fails the rest. Treat submitted as “keep polling” and any non-failure value as done; don’t wait for ok on an async source. Partial results are normal.
Pulling a source’s full findings
What you do next depends on what a source’sresult entry contains.
It has data → the findings are already there. Read them directly — there’s nothing more to fetch. Most sources answer this way (Leaks, SSL Transparency Logs, Cyber Intel, Telegram, Discord, Accounts, …).
It has a task_id (status submitted) → the source runs as a background job. Poll the record until that source reaches its terminal status, then re-query its result endpoint with the task_id for the full findings:
The follow-up token. The response carries a
follow_up_token at the top level, and each source entry carries its own scoped to that one source. It’s a JWT (valid 24 hours) that ties a follow-up call back to your original search — the source, the exact query parameters, and your organization. Send it as a Follow-Up-Token header on the call above:
filter_id: a domain quick search submits with filter_id=5, and an email quick search uses filter_id=1 plus filter_parameters usernames. See Filtered credentials for the full filter catalog.
An expired or mismatched token returns 401.
Need to go narrower? This hits every source for your term. To search one specific indexed source (a forum, a channel, Telegram, Discord) on its own, search that individual data source; for real-time queries against a live source, use a live search.