Get a file
const url = 'https://api.asklucy.eu/v1/conversations/example/files/example';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/example/files/example \ --header 'Authorization: Bearer <token>'Metadata, plus a short-lived download_url once the file is ready. Each download is recorded in the audit log.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Responses
Section titled “Responses”OK
object
upload: added by a person; generated: written by Lucy; local: attached by Lucy from the person’s computer (a shared folder).
Why Lucy added the file: output, made for the person (show it as a card unless the answer links it inline), including the copy of a file she wrote or edited on the person’s computer; read, attached so she could read it (no card: its step names it). Null for the person’s uploads.
Where the file is on the person’s computer (source local): the one Lucy read it from, or wrote it to. Null otherwise, and on files attached before 2026-11-04.
object
The virtual path there, <share>/<path inside it>.
For generated files, the answer that wrote it.
Only on getFile for ready files; valid a few minutes.
A JPEG preview about 320 px on its long side: the image (a GIF’s first frame) or a PDF’s first page. On getFile and listFiles for ready PNG, JPEG, GIF, WebP and PDF files; null for other files and when none could be made. Valid as long as download_url; fetching it isn’t audited as a download. Always null in file.created events: fetch the file for it. An upload’s is there when it becomes ready, a generated file’s when file.created is sent.
A PDF of a Word or PowerPoint file (also the OpenDocument and older kinds, RTF), to read it in the chat with a PDF viewer. On getFile and listFiles for ready files of those types once the conversion has been done (a minute or so after the file is ready); null for other files, while it is pending and when the file could not be converted. Spreadsheets get none (show them from download_url). Valid as long as download_url; fetching it isn’t audited as a download. Never in file.created events.
Example
{ "id": "file_4kVt9s", "content_type": "application/pdf", "source": "upload", "role": "output", "local": { "path": "Documents/product-list.md" }, "status": "pending", "rejection_reason": "malware", "created_by": { "kind": "person" }}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.
No such object in your organization.
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.