request_id back immediately, and the work happens in the background.
Lifecycle
1
Submit
POST /async answers 201, POST /lead_finder/async and POST /company_finder/async answer
202. The body carries the identifier you will poll on: id for enrichment, request_id for
Lead Finder and Company Finder.2
Processing
The
GET endpoint answers 202 with status: "processing" and a message. No data, no
leads, no summary.3
Done
The
GET endpoint answers 200 with status: "terminated". summary and the results array
are now present.Status values
A Lead Finder search that matched nothing is reported as
terminated with an empty leads array
and summary.leads_found at 0. A Company Finder search that matched nothing is reported the same
way, with an empty companies array and summary.companies_found at 0. It is a normal outcome,
not an error.Polling recipe
Prefer a webhook whenever you can. When you do have to poll, wait a few seconds between attempts and stop onterminated, keeping an eye on the
rate limit.
GET /lead_finder/async/{request_id} and treat 404 as the unknown-id case
instead of 406. For Company Finder, use GET /company_finder/async/{request_id}, also with 404,
and treat on_hold as final: it never resumes on its own.
Per lead status
Inside a terminated enrichment, each row ofdata carries its own enriched boolean. A batch can
be terminated while some of its leads could not be enriched. Check enriched before using a row.