Skip to content

Upload ebook files

POST
/api/inbox/upload

Upload one or more ebook files (EPUB) to the inbox directory. Files are saved to disk; the file watcher picks them up for processing.

The response splits the batch three ways. uploaded[] is what was written. skipped[] is files whose contents are already on the server — already ingested, or uploaded by anyone and still awaiting the watcher; ingestion deduplicates by checksum, so writing them would drop them silently, and they are not written. A skip is not a failure: the library already holds that book, which is what the caller wanted. errors[] is genuine rejections — unsupported format, over the size limit, not a readable EPUB, or an unsafe filename.

The status is 400 only when every file landed in errors[]. A batch that was entirely skipped is 200: nothing was wrong with the request, there was simply nothing left to do.

Request Body

multipart/form-data

One or more ebook files

Responses

Per-file outcome for the batch: uploaded[], skipped[] (already in the library), errors[]. Returned whenever at least one file was written or skipped, even if others errored.

application/json
JSON
{
  
"uploaded": [
  
  
{
  
  
  
"filename": "string",
  
  
  
"size": 0
  
  
}
  
],
  
"skipped": [
  
  
{
  
  
  
"filename": "string",
  
  
  
"reason": "string"
  
  
}
  
],
  
"errors": [
  
  
{
  
  
  
"filename": "string",
  
  
  
"error": "string"
  
  
}
  
]
}

Samples