Search workflow
Synchronous SearchIn responses versus async FaceCheck polling.
Every search returns a job object with id, status, cost_usd, and balance_after.
Status values
| Status | Meaning |
|---|---|
completed | Finished. Results are in result.matches and result.sources. |
running | Still processing. Poll GET /v1/search/:id every ~2 seconds. |
failed | Insufficient balance or request rejected before charging. |
refunded | Upstream provider failed after billing. Balance was restored. |
Synchronous providers
LeakRadar, OSINT Industries, Predicta Search, DeHashed, Snusbase, Whoxy, WhoisXML, SecurityTrails, Picarta, and LeakOSINTbot typically complete in the POST /v1/search response. Check status anyway — treat running as a signal to poll.
Async polling (FaceCheck)
Facecheck.id image searches often return running with poll_url. Keep calling GET /v1/search/:id until completed, failed, or refunded.
{
"id": "550e8400-e29b-41d4-a716-446655440001",
"status": "running",
"provider": "facecheck",
"input_type": "image",
"query": "https://example.com/photo.jpg",
"cost_usd": "0.50",
"balance_after": "9.45",
"result": null,
"error": null,
"poll_url": "/v1/search/550e8400-e29b-41d4-a716-446655440001"
}Completed FaceCheck matches use score, url, and thumbnail (often a data URI).
Do not busy-loop
Poll about every two seconds. Daily key rate limits still apply to poll requests.
Result shape
result.sources describes what the adapter fetched (counts, paging, lookup type). result.matches is the normalized list your UI or pipeline should consume. Provider-specific fields stay on each match — see provider guides.
LeakRadar unlocks
LeakRadar Lite / Plus / Pro charge a flat per-query price and auto-unlock credentials up to 1,000 / 10,000 / 50,000 items. Caps live with pricing in the catalog.
Bulk search
POST /v1/search/bulk runs a cartesian product of queries[] × providers[] in one request.
| Limit | Value |
|---|---|
| Max queries | 50 |
Max jobs (queries × providers) | 100 |
{
"input_type": "email",
"queries": ["[email protected]", "[email protected]"],
"providers": ["leakradar-lite", "dehashed"]
}The response includes batch_id, estimated_cost_usd (list prices before free-lookup discounts), summary, and a searches[] array (one job per pair, queries outer / providers inner). Partial success is normal — inspect each job’s status / error.
Poll any running job with GET /v1/search/:id the same way as a single search. Each job counts toward the daily API key rate limit even though bulk uses one HTTP call.
At most one gifted free lookup per provider is used in a personal bulk batch; remaining jobs charge the wallet.