Skip to main content
Searching is not the only way to fill a list. If you already have contacts — in a CRM, a spreadsheet, or another tool — you can push them into Fuse directly. The API upload takes the same path a CSV upload takes in the app: contacts are created as your workspace’s own records, exactly as you send them. Nothing is enriched automatically; call POST /business/lists/{listId}/enrich afterwards to fill in missing emails and phones. This guide covers the full membership lifecycle: create a list, upload new contact data, add contacts that already exist in your workspace, and remove them again.
List endpoints require a key with the lists scope; resolving a contact id requires contacts. See scopes.
1

Create a list

Lists are the container everything else hangs off — exports, custom columns, and campaigns all start from a list.
entityType defaults to "contactList", which is what you want here. List names are unique within your workspace: creating a list with a name that already exists returns 409 LIST_NAME_TAKEN in the standard error envelope, so a safe pattern for repeated imports is to date-stamp the name.
2

Upload contact data

Send batches of raw contact records to the list. Each request accepts up to 500 contacts; loop over your dataset in batches for larger imports.
Each contact accepts the following fields. All are optional individually, but every contact must include at least one of email, linkedinUrl, firstName, or lastName — a record with none of these has nothing to identify or enrich.You do not need to send complete records. A bare linkedinUrl or an email address is a workable starting point, and enriching the list afterwards fills the gaps where it can. The upload itself costs no credits. The returned contactIds list each row’s contact, in the order you sent them. Keep them if you plan to manage membership later, or pass them as contactIds to enrich just these contacts.
Re-uploading the same people creates duplicates. This endpoint does not look people up by email or phone: a row reuses an existing contact only when its name, LinkedIn URL, job title, company name and company domain all match exactly. Anything else creates a new contact record. For people who already exist in Fuse, resolve their ids and use the /members endpoint instead.
3

Add existing contacts by id

When the contacts already exist in your workspace — from an earlier upload, a saved search, or another list — add them to a list by id rather than re-uploading their data:
Each request accepts up to 5,000 contact ids. Adding is idempotent: a contact that is already in the list is skipped, not duplicated. That is why addedCount can be lower than submittedCount — the difference is the number of contacts that were already members. You can safely retry a failed request without worrying about double-adding.
4

Remove contacts from a list

Removal uses the same endpoint with DELETE:
This removes the contacts from the list; it does not delete the contact records from your workspace.

Resolve a contact id from a LinkedIn URL

The /members endpoints work on contact ids, but CRMs rarely store Fuse ids. If your system keys people by LinkedIn URL, resolve the id first:
URLs are normalized server-side, so the protocol, www. and a trailing slash don’t matter: linkedin.com/in/jordan-lee/ resolves the same as https://www.linkedin.com/in/jordan-lee. Casing does matter. The profile slug must match the stored one, and a host written as LinkedIn.com is refused with 422. If no contact in your workspace matches, you get 404 CONTACT_NOT_FOUND:
This gives you a clean sync pattern for recurring imports: for each person, try resolve first — on a hit, add the id via /members; on a 404, include the record in your next batch upload. That keeps repeat syncs from piling up duplicate contacts.

Where to next

Custom columns

Attach your own fields — CRM ids, owner, deal stage — to list rows.

Export a list

Pull contacts back out as CSV once you have enriched them.

Build a list from search

Fill a list from prospect search instead of an upload.

Campaigns

Put an uploaded list to work in an outbound campaign.