POST /api/v1/live-sessions/{liveSessionId}/cancel
Cancels a scheduled live. The live is not deleted: it stays in the agenda,
marked cancelled with its reason, so the targeted members know the meeting is
off. Cancelling is final, and a live already cancelled answers 400.
| Role in the organization | This endpoint |
|---|---|
OWNER | Allowed |
ADMIN | Allowed |
MEMBER | Refused — 403 |
| Requirement | Rule for this endpoint |
|---|---|
| Business role | None |
| Resource scope | The live belongs to the key's organization |
| Participation | None |
| Resource state | The live is scheduled |
| Parameter | Type | Required | Description |
|---|---|---|---|
liveSessionId | UUID | yes | Live session of the key's organization |
| Header | Required | Description |
|---|---|---|
x-api-key | yes | API key created for this organization |
Idempotency-Key | yes | Stable key for this cancellation |
X-Correlation-Id | no | Caller correlation id, returned or generated |
| Field | Type | Required | Nullable | Description |
|---|---|---|---|---|
cancelledAt | string | no | no | ISO 8601 instant the cancellation takes effect. Defaults to now |
reason | string | no | yes | Up to 500 characters, shown to members |
curl -X POST "$COHORTE_API_BASE_URL/api/v1/live-sessions/$LIVE_SESSION_ID/cancel" \
-H "x-api-key: $COHORTE_API_KEY" \
-H "Idempotency-Key: live-autumn-qa-w1-cancel" \
-H "Content-Type: application/json" \
-d '{"reason": "The host is ill — the Q&A moves to next week."}'200 OK — the live, cancelled.400 Bad Request — missing Idempotency-Key, invalid JSON, a reason over 500 characters, or a live that is already cancelled.401 Unauthorized — missing, unknown or expired key.403 Forbidden — the bearer is not OWNER or ADMIN.404 Not Found — the live is unknown or belongs to another school.Same fields as Schedule a live session;
status is cancelled, cancelledAt and cancellationReason are set.
{
"success": true,
"replayed": false,
"data": {
"id": "0a1b2c3d-4e5f-4a6b-8c7d-9e0f1a2b3c4d",
"title": "Weekly Q&A",
"description": null,
"type": "qa",
"status": "cancelled",
"startsAt": "2026-10-08T17:00:00.000Z",
"endsAt": "2026-10-08T18:00:00.000Z",
"timezone": "Europe/Paris",
"accessUrl": "https://meet.google.com/abc-defg-hij",
"provider": "google_meet",
"replayUrl": null,
"hostUserId": null,
"targetType": "cohort",
"targetCohortId": "3a1f7c2e-5b6d-4e8f-9a0b-1c2d3e4f5a6b",
"cancelledAt": "2026-10-07T09:00:00.000Z",
"cancellationReason": "The host is ill — the Q&A moves to next week.",
"createdAt": "2026-10-01T08:30:00.000Z",
"updatedAt": "2026-10-07T09:00:00.000Z"
},
"correlationId": "c0ffee00-1111-4222-8333-444455556666"
}400, even with the same Idempotency-Key: the live is already cancelled. Before retrying on a network error, read it with List live sessions.Keep one idempotency key for one normalized intention. Current authorization is checked again on retry. A different payload or resource with that key, or an older key whose intention cannot be verified, returns 409 conflict without another mutation. Inspect the original outcome before creating a new command. Identical retries do not resend notifications.