---
title: "Remove assets from a stack"
method: DELETE
path: "/api/stacks/{stack_id}/assets"
tags: ["stacks"]
---

# Remove assets from a stack

`DELETE /api/stacks/{stack_id}/assets`

Pulls one or more frames out of the stack. The assets themselves are untouched — they remain in the library (and in any albums) and simply appear as individual photos again. IDs that are not current members of the stack are silently ignored.

If a removed frame was the pinned cover, the pin is cleared with no automatic re-pick — clients choose their own display cover. A stack that survives the removal is marked user-owned (`origin = user`) so burst re-detection honors the edit; a removal that leaves fewer than 2 members dissolves the stack entirely, returning its remaining frames to loose display too. Trashed frames still count as members for that threshold (unlike `asset_count`, which excludes them), so a stack can survive with `asset_count` below 2.

## Path parameters

- `stack_id` string, required — Stack ID (with `asset_stack_` prefix) of the stack to pull frames out of.

## Request body

- StackAssetRemoval
  - `asset_ids` string[], required — Asset IDs (with `asset_` prefix) to pull out of the stack. Get member IDs from `list_assets` with `stack_id`. Up to 200 ids per request.

## Response `200`

Successful Response

- DeletionResponse — Empty acknowledgment returned when an operation succeeds.

## Other responses

- `401` — Missing, invalid, or expired credentials.
- `403` — The credentials are valid but not authorized for this operation — for example an API key whose action or library scope excludes it, or a credential type this operation does not accept.
- `404` — Not found
- `422` — Validation Error
- `429` — Rate limit exceeded. Retry after the interval in the `Retry-After` header.

## Changes

> 79 revisions in range; 5 could not be searched.

- **2026-08-08** `815e0302a988` — 1 breaking, 1 info
  - response property `detail` list-of-types was widened by adding types `string` to media type `application/json` of response `422`
  - the response property `detail` became required for the status `422`
- **2026-08-05** `c3e15c78f2da` — 4 info
  - added the media type `application/json` for the response with the status `404`
  - added the non-success response with the status `401`
  - added the non-success response with the status `403`
  - added the non-success response with the status `429`
- **2026-07-23** `8989257577c6` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/gumnut-ai/apis/gumnut-api/changes/api/stacks/:stack_id/assets/delete.md)

---

[API](https://skmtc.dev/gumnut-ai/apis/gumnut-api.md) · [All operations](https://skmtc.dev/gumnut-ai/apis/gumnut-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/gumnut-ai/gumnut-api/revisions/2c3aca3a6e6d/schema)
