Skip to main content
POST

Quick Answer

How do I find people with a natural-language query? Use this endpoint to describe an audience in plain English (for example, “Software engineers in Denver with a professional email”). Minerva parses the query, runs it against the person dataset, and returns Minerva PIDs plus coverage statistics for available contact channels.Common questions this endpoint answers:
  • How do I search for people by description instead of filters?
  • How do I build an audience from a natural-language prompt?
  • How do I get Minerva PIDs for a persona or segment definition?
  • How do I know what percent of my audience has email, phone, or LinkedIn?
  • How do I preview an audience before exporting it?
What you need: A short natural-language description of the audience (up to 500 characters).What you get back: A search_id, the list of matching Minerva PIDs (up to size), total match count, and contact-channel coverage stats for both the full match set and the returned page.Common use cases:
  • Turn a prompt like “CFOs at Series B fintechs in NYC” into a list of PIDs
  • Preview how large and how reachable an audience is before exporting
  • Feed results into /enrich or segments workflows

Overview

The Person Search endpoint accepts a natural-language description of an audience and returns matching people from the Minerva dataset. Internally the service parses the prompt into structured filters, executes a search, and synchronously returns:
  • A stable search_id you can retrieve again later
  • Minerva PIDs for the returned page (up to size)
  • The total_count of everyone matching the search (may exceed the returned page)
  • Contact-channel coverage stats across the full match set (total_contact_coverage) and across the returned page (results_contact_coverage)
The call is synchronous. Typical latency is a few seconds depending on query complexity. Usage is metered per organization per UTC day. See Person Search Usage for limits and consumption.

Writing good queries

The query is a natural-language audience description — not a lookup of a specific named person. Best results come from describing the attributes the people share. The parser handles these attribute categories well: Boolean logic (and / or / not) and nested groups work too — the parser turns “MIT or Stanford CS grads” into the right OR group automatically.

Three example queries

Three patterns that cover most real audience definitions. Each maps to a shape the parser handles cleanly out of the box.

Tips

  • Describe attributes, not specific people. A lookup of “John Doe at Acme Inc.” is a PII match — use /v2/resolve for that. Person Search is for audience definitions (“engineers at SaaS companies”).
  • Be specific about role + company. Adding “at Google” or “in fintech” narrows the result set materially vs. a bare role.
  • Combine 4–6 attributes for high-precision audiences. Each additional filter sharpens the segment.
  • Add a contact-channel constraint (e.g. “with a professional email”) when you need to reach the audience — guarantees the returned PIDs are actually reachable on that channel.
  • Stay under 500 characters. The endpoint validates query length (see Request Body).

Request

Headers

string
required
Your API key for authentication.
string
required
application/json

Request Body

string
required
Natural-language description of the people you want to find. Between 1 and 500 characters. See Writing good queries for supported attribute categories and worked examples.
integer
default:"100"
Maximum number of Minerva PIDs to return in results. Must be between 1 and 100. The total_count field still reflects the full match count even when size is smaller than the match set.

Request Example

Response

Success Response

The API returns a JSON object with the new search_id, the list of matching PIDs for this page, and coverage statistics for contact channels.
string
UUID identifying this search. Store it if you plan to fetch the same results later with Get Person Search.
string
The normalized query associated with this search.
string[]
Array of Minerva PIDs for this page of results. Length is at most size. Each PID has the format p-{hash} and can be used with /enrich, segments, and other person-level endpoints.
integer
Total number of people matching the search. Can be larger than result_count if size is smaller than the match set.
integer
Number of PIDs actually returned in results for this response.
object
Availability of contact channels across the full match set of total_count people. See Coverage stats below for object shape.
object
Availability of contact channels across the result_count PIDs returned on this page. See Coverage stats below for object shape.
string
ISO 8601 timestamp (UTC) indicating when the search was created.

Coverage stats

Both total_contact_coverage and results_contact_coverage share the same shape. Each channel entry reports how many people in the corresponding population have that channel on file, and what percentage that represents.
object
Count and percent of people with a personal email on file.
object
Count and percent of people with a professional email on file.
object
Count and percent of people with a phone number on file.
object
Count and percent of people with a LinkedIn profile on file.
Each channel object contains:
integer
Number of people in the population who have this contact channel on file.
number
count divided by the size of the population, expressed as a percentage (0.0100.0).

Error Responses

Common Errors

  • 400 - Bad Request: The natural-language query could not be turned into any usable search filters. Rephrase the query with more concrete criteria (role, location, industry, seniority, etc.).
  • 401 - Unauthorized: Invalid or missing API key
  • 403 - Forbidden: The API key is valid but not authorized for this route or your plan tier
  • 422 - Unprocessable Entity: Request validation failed. Examples: query missing or empty, query longer than 500 characters, size outside 1-100, or body is not valid JSON.
  • 429 - Too Many Requests: Rate limit or plan quota exceeded
  • 500 - Internal Server Error: Unexpected server error

Error Examples

No usable filters extracted from the query:
Validation error (query too long):