---
title: "Enroll a person in a sequence"
method: POST
path: "/public/v1/sequences/{sequenceId}/enrollments"
tags: ["Sequences"]
---

# Enroll a person in a sequence

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

Enrolls a People record in a live sequence. Requires a USER API key. Returns the created instance. `enrollerUserId` optionally enrolls on behalf of a different user of the same account, who becomes `enrolledByUserId`, the sender's owner, and the `[User]` variable source — gated by the account's `enrollOnBehalfPolicy` (see the account sequence settings endpoint); omitted or equal to the API key's user, behavior is unchanged. Errors use `details.code`: `ON_BEHALF_NOT_ALLOWED` (403, policy doesn't allow it), `ENROLLER_NOT_FOUND` (400, target user doesn't exist, isn't active, belongs to another account, or has no authId), `ENROLLER_CANNOT_OPERATE_SEQUENCE` (403, target user lacks permission on this sequence).

## Path parameters

- `sequenceId` number, nullable

## Headers

- `idempotency-key` string

## Request body

- object
  - `personRowId` string, required
  - `senderConnectedAccountId` integer
  - `overrideConflict` boolean
  - `overrideDoNotContact` boolean
  - `replaceInstanceId` integer
  - `enrollerUserId` integer

## Response `200`

Previously completed idempotent enrollment

- object
  - `instance` 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
  - `activeSequenceSummary` object
    - `instances` union[], required
      - union
        - object
          - `instanceId` number, required
          - `restricted` true, required
        - object
          - `instanceId` number, required
          - `restricted` false, required
          - `sequenceId` number, required
          - `sequenceName` string, required
          - `status` 'ACTIVE' | 'WAITING' | 'PAUSED' | 'COMPLETED' | 'EXITED' | 'FAILED' | 'REMOVED', required
          - `enrolledByUser` object, required
            - `id` number, required
            - `firstName` string, nullable, required
            - `lastName` string, nullable, required
            - `avatar` string, nullable, required
            - `email` string, required
          - `enrolledAt` string, required
          - `currentStep` object, nullable, required
            - `nodeId` string, required
            - `type` string, nullable, required
            - `label` string, required
            - `isMissingFromSnapshot` boolean, required
          - `nextExecutionAt` string, nullable, required
          - `pausedAt` string, nullable, required
    - `activeCount` number, required
    - `maxAllowed` number, required
    - `allowMultipleActiveSequences` boolean, required
    - `canEnrollMore` boolean, required
    - `blockedCode` 'ACTIVE_SEQUENCE_CONFLICT' | 'MULTIPLE_SEQUENCES_DISABLED' | 'MAX_CONCURRENT_SEQUENCES_REACHED', nullable
    - `blockedReason` string, nullable

## Other responses

- `201` — Person enrolled
- `400` — Bad request (e.g. ENROLLER_NOT_FOUND)
- `401` — Unauthorized
- `403` — Forbidden (e.g. ON_BEHALF_NOT_ALLOWED, ENROLLER_CANNOT_OPERATE_SEQUENCE)
- `409` — Conflict (e.g. active sequence, do not contact)

## Changes

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

[Change history](https://skmtc.dev/getfrontline/apis/public-api/changes/public/v1/sequences/:sequenceId/enrollments/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)
