POST /api/v1/interventions/{interventionId}/close
Closes a planned intervention with the outcome it reached. The outcome is
required for both results: cancelled without a reason would be
indistinguishable from a deletion. The closure joins the member timeline and
removes the intervention from the owner's work queue. A linked blocker stays
open.
| 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 | coach scoped to this enrollment, or program_director scoped to the organization |
| Resource scope | Intervention of the organization attached to the API key |
| Participation | The coach must be assigned to the intervention's enrollment |
| Resource state | The intervention must be planned |
Closing does not require the enrollment to still be active: work that was
started is finished, even after a suspension. Any caller allowed on the
enrollment may close, not only the owner.
| Parameter | Type | Required | Description |
|---|---|---|---|
interventionId | UUID | yes | Intervention 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 closing intention |
X-Correlation-Id | no | Caller correlation id, returned or generated |
| Field | Type | Required | Nullable | Description |
|---|---|---|---|---|
result | string | yes | no | completed or cancelled |
outcome | string | yes | no | 1 to 2000 characters, required for both results |
{
"result": "completed",
"outcome": "Slot booked again on Thursday, the member resumed calling."
}curl -X POST "$COHORTE_API_BASE_URL/api/v1/interventions/INTERVENTION_ID/close" \
-H "x-api-key: $COHORTE_API_KEY" \
-H "Idempotency-Key: close-intervention-2026-09-04" \
-H 'Content-Type: application/json' \
-d '{"result":"completed","outcome":"Slot booked again on Thursday."}'200 OK — the intervention was closed.400 Bad Request — missing Idempotency-Key, invalid JSON, an unknown result, or an empty outcome.401 Unauthorized — the key is missing, invalid, or no longer attached to a member.403 Forbidden — the bearer cannot act on this intervention's enrollment.404 Not Found — the intervention is unknown or belongs to another organization.409 Conflict — the intervention is already closed or cancelled.| Field | Type | Nullable | Description |
|---|---|---|---|
success | boolean | no | true for a successful request |
data.id | UUID | no | Intervention identifier |
data.status | string | no | completed or cancelled |
data.outcome | string | no | The outcome that was recorded |
data.closedAt | ISO 8601 string | no | Closure time in UTC |
data.closedBy | UUID | no | Account that closed it |
data.closedByName | string | yes | Display name of that account |
data.blockerId | UUID | yes | Linked blocker, unchanged by this call |
correlationId | UUID | no | Correlation id for support |
The rest of the object is the same shape as a planned intervention.
{
"success": true,
"data": {
"id": "9f2c0a1e-0000-4000-8000-000000000000",
"enrollmentId": "4af4cd8d-0000-4000-8000-000000000000",
"reason": "late",
"title": "Catch-up call after two weeks without progress",
"channel": "call",
"ownerUserId": "1b7d2f30-0000-4000-8000-000000000000",
"ownerName": "Ines Fabre",
"dueAt": "2026-09-05T16:00:00.000Z",
"expectedOutcome": "A prospecting slot booked again for this week.",
"status": "completed",
"outcome": "Slot booked again on Thursday, the member resumed calling.",
"closedAt": "2026-09-04T11:20:00.000Z",
"closedBy": "1b7d2f30-0000-4000-8000-000000000000",
"closedByName": "Ines Fabre",
"blockerId": null,
"plannedBy": "6d41ab55-0000-4000-8000-000000000000",
"plannedByName": "Paul Vidal",
"plannedAt": "2026-09-02T09:14:00.000Z"
},
"correlationId": "0f6b1d92-0000-4000-8000-000000000000"
}409, whether it comes from the same caller
retrying or from someone else. Read the intervention first when a call timed
out.intervention.closed event are written in
one transaction.completed intervention counts as a contact for the cohort cockpit; a
cancelled one does not, and neither does a merely planned one.