Appearance
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" } ]
{
}
POST
/api/inbox/upload