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 per row before the job starts: 2 with enrich: none, otherwise the enrichment price per row (402 INSUFFICIENT_CREDITS when the balance is short).

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. 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 2 credits per row; email (pre-checks 50 credits per row), phone (200) or phone_and_email (250) run the enrichment waterfall while saving — rows already carrying the requested data are not re-charged.

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 enrichment mode the job is running.

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

Enrichment modes only: how many rows the job will process.

estimatedMinutes
integer

Enrichment modes only: rough completion estimate.

campaign
object

Only when a campaign was requested.