Skip to content

Your threads, most recently active first

GET
/api/v1/threads
curl --request GET \
--url http://localhost:11044/api/v1/threads \
--header 'X-Embabel-Api-Key: <X-Embabel-Api-Key>'

The threads

Media typeapplication/json

The caller’s threads with their agents; answered by GET /threads

object
threads
required

The caller’s threads, most recently active first

Array<object>

A conversation the caller shares with their agents. GET /threads lists them, POST /threads answers the one it started, and GET /threads/{id} carries it with its messages.

object
createdAt
required

When the thread was started, as an ISO-8601 instant

string format: date-time
id
required

Thread id, a UUIDv7 string; the {id} in /threads/{id}

string
ownerId
required

User id of the person who owns the thread; always the caller, since only the owner can read it

string
title
required

Title as given when the thread was started, trimmed; “Untitled” when none was given

string
updatedAt
required

Last activity in the thread, as an ISO-8601 instant; the list is sorted on it, newest first

string format: date-time

Example generated

{
"threads": [
{
"createdAt": "2026-04-15T12:00:00Z",
"id": "example",
"ownerId": "example",
"title": "example",
"updatedAt": "2026-04-15T12:00:00Z"
}
]
}

No authenticated principal

One of:

A refusal with a machine-readable code and a plain-language message. ApiErrorAdvice answers it for a failed validation, a missing resource or a conflicting state, and some controllers answer it directly

object
code
required

Machine-readable key to branch on, such as validation_failed, unknown_field, not_found or conflict. Open: a surface may answer codes of its own

string
detail

Extra context where there is some, such as the fields a body may carry; null otherwise

string
message
required

A plain-language explanation, written to be shown. Never carries an exception message

string

Example generated

{
"code": "example",
"detail": "example",
"message": "example"
}