Skip to main content
POST
Commit an import into a list

Authorizations

Authorization
string
header
required

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

Path Parameters

importId
string
required

The importId returned by POST /business/imports (or /business/imports/presign) that identifies the uploaded file.

Required string length: 8 - 800

Body

application/json
listId
string

24-character hex id of an existing contact list to append the rows to; mutually exclusive with listName, and an unknown or non-owned id answers 404 LIST_NOT_FOUND.

listName
string

Name of the destination contact list (1-255 characters): an existing list with this exact name (case-insensitive) is reused, otherwise it is created; mutually exclusive with listId. Two lists sharing the name answer 409 LIST_NAME_AMBIGUOUS and reserved system titles answer 422 LIST_NAME_RESERVED.

Required string length: 1 - 255
mapping
object

Column mapping from source column header to target field, e.g. {"fname": "First Name"} (up to 200 entries). Each key is a column header spelled exactly as it appears in the file (the headers of the import preview). Each value is one of these template labels, spelled and cased exactly like this: Full Name, First Name, Last Name, LinkedIn URL, Company, Company Domain, Job Title, Job Level, Department, Industry, Country, State, City, Email, Phone (the synonyms linkedinUrl, linkedin, Company Name, Mobile Phone, Seniority, Level are accepted and read as the label they stand for). Any other value is rejected with VALIDATION_FAILED. A header with no target carries null and is left out, so the suggestedMapping from POST /business/imports can be sent back unchanged. Headers you leave out of the mapping fall back to the stored suggestion, then to the standard header names (email, first_name, title, domain, url, position ...); the 202 response echoes the mapping the import ran with and lists every header it ignored. When two headers name the same label only the first one is used.

enrich
enum<string>

Enrichment to run on the imported rows: none (default, rows saved exactly as uploaded), email, phone or phone_and_email (the enrichment waterfall, billed per contact processed) or demographics (resolve rows to canonical contacts, 1 credit per resolved contact; rows nobody matches are free). In the waterfall modes the rows are matched to canonical contacts first, for free.

Available options:
none,
email,
phone,
phone_and_email,
demographics
onDuplicate
enum<string>

What to do with a row that matches a contact already in the destination list (matched by LinkedIn URL, then email, then name plus company domain). merge (default): fill the existing contact's empty fields from the row and keep it in the list. skip: leave the existing contact untouched and drop the row. replace: save the row as a new contact and remove the existing one from the list. With enrich set to anything but none, merge and replace both enrich the existing contact in place and skip leaves it out of the enrichment.

Available options:
merge,
skip,
replace

Response

Success

import
object
required