> ## 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.

# artifact.list

> Lists generated task artifacts from the authenticated user's Manus Library. This is separate from temporary input files managed by file.upload. Results are ordered by creation time descending, including name searches. Source filters and task_id refer to the owned original creation task.

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

Lists the generated artifacts in the authenticated user's Manus Library. This endpoint returns task outputs. It does not return temporary files uploaded through `file.upload`.

<Tip>
  **Auth:** API Key or OAuth token. An OAuth client requires the `create_task` or `manage_all_tasks` scope unless it is a `Trusted team client` or `Trusted public client`. With `create_task` scope, this endpoint only returns artifacts from tasks created by the same OAuth client. `manage_all_tasks` returns all of the user's artifacts.
</Tip>

## Filters

All filters are combined with AND semantics.

| Parameter | Description |
| - | - |
| `name` | Searches the artifact display name. Results remain ordered by creation time, including name searches. |
| `type` | Filters by Library category. Defaults to `all`. |
| `favorite` | When `true`, returns only favorited artifacts. Omit it or pass `false` to include both favorited and non-favorited artifacts. |
| `oauth_client_id` | Returns artifacts from tasks created by the specified Open App. |
| `api_key_id` | Returns artifacts from tasks created by the specified API key. |
| `cursor` | Opaque cursor from the previous response's `next_cursor`. Omit it for the first page. |
| `limit` | Results per page. Defaults to `20`; maximum `100`. |

`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.

For example, 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
}
```

## 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 conversion is separate from artifact classification. To retrieve Slides attachments as PowerPoint, use [task.listMessages](https://open.manus.ai/docs/v2/task.listMessages) with `slides_format=pptx`.

## 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. |


## OpenAPI

````yaml GET /v2/artifact.list
openapi: 3.1.0
info:
  title: Manus OpenAPI v2
  description: >-
    API for integrating Manus into your workflow. All responses are wrapped with
    {"ok": true, "request_id": "...", ...} for success and {"ok": false,
    "request_id": "...", "error": {"code": "...", "message": "..."}} for errors.
  version: 2.0.0
servers:
  - url: https://api.manus.ai
security:
  - ApiKeyAuth: []
paths:
  /v2/artifact.list:
    get:
      summary: ListArtifacts
      description: >-
        Lists generated task artifacts from the authenticated user's Manus
        Library. This is separate from temporary input files managed by
        file.upload. Results are ordered by creation time descending, including
        name searches. Source filters and task_id refer to the owned original
        creation task.
      operationId: openapi.v2.OpenapiV2Service.ListArtifacts
      parameters:
        - name: x-manus-api-key
          in: header
          required: false
          schema:
            type: string
          description: >-
            API key for direct authentication. Provide either this or
            Authorization, not both.
        - name: Authorization
          in: header
          required: false
          schema:
            type: string
            example: Bearer {access_token}
          description: >-
            OAuth2 access token. Requires create_task or manage_all_tasks unless
            the client is trusted. Restricted create_task clients are always
            filtered to their own app, even without explicit source filters;
            older artifacts without indexed source metadata may be omitted.
            Provide either this or x-manus-api-key, not both.
        - name: limit
          in: query
          schema:
            type: integer
            minimum: 1
            maximum: 100
            default: 20
          description: >-
            Maximum artifacts per page. Pages may be short or empty while
            has_more is true.
        - name: cursor
          in: query
          schema:
            type: string
          description: >-
            Opaque next_cursor from the previous page. Keep the user, credential
            scope, filters, and limit unchanged. Continue until has_more is
            false; IDs and Addon resources are deduplicated across this live
            traversal. Cursors expire after 5 minutes idle or 15 minutes total.
            Only the latest 3 produced pages can be replayed; replace that page
            when retrying. Expired or evicted cursors return 400
            invalid_argument. Traversal capacity returns 429 resource_exhausted;
            refine the query and restart.
        - name: name
          in: query
          schema:
            type: string
          description: Search the artifact display name.
        - name: type
          in: query
          schema:
            type: string
            enum:
              - all
              - website
              - mobile_app
              - game
              - documents
              - slides
              - spreadsheets
              - images
              - videos
              - audio
              - others
            default: all
            example: spreadsheets
          description: >-
            Filter by indexed Manus Library artifact category. The ten specific
            categories are mutually exclusive and together cover all for the
            same indexed data and access scope. Website, WebDev, and Slides
            classification takes precedence over extension-based categories.
            Response type uses the same classification.
        - name: favorite
          in: query
          schema:
            type: boolean
          description: >-
            When true, return only favorited artifacts. Omit or pass false for
            no favorite filter.
        - name: oauth_client_id
          in: query
          schema:
            type: string
          description: >-
            Filter by the Open App that created the source task. Mutually
            exclusive with api_key_id. Restricted create_task OAuth clients
            always have this filter applied for their own app and cannot select
            another app. Older artifacts without indexed source metadata may be
            omitted, including when this filter is implicit.
        - name: api_key_id
          in: query
          schema:
            type: string
          description: >-
            Filter by the API key that created the source task. Mutually
            exclusive with oauth_client_id. Unavailable to restricted
            create_task OAuth clients. Older artifacts without indexed source
            metadata may be omitted.
      responses:
        '200':
          description: Artifacts retrieved successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  ok:
                    type: boolean
                    example: true
                    description: Whether the request was successful.
                  request_id:
                    type: string
                    description: Unique identifier for this API request.
                  data:
                    type: array
                    items:
                      $ref: '#/components/schemas/Artifact'
                    description: Array of generated artifacts matching the filters.
                  has_more:
                    type: boolean
                    description: Whether more artifacts are available.
                  next_cursor:
                    type: string
                    description: >-
                      Cursor for the next page. Present only when has_more is
                      true.
        '503':
          description: >-
            A search, metadata, or pagination-state dependency is unavailable.
            Retry the same request and cursor.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        4XX:
          description: Error response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        5XX:
          description: Server error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      security: []
components:
  schemas:
    Artifact:
      type: object
      description: A generated task artifact indexed by Manus Library.
      properties:
        id:
          type: string
          description: Stable Library file ID.
        task_id:
          type: string
          description: Task that produced the artifact.
        task_title:
          type: string
          description: Current title of the task that produced the artifact.
        filename:
          type: string
          description: Physical filename, including its extension when available.
        display_name:
          type: string
          description: User-facing artifact name shown in Manus Library.
        type:
          type: string
          enum:
            - website
            - mobile_app
            - game
            - documents
            - slides
            - spreadsheets
            - images
            - videos
            - audio
            - others
          description: >-
            Indexed Manus Library category used by the request filter. Based on
            the indexed file type and extension, not recomputed from the current
            filename or platform_type. Website, WebDev, and Slides
            classification takes precedence over extension-based categories;
            unrecognized WebDev platform extensions fall into others.
          example: spreadsheets
        file_type:
          type: string
          enum:
            - file
            - image
            - slide
            - website
            - webdev
          description: Underlying Manus SessionFile type.
        content_type:
          type: string
          description: MIME type inferred from the filename when available.
        url:
          type: string
          description: >-
            Download or site URL when the artifact has a public API-consumable
            URL.
        cover_image:
          type: string
          description: Cover or preview image URL when available.
        favorite:
          type: boolean
          description: Whether the user favorited the artifact in Manus Library.
        updated_at:
          type: integer
          format: int64
          description: Unix timestamp in seconds.
        platform_type:
          type: integer
          format: int32
          description: >-
            For WebDev artifacts: 1 is Web, 2 is Mobile, and 3 is Game. Treat
            other values as unknown.
        logo:
          type: string
          description: >-
            WebDev application logo. Present for mobile WebDev artifacts when
            available.
        resource_uri:
          type: string
          description: >-
            Addon Resource identity. Returned instead of treating an internal
            resource URI as a download URL.
        source:
          $ref: '#/components/schemas/ArtifactSource'
          description: >-
            Credential attributable to the producing task. Omitted when no API
            key or OAuth client ID is available; omission does not imply that
            the task was created in the UI.
    ErrorResponse:
      type: object
      description: Standard error response format returned when a request fails.
      properties:
        ok:
          type: boolean
          example: false
          description: Always false for error responses.
        request_id:
          type: string
          description: >-
            Unique identifier for this API request, useful for debugging with
            support.
        error:
          type: object
          description: Error details.
          properties:
            code:
              type: string
              description: >-
                Machine-readable error code (e.g., "invalid_argument",
                "not_found", "permission_denied", "rate_limited").
            message:
              type: string
              description: Human-readable error description explaining what went wrong.
    ArtifactSource:
      type: object
      description: >-
        Credential attributable to the artifact's creation task. Omitted when no
        API key or OAuth client ID is available, including UI-created tasks and
        API-created tasks without recorded credential IDs.
      properties:
        kind:
          type: string
          enum:
            - oauth_client
            - api_key
          description: Credential type that created the source task.
        oauth_client_id:
          type: string
          description: Open App client ID. Present when kind is oauth_client.
        api_key_id:
          type: string
          description: API key ID. Present when kind is api_key.
        name:
          type: string
          description: Current credential display name when available.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-manus-api-key

````

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