Skip to main content

Private Apps

📄️Complete a chunked upload

Assembles the uploaded chunks into one stored file. Every chunk must have arrived; GET /api/v1/uploads/{id}/status lists any that are missing. For a session opened with purpose 'private_apk' the body may be empty: the server computes the file's SHA-256, refuses it with SHA256_MISMATCH when a declared sha256 (at init or here) differs, reads the APK (APK_UNREADABLE, APK_UNSIGNED), and creates the private APK content item, returned under content. The same bytes uploaded again return the existing item with created false, and repeating the call returns the same item.

📄️Bind a completed upload session to a content record

Final step of the chunked upload pipeline. Stamps the session's storage_key, storage_provider, size_bytes and sha256 onto the content row and marks the session consumed, in one transaction. Idempotent for the same (session, content) pair. A private APK is rejected here unless its package name, version code, signing fingerprint and app label were already written via PUT /api/v1/content/{id}; a boot animation is rejected unless its bytes pass the archive checks Android's loader enforces silently on device; a boot logo is rejected unless it is a structurally valid MTK logo image; a row flagged is_wallpaper is rejected unless its bytes are a PNG, JPEG or WebP image.