Skip to main content
POST
Start a contact search

Authorizations

Authorization
string
header
required

Account API key passed in the Authorization header

Body

application/json
company_linkedin_ids
string[] | null
required

LinkedIn company IDs to search, at least one. Every query runs at every company, so this multiplies the work: resolve them via Search for a company or read them off a companies list.

Minimum array length: 1
Example:
queries
object[] | null
required

The personas to look for, at least one. Each runs at every company and the results are merged into one list, deduplicated, so a person matching two queries appears once.

Minimum array length: 1
destination_contacts_list_id
string

Deliver into a contacts list that already exists instead of creating one — 're-run into this list'. Any list you could add to by hand; a Tamtam-managed list is refused. Omitted, the search makes its own list and the account's standing list-building columns are attached to it, exactly as they would be in the app.

enrich_emails
boolean

Also look up a professional email for each extracted contact. Charged per enrichment on top of the extraction, and only for contacts that clear low_lead_score_threshold.

enrich_phones
boolean

Also look up a phone number for each extracted contact. Same charging and same lead-score cut as enrich_emails.

idempotency_key
string

Your own key for this submission, so a retried POST returns the search the first one started instead of starting a second. Omitted, every call starts a new search — which is what a fresh request usually means.

A key is unique per account for good: reusing one more than 30 seconds later is a 409, not a replay.

low_lead_score_threshold
integer<int64>

Buy an email or a phone only for a contact whose Lead Score reaches this. Omitted, every extracted contact is enriched. Ignored when neither enrich_emails nor enrich_phones is set.

Example:

40

max_profiles_per_company_persona
integer<int64>

Cap on the profiles fetched for each (query, company) pair. Omitted, the search is exhaustive up to the platform maximum.

This is a cap, not a target: a pair that matches nobody costs nothing, and 1 credit is charged per profile actually extracted.

Example:

20

user_email
string

Who to attribute the search to in the app. Freeform and opaque to us; an API key authenticates the workspace, not a person, so nothing is inferred when this is omitted.

Example:

"rep@acme.com"

Response

Accepted

company_linkedin_ids
string[] | null
required
contacts_list_id
string
required

The contacts list this search delivers into. This is the id to read results with — List the contacts in a contacts list — and several searches may share one.

created_at
string<date-time>
required
created_by_user_email
string
required

Whatever user_email the submission carried; empty when it carried none.

id
string
required

The SEARCH's id. Pass it to the status and stop operations.

name
string
required

Derived at submit time from the queries and companies, e.g. 'Revenue leadership @ Acme, Globex and 3 others'.

queries
object[] | null
required

The queries as submitted, frozen. A persona edited since does not change them.

status
object
required
already_existed
boolean

Only on a create: true when your idempotency_key matched a submission already in flight, so this is that search rather than a new one.