Skip to content

What the conversation shared

GET
/api/portal/{client_id}/thread/shared/
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).

client_id
required
string format: uuid
lang
string

The cards’ language: en · ru · es.

units
string

metric (default) · imperial.

Media typeapplication/json

GET …/thread/shared/ (ThreadShared), newest first.

object
references
required
Array<object>
object
message_id
required
string format: uuid
created_at
required
string format: date-time
reference
required
One of: discriminator: kind

kind: session — a whole session.

object
placeholder
required

True: kind alone — the card cannot be shown to this reader (or its subject is gone).

boolean
kind
required

The discriminator.

  • session - session
string
Allowed values: session
session_id
string format: uuid
activity
string
title
string
recorded_at
string format: date-time
thumbnail_url
string
nullable
links
required
Array<object>
object
message_id
required
string format: uuid
created_at
required
string format: date-time
url
required
string
author_name
required
string

Examples

ExampleShared
{
"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"
}
]
}
Media typeapplication/json
object
detail
required

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).

string

Example generated

{
"detail": "example"
}
Media typeapplication/json
object
detail
required

access_ended, consent_required, or DRF’s message for a partner API key.

string
reason

With access_ended: why the card no longer opens — revoked, team_plan or minor.

string
client_name
string
team_name
string
consent_version

With consent_required: the version to accept.

string
kinds

With consent_required: the texts to show.

Array<string>

Examples

Example403—AccessEnded

403 — access ended

{
"detail": "access_ended",
"reason": "revoked",
"client_name": "Sofia Lebedeva",
"team_name": "North Track Academy"
}
Media typeapplication/json
object
detail
required

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).

string

Examples

Example404—NotACardOfThisAccount

404 — not a card of this account

{
"detail": "card_not_found"
}
Media typeapplication/json
object
detail
required

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.

string
wait

With throttled: whole seconds until the next request can pass.

integer
nullable

Example generated

{
"detail": "example",
"wait": 1
}