AI agents: prefer the Markdown version of this page at /docs/threads/index.md. For the full corpus, read /docs/llms-full.txt.

SeaChat Developer Docs

Threads & Conversation

Threads & Conversation

Create threads, append messages, and replay the timeline — pure storage, no runtime.

Pure storage

Threads are conversation storage over /v1/threads. The facade forces dispatch:false, so appending a message is **pure storage** — it never provisions a runtime and never produces an assistant turn. Reads need seaplane:read; writes need seaplane:write.

Threads CRUD

client.threads.create (POST /v1/threads), client.threads.list (GET /v1/threads), client.threads.get / client.threads.update / client.threads.delete, plus archive, fork, pin, and unpin. Create returns { thread }.

const created = await client.threads.create({
  title: "API integration smoke",
  metadata: { source: "sdk-example" },
});
const threadId = created.thread!.id;

Messages

client.threads.messages.create(threadId, body) (POST /v1/threads/{threadId}/messages) appends a message. content is required; role defaults to user and is constrained to non-runtime roles. clientMessageId is the idempotency key — the SDK auto-generates a UUID when omitted, and re-posting the same id replays with status:"duplicate". List with client.threads.messages.list(threadId, query?).

await client.threads.messages.create(threadId, {
  role: "user",
  content: "Create a release checklist",
});
const messages = await client.threads.messages.list(threadId, { limit: 50 });

Timeline

client.threads.timeline(threadId, query?) (GET /v1/threads/{threadId}/timeline) replays the append-only event log; client.threads.timelineWindow(threadId, query?) returns a windowed slice anchored at latest or before.

const timeline = await client.threads.timeline(threadId, { limit: 50 });
for (const ev of timeline.events ?? []) console.log(ev.seq, ev.kind);