> ## Documentation Index
> Fetch the complete documentation index at: https://open.manus.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Artifacts

> List, filter, and page through generated task outputs in the Manus Library

<sup>Questions or issues? Contact us at [api-support@manus.ai](mailto:api-support@manus.ai).</sup>

[artifact.list](https://open.manus.ai/docs/v2/artifact.list) returns generated task outputs from the authenticated user's Manus Library. It does not return temporary input files uploaded through [file.upload](https://open.manus.ai/docs/v2/file.upload).

## Quick start

List generated spreadsheets:

```bash theme={null}
curl 'https://api.manus.ai/v2/artifact.list?type=spreadsheets&limit=20' \
  -H "x-manus-api-key: $MANUS_API_KEY"
```

An example response containing one matching artifact:

```json theme={null}
{
  "ok": true,
  "request_id": "request_example",
  "data": [
    {
      "id": "artifact_example",
      "task_id": "task_example",
      "filename": "forecast.xlsx",
      "display_name": "Forecast",
      "type": "spreadsheets",
      "file_type": "file",
      "favorite": false
    }
  ],
  "has_more": false
}
```

## Filters

All filters are combined with AND semantics. Parameter formats and defaults are in the [artifact.list](https://open.manus.ai/docs/v2/artifact.list) reference.

`oauth_client_id` and `api_key_id` are mutually exclusive. Passing both returns `400 invalid_argument`. OAuth apps with only `create_task` are already limited to their own app's tasks: filtering by `api_key_id` or by another app's `oauth_client_id` returns `403 permission_denied`.

When neither credential filter is present, API keys, OAuth apps with `manage_all_tasks`, and trusted OAuth clients can list all artifacts owned by the user, including outputs from Manus UI tasks. Restricted OAuth apps with only `create_task` always have an implicit source filter for their own app, even when neither parameter is sent.

Credential-filtered lists may omit older artifacts that lack indexed source metadata. This also applies to the implicit filter for restricted `create_task` OAuth apps; omitting the filter parameters does not make those artifacts accessible to that app. An unfiltered request with an API key, `manage_all_tasks`, or a trusted OAuth client can still return these artifacts. Historical source metadata is not backfilled as part of this release.

## Artifact categories

| `type` | Included formats |
| - | - |
| `all` | All generated artifacts |
| `website` | Manus Website outputs and WebDev websites, including legacy WebDev outputs without an indexed platform |
| `mobile_app` | WebDev mobile applications |
| `game` | WebDev games |
| `documents` | `pdf`, `doc`, `docx`, `text`, `md`, `mdx`, `txt` |
| `slides` | Manus Slides and Slide XML outputs |
| `spreadsheets` | `xlsx`, `xls`, `csv`, `tsv`, `numbers`, `ods` |
| `images` | `jpg`, `jpeg`, `png`, `gif`, `webp`, `svg`, `bmp`, `heic`, `heif` |
| `videos` | `mp4`, `avi`, `mov`, `wmv`, `webm`, `mkv`, `m4v`, `mpg`, `mpeg` |
| `audio` | `mp3`, `wav`, `flac`, `aac`, `ogg`, `wma`, `m4a`, `aiff`, `opus` |
| `others` | Artifacts outside the categories above |

The ten specific categories are mutually exclusive and together cover `all` for the same indexed data and access scope. Each response item's `type` is the category used by the filter; `all` is only a request value. Classification uses the indexed Library file type and extension, rather than the current filename or `platform_type` returned with the artifact.

Website, WebDev, and Slides classification takes precedence over extension-based categories: a Slides record with a `pdf` extension remains `slides`, and a WebDev record with an unrecognized indexed platform extension belongs to `others`. The format list does not guarantee that an agent can generate every listed format.

## URLs and resources

* Downloadable artifacts return `url`.
* Website and WebDev artifacts can return a site URL. An unpublished WebDev artifact can have no URL.
* Mobile WebDev artifacts can return an application `logo` when one is available.
* Addon artifacts return `resource_uri` instead of exposing an internal `manus-resource://` value as a download URL.
* `task_id` and credential filters refer to the artifact's original creation task, not its most recent editing task. Only artifacts with an active creation task owned by the authenticated user are returned; collaboration access alone does not include a task.
* Credential IDs come from the creation-time record. Deleting an API key does not erase that ID; its display name may be absent.
* `source` is omitted when no API key or OAuth client ID can be attributed to the creation task. This includes UI-created tasks and API-created tasks without recorded credential IDs. An omitted `source` does not imply that the task was created in the UI.

Slides and Markdown conversion are separate from artifact classification. To retrieve Slides attachments as PowerPoint, or Markdown attachments as PDF or Word, use [task.listMessages](https://open.manus.ai/docs/v2/task.listMessages) with `slides_format=pptx` or `markdown_format=pdf` / `markdown_format=docx`.

## Pagination and ordering

Results are ordered by creation time descending, with stable identifier tie-breakers. Name searches use the same ordering. Pagination has no 10,000-result offset window.

When `has_more` is true, pass `next_cursor` to the next request with the same authenticated user, credential scope, filters, and `limit`. A cursor from another query is rejected. Treat cursors as opaque; restart without a cursor when changing the query.

A page may contain fewer than `limit` artifacts, or even be empty, while `has_more` is true: deleted, blocked, inaccessible, and duplicate search hits are removed before returning results. Continue until `has_more` is false. A dependency failure returns an error; retry the same request and cursor rather than advancing.

Within one traversal, an artifact is returned at most once by `id` and by nonempty `resource_uri`, even when it has projections in several tasks. Retrying a retained cursor replays that page and rechecks current access; apply the replay as a replacement for that page. If combining separate traversals, deduplicate by `resource_uri` when present, otherwise by `id`.

Cursors expire after 5 minutes without use or 15 minutes from the start of the traversal. Only the latest 3 produced pages remain replayable. Each user can retain up to 32 traversals; opening more evicts the least recently used one. An expired, evicted, or older cursor returns `400 invalid_argument`; restart without a cursor. A traversal is limited to 2,000 pages and bounded server state; exceeding capacity returns `429 resource_exhausted`, not an end-of-list response. Refine the query before restarting.

This is a live list, not a snapshot. New artifacts created after the first page normally appear on a fresh traversal. Changes to an artifact's sort position or visibility during traversal can change which items are returned.

Manus-managed private CDN URLs in `url` and `cover_image` pass through the same re-signing path used by Manus Library whenever this endpoint builds a response. A successful re-sign creates a URL with a 48-hour lifetime. Treat signed URLs as temporary and call `artifact.list` again instead of storing one as a permanent artifact identifier. Re-signing is best-effort: if the signing service is unavailable, the stored URL is returned unchanged and can already be expired. Website URLs do not use this expiry, and Addon artifacts use `resource_uri`.

## Errors

| Status / code | When |
| - | - |
| `400 invalid_argument` | Both credential filters are present, `type` is unsupported, `limit` is outside 1–100, `cursor` is invalid, expired, outside the replay window, or does not match the query. |
| `403 permission_denied` | An OAuth app with only `create_task` filters by `api_key_id` or another app's `oauth_client_id`. |
| `429 resource_exhausted` | The request rate or traversal capacity limit is reached. For traversal capacity, refine the query and restart without a cursor. |
| `503 unavailable` | Search, source metadata, artifact details, or pagination state are temporarily unavailable. Retry the same cursor. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.