Skip to content

Enroll and cancel contacts

client.sequence.updateEnrollments(stringid, SequenceUpdateEnrollmentsParams { add, remove } body, RequestOptionsoptions?): SequenceUpdateEnrollmentsResponse { results }
POST/v1/sequences/{id}/enrollments

Enrolls the contacts in add and cancels the open enrollments of the contacts in remove, in one request: if any addition is invalid, nothing changes. Send add, remove or both, with at most 25 contact IDs in total; duplicate IDs are ignored, and an ID cannot be in both lists. The response has one result per contact: enrolled, already_enrolled, unenrolled, or no_active_enrollment for a removal with nothing open.

A contact already enrolled, paused included, is left as is; one whose earlier enrollment ended is enrolled again. Cancelling stops the contact’s remaining steps and leaves the enrollment readable with status CANCELLED. A paused sequence accepts enrollments and sends to them once it is activated; sending starts asynchronously.

Returns 400 sequence_not_published for a sequence that has never been published, and 400 invalid_configuration with invalidContacts naming each contact that cannot be enrolled and why. See Sequence errors.

Required scope: sequences:update

Rate limit category: Write

ParametersExpand Collapse
id: string

Unique identifier of the sequence.

body: SequenceUpdateEnrollmentsParams { add, remove }
add?: Array<string>

Contact IDs to enroll. Open enrollments are unchanged; contacts whose prior enrollment ended are enrolled again.

remove?: Array<string>

Contact IDs to unenroll. Cancels open enrollments and preserves their history.

ReturnsExpand Collapse
SequenceUpdateEnrollmentsResponse { results }
results: Array<EnrollmentChanged { contactId, enrollmentId, outcome } | NothingToCancel { contactId, enrollmentId, outcome } >

One result per distinct contact, additions first, then removals.

One of the following:
EnrollmentChanged { contactId, enrollmentId, outcome }
contactId: string

ID of the contact.

enrollmentId: string

ID of the enrollment the outcome applies to.

outcome: "enrolled" | "already_enrolled" | "unenrolled"

enrolled created the enrollment, already_enrolled left an open one as is, unenrolled cancelled it.

One of the following:
"enrolled"
"already_enrolled"
"unenrolled"
NothingToCancel { contactId, enrollmentId, outcome }
contactId: string

ID of the contact.

enrollmentId: unknown

Always null.

outcome: "no_active_enrollment"

The contact had no open enrollment to cancel.

Enroll and cancel contacts

import Lightfield from 'lightfield';

const client = new Lightfield({
  apiKey: 'My API Key',
});

const sequenceUpdateEnrollmentsResponse = await client.sequence.updateEnrollments('id');

console.log(sequenceUpdateEnrollmentsResponse.results);
{
  "results": [
    {
      "contactId": "contactId",
      "enrollmentId": "enrollmentId",
      "outcome": "enrolled"
    }
  ]
}
Returns Examples
{
  "results": [
    {
      "contactId": "contactId",
      "enrollmentId": "enrollmentId",
      "outcome": "enrolled"
    }
  ]
}