Upload a reusable media asset (image / video / audio) from a public URL or inline base64, and get an asset_id to reference across generation requests. Re-uploading identical content returns the existing asset. Limits: image ≤30MB, audio ≤15MB, video ≤100MB.
Headers
X-API-KeystringrequiredYour VisionStory API key (sk-vs-...), kept server-side. Create or manage keys in API keys (Pro plan and up).
Request body
application/jsonrequiredinline_dataInlineDataModel | nullnullableMedia as inline base64 data. Provide either this or url.
datastringrequiredThe file's raw bytes encoded as a base64 string (no data: URI prefix).
mime_typestringrequiredMIME type of the inline data, used to detect image vs audio. Audio: ['audio/avi', 'audio/mpeg', 'audio/mp3', 'audio/mp4', 'audio/m4a', 'audio/wav']; images: ['image/jpeg', 'image/jpg', 'image/png', 'image/webp', 'image/heic'].
urlstring | nullnullablePublicly reachable media URL (image/video/audio). Provide either this or inline_data.
Responses
200Successful Response
application/json
dataCreateAssetResponse | nullrequirednullableThe endpoint payload. Its shape is specific to each endpoint (see that endpoint's response schema); null for operations that return no body, such as delete.
asset_idstringrequiredUnique identifier of the asset; reference it as asset_id in generation requests.
created_atintegerUnix timestamp (seconds) when the asset was uploaded.
duration_secnumberDuration in seconds for video/audio assets; 0 for images.
heightintegerPixel height for image/video assets; 0 when not applicable.
kindstringrequiredDetected media kind: one of image / video / audio.
mimestringDetected MIME type of the asset, e.g. image/png.
widthintegerPixel width for image/video assets; 0 when not applicable.
messagestringHuman-readable status message; "success" on a successful call.
server_timestring · date-timerequiredServer-side timestamp when the response was produced, in ISO 8601 format (UTC).
defaultError response. All failures share one envelope: an error object with a numeric code, a human-readable message, an optional details string, and an optional hint giving an actionable next step (useful for AI agents).
application/json
errorErrorDetailrequiredcodeintegerrequiredMachine-readable error code. Mirrors the HTTP status for transport-level failures (e.g. 401, 404, 422, 500) and may carry a business-specific code otherwise.
detailsstring | nullnullableOptional structured detail about the failure, e.g. a JSON string of per-field validation errors on a 422. Absent when there is nothing extra to report.
hintstring | nullnullableActionable next step for resolving the error, written for both humans and AI agents (e.g. how to fix the request, or where to obtain an API key). May be absent.
messagestringrequiredHuman-readable explanation of what went wrong. Safe to log or surface to end users; not localized.