Start an enrollment run
Enrolls up to 5,000 people in one sequence in the background. Returns the run at once, with status: queued and a run_id; poll Get an enrollment run for progress. For 500 or fewer, Add contacts to a sequence enrolls them synchronously and reports each outcome.
source.kind says where the people come from: contacts (existing contact ids), contact_list (a Salesfinity contact list; a run reads at most its first 5,001 entries), rows (prospects you send, created as contacts if they are new; there is no file upload, so parse your CSV and send the rows), or preview (exactly the set a preview returned). Everyone goes through the same checks as any enrollment: the suppression list, the sequence’s rules of engagement and per-owner throttles, and the one-live-enrollment rule. A refusal skips that person and the run carries on; refusals are counted on the run and listed on the sequence’s refusals list.
The sequence, the owner and the source are checked before anything is queued, so a 4xx means nothing was started. A sequence that is off is accepted: its enrollments wait in pending and start when it is turned on. owner_id (default user_id) owns the enrollments and gets their tasks. People in force_include are added despite a rule blocking them, and held for approval. The request body can be up to 10 MB.
A retry without an Idempotency-Key starts a second run, whose people mostly come back as already enrolled, so send one. Counts toward the Sequencer writes rate limit.
status: queued, and a run_id to poll. For 500 or fewer, Add contacts to a sequence does the same synchronously and reports each outcome in the response.
Run a preview first: it shows who would be added and who would not, and changes nothing.
Sources
What happens to each person
Everyone goes through the same checks as any enrollment: the suppression list, the sequence’s rules of engagement, the owner’s throttles on the sequence, and the one-live-enrollment rule. A refusal skips that person and the run carries on. The run counts refusals, and the sequence’s refusals list records each one with its reason.owner_id (default user_id) owns the new enrollments and gets their tasks. People listed in force_include are added despite a rule blocking them, and held for approval.
Before it is queued
The sequence, the owner and the source are checked before anything is queued, so a 4xx means nothing started:pending and start when it is turned on.
Following the run
Poll Get an enrollment run every few seconds untilstatus is completed, failed or cancelled. To stop early, cancel the run.
Authorizations
Team-scoped API key generated in the Salesfinity dashboard under Settings → Connections → API & Webhooks. A missing or invalid key returns HTTP 403.
Headers
Makes this write safe to retry. Send a unique value, such as a UUID, and send the same value again when you retry the same request. A retry with the same key and the same request (method, path including the query string, and JSON body) returns the original successful response without acting twice. The same key with a different body or path returns 409, and so does a retry while the first request is still running; that one is safe to repeat after a moment. A request that fails frees its key, so a retry runs the write again: after a 5xx on a create, confirm with a GET before retrying. Keys are kept for 24 hours and are scoped to your team.
Body
The team member this call acts as. Must be an active member of the team the API key belongs to.
"507f1f77bcf86cd799439011"
The sequence to enroll into. It can be off; it cannot be archived, have enrollment paused, or have no steps.
Who owns the resulting enrollments and gets their tasks. Defaults to user_id. Must be a member of the team; otherwise 422.
Preview row keys of people to add even though a rule of engagement blocks them. They are enrolled and held for approval, not started. Only a rule block can be overridden: the suppression list, a live enrollment and the throttles still apply, and keys of people no rule blocks change nothing. At most 5,000. Ignored by the preview.
5000Response
The run, queued. Poll it for progress.
A background enrollment run. Deleted 7 days after it finishes.
enroll_ followed by 24 hexadecimal characters.
"enroll_9c1f4e2a7b3d5c6e8f0a1b2c"
queued: waiting for a worker. fetching: reading the source; total is not known yet. running: enrolling. completed, failed and cancelled are final.
queued, fetching, running, completed, failed, cancelled 24-character hexadecimal id.
"507f1f77bcf86cd799439011"
Everyone the source yielded, including rows that cannot be attempted. 0 until the source has been read.
How many of total have been dealt with, enrolled or skipped. Progress is processed out of total.
People enrolled, including those held for approval.
People not enrolled: refused by a check, or not attemptable (no email or LinkedIn handle, or past the 5,000 cap).
Enrolled people a rule is holding for approval. Part of enrolled.
The source had more than 5,000 usable people; only the first 5,000 were considered.
Up to 50 skipped people, each with the reason. Every refusal is also on the sequence's refusals list, except rows that could not be attempted.
Why the run failed or stopped early. Absent otherwise.
When the run reached a final status. Absent while it is in progress.
What the run was pointed at. A run started from a preview keeps the preview's source and adds preview_id. Runs started in the Salesfinity app from a connected CRM have kind crm and also carry provider, scope and list_id.
A cancel has been asked for. The run stops at its next check, and status changes when it does.
When the run was started.