Appearance
Audio assets
| Method | Path | Body | Response |
|---|---|---|---|
POST | /v1/tenants/{t}/audio-assets | upload or register — see below | 201 { audioAsset } |
GET | /v1/tenants/{t}/audio-assets | — | { audioAssets } (includes platform-wide defaults) |
DELETE | /v1/tenants/{t}/audio-assets/{id} | — | 204 — see Deleting; platform defaults are 404 |
GET | /v1/tenants/{t}/audio-assets/{id}/url | — | { url, expiresInSeconds } — a short-lived link to listen to it (503 storage_unavailable without object storage) |
- Upload:
{ name, content_base64, mime_type }— stored in object storage (400if none is configured). - Register an existing object:
{ name, storage_key, storage_provider?: S3|LOCAL, mime_type? }(storage_key≤512 chars;storage_providerdefaults toS3). - Both take optional
ref(your reference, 1–191 characters, unique per tenant —400if another asset has it) andduration_seconds(0–86400).content_base64must be base64 text (nodata:prefix).
audioAsset: { id, ref, name, storageProvider, storageKey, mimeType, durationSeconds, platformDefault }; storageProvider is lowercase (s3, local). WAV, MP3 and Ogg Opus work: the media server plays the file as it is, and its extension (.wav, .mp3, .ogg/.opus) says which. An upload (content_base64) needs mime_type audio/wav (or audio/x-wav, audio/wave, audio/vnd.wave), audio/mpeg (or audio/mp3), audio/ogg or audio/opus (a 400 on mime_type otherwise); its key gets the matching extension. The whole JSON body is limited to 15 MB, so base64 content can carry about 11 MB of audio.