What the conversation shared
const url = 'http://localhost:8000/api/portal/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/thread/shared/';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/portal/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/thread/shared/ \ --header 'Authorization: Bearer <token>'The cards messages carried and the links in their words, newest first, for the conversation’s details. Deleted messages drop out.
On this side only the cards the portal shows are listed.
The signed-in person’s grant on the card in the path — View is enough. 404 while client access is switched off; 404 card_not_found for a card the account never held; 403 access_ended (reason: revoked · team_plan · minor) and consent_required as on every portal route; a partner API key gets 403. 429 past the account’s rate (chat_read 240/min for reads, chat_post 30/min for writes).
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Query Parameters
Section titled “Query Parameters”The cards’ language: en · ru · es.
metric (default) · imperial.
Responses
Section titled “Responses”GET …/thread/shared/ (ThreadShared), newest first.
object
object
kind: session — a whole session.
object
True: kind alone — the card cannot be shown to this reader (or its subject is gone).
The discriminator.
session- session
kind: session_moment — a moment of a session’s clip.
object
True: kind alone — the card cannot be shown to this reader (or its subject is gone).
The discriminator.
session_moment- session_moment
Where in the clip, in milliseconds.
kind: metric — one metric of a session.
object
True: kind alone — the card cannot be shown to this reader (or its subject is gone).
The discriminator.
metric- metric
The value as the session reads it, with its unit.
kind: report — a Solutions report.
object
True: kind alone — the card cannot be shown to this reader (or its subject is gone).
The discriminator.
report- report
kind: plan_step — a step of an agent’s plan. The coach side reads
its title, the agent and the agent thread; the client side its place in
the plan and whether it is done (the title is “Plan step N” — AI text
stays coach-only).
object
True: kind alone — the card cannot be shown to this reader (or its subject is gone).
The discriminator.
plan_step- plan_step
Client side: its place in the plan.
Client side: marked done.
Coach side only.
Coach side only.
kind: document — a document on the athlete a coach shared (#2693
S5), carried only by the document_shared notice. Never its file name,
the problem it is filed under or who uploaded it.
object
True: kind alone — the card cannot be shown to this reader (or its subject is gone).
The discriminator.
document- document
medical, imaging, clearance, consent_form, insurance or other.
The coach’s title; may be empty — name it by its kind.
The date on the paper.
object
Examples
{ "references": [ { "message_id": "3f2a1b0c-0000-4000-8000-0000000000d3", "created_at": "2026-11-02T10:16:00Z", "reference": { "kind": "session", "placeholder": false, "session_id": "5e2b9c41-7d3a-4f80-9b6e-1c0d2e3f4a51", "activity": "running", "title": "Treadmill check", "recorded_at": "2026-11-02T09:40:00Z", "thumbnail_url": null } } ], "links": [ { "message_id": "3f2a1b0c-0000-4000-8000-0000000000d3", "created_at": "2026-11-02T10:16:00Z", "url": "https://example.com/drill", "author_name": "Kim Larsen" } ]}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
access_ended, consent_required, or DRF’s message for a partner API key.
With access_ended: why the card no longer opens — revoked, team_plan or minor.
With consent_required: the version to accept.
With consent_required: the texts to show.
Examples
403 — access ended
{ "detail": "access_ended", "reason": "revoked", "client_name": "Sofia Lebedeva", "team_name": "North Track Academy"}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
404 — not a card of this account
{ "detail": "card_not_found"}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}