What an excluded company removes
- Companies. A sourced company is dropped when its domain matches. A result with no domain and no LinkedIn page is matched on its company name.
- People who work there. A person found by a people search is dropped when their employer’s domain matches. When the result has no employer domain, the employer’s company name is used.
Rules
kindiscompaniesorpeople, otherwise404 not_found.- Each call accepts 1 to 1,000 values.
- Each value must be a non-empty string. An empty string,
nullor a value that is not a string fails the whole request with400 invalid_request. So does an unknown body field. A string of spaces only is reported ininvalid. - Any other string that cannot be read is returned in
invalidwith a reason, and the rest of the request is applied:
company_domain_required (not a domain), linkedin_url_required (not a linkedin.com/in/… URL).
- Re-sending a value already present adds nothing; it is counted in
existing. If that value came from a CRM integration of the app (HubSpot, Attio), it becomes owned by the API and that integration no longer removes it. - Removing a value that a CRM integration still lists does not last: the integration adds it back on its next sync.
- A CSV import in the app over an existing entry turns it into a CSV entry: a CRM integration no longer removes it.
/removecannot reach people stored by name and company, without a LinkedIn handle (added in the app by CSV or by a CRM integration).GETdoes not list them either, and has no source field. Delete them in the app.- Upsert and remove are idempotent by value: a replay leaves the same list, only the counts change. These routes ignore
Idempotency-Key. - Domains are normalized:
https://www.Stripe.com/pricingbecomesstripe.com.GETreturns the normalized form. - For
people, only alinkedin.com/in/…URL is valid, not a bare handle. Matching is on the profile handle, case-insensitive. A handle may contain only lettersa-z(any case),0-9,_,%,.and-, and must start with a letter or a digit. A handle with an accent, an apostrophe or another character, such as/in/andré-dupontor/in/o'brien, is rejected withlinkedin_url_required.
Reading the list
GET items: domain (or linkedin_url), created_at, updated_at. limit must be an integer from 1 to 1,000 and offset an integer of 0 or more. Any other value, or an unknown query parameter, returns 400 invalid_request.
For people, GET returns only entries that have a LinkedIn handle. People added in the app by name and company are not listed. linkedin_url is the URL stored for that person, not a normalized form. It can be the first URL sent through the API, the one stored by a CRM integration, or one from a later CSV import in the app, which replaces it. When the stored value is not a linkedin.com URL (for example a bare handle from a CSV), it is rebuilt as https://www.linkedin.com/in/<handle>. Compare people by handle, not by URL.
See Sync your customers to the exclusion list for safe CRM synchronization.
From MCP
The MCP toolsexclusion_list, exclusion_add and exclusion_remove call these endpoints. They take a kind (companies or people) and a list of values, and follow the same rules. See MCP tools.