List assets
October 12, 2026
Table of contents
List the images, videos and audio files in a Muse account’s workspace as asset ids, newest first. Each one downloads with GET /assets/assetId, works as an input of a job or a chat, and can be removed with DELETE /assets/assetId.
origin tells where a file came from:
uploaded: files you sent with POST /assets.generated: images and videos Muse generated, in a job, a chat or the muse.ai app.made: files the agent made with its own tools, for example an edited video or a song.
Read the next page with the cursor of the response. With type or origin, a page can hold fewer than limit files while more remain: keep reading until cursor is null. New files go to the top of the list, so a file can show up again on the next page when files were added in between.
https://api.useapi.net/v1/muse/assets?email=
type&origin=origin&limit=limit&cursor=cursor
Request Headers
Authorization: Bearer {API token}
API tokenis required, see Setup useapi.net for details.
Query Parameters
emailis optional when the API token has one Muse account, and required when it has more. URL-encode it.typeis optional, only files of this type.
Supported values:image,video,audio.originis optional, only files of this origin.
Supported values:uploaded,generated,made.limitis optional, the most files per page.
Range:1to100. Default:50.cursoris optional, thecursorfrom the previous page, to read the next one.
Responses
-
{ "email": "[email protected]", "assets": [ { "assetId": "user:12345-email:6578616d706c6540676d61696c2e636f6d-image:media-generation-create-one-small-image-of-a-re-0-1b5617eb-685d-445f-a289-fdc9a792f696.webp", "type": "image", "origin": "generated", "mime": "image/webp", "bytes": 186402, "created": "2026-10-12T23:19:48.892Z" }, { "assetId": "user:12345-email:6578616d706c6540676d61696c2e636f6d-image:1e562575130e2f0117ff824ed55876343fcb9f8ed6513f35f121d79958a78afc.png", "type": "image", "origin": "uploaded", "mime": "image/png", "bytes": 372709, "created": "2026-10-12T23:14:27.901Z" }, { "assetId": "user:12345-email:6578616d706c6540676d61696c2e636f6d-video:ws~your_files~golden_hour_film_grade.mp4", "type": "video", "origin": "made", "mime": "video/mp4", "bytes": 52880142, "created": "2026-10-12T06:41:03.154Z" } ], "cursor": "3" } -
400 Bad Request — a parameter is invalid, or the token has more than one Muse account and
emailis missing.{ "error": "Parameter type (pdf) valid values: image,video,audio", "code": 400 }{ "error": "Pass email: this token has 3 Muse accounts", "code": 400 } -
Invalid API token.
{ "error": "useapi.net ⁝ Unauthorized", "code": 401 } -
404 Not Found — the account named by
emailis not added.{ "error": "Account [email protected] is not configured", "code": 404 } -
503 Service Unavailable — Muse could not be reached. Retry shortly.
{ "error": "Could not connect to the Muse workspace of account [email protected] (…), please retry shortly", "code": 503 } -
596 Account Error
The account needs your attention, and it is paused until you add it again. You receive an email when this happens. There are two causes.
Meta asks for a security check on the account. Sign in once at muse.ai in a browser, complete the check, then add the account again with POST /accounts using the same email and password. The API keeps using its session, so no new sign-in is needed.
{ "error": "Account [email protected]: Meta asks for a security check on account [email protected] (\"This account must complete a security checkpoint on the web\"). Sign in once at https://muse.ai in a browser, complete the check, then add the account again with POST /accounts", "code": 596 }Or Muse refused to sign the account in again when its session needed renewing, most often because the password was changed. Add the account again with the current password.
{ "error": "Account [email protected]: Muse refused to sign in account [email protected] (…). Update its password with POST /accounts, or sign in at https://muse.ai to clear the block, then re-add it", "code": 596 }
Model
{ // TypeScript, all fields are optional
email: string
assets: {
assetId: string // download with GET /assets/{assetId}, or pass as an input of a job or chat
type: 'image' | 'video' | 'audio'
origin: 'uploaded' | 'generated' | 'made'
mime: string | null // e.g. image/webp, video/mp4, audio/mpeg
bytes: number | null
created: string | null // ISO 8601
}[]
cursor: string | null // pass it as cursor for the next page, null on the last page
error?: string // errors only
code?: number // errors only
}
Examples
-
curl -H "Authorization: Bearer …" \ "https://api.useapi.net/v1/muse/assets?email=example%40gmail.com&type=video&limit=10" -
const token = "API token"; const email = "Previously added account email"; const all = []; let cursor = null; do { const params = new URLSearchParams({ email, origin: "generated", limit: "100" }); if (cursor) params.set("cursor", cursor); const response = await fetch(`https://api.useapi.net/v1/muse/assets?${params}`, { headers: { "Authorization": `Bearer ${token}` }, }); const page = await response.json(); all.push(...page.assets); cursor = page.cursor; } while (cursor); console.log(all.length, "generated files"); -
import requests token = "API token" email = "Previously added account email" apiUrl = "https://api.useapi.net/v1/muse/assets" headers = { "Authorization" : f"Bearer {token}" } response = requests.get(apiUrl, headers=headers, params={"email": email, "type": "video", "limit": 10}) print(response, response.json())