Skip to content

Get Shared Thread Turns

Returns a lightweight manifest of every user prompt in the thread behind a share link — id, a short preview, and a timestamp — for the whole thread, oldest to newest, independent of message-body pagination.

This is the slug-scoped equivalent of List thread turns, which is ownership-scoped and returns 404 for a share-link recipient. Each message_id matches the id returned by Get Shared Thread Messages, so a client can jump to any turn with that endpoint's around= window fetch — including turns it has not paged in yet. Bodies are never included, so the response stays cheap on a long thread.

Authorization is the same as reading the thread's messages: the slug must resolve for you. Every access level (view, fork, live) may read it — a view-only visitor needs the turn rail as much as a joined participant.

GEThttps://api.aitronos.com/v1/shared-threads/{slug}/turns

Authentication

Requires user authentication (Bearer token). An API key has no recipient identity and is rejected with 403.

Path Parameters

slug string required

The share-link slug, taken from the share URL.

Returns

  • turns array — every user-role prompt in the thread, oldest to newest. Each entry has:
    • message_id string — stable message id (msg_…) of the prompt. Matches the id from Get Shared Thread Messages.
    • preview string — short (~80-character) excerpt of the prompt text.
    • created_at string — ISO-8601 UTC timestamp of the prompt.
  • truncated boolean — true only if the thread has more user turns than the server cap (2000). In that case the newest 2000 are returned (the recent end of the thread, where you navigate) and the oldest are dropped. Effectively always false for real threads — a payload guard, not pagination.

Not paginated: there is no limit, cursor, or window. One call covers the whole thread.

Code Examples

cURL

curl -X GET "https://api.aitronos.com/v1/shared-threads/abc123slug/turns" \
  -H "Authorization: Bearer YOUR_TOKEN"

Python SDK

from aitronos import Aitronos  # pip install aitronos-sdk

client = Aitronos(api_key="", token="YOUR_TOKEN")

manifest = client.threads.shared.list_turns(slug="abc123slug")
for turn in manifest.turns:
    print(turn.message_id, turn.preview)

Python (requests)

import requests

response = requests.get(
    "https://api.aitronos.com/v1/shared-threads/abc123slug/turns",
    headers={"Authorization": "Bearer YOUR_TOKEN"},
)
print(response.json()["turns"])

JavaScript

const response = await fetch(
  "https://api.aitronos.com/v1/shared-threads/abc123slug/turns",
  { headers: { Authorization: "Bearer YOUR_TOKEN" } },
);
const manifest = await response.json();
console.log(manifest.turns.length);

Response Examples

Success (200)

{
  "turns": [
    {
      "message_id": "msg_bcb0ef5c53d04a70bf49203f0b43ac5c",
      "preview": "First question I asked…",
      "created_at": "2026-07-16T10:30:54.902122Z"
    },
    {
      "message_id": "msg_638dee6512f14bafa75c6bc1fe10bd59",
      "preview": "Follow-up about pricing",
      "created_at": "2026-07-16T10:32:42.968571Z"
    }
  ],
  "truncated": false
}

The same uniform deny as opening the link — it never reveals whether the link or thread exists.

{
  "success": false,
  "error": {
    "code": "RESOURCE_NOT_FOUND",
    "message": "That share link could not be found.",
    "system_message": "Share link unresolved for user",
    "type": "client_error",
    "status": 404,
    "details": {},
    "trace_id": "...",
    "timestamp": "..."
  }
}