Overview
Synchronous Person Search returns up to 100 PIDs immediately and stops there. Async Person Search defaults to preview materialization, which returns count and statistics without persisting every matching PID. Setmaterialization_extent to full to build the complete,
reusable segment used by the unlock and pagination flow below.
The async flow lets you materialize the full audience and inspect its size
before requesting record export.
Use async preview when you need background processing plus audience count and
statistics. Request full materialization only when you need every PID.
Before you start
1
Use an authorized API key
The key must belong to the organization creating the search and have access
to Person Search.
2
Plan for record export
PID-only results are free. Fetching records through Enrich v2 or an
activation uses record capacity once per record per term.
3
Write the query as an audience description
Describe shared attributes (“Software engineers in Austin who previously
worked at a public technology company”), not a specific named person. See
Writing good queries
for the attribute categories the parser handles well — they are identical
for sync and async.
The flow at a glance
Step 1 — Submit the search
POST /person-search/v0/search-jobs accepts the query and returns immediately
with 202 Accepted. Parsing and materialization continue in the background.
The endpoint defaults to preview, so this full-results walkthrough opts into
full materialization explicitly.
202
segment_id. It is the identifier for the job, the segment, and
every subsequent call in this flow. The submit response contains no PIDs —
that is the key difference from synchronous search.
Full endpoint reference
Request body, headers, and the complete error table for the submit call.
Step 2 — Poll until the segment is built
GET /person-search/v0/search-jobs/{segment_id} reports progress. Poll every
2–5 seconds until the status is terminal. Polling never unlocks PIDs and never
bills.
For
failed and cancelled, inspect the response’s error object for its
stable code and caller-safe message. error.retryable is always false
because the job is terminal; submit a new or revised search to continue. When
criteria caused the failure, error_criteria identifies them and
suggested_search provides a rephrased query worth trying instead.
Full endpoint reference
Every status field, the criteria tree shape, and completed-job statistics.
Step 3 — Review audience size before unlocking
This is the step that makes the async flow worth using. Oncestatus is
completed, the status response tells you exactly the result size and availability:
estimated_billable_count is 0 for available PID-only results. These results
do not license records. Enrich v2 and record exports check your
available record capacity and count each returned record once per organization
per term.
Use stats to qualify contact coverage and demographic distributions before
requesting full data.
Step 4 — Unlock the PID results
POST /person-search/v0/search-jobs/{segment_id}/results unlocks the full
materialization and returns your first PID page without consuming record capacity.
200
billable_count is 0 because this response contains only PIDs.
Unlock is idempotent. Repeating POST returns the requested PID page.
Step 5 — Page through the remaining PIDs
After unlock, useGET on the same path for every subsequent page. GET is
side-effect-free and never bills.
offset=0 and advance by
returned until offset + returned >= total. The 100-PID cap applies to the
HTTP response only, not to the segment — total reports the full count and you
can page all of it.
Full endpoint reference
POST vs GET semantics, pagination parameters, and the complete error table.
Complete working example
The whole flow, end to end, with an audience-size check before the unlock:Troubleshooting
What to do with the PIDs
Async person search returns Minerva PIDs only, with no person attributes attached. Take them somewhere next:Enrich v2
Fetch full profile data — demographics, work history, contact channels —
for the PIDs you unlocked.
Add Members to Segment
Persist the results into a segment you can track and activate.
Person Search Usage
Review daily delivery limits and consumption history.
Contact Append / Prospect
A separate async flow for ABM contacts at target companies.
Endpoint reference
- 1. Submit Search —
POST /person-search/v0/search-jobs - 2. Poll Status —
GET /person-search/v0/search-jobs/{segment_id} - 3. Unlock & Page Results —
POSTandGET /person-search/v0/search-jobs/{segment_id}/results