The team's conversations with its clients
const url = 'http://localhost:8000/api/inbox/';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url http://localhost:8000/api/inbox/ \ --header 'Authorization: Bearer <token>'Every card of the active team with a message, pinned first, then the newest; unread rows are not floated. ?archived=true lists the archive instead. A page at a time: limit (default 50, at most 200) and offset; next_offset is the next page’s. The counts and settings are the signed-in coach’s own.
A coach of the active team. 404 while client access is switched off; a partner API key and a client’s own account get 403; 429 past the account’s rate (chat_read, 240/min).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”List the archive.
Page size, 1-200; default 50.
Rows to skip; default 0.
Responses
Section titled “Responses”GET /api/inbox/ (InboxList).
object
One client’s conversation in the coach inbox (InboxRow).
object
object
A one-line preview of the words.
coach- Coachathlete- Athleteguardian- Parent or guardian
ThreadSettings — the signed-in person’s own, for this conversation.
object
Conversations in this list (inbox or archive), every page.
?offset= of the next page; null on the last one.
Examples
{ "results": [ { "client_id": "a1f1c0a2-0000-4000-8000-0000000000aa", "client_name": "Sofia Lebedeva", "avatar_url": "", "last_message": { "text": "Thank you, she enjoyed it!", "author_name": "Olga Lebedeva", "author_role": "guardian", "mine": false, "created_at": "2026-11-02T11:02:00Z", "deleted": false, "event": null }, "unread_count": 1, "settings": { "muted": false, "pinned": false, "archived": false } } ], "archived_count": 0, "count": 1, "next_offset": null}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Example generated
{ "detail": "example"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Examples
403 — a client's own account
{ "detail": "client_account"}object
Human-readable message, or a stable machine code for the cases a client branches on. The standard envelope for 400 (validation — a field-keyed object may appear instead), 401 (missing / invalid credentials), 403 (authenticated but not permitted), and 404 (absent — cross-team records are collapsed to 404 so the API never leaks the existence of another team’s data).
Example generated
{ "detail": "example"}object
429 — throttled: this account’s (or address’s) rate for the route is used up; try again after wait seconds, which Retry-After repeats. A route with a limit of its own answers its own code instead, documented there.
With throttled: whole seconds until the next request can pass.
Example generated
{ "detail": "example", "wait": 1}