List my conversations
const url = 'https://api.asklucy.eu/v1/conversations?limit=25&agent_runs=exclude';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://api.asklucy.eu/v1/conversations?limit=25&agent_runs=exclude' \ --header 'Authorization: Bearer <token>'The caller’s own conversations, most recently active first. The
runs of their owner agents are conversations too; they are left
out unless agent_runs asks for them.
With q, one page of the best matches (no next_cursor), each with
its match. The search is hybrid: by words (the title and the
messages’ words) and by meaning (passages of the messages close to
q, even without a word in common), the two rankings merged by
reciprocal rank fusion. Only ever the caller’s own conversations, as
without q. A message is found by meaning shortly after it’s written
(it is embedded in the background); by words at once.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”The next_cursor of the previous page.
Search the titles and the messages (the person’s and Lucy’s answers, not what tools returned), in any language.
By words: case and accents are ignored (ecole finds École);
each word must be in the title or in one of the messages, and also
finds the longer words it starts (fact finds factures), so it
can search as you type; a title with a typo still matches.
By meaning (from 4 characters): “the invoice problem with the
Belgian client” finds a conversation about a disputed bill from
Antwerp. Only passages close enough count, so an unrelated query
finds nothing. Blank is the same as no q.
exclude (the default) leaves agent runs out, include lists them too, only lists nothing else.
Responses
Section titled “Responses”OK
object
object
Set by the user, or by Lucy after the first answer.
Last message or change.
object
Zitadel user ID.
service is a customer system’s Zitadel service user; agent is a service agent (its ID is the agt_ ID), the author of its runs’ messages.
The answer Lucy is writing right now, if any.
When the retention policy deletes it.
The computer Lucy’s local tools reach in this conversation (one of the person’s devices), if any.
The model chosen for this conversation’s answers (a Model.id);
null is Auto. It stays when the person can no longer choose,
but then answers use Auto.
How long Lucy’s sandbox keeps what it saved: a paused workspace (the files of a conversation after a few idle minutes) and published pages. Days; a field that is null or absent is inherited. The organization’s value is the default and the ceiling: a person or a conversation can only choose a shorter time. The effective value is the shortest that applies, within the platform’s maximum.
object
0 keeps no paused workspace (an idle sandbox is deleted with its files).
The agent run a conversation belongs to.
object
Whom the agent acts as.
owner: its creator, with exactly their access (their memory, their Microsoft 365, their quotas). Its runs are their conversations: they can read and continue them as themselves.service: itself (its ID is its principal). It reaches only what it was given: its knowledge files and the tools below, never anyone’s Microsoft 365. Only org_admins create and see service agents; their runs are read-only.
True for service runs, which nobody can continue.
Only in search results (GET /conversations?q=…), where the search found it.
object
How the search found the conversation: words (in the title or the
messages), meaning (a passage close to q), or both.
The message that matches best, to open the conversation at. Null when only the title matched.
A few lines of that message, as plain text (no Markdown), with …
where it was cut: around the words found, or, found only by
meaning, the start of the passage that matched (no highlights then).
Null when only the title matched.
The words found in snippet, in order, as [start, end) offsets in
UTF-16 code units (JavaScript string indices). Empty when there is no
snippet.
object
Example
{ "data": [ { "id": "conv_2YgP0x", "created_by": { "kind": "person" }, "model": "mistral-large-4-0", "agent_run": { "identity": "owner" }, "match": { "found_by": [ "words" ], "message_id": "msg_9Qa1Zt", "role": "user", "snippet": "… the invoices for March are due on the 15th, and the …" } } ]}The request is invalid; errors lists what’s wrong.
RFC 9457 problem details.
object
For quota-exceeded, the window that is used up.
object
Null for a rolling window that hasn’t started.
organization when the organization’s budget is closer to running out than the member’s own limit.
Field-level problems (400 only).
object
JSON pointer into the request body.
Example
{ "type": "https://docs.asklucy.eu/errors/answer-in-progress", "quota": { "window": "five_hours", "limited_by": "personal", "request": { "status": "pending" } }}Headers
Section titled “Headers”Unique per request; quote it to support.
Missing, expired or invalid token.
RFC 9457 problem details.
object
For quota-exceeded, the window that is used up.
object
Null for a rolling window that hasn’t started.
organization when the organization’s budget is closer to running out than the member’s own limit.
Field-level problems (400 only).
object
JSON pointer into the request body.
Example
{ "type": "https://docs.asklucy.eu/errors/answer-in-progress", "quota": { "window": "five_hours", "limited_by": "personal", "request": { "status": "pending" } }}Headers
Section titled “Headers”Unique per request; quote it to support.
The token is valid but lacks the role this needs.
RFC 9457 problem details.
object
For quota-exceeded, the window that is used up.
object
Null for a rolling window that hasn’t started.
organization when the organization’s budget is closer to running out than the member’s own limit.
Field-level problems (400 only).
object
JSON pointer into the request body.
Example
{ "type": "https://docs.asklucy.eu/errors/answer-in-progress", "quota": { "window": "five_hours", "limited_by": "personal", "request": { "status": "pending" } }}Headers
Section titled “Headers”Unique per request; quote it to support.
Rate limit (problem type …/errors/rate-limited, retry after
Retry-After) or quota used up (…/errors/quota-exceeded, with
quota saying which limit and when it resets).
RFC 9457 problem details.
object
For quota-exceeded, the window that is used up.
object
Null for a rolling window that hasn’t started.
organization when the organization’s budget is closer to running out than the member’s own limit.
Field-level problems (400 only).
object
JSON pointer into the request body.
Example
{ "type": "https://docs.asklucy.eu/errors/answer-in-progress", "quota": { "window": "five_hours", "limited_by": "personal", "request": { "status": "pending" } }}Headers
Section titled “Headers”Unique per request; quote it to support.
Seconds to wait before retrying.