Upload files
Video is allowed more because 25 MB is a few seconds of it at any real bitrate.
Ingestion is always asynchronous. The call returns immediately with a
job_ids list;
poll each with the job status endpoint. When a job
reaches completed, that file’s content is searchable.
Uploading to a space that does not exist yet creates it, exactly as a first
record does — an upload is a write, so there is no
space to pre-create.
Response 202 Accepted
user_id / agent_id / session_id (userId / agentId /
sessionId in TypeScript), and passing them matters whenever the space is scoped at
all: a scoped retrieve is strict, so an upload written without scope is invisible to
every scoped query — silently, since the files are stored and the job completes.
Parsing and embedding a document is billed on completion, not at upload. Larger files
cost more, because more content is processed. Images and audio are read into text
first and then treated as text, so each costs what its reading costs.An image yields both a verbatim transcription of any text in it and a short
description of what it shows, so a screenshot and a photograph are both worth
uploading without you having to say which you have. A video yields its speech,
its on-screen text, and a description of what happens.Very long recordings are rejected rather than truncated: a transcript that stopped
early would be stored as though it were the whole thing. Split a long recording and
upload the parts.
List documents
Response
200 OK
memory_count is how many searchable memories were extracted from the document.
What counts as a document
This list contains everything ingested into the space, not only uploaded files. Storing a memory withPOST /v1/record also creates a document row, so source tells you which
is which.
Newest rows come first, and a space with steady
record traffic accumulates memory
rows fast, so uploads are often not on the first page. Ask for the kind you want rather
than paging until you find it:
limit and offset then apply to the filtered set, and total counts only the
matching documents.
Every memory belongs to a document, and retrieve results carry the document_id they
came from — so you can always walk from a search hit back to the document that produced
it, and deleting a document removes every memory extracted from it.
The dashboard’s Documents tab hides
memory rows by default for this reason, with a
toggle to show everything ingested.Get a document
Delete a document
Removes the document and every memory extracted from it.204 No Content.
Error responses
See the full error reference.
Next steps
Retrieve API
Search across recorded memory and uploaded documents.
Memories API
Record memories and poll ingestion jobs.