Read endpoints require the
exclusions:read scope. Create, update, and delete endpoints require exclusions:write.Exclusion reasons
Both contact and account exclusions carry areason field. Valid values are:
| Value | Description |
|---|---|
UNSUBSCRIBED | Person or account has opted out. |
CONTACT_REFUSED | Contact explicitly asked not to be reached. |
BOUNCED | Email hard-bounced. |
WRONG_PERSON | Contact is not the right person at the company. |
LEFT_COMPANY | Contact has left the company. |
BAD_TIMING | Not a good time — revisit later. |
OUT_OF_OFFICE | Temporarily unavailable. |
MEETING | Already in progress with this contact. |
INTERESTED | Contact has expressed interest through another channel. |
COMPETITOR | Account is a direct competitor. |
REFERRAL | Came in through a referral channel; handle separately. |
EXCLUDE_FROM_SEARCH | Suppress from Topo’s prospecting search. |
EXCLUDE_FROM_CRM | Imported CRM suppression. |
OTHER | None of the above. |
UNKNOWN | Reason not recorded. |
Contact exclusions
A contact exclusion blocks a specific individual — identified by email and/or LinkedIn URL — from receiving any Topo outreach in your workspace.The Contact Exclusion object
Unique identifier for the exclusion.
Excluded email address.
Excluded LinkedIn profile URL.
Reason code for the exclusion. See Exclusion reasons above.
Free-form operator note, visible in the Topo dashboard.
Expiry timestamp. When this time is reached, the exclusion is lifted automatically.
null means the exclusion is permanent.Timestamp when the exclusion was created.
Timestamp when the exclusion was last modified.
List contact exclusions
GET /v1/contact-exclusions
Returns a paginated list of all contact exclusions in your workspace.
Query parameters
Exact-match filter on the excluded email address.
Exact-match filter on the excluded LinkedIn URL.
Filter by reason code. See Exclusion reasons for valid values.
Returns exclusions created strictly after this timestamp.
Returns exclusions created strictly before this timestamp.
Field to sort by. One of
created_at, updated_at, email, or reason.Page number (1-indexed).
Results per page. Maximum
100.Create a contact exclusion
POST /v1/contact-exclusions
Adds an individual to your workspace blocklist. At least one of email or linkedin_url must be provided.
Returns HTTP 201 Created on success.
Request body
Email address to exclude. At least one of
email or linkedin_url is required.LinkedIn profile URL to exclude. At least one of
email or linkedin_url is required.Reason code for the exclusion. Must be one of the values in Exclusion reasons.
Optional free-form note for your team (e.g. “Requested removal via email on 2025-03-15”).
Expiry timestamp for a temporary exclusion. Omit this field to create a permanent exclusion.
Get a contact exclusion
GET /v1/contact-exclusions/{exclusion_id}
Fetches a single contact exclusion by its UUID.
Path parameters
The unique identifier of the contact exclusion.
Update a contact exclusion
PATCH /v1/contact-exclusions/{exclusion_id}
Updates the reason, message, or expiry of an existing contact exclusion. Only fields present in the request body are modified.
To convert a temporary exclusion into a permanent one, include
"until": null explicitly in the request body. Omitting until entirely leaves the existing value unchanged.Path parameters
The unique identifier of the contact exclusion.
Request body
Updated reason code.
Updated operator note.
New expiry timestamp. Pass
null to make the exclusion permanent.Delete a contact exclusion
DELETE /v1/contact-exclusions/{exclusion_id}
Permanently removes a contact exclusion, allowing outreach to resume for that individual. Returns HTTP 204 No Content on success.
Path parameters
The unique identifier of the contact exclusion to delete.
Account exclusions
An account exclusion blocks an entire company domain from receiving Topo outreach, suppressing all contacts whosecompany_domain matches.
The Account Exclusion object
Unique identifier for the exclusion.
Excluded company domain (e.g.
acme.com).Reason code for the exclusion. See Exclusion reasons above.
Free-form operator note.
Expiry timestamp.
null means the exclusion is permanent.Timestamp when the exclusion was created.
Timestamp when the exclusion was last modified.
List account exclusions
GET /v1/account-exclusions
Returns a paginated list of all account exclusions in your workspace.
Query parameters
Exact-match filter on the excluded domain.
Filter by reason code.
Returns exclusions created strictly after this timestamp.
Returns exclusions created strictly before this timestamp.
Field to sort by. One of
created_at, updated_at, domain, or reason.Page number (1-indexed).
Results per page. Maximum
100.Create an account exclusion
POST /v1/account-exclusions
Adds a company domain to your workspace blocklist. All contacts whose company_domain matches will be suppressed from outreach.
Returns HTTP 201 Created on success.
Request body
The company domain to exclude (e.g.
competitor.com).Reason code. Must be one of the values in Exclusion reasons.
Optional free-form note (e.g. “Existing customer — handle via CSM only”).
Expiry timestamp for a temporary exclusion. Omit for a permanent block.
Get an account exclusion
GET /v1/account-exclusions/{exclusion_id}
Fetches a single account exclusion by its UUID.
Path parameters
The unique identifier of the account exclusion.
Update an account exclusion
PATCH /v1/account-exclusions/{exclusion_id}
Updates mutable fields on an existing account exclusion. Only fields present in the request body are modified.
To convert a temporary exclusion to a permanent one, pass
"until": null explicitly. Omitting until entirely preserves the current value.Path parameters
The unique identifier of the account exclusion.
Request body
Updated reason code.
Updated operator note.
New expiry timestamp. Pass
null to make the exclusion permanent.Delete an account exclusion
DELETE /v1/account-exclusions/{exclusion_id}
Permanently removes an account exclusion. Returns HTTP 204 No Content on success.
Path parameters
The unique identifier of the account exclusion to delete.