All read endpoints require the
contacts:read scope. Variable write and delete endpoints require contacts:write.The Contact object
Unique identifier for the contact within your workspace.
Primary email address.
First name.
Last name.
Current job title.
Canonical LinkedIn profile URL.
Phone number. Returned unmasked to callers holding the
contacts:read scope — access is governed by API key scope, not masking.City of residence or work.
State or region.
Country.
URL to the contact’s profile photo.
Name of the contact’s current employer.
Primary domain of the contact’s current employer (e.g.
acme.com).Timestamp when this person was first associated with your workspace.
Timestamp when this person was last touched (e.g. added to a list or sequence) in your workspace.
List contacts
GET /v1/contacts
Returns a paginated list of contacts belonging to your workspace. Use the query parameters below to filter and sort results.
Query parameters
Case-insensitive exact match on the contact’s email address.
Filters by LinkedIn profile URL. Topo normalizes the provided value and matches it against all known canonical variants (with or without trailing slash,
www. prefix, etc.).Fetch a specific contact by its ID. Useful when you already know the ID but want to reuse the list endpoint’s filtering envelope.
Returns contacts first associated with your workspace strictly after this timestamp.
Returns contacts last touched strictly after this timestamp.
Field to sort results by. One of
first_seen_at, last_seen_at, or email.Page number (1-indexed).
Number of results per page. Maximum
100.Response
Returns a paginated envelope.Array of Contact objects on the current page.
Total number of contacts matching the query.
Total number of pages at the current page size.
true if there are additional pages after the current one.Get a contact
GET /v1/contacts/{contact_id}
Fetches a single contact by its UUID.
Path parameters
The unique identifier of the contact.
Get contact variables
GET /v1/contacts/{contact_id}/variables
Returns the custom variables stored on a contact and on its associated company. Variables are plain string key-value pairs you can write via the PATCH endpoint and reference inside Topo sequence templates.
Path parameters
The unique identifier of the contact.
Response
Key-value map of custom variables scoped to the individual contact. Values are strings or
null.Key-value map of custom variables scoped to the contact’s employer. Values are strings or
null.Update contact variables
PATCH /v1/contacts/{contact_id}/variables
Merges key-value pairs into the contact’s or company’s variable maps. This is an upsert operation — provided keys are written or overwritten, and all other existing keys are left untouched.
Each scope (
contact or company) holds a maximum of 200 variables. Setting a key’s value to null clears the value but does not free its slot toward the limit. Use the Delete variable endpoint to fully remove a key.Path parameters
The unique identifier of the contact.
Request body
Key-value pairs to merge into the contact’s variables. Existing keys not present here are preserved.
Key-value pairs to merge into the company’s variables. Existing keys not present here are preserved.
Response
Returns the full updated variables object with bothcontact_variables and company_variables.
Delete a contact variable
DELETE /v1/contacts/{contact_id}/variables/{key}
Permanently removes a single variable key from the contact or company scope. Unlike setting a value to null, this also frees the key’s slot toward the 200-variable limit.
Path parameters
The unique identifier of the contact.
The variable key to delete.
Query parameters
Which variable map to delete from. Must be either
contact or company.Response
Returns the updatedcontact_variables and company_variables maps after the deletion.