Skip to main content
All asset management endpoints require authentication via JWT Bearer token or API key. See Authentication for details.

Upload an asset

Uploads a new image asset. The request must be multipart/form-data. On success, the server returns 202 Accepted and begins background processing (enrichment, derivative generation) if runEnrichment is enabled.

Request fields

file
required
The image file to upload. Must not be empty. Allowed content types are configured server-side (typically image/png, image/jpeg, image/gif, image/webp, etc.).
string
Optional description for the asset. Maximum 1000 characters.
string
Optional alt text for the asset. Maximum 1000 characters.
boolean
Whether the asset should be publicly accessible. Defaults to true.
string (uuid)
Optional. The ID of the storage provider profile to use. If omitted, the default storage provider is used.
boolean
Whether to run AI enrichment after upload. Defaults to true.
string
Optional commit message for storage providers that support it (e.g. GitHub Repo).

Response — 202 Accepted

object

Errors

Example


List assets

Returns a paginated list of all assets visible to the authenticated user.

Query parameters

integer
Page number. Defaults to 1.
integer
Number of results per page. Defaults to the server-configured default, capped at the configured maximum.
string
Free-text search. Also accepted as keyword. Matches file name, description, and alt text.
string
Filter by MIME type (e.g. image/jpeg).
string
Filter by processing status. One of: pending, processing, ready, failed.
string
Field to sort by. Also accepted as sortBy. Supported values: createdAtUtc (default), size.
string
Sort direction. Also accepted as sortDirection. One of: asc, desc (default).

Response

object

Example


Get an asset

Returns full details for a single asset, including all derivatives and structured AI results.

Path parameters

string (uuid)
required
The unique identifier of the asset.

Response

object
Returns 404 Not Found with error code asset_not_found if the asset does not exist.

Example


Update asset metadata

Updates metadata fields for an existing asset. Only fields you include in the request body are changed (patch semantics).

Path parameters

string (uuid)
required
The unique identifier of the asset to update.

Request body

string
New description. Maximum 1000 characters. Omit to leave unchanged.
string
New alt text. Maximum 1000 characters. Omit to leave unchanged.
string
New original filename. Omit to leave unchanged.
boolean
Change public visibility. Omit to leave unchanged.

Response

Returns the full updated asset object (same shape as Get an asset).

Example


Delete an asset

Permanently deletes an asset. This is a hard delete — the asset record and its file in storage are both removed.

Path parameters

string (uuid)
required
The unique identifier of the asset to delete.

Request body (optional)

string
Optional commit message for storage backends that support versioning (e.g. GitHub Repo).

Response

object
Returns 404 Not Found with error code asset_not_found if the asset does not exist.

Example


Batch delete assets

Deletes multiple assets in one request. Assets that do not exist are silently skipped and reported in notFoundIds.

Request body

array of strings (uuid)
required
An array of asset IDs to delete.

Response

object

Example


Get asset content

Accesses the content of an asset, with access control applied:
  • Public asset: Returns a 307 Temporary Redirect to the public content URL.
  • Private asset: Streams the content directly (requires valid JWT or API key).

Path parameters

string (uuid)
required
The unique identifier of the asset.
Returns 404 Not Found with error code asset_not_found if the asset does not exist.

Example


List available skills

Returns a list of AI skills available to run against assets.

Response

array

Example


Run a skill on an asset

Triggers an AI skill to run against a specific asset. Skills can generate captions, alt text, thumbnails, and other derived outputs.

Path parameters

string (uuid)
required
The unique identifier of the asset.
string
required
The name of the skill to run. Use List available skills to discover valid skill names.

Request body (optional)

object
Optional skill-specific parameters as a JSON object. The accepted parameters depend on the skill being run.

Response

object

Example


Get usage statistics

Returns aggregate usage statistics across all assets.

Response

object

Example