Enroll Contact
Enroll a contact into a sequence template, starting a sequence run.
The template must be ACTIVE and have at least one step; the sequence is
instantiated from the template’s steps and scheduled exactly like an
enrollment made from the app, including task-owner assignment.
A contact already running this template is rejected rather than enrolled twice, and so is a contact (or its company) on an exclusion list.
A contact with an active sequence from a different template is also
rejected: stop that sequence first (POST /v1/sequences/{id}/stop) to avoid
two sequences messaging the same person at once. Templates the contact only
has completed or stopped sequences for do not block enrollment.
Before the sequence starts, the contact’s eligibility is checked, email
verification included. When that finishes within about 20 seconds the
response is 201 with the sequence, or 422 when the contact cannot be
enrolled (no email nor LinkedIn URL, excluded, or missing a channel the
template needs: no email or LinkedIn URL for its steps, or a bounced
email, when the template stops on missing data or has no other channel
left). Otherwise the response is 202 with the
enrollment run: the contact is enrolled in the background, and
GET /v1/sequences?contact_id= shows its sequence once it starts.
Requires the sequences:write scope on the API key.
curl --request POST \
--url https://api.topo.io/v1/sequences \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
sequence_template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.topo.io/v1/sequences', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.topo.io/v1/sequences"
payload = {
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "ACTIVE",
"variables": {},
"source_contact_list_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_step_executed_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"contact": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"linkedin_url": "<string>",
"job_title": "<string>",
"company_name": "<string>",
"company_domain": "<string>"
},
"sequence_template": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
}{
"enrollment_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}Authorizations
Bearer API key issued from Settings → Developers.
Body
Enroll Contact payload
Response
Successful Response
Unique identifier.
Workspace this sequence belongs to.
Contact this sequence is targeting.
Template the sequence was instantiated from.
Current execution state.
ACTIVE, SUCCEEDED, FAILED, COMPLETED, WAITING_FOR_LEAD, WAITING_FOR_USER, STOPPED_EARLY, FOUND, REFUSED Contact list that triggered this sequence, if any.
When the most recent step ran.
When the sequence was created.
When the sequence last changed.
Summary of the contact this sequence is targeting.
Hide child attributes
Hide child attributes
Unique identifier of the contact.
First name.
Last name.
Email.
LinkedIn profile URL.
Job title.
Employer name.
Employer's primary domain.
Was this page helpful?
curl --request POST \
--url https://api.topo.io/v1/sequences \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
contact_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
sequence_template_id: '3c90c3cc-0d44-4b50-8888-8dd25736052a'
})
};
fetch('https://api.topo.io/v1/sequences', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.topo.io/v1/sequences"
payload = {
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"organization_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "ACTIVE",
"variables": {},
"source_contact_list_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"last_step_executed_at": "2023-11-07T05:31:56Z",
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"contact": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"first_name": "<string>",
"last_name": "<string>",
"email": "<string>",
"linkedin_url": "<string>",
"job_title": "<string>",
"company_name": "<string>",
"company_domain": "<string>"
},
"sequence_template": {
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"name": "<string>"
}
}{
"enrollment_run_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"contact_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sequence_template_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a"
}