Skip to content

Start a thread

POST
/api/v1/threads
curl --request POST \
--url http://localhost:11044/api/v1/threads \
--header 'Content-Type: application/json' \
--header 'X-Embabel-Api-Key: <X-Embabel-Api-Key>' \
--data '{ "title": "example" }'

The new thread’s title, trimmed; omitted or blank, the thread is called Untitled. The thread starts empty and belongs to the caller

Media typeapplication/json

A thread to start; sent to POST /threads

object
title
required

Title for the thread, trimmed; blank or absent makes it “Untitled”

string

Example generated

{
"title": "example"
}

The thread

Media typeapplication/json

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

{
"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"
}