POST /api/v1/enrollments/{enrollmentId}/reactivate
Ends the open pause of one participation. Dates are recalculated according to
the policy chosen when the pause started — nothing is decided here — access is
restored, and the reminder for the current action is rescheduled on its new
deadline. The enrollment returns to active.
| Role in the organization | This endpoint |
|---|---|
OWNER | Allowed |
ADMIN | Allowed |
MEMBER | Conditional — only with a business role below |
| Requirement | Rule for this endpoint |
|---|---|
| Business role | program_director scoped to the organization |
| Resource scope | Enrollment of the organization attached to the API key |
| Participation | Not applicable — an assigned coach cannot resume a participation |
| Resource state | The enrollment must be paused, with an open pause |
| Parameter | Type | Required | Description |
|---|---|---|---|
enrollmentId | UUID | yes | Enrollment visible from the key's organization |
| Header | Required | Description |
|---|---|---|
x-api-key | yes | API key created for this organization |
Idempotency-Key | yes | Stable key for this resume intention |
X-Correlation-Id | no | Caller correlation id, returned or generated |
The body is optional.
| Field | Type | Required | Nullable | Description |
|---|---|---|---|---|
resumeNote | string | no | yes | Up to 2000 characters, recorded in the pause history |
{
"resumeNote": "Back after medical clearance."
}curl -X POST "$COHORTE_API_BASE_URL/api/v1/enrollments/ENROLLMENT_ID/reactivate" \
-H "x-api-key: $COHORTE_API_KEY" \
-H "Idempotency-Key: resume-2026-09-03" \
-H 'Content-Type: application/json' \
-d '{"resumeNote":"Back after medical clearance."}'200 OK — the participation is active again, or the same Idempotency-Key replayed the original resume (replayed: true).400 Bad Request — missing Idempotency-Key, or a resume note longer than 2000 characters.401 Unauthorized — the key is missing, invalid, or no longer attached to a member.403 Forbidden — the bearer cannot change the lifecycle of enrollments in this organization.404 Not Found — the enrollment is unknown or belongs to another organization.409 Conflict — the enrollment is not paused; reload its state before retrying.| Field | Type | Nullable | Description |
|---|---|---|---|
success | boolean | no | true for a successful request |
replayed | boolean | no | true when the idempotency key replayed a resume |
data.id | UUID | no | Pause identifier |
data.enrollmentId | UUID | no | Enrollment that resumed |
data.reason | string | no | Reason given when the pause started |
data.effectiveAt | ISO 8601 string | no | When the interruption started, in UTC |
data.deadlinePolicy | string | no | shift or keep, as chosen at pause time |
data.accessPolicy | string | no | read_only or suspended, as chosen at pause time |
data.pausedBy | UUID | yes | Account that paused the participation, or null when the product paused it automatically |
data.pausedByName | string | yes | Display name of that account, null when there is none |
data.pausedByActorType | string | no | human when a person paused the participation, system when the product did |
data.reactivatedAt | ISO 8601 string | yes | When the participation resumed, in UTC |
data.reactivatedBy | UUID | yes | Account that resumed it |
data.reactivatedByName | string | yes | Display name of that account |
data.shiftDays | integer | no | Whole days the deadlines moved by; 0 under keep |
data.resumeNote | string | yes | The note given, when there was one |
data.createdAt | ISO 8601 string | no | When the pause was recorded, in UTC |
correlationId | UUID | no | Correlation id for support |
{
"success": true,
"replayed": false,
"data": {
"id": "9f2c0a1e-0000-4000-8000-000000000000",
"enrollmentId": "4af4cd8d-0000-4000-8000-000000000000",
"reason": "Sick leave for three weeks.",
"effectiveAt": "2026-08-20T09:00:00.000Z",
"deadlinePolicy": "shift",
"accessPolicy": "read_only",
"pausedBy": "6d41ab55-0000-4000-8000-000000000000",
"pausedByName": "Paul Vidal",
"pausedByActorType": "human",
"reactivatedAt": "2026-09-03T09:12:00.000Z",
"reactivatedBy": "6d41ab55-0000-4000-8000-000000000000",
"reactivatedByName": "Paul Vidal",
"shiftDays": 14,
"resumeNote": "Back after medical clearance.",
"createdAt": "2026-08-20T09:00:05.000Z"
},
"correlationId": "0f6b1d92-0000-4000-8000-000000000000"
}shiftDays to know how far the deadlines moved.shiftDays is the number of whole days between effectiveAt and the resume,
rounded up and never negative. Under keep it is 0 and nothing moves.shift: relative deadlines derived from the enrollment start,
the current action, open blockers and planned interventions. What never moves:
fixed program dates, which are shared by everyone enrolled in the program.Idempotency-Key returns the original resume without
applying a second shift.enrollment.reactivated event are written
in one transaction, together with the rescheduled reminder.