Skip to content

Follow an answer live

GET
/conversations/{conversationId}/messages/{messageId}/events
curl --request GET \
--url https://api.asklucy.eu/v1/conversations/example/messages/example/events \
--header 'Authorization: Bearer <token>'

Server-Sent Events for an assistant message. The answer is written on the server whether or not anyone is watching, and any number of clients can follow it. To pick up an answer in progress (after a refresh, or on another device), get the message and open this stream with its last_event_id as Last-Event-ID. Each event has an id, an event name equal to the payload’s type, and JSON data matching MessageEvent. The stream replays from the start (or after Last-Event-ID) and ends after message.completed, message.failed or message.cancelled; a finished answer replays in full, then closes. Reconnect with Last-Event-ID to resume without gaps. User messages have no events (404). While idle, the server sends an SSE comment line (: keep-alive) every 15 seconds; ignore it. Any API replica can serve any stream, so reconnecting after a deploy or network change loses nothing.

conversationId
required
string
/^conv_[A-Za-z0-9]+$/
messageId
required
string
/^msg_[A-Za-z0-9]+$/
Last-Event-ID
string

Resume the stream after this event.

Event stream.

Media typetext/event-stream

SSE frames; each data is a MessageEvent as JSON.

string

Example

id: 1
event: message.started
data: {"type":"message.started","message_id":"msg_9Qa1","at":"2026-11-02T15:04:05Z"}
id: 2
event: message.delta
data: {"type":"message.delta","message_id":"msg_9Qa1","text":"Here is the"}

Missing, expired or invalid token.

Media typeapplication/problem+json

RFC 9457 problem details.

object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
string
instance
string
request_id
string
quota

For quota-exceeded, the window that is used up.

object
window
required
string
Allowed values: five_hours week month
percent_used
required
number
<= 100
resets_at
required

Null for a rolling window that hasn’t started.

string | null format: date-time
limited_by
required

organization when the organization’s budget is closer to running out than the member’s own limit.

string
Allowed values: personal organization
request
One of:

A request as its member sees it, where they asked.

object
id
required
string
status
required
string
Allowed values: pending approved declined withdrawn
created_at
required
string format: date-time
decided_at
required
string | null format: date-time
note
required

What the admin who decided wrote back.

string | null
errors

Field-level problems (400 only).

Array<object>
object
field
required

JSON pointer into the request body.

string
message
required
string

Example

{
"type": "https://docs.asklucy.eu/errors/answer-in-progress",
"quota": {
"window": "five_hours",
"limited_by": "personal",
"request": {
"status": "pending"
}
}
}
X-Request-Id
string

Unique per request; quote it to support.

No such object in your organization.

Media typeapplication/problem+json

RFC 9457 problem details.

object
type
required
string format: uri-reference
title
required
string
status
required
integer
detail
string
instance
string
request_id
string
quota

For quota-exceeded, the window that is used up.

object
window
required
string
Allowed values: five_hours week month
percent_used
required
number
<= 100
resets_at
required

Null for a rolling window that hasn’t started.

string | null format: date-time
limited_by
required

organization when the organization’s budget is closer to running out than the member’s own limit.

string
Allowed values: personal organization
request
One of:

A request as its member sees it, where they asked.

object
id
required
string
status
required
string
Allowed values: pending approved declined withdrawn
created_at
required
string format: date-time
decided_at
required
string | null format: date-time
note
required

What the admin who decided wrote back.

string | null
errors

Field-level problems (400 only).

Array<object>
object
field
required

JSON pointer into the request body.

string
message
required
string

Example

{
"type": "https://docs.asklucy.eu/errors/answer-in-progress",
"quota": {
"window": "five_hours",
"limited_by": "personal",
"request": {
"status": "pending"
}
}
}
X-Request-Id
string

Unique per request; quote it to support.