Skip to main content
POST
Save people-search results into a list

Authorizations

Authorization
string
header
required

Your API token (af_…) as the Basic-auth username, with an empty password.

Body

application/json

Exactly one filter source (filters | savedSearchId | savedSearchName | query), exactly one destination (listId | listName), an optional campaign (campaignId | campaignName, never both), plus limit and enrich.

limit
integer
required

Maximum number of matching profiles to save (1-10000). Credits are pre-checked before anything starts (402 INSUFFICIENT_CREDITS when the balance is short): with enrich: none 1 credit per row for the save; otherwise limit times the save's 1 credit plus the enrichment's highest price per row (51 / 201 / 251 credits for the work email / phone / both, 101 / 301 for email and both when personal emails come first).

Required range: 1 <= x <= 10000
filters
object

Literal filters, one of the four filter sources — the same vocabulary as POST /prospects/search. People filters in the search vocabulary: include/exclude fields take [{ status, value }] entries, term fields a string or an array of strings, rangeInputs { min, max } ranges — every field and its accepted values are listed by GET /prospects/filter-options. On this endpoint a value outside a field's listed vocabulary is refused with 422 VALIDATION_FAILED, naming the field and the value, before anything is billed; so is a filter the search no longer serves (sex, github_url, github_username, facebook_url, job_title_sub_role, experience.title.sub_role, experience.company.industry, experience.company.location.country, experience.company.location.name, experience.company.location.continent, experience.company.type, location_continent, job_company_location_continent) and an exclude entry on education.degrees (the degree filter takes includes only; size and revenue excludes are searched). One exception: languages.name also accepts these other names of listed languages, searched as the listed one: bangla, farsi, panjabi, slovene, chinese, mandarin, putonghua, tagalog, filipino, sinhala, khmer, central khmer, hakka chinese, hokkien, taiwanese, newari, northern frisian, western frisian, ndebele, north ndebele, south ndebele, assyrian neo-aramaic. Must contain at least one non-empty value.

savedSearchId
string

Id of one of your PEOPLE saved searches to take the filters from instead of filters (a company saved search answers 422 SAVED_SEARCH_TYPE_MISMATCH).

savedSearchName
string

Exact title of one of your people saved searches to take the filters from instead of filters; two searches sharing the title answer 409 SAVED_SEARCH_NAME_AMBIGUOUS.

Required string length: 1 - 255
query
string

Natural-language description of who to find (max 2000 chars), converted into filters server-side instead of filters; criteria that could not be mapped come back as unresolvedCriteria, and a query yielding no filter answers 422 QUERY_FILTERS_INVALID.

Required string length: 1 - 2000
listId
string

Id of an existing contact list to save into (exactly one of listId / listName).

listName
string

Name of the destination contact list, created when none exists; an existing list with the same name (case-insensitive) is reused, a name shared by several lists answers 409 LIST_NAME_AMBIGUOUS, and system list names answer 422 LIST_NAME_RESERVED.

Required string length: 1 - 255
enrich
enum<string>
default:none

What to run on the saved rows: none (default) saves the search rows as-is for 1 credit per row saved; email, phone or phone_and_email save the same way first (1 credit per row saved), then start one enrichment job on exactly the contacts that save added, answering 202 with a jobId to poll and status pending. That job charges only the enrichment values it finds, and contacts already carrying the requested data cost their save and nothing for enrichment. No enrichment starts when the save added nobody or could not be paid in full.

Available options:
none,
email,
phone,
phone_and_email
campaignId
string

Id of one of your campaigns to attach the destination list to once the save has started (optional; exactly one of campaignId / campaignName).

campaignName
string

Exact name of one of your campaigns to attach the destination list to (optional); no match answers 404 CAMPAIGN_NOT_FOUND and a shared name 409 CAMPAIGN_NAME_AMBIGUOUS.

Required string length: 1 - 255

Response

Success

listIds
string[]
required

Destination list ids the save is writing into (the reused list, or the one just created).

enrich
enum<string>
required

Echo of the requested enrich mode.

Available options:
none,
email,
phone,
phone_and_email
totalContacts
integer

Enrichment modes only: the most contacts the save adds (limit), and so the most the enrichment works through.

estimatedMinutes
integer

Enrichment modes only: rough completion estimate for the save and the enrichment.

jobId
string

Enrichment modes only: the id to poll at GET /business/jobs/{jobId}. The enrichment job only exists once the save is done, so this is the save run's id: it reads pending with every count at 0 while the contacts are saved, then as the enrichment job, with its status and counts.

status
enum<string>

Enrichment modes only: pending. The save is queued, and the enrichment job starts on the contacts it saved once it is done.

Available options:
pending,
processing
campaign
object

Only when a campaign was requested.