Upload via the admin console
Select your file
Choose the image file you want to upload. You can also fill in optional fields:
- Description — a human-readable note about the asset (max 1000 characters)
- Alt text — accessibility text for the image (max 1000 characters)
- Public — controls whether the asset is publicly accessible (default: on)
- Storage provider — select a specific storage profile, or leave blank to use the default
Upload via the API
Send amultipart/form-data POST request to /api/v1/assets.
Request fields
| Field | Required | Default | Description |
|---|---|---|---|
file | Yes | — | The image file to upload |
description | No | — | Human-readable description (max 1000 chars) |
altText | No | — | Accessibility alt text (max 1000 chars) |
isPublic | No | true | Whether the asset is publicly accessible |
storageProviderProfileId | No | default provider | UUID of a specific storage provider profile |
runEnrichment | No | true | Whether to run AI enrichment after upload |
Example
Response
A successful upload returns202 Accepted with the asset record:
File validation rules
NekoHub enforces the following rules on every upload:- File is required — the
filefield must be present and non-empty. - Maximum file size — set by
FRONTEND_VITE_MAX_UPLOAD_SIZE_BYTES(default:10485760bytes / 10 MB). Uploads exceeding this limit are rejected with error codeasset_file_too_large. - Content type must be declared — the request must include a recognized MIME type. Unsupported types are rejected with
asset_content_type_not_allowed. - Description and alt text — each field is limited to 1000 characters.
Public vs. private assets
Assets can be public or private, controlled by theisPublic field.
- Public assets (
isPublic: true) are accessible at theirpublicUrlwithout authentication and appear in the public gallery at/gallery. - Private assets (
isPublic: false) can only be accessed by authenticated users through the protected endpointGET /api/v1/assets/{id}/content.