Update Signal
Change what a signal watches, or rename it.
Fields left out of the body keep their current value; send null to
clear a cap or the enrollment template. Renaming also renames the
destination list. Changing the detection filters restarts the signal’s
baseline, so the next check re-absorbs the new result set before
importing. The preset and whether it imports people or companies cannot
change — duplicate the signal and archive the original instead. Archived
signals cannot be edited.
Requires the signals:write scope on the API key.
curl --request PATCH \
--url https://api.topo.io/v1/signals/{signal_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"search_filters": {},
"max_per_run": 2,
"max_companies_per_run": 2,
"max_contacts_per_company": 2,
"enrich_email": true,
"enrich_phones": true,
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"import_search_filters": {}
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
search_filters: {},
max_per_run: 2,
max_companies_per_run: 2,
max_contacts_per_company: 2,
enrich_email: true,
enrich_phones: true,
sequence_template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
import_search_filters: {}
})
};
fetch('https://api.topo.io/v1/signals/{signal_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.topo.io/v1/signals/{signal_id}"
payload = {
"name": "<string>",
"search_filters": {},
"max_per_run": 2,
"max_companies_per_run": 2,
"max_contacts_per_company": 2,
"enrich_email": True,
"enrich_phones": True,
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"import_search_filters": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"signal_type": "LINKEDIN_OWN_POST_ENGAGEMENT",
"status": "ACTIVE",
"cadence": "DAILY",
"max_per_run": 123,
"max_companies_per_run": 123,
"max_contacts_per_company": 123,
"max_per_day": 123,
"enrich_email": true,
"enrich_phones": true,
"imported_count": 123,
"contact_list_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_list_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"archived_at": "2023-11-07T05:31:56Z",
"url": "<string>",
"list_url": "<string>",
"search_filters": {},
"import_search_filters": {},
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"import_target": "PEOPLE",
"event_subject": "PEOPLE"
}Authorizations
Bearer API key issued from Settings → Developers.
Path Parameters
ID of the signal.
Body
Update Signal payload
New name for the signal and its destination list.
1Daily ceiling on imported entries. Send null to remove the cap.
x >= 1Daily ceiling on detected companies consumed. Send null to remove the cap.
x >= 1How many people to import per detected company. Send null to remove the cap.
x >= 1Whether imported leads get their email enriched.
Whether imported leads get their phone enriched.
Sequence template imported leads are enrolled into. People destinations only. Send null to stop enrolling.
Response
Successful Response
Unique identifier of the signal.
Name of the signal and of its destination list.
Catalog preset the signal watches.
LINKEDIN_OWN_POST_ENGAGEMENT, LINKEDIN_COMPETITOR_POST_ENGAGEMENT, LINKEDIN_PERSON_POST_ENGAGEMENT, LINKEDIN_KEYWORD_MENTION, LINKEDIN_OWN_COMPANY_FOLLOWERS, LINKEDIN_COMPETITOR_FOLLOWERS, LINKEDIN_COMPANY_PAGE_FOLLOWERS, HIRING_SIGNALS, JOB_DESCRIPTION_KEYWORD, FUNDING_EVENTS, TECH_ADOPTION, NEWS_EVENTS, NEW_JOB, CUSTOM_EVENT, LINKEDIN_PARTNER_FOLLOWERS, LINKEDIN_CUSTOMER_FOLLOWERS, LINKEDIN_PARTNER_POST_ENGAGEMENT, LINKEDIN_CUSTOMER_POST_ENGAGEMENT, LINKEDIN_COMPANY_PAGE_POST_ENGAGEMENT, LINKEDIN_OWN_PROFILE_POST_ENGAGEMENT, LINKEDIN_OWN_EMPLOYEES_POST_ENGAGEMENT, LINKEDIN_COMPETITOR_EMPLOYEES_POST_ENGAGEMENT, LINKEDIN_PARTNER_EMPLOYEES_POST_ENGAGEMENT, LINKEDIN_CUSTOMER_EMPLOYEES_POST_ENGAGEMENT, LINKEDIN_OWN_BRAND_MENTION, LINKEDIN_COMPETITOR_MENTION, LINKEDIN_PARTNER_MENTION, LINKEDIN_CUSTOMER_MENTION, LINKEDIN_EVENT_MENTION, COMPETITOR_TECH_ADOPTION, INTEGRATION_TECH_ADOPTION, LINKEDIN_EVENT_PAGE_FOLLOWERS, CHAMPION_CHANGED_JOB, CRM_LIST_ENTRY ACTIVE checks daily, PAUSED is held until resumed, ARCHIVED is retired and cannot be resumed.
ACTIVE, PAUSED, ARCHIVED How often the signal checks its provider.
DAILY, WEEKLY Daily ceiling on imported entries, when one was set.
Daily ceiling on detected companies consumed, when one was set.
People imported per detected company, when one was set.
Ceiling on the entries the signal imports in one day, resolved from the caps above.
Whether imported leads get their email enriched.
Whether imported leads get their phone enriched.
Entries the signal has imported since it was created.
Destination list, when the signal imports people.
Destination list, when the signal imports companies.
When the signal was created.
When the signal was retired, if it was.
Deep link to the signal in Topo.
Deep link to the destination list in Topo.
Sequence template the imported leads are enrolled into.
Whether the signal imports people or companies.
PEOPLE, COMPANIES What a custom-event signal's own events identify. Null for every provider-backed preset.
PEOPLE, COMPANIES Was this page helpful?
curl --request PATCH \
--url https://api.topo.io/v1/signals/{signal_id} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "<string>",
"search_filters": {},
"max_per_run": 2,
"max_companies_per_run": 2,
"max_contacts_per_company": 2,
"enrich_email": true,
"enrich_phones": true,
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"import_search_filters": {}
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: '<string>',
search_filters: {},
max_per_run: 2,
max_companies_per_run: 2,
max_contacts_per_company: 2,
enrich_email: true,
enrich_phones: true,
sequence_template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
import_search_filters: {}
})
};
fetch('https://api.topo.io/v1/signals/{signal_id}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.topo.io/v1/signals/{signal_id}"
payload = {
"name": "<string>",
"search_filters": {},
"max_per_run": 2,
"max_companies_per_run": 2,
"max_contacts_per_company": 2,
"enrich_email": True,
"enrich_phones": True,
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"import_search_filters": {}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>",
"signal_type": "LINKEDIN_OWN_POST_ENGAGEMENT",
"status": "ACTIVE",
"cadence": "DAILY",
"max_per_run": 123,
"max_companies_per_run": 123,
"max_contacts_per_company": 123,
"max_per_day": 123,
"enrich_email": true,
"enrich_phones": true,
"imported_count": 123,
"contact_list_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"account_list_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"created_at": "2023-11-07T05:31:56Z",
"archived_at": "2023-11-07T05:31:56Z",
"url": "<string>",
"list_url": "<string>",
"search_filters": {},
"import_search_filters": {},
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"import_target": "PEOPLE",
"event_subject": "PEOPLE"
}