File management
built for your team
Upload images, video, and documents in seconds. Berkasna stores everything securely and delivers instant public URLs — no servers, no infrastructure to manage.
Edge-native
file storage
Every file is stored securely and served via the global CDN. Uploads go directly from the browser to storage — no routing through the API worker, no bottlenecks.
- ✓Max file size 200 MB per upload
- ✓Direct browser uploads via presigned URLs
- ✓Public CDN URLs available immediately after upload
- ✓No server required — fully serverless
Runtime Serverless edge — no cold starts
Storage Distributed object storage — globally redundant
Delivery Global CDN — files served at the edge
Upload Direct browser upload — no proxy, no bottleneck
Max size 200 MB per file
No origin routing. No file size overhead.
Direct uploads,
no server bottleneck
Berkasna uses a presigned-URL flow so large files transfer directly from the browser to storage. The API only issues and confirms the upload — it never touches the file bytes. Built-in deduplication prevents duplicate storage.
# Step 1 — request a presigned URL
POST /upload/presigned
→ { assetId, uploadKey, uploadUrl }
# Step 2 — upload directly from the browser
PUT {uploadUrl} (XHR with progress tracking)
→ 200 OK
# Step 3 — confirm the upload
POST /upload/complete
→ { id, status: "completed", url }# Optional — check before uploading
GET /upload/check-duplicate?hash={sha256}
→ { isDuplicate: true, asset: { id, url, ... } }
# Skip upload if the file already existsEvery file type,
organized
Images, video, PDFs, and Office documents in one place. Each asset carries metadata — title, alt text, description, and tags — and is queryable by MIME category.
ImagesJPEG, PNG, GIF, WebP, and all image/* formats.
VideoMP4, WebM, and QuickTime — up to 200 MB.
PDFPDF documents, served directly from the CDN.
DocumentsWord, Excel, and PowerPoint files.
asset listing response
GET /assets?mimeCategory=image&limit=25
{
"data": [
{
"id": "f_abc123",
"filename": "hero-banner.jpg",
"mimeType": "image/jpeg",
"size": 204800,
"url": "https://cdn.example.com/org/hero-banner.jpg",
"width": 1920, "height": 1080,
"title": "Hero Banner",
"alt": "A wide banner image",
"tags": ["marketing", "hero"]
}
],
"meta": {
"pagination": { "hasMore": true, "nextCursor": "cursor_xyz" }
}
}Embedded in your
content workflow
Berkasna powers the media field in Kontena. Pick or upload files directly inside content editing forms — without leaving your CMS context. The MediaPicker is shared across the whole organisation.
Browse & pickScroll, search, and filter existing assets by MIME category or keyword.
Upload in contextUpload a new file without leaving the content form — asset is immediately available.
Kontena schema — media field
{
"name": "cover",
"type": "media",
"accept": ["image", "video"],
"required": false
}resolved asset in content response
"cover": {
"id": "f_abc123",
"url": "https://cdn.example.com/...",
"mimeType": "image/jpeg",
"width": 1920, "height": 1080
}More out of the box
Everything you need to manage a production media library — without the infrastructure overhead.
MIME category filtering
Filter assets by image, video, pdf, or document. Fast browsing across large libraries with no noise.
Cursor-based pagination
Asset listing uses limit + cursor for stable, efficient reads. Response includes meta.pagination with hasMore and nextCursor.
Deduplication
Optional SHA-256 hash check before upload. Avoid storing the same file twice and keep storage costs low.
Rich metadata
Attach title, alt text, description, and tags to every asset. Keep your media library organized and searchable.
Video support
Upload MP4, WebM, and QuickTime files up to 200 MB. Stored and delivered from the edge like any other asset.
Instant API docs
Built-in API reference at /dashboard/berkasna/api-docs — always in sync with your deployed API.
Ready to store with Berkasna?
Upload your first file in seconds. No infrastructure to configure, no storage limits to pre-purchase.