Skip to main content
All File Manager endpoints authenticate via the EF-Access-Key header. No session cookie or CSRF token is required.
POST /api/brands/{brand}/media does not exist (returns 404). Use Upload File (/file-manager/upload-file) or Legacy upload (/files/upload) below.

Upload File

Upload a single file to the brand’s asset storage.
string
required
The brand/project ID
file
required
Binary file (multipart/form-data)
string
Target subdirectory within the brand’s assets folder (e.g. media, media/icons). Defaults to the root assets folder. Omit leading/trailing slashes.
string
Override the stored filename. Defaults to the original filename from the file field.
Accepted MIME types: images (image/*), video (video/mp4, video/webm, video/quicktime), fonts (font/ttf, font/woff, font/woff2, font/otf), code/text (text/css, text/javascript, application/json, application/javascript).
cURL
JavaScript
The CDN URL is not included in the upload response. Derive it as: https://cdn.elasticfunnels.io/{brand_id}/assets/{path}/{filename}Example: https://cdn.elasticfunnels.io/42/assets/media/cards.png

Bulk Upload Files

Upload up to 20 files in a single request. Each file is validated and uploaded independently — files that fail validation are reported per-file without aborting the rest.
string
required
The brand/project ID
file[]
required
Array of files (multipart/form-data). Maximum 20 files per request.
string
Target subdirectory for all files in this batch (e.g. media). All files land in the same folder.
string[]
Optional array of custom filenames, positionally matched to files[]. Use to override individual filenames. filenames[0] overrides the name of files[0], etc.
Per-file validation rules:
  • File must be a valid upload (not corrupted in transit)
  • Maximum 10 MB per file
  • MIME type must be in the allowed list (same as single upload)
cURL
Python
Node.js
HTTP status is always 200 even when some files fail — inspect the status field on each entry. A failed entry never prevents other files from uploading.

Check File Exists

Check whether a file already exists at a given path. Useful for idempotency before uploading.
string
required
The brand/project ID
string
required
The filename only (e.g. cards.png)
string
The subdirectory to look in (e.g. media). Defaults to the root assets folder.
cURL

Legacy: List brand files (database catalog)

POST /api/brands/{brand}/files returns the brand’s existing image catalog from the database. It does not accept file uploads despite using POST.
cURL

Legacy: Upload brand files

Upload one or more images to the legacy brand files store (stored under /assets/media/ on the CDN).
file[]
required
Image files (multipart/form-data). Each file must pass the image validation rule.
cURL
Prefer Upload File (/file-manager/upload-file) for new integrations — it supports paths, custom filenames, and more MIME types.

List Files

Browse the raw Bunny CDN storage directory for the brand. Returns files and folders from storage directly (not the database). Sorted newest-first; folders are listed before files.
string
required
The brand/project ID
string
Comma-separated list of extensions to filter by (e.g. png,jpg,svg)
cURL
cURL (filter by extension)

List Assets

Return all brand assets tracked in the database. Unlike List Files which reads from CDN storage, this returns structured records including file IDs and paths — useful for linking uploaded files to other API operations.
string
required
The brand/project ID
string
ISO 8601 timestamp — only return assets updated after this date (e.g. 2024-12-01T00:00:00Z). Useful for incremental sync.
cURL
cURL (incremental sync)

Delete File

Delete a file or folder from asset storage. The corresponding database record is also removed.
string
required
The brand/project ID
string
required
Path of the file to delete, relative to the brand’s assets folder (e.g. media/cards.png). No leading slash.
Deletion is permanent. The following paths are protected and cannot be deleted via API:
  • media (the folder itself)
  • products and anything inside it (used in product forms)
  • Empty path (root assets folder)
cURL

Rename File

Rename a file in asset storage. Because Bunny CDN does not support atomic rename, this downloads the original content, uploads it under the new name, and deletes the original. The database record is updated automatically.
string
required
The brand/project ID
string
required
Current path of the file relative to the brand’s assets folder (e.g. media/old-name.png). No leading slash.
string
required
New filename only — not a path (e.g. new-name.png). Must not contain / or \.
cURL
Rename folder (POST …/file-manager/rename-folder) is not yet supported via the API. It returns 501 Not Implemented. Use the File Manager UI to rename folders.

Create Folder

Create a new folder inside the brand’s asset storage.
string
required
The brand/project ID
string
required
Parent directory for the new folder (e.g. media)
string
required
Folder name. Must match ^[a-z0-9_-]+$ — lowercase letters, numbers, hyphens, underscores only.
cURL

Automated Product Provisioning

Complete example: bulk-upload all universal + product-specific assets for a new product, then idempotently re-run without re-uploading existing files.
Python