---
title: "Bulk enroll people in a sequence"
method: POST
path: "/public/v1/sequences/{sequenceId}/enrollments/bulk"
tags: ["Sequences"]
---

# Bulk enroll people in a sequence

`POST /public/v1/sequences/{sequenceId}/enrollments/bulk`

Enrolls up to 500 people. Partial success is allowed. Requires a USER API key. `enrollerUserId` applies to every Person in the batch — see the single-enroll endpoint for the on-behalf-of semantics and error codes. Unlike per-Person outcomes, an invalid `enrollerUserId` fails the whole request (checked once before the batch runs).

## Path parameters

- `sequenceId` number, nullable

## Headers

- `idempotency-key` string

## Request body

- object
  - `personRowIds` string[], required
  - `senderConnectedAccountId` integer
  - `overrideConflict` boolean
  - `overrideDoNotContact` boolean
  - `enrollerUserId` integer

## Response `200`

Previously completed idempotent bulk enrollment

- object
  - `created` object[], required
    - `id` number, required
    - `accountId` number, required
    - `sequenceId` number, required
    - `personRowId` string, required
    - `snapshotId` string, required
    - `sourceSnapshotId` string, nullable
    - `snapshotPinnedAt` string, nullable
    - `currentNodeId` string, nullable, required
    - `status` 'ACTIVE' | 'WAITING' | 'PAUSED' | 'COMPLETED' | 'EXITED' | 'FAILED' | 'REMOVED', required
    - `blockedOn` 'NONE' | 'TIME' | 'TASK_COMPLETION' | 'REPLY' | 'MEETING' | 'MANUAL' | 'WORKFLOW_COMPLETION', required
    - `nextExecutionAt` string, nullable, required
    - `enrolledByUserId` number, required
    - `senderConnectedAccountId` number, nullable, required
    - `startedAt` string, nullable, required
    - `lastAdvancedAt` string, nullable, required
    - `exitedAt` string, nullable, required
    - `completedAt` string, nullable, required
    - `pausedAt` string, nullable, required
    - `removedAt` string, nullable, required
    - `exitReason` string, nullable, required
    - `exitNote` string, nullable, required
    - `exitedByUserId` number, nullable, required
    - `failureReason` string, nullable, required
    - `failureCode` string, nullable, required
    - `createdAt` string, nullable, required
    - `updatedAt` string, nullable, required
    - `enrolledByUser` object
      - `id` number, required
      - `firstName` string, required
      - `lastName` string, required
      - `email` string, email, required
      - `avatar` string, nullable
    - `exitedByUser` object, nullable
      - `id` number, required
      - `firstName` string, required
      - `lastName` string, required
      - `email` string, email, required
      - `avatar` string, nullable
  - `skipped` object[], required
    - `personRowId` string, required
    - `reason` string
    - `instance` object
      - `id` number, required
      - `accountId` number, required
      - `sequenceId` number, required
      - `personRowId` string, required
      - `snapshotId` string, required
      - `sourceSnapshotId` string, nullable
      - `snapshotPinnedAt` string, nullable
      - `currentNodeId` string, nullable, required
      - `status` 'ACTIVE' | 'WAITING' | 'PAUSED' | 'COMPLETED' | 'EXITED' | 'FAILED' | 'REMOVED', required
      - `blockedOn` 'NONE' | 'TIME' | 'TASK_COMPLETION' | 'REPLY' | 'MEETING' | 'MANUAL' | 'WORKFLOW_COMPLETION', required
      - `nextExecutionAt` string, nullable, required
      - `enrolledByUserId` number, required
      - `senderConnectedAccountId` number, nullable, required
      - `startedAt` string, nullable, required
      - `lastAdvancedAt` string, nullable, required
      - `exitedAt` string, nullable, required
      - `completedAt` string, nullable, required
      - `pausedAt` string, nullable, required
      - `removedAt` string, nullable, required
      - `exitReason` string, nullable, required
      - `exitNote` string, nullable, required
      - `exitedByUserId` number, nullable, required
      - `failureReason` string, nullable, required
      - `failureCode` string, nullable, required
      - `createdAt` string, nullable, required
      - `updatedAt` string, nullable, required
      - `enrolledByUser` object
        - `id` number, required
        - `firstName` string, required
        - `lastName` string, required
        - `email` string, email, required
        - `avatar` string, nullable
      - `exitedByUser` object, nullable
        - `id` number, required
        - `firstName` string, required
        - `lastName` string, required
        - `email` string, email, required
        - `avatar` string, nullable
    - `conflictSequence` object
      - `id` number, required
      - `name` string, required
      - `status` 'LIVE' | 'DRAFT' | 'DELETED', required
    - `activeCount` number
    - `maxAllowed` number, nullable
    - `activeInstances` object[]
      - `instanceId` number, required
      - `sequenceId` number
      - `sequenceName` string
      - `restricted` boolean
  - `conflicts` object[], required
    - `personRowId` string, required
    - `reason` string
    - `instance` object
      - `id` number, required
      - `accountId` number, required
      - `sequenceId` number, required
      - `personRowId` string, required
      - `snapshotId` string, required
      - `sourceSnapshotId` string, nullable
      - `snapshotPinnedAt` string, nullable
      - `currentNodeId` string, nullable, required
      - `status` 'ACTIVE' | 'WAITING' | 'PAUSED' | 'COMPLETED' | 'EXITED' | 'FAILED' | 'REMOVED', required
      - `blockedOn` 'NONE' | 'TIME' | 'TASK_COMPLETION' | 'REPLY' | 'MEETING' | 'MANUAL' | 'WORKFLOW_COMPLETION', required
      - `nextExecutionAt` string, nullable, required
      - `enrolledByUserId` number, required
      - `senderConnectedAccountId` number, nullable, required
      - `startedAt` string, nullable, required
      - `lastAdvancedAt` string, nullable, required
      - `exitedAt` string, nullable, required
      - `completedAt` string, nullable, required
      - `pausedAt` string, nullable, required
      - `removedAt` string, nullable, required
      - `exitReason` string, nullable, required
      - `exitNote` string, nullable, required
      - `exitedByUserId` number, nullable, required
      - `failureReason` string, nullable, required
      - `failureCode` string, nullable, required
      - `createdAt` string, nullable, required
      - `updatedAt` string, nullable, required
      - `enrolledByUser` object
        - `id` number, required
        - `firstName` string, required
        - `lastName` string, required
        - `email` string, email, required
        - `avatar` string, nullable
      - `exitedByUser` object, nullable
        - `id` number, required
        - `firstName` string, required
        - `lastName` string, required
        - `email` string, email, required
        - `avatar` string, nullable
    - `conflictSequence` object
      - `id` number, required
      - `name` string, required
      - `status` 'LIVE' | 'DRAFT' | 'DELETED', required
    - `activeCount` number
    - `maxAllowed` number, nullable
    - `activeInstances` object[]
      - `instanceId` number, required
      - `sequenceId` number
      - `sequenceName` string
      - `restricted` boolean
  - `blocked` object[], required
    - `personRowId` string, required
    - `reason` string
    - `instance` object
      - `id` number, required
      - `accountId` number, required
      - `sequenceId` number, required
      - `personRowId` string, required
      - `snapshotId` string, required
      - `sourceSnapshotId` string, nullable
      - `snapshotPinnedAt` string, nullable
      - `currentNodeId` string, nullable, required
      - `status` 'ACTIVE' | 'WAITING' | 'PAUSED' | 'COMPLETED' | 'EXITED' | 'FAILED' | 'REMOVED', required
      - `blockedOn` 'NONE' | 'TIME' | 'TASK_COMPLETION' | 'REPLY' | 'MEETING' | 'MANUAL' | 'WORKFLOW_COMPLETION', required
      - `nextExecutionAt` string, nullable, required
      - `enrolledByUserId` number, required
      - `senderConnectedAccountId` number, nullable, required
      - `startedAt` string, nullable, required
      - `lastAdvancedAt` string, nullable, required
      - `exitedAt` string, nullable, required
      - `completedAt` string, nullable, required
      - `pausedAt` string, nullable, required
      - `removedAt` string, nullable, required
      - `exitReason` string, nullable, required
      - `exitNote` string, nullable, required
      - `exitedByUserId` number, nullable, required
      - `failureReason` string, nullable, required
      - `failureCode` string, nullable, required
      - `createdAt` string, nullable, required
      - `updatedAt` string, nullable, required
      - `enrolledByUser` object
        - `id` number, required
        - `firstName` string, required
        - `lastName` string, required
        - `email` string, email, required
        - `avatar` string, nullable
      - `exitedByUser` object, nullable
        - `id` number, required
        - `firstName` string, required
        - `lastName` string, required
        - `email` string, email, required
        - `avatar` string, nullable
    - `conflictSequence` object
      - `id` number, required
      - `name` string, required
      - `status` 'LIVE' | 'DRAFT' | 'DELETED', required
    - `activeCount` number
    - `maxAllowed` number, nullable
    - `activeInstances` object[]
      - `instanceId` number, required
      - `sequenceId` number
      - `sequenceName` string
      - `restricted` boolean

## Other responses

- `201` — Bulk enrollment result
- `400` — Bad request (e.g. ENROLLER_NOT_FOUND)
- `401` — Unauthorized
- `403` — Forbidden (e.g. ON_BEHALF_NOT_ALLOWED, ENROLLER_CANNOT_OPERATE_SEQUENCE)

## Changes

- **2026-10-03** `666cd9efa9f3` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/getfrontline/apis/public-api/changes/public/v1/sequences/:sequenceId/enrollments/bulk/post.md)

---

[API](https://skmtc.dev/getfrontline/apis/public-api.md) · [All operations](https://skmtc.dev/getfrontline/apis/public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getfrontline/apis/public-api/revisions/666cd9efa9f3?raw)
