GET /api/v1/questions
Lists the questions the school received. By default only to_do questions,
oldest first; any other status filter lists the most recent first. Every
coach of the school sees every question, whatever the scope of their assignment.
| Role in the organization | This endpoint |
|---|---|
OWNER | Allowed |
ADMIN | Allowed |
MEMBER | Allowed for an assigned coach, whatever the scope; otherwise refused — 403 |
| Requirement | Rule for this endpoint |
|---|---|
| Business role | coach (any scope) for a MEMBER; a reviewer is refused |
| Resource scope | Organization from the API key |
| Participation | None |
| Resource state | Filtered by status |
| Parameter | Type | Required | Description |
|---|---|---|---|
status | string | no | to_do (default), answered, cancelled or all |
assigneeUserId | UUID | no | Questions assigned to this owner or coach |
mine | boolean | no | true: questions assigned to the bearer; overrides assigneeUserId |
programId | UUID | no | Questions of one program |
page | integer | no | From 1, default 1 |
limit | integer | no | 1 to 100, default 20 |
curl "$COHORTE_API_BASE_URL/api/v1/questions?mine=true" \
-H "x-api-key: $COHORTE_API_KEY"200 OK — one page of questions.400 Bad Request — a query parameter is invalid.401 Unauthorized — missing, unknown or expired key.403 Forbidden — the bearer is neither OWNER, ADMIN nor an assigned coach.| Field | Type | Nullable | Description |
|---|---|---|---|
success | boolean | no | true |
data[].id | UUID | no | Question identifier |
data[].programId | UUID | no | Program the question was asked from |
data[].programName | string | no | Name of that program |
data[].title | string | no | Up to 200 characters |
data[].body | string | no | Description, up to 10000 characters |
data[].status | string | no | to_do, answered or cancelled — derived |
data[].authorUserId | UUID | no | Account of the member who asked |
data[].authorName | string | yes | Name of that member |
data[].assigneeUserId | UUID | no | Assigned owner or coach |
data[].assigneeName | string | yes | Name of the assigned owner or coach |
data[].answer | object | yes | The linked answer, once published at least once |
data[].answer.videoResourceId | UUID | no | The answer in the video library |
data[].answer.title | string | no | Its title |
data[].answer.status | string | no | published or unpublished |
data[].cancellation | object | yes | Present when status is cancelled |
data[].cancellation.reason | string | no | Reason visible to the member |
data[].cancellation.cancelledAt | ISO 8601 string | no | Cancellation, UTC |
data[].cancellation.cancelledByName | string | yes | Who cancelled it |
data[].cancellation.linkVideoResourceId | UUID | yes | Existing video suggested instead |
data[].createdAt | ISO 8601 string | no | Question asked, UTC |
data[].updatedAt | ISO 8601 string | no | Last change, UTC |
pagination.total | integer | no | Questions matching the filters |
pagination.page | integer | no | Current page |
pagination.limit | integer | no | Page size |
pagination.totalPages | integer | no | Number of pages |
{
"success": true,
"data": [
{
"id": "8c1d2e3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
"programId": "3a1f7c2e-5b6d-4e8f-9a0b-1c2d3e4f5a6b",
"programName": "Agentic AI Developer",
"title": "Where should validation live?",
"body": "I hesitate between the server action and the service.",
"status": "to_do",
"authorUserId": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"authorName": "Léa Vasseur",
"assigneeUserId": "0b1c2d3e-4f5a-4b6c-8d7e-9f0a1b2c3d4e",
"assigneeName": "Mike Codeur",
"answer": null,
"cancellation": null,
"createdAt": "2026-10-18T10:00:00.000Z",
"updatedAt": "2026-10-18T10:00:00.000Z"
}
],
"pagination": {"total": 1, "page": 1, "limit": 20, "totalPages": 1},
"correlationId": "c0ffee00-1111-4222-8333-444455556666"
}