Upload files when the content has no URL to crawl. Each file becomes one document and is answered from like any other page. Available on every plan.

Set up

1

Add the source

Open the knowledge base, go to Sources → Add source, pick File Upload and click Continue. Enter a Display name. A Description is optional. Click Add source.
2

Upload files

Drop files onto the panel, click it to browse, or click Upload a folder. Then click Upload N files. Files of the wrong type or over 32 MB are set aside before anything is sent.
3

Wait for indexing

The panel shows Indexing X of Y, then Indexed. You can leave the page. Ask a question in the knowledge base’s Playground tab to check.
To add more files later, open the source and use its Files tab.

Supported formats

FormatWhat is extracted
.pdfText, with headings worked out from font size. Repeated headers, footers and page numbers are dropped. See PDF Extraction.
.docxParagraphs and tables. Word heading styles become headings.
.xlsx .xlsm .xltx .xltmOne section per sheet, as a table. Hidden sheets are skipped. Up to 2,000 rows per sheet.
.csv .tsvA table, split into short sections with the header row repeated in each.
.html .htmCleaned like a crawled page. The <title> becomes the document title.
.md .mdx .txtIndexed as written.
The title is the file name without its extension. Files keep their folder path, so handbook/auth.pdf and sdk/auth.pdf stay two documents.

Limits

LimitValue
File size32 MB per file
One request10 files and 32 MB in total. The dashboard splits bigger batches for you.
PDF length7,000 pages. Longer PDFs are not indexed.

Check each file

The Files tab lists every file as Indexed, Skipped or Failed, with the reason. A file that indexed but may answer badly is also counted under Need a look — for example Almost no text (a scanned PDF: run OCR and upload it again) or Very large sheet (only the first 2,000 rows were indexed). See PDF Extraction for every PDF note.

Update or remove files

  • Replace a file: upload the new version with the same name and folder path.
  • Remove a file: on the Documents tab, click Remove from the index. The document is deleted.
  • There is no Sync Now: Kelu does not keep the file once it is indexed.
To keep uploads visible only to workspace members, set Visibility to Restricted when you add the source. For a source you already have, open Configuration → Edit and set New documents to Restricted before you upload. It applies to files indexed after the change. PII masking applies to uploads too.

Upload from a script

curl https://app.kelu.dev/api/v1/sources/SOURCE_ID/files \
  -H "Authorization: Bearer <token>" \
  -F "files=@handbook/auth.pdf" \
  -F "files=@release-notes.md"
Use a dashboard sign-in token — client keys and workspace API keys do not work here. Put every file in a field named files. The reply is 202 with upload_id, accepted and rejected (each rejected file with its reason), 400 if no file was accepted, or 503 if too many uploads are running — wait and send the batch again.