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

# Assets

> Understand input normalization, finished assets, download ownership, and cleanup.

# Assets

For finished videos, use [Video downloads](/agent-api/video-jobs#3-download-the-mp4), not the image-job asset endpoint. Video outputs are MP4s retained for 30 days after completion; the authenticated asset endpoint renews a 15-minute signed link while the output is retained.

## What this lets you do

Upload one reference image and download a finished image without exposing storage details.

## What you need

* A server-side DreamLayer key
* A supported PNG, JPEG, or WebP input for image-to-image
* The owner account for every asset request

## Steps

### 1. Create an input asset

`POST /v1/input-assets` creates one normalized owner-scoped PNG and returns:

```json theme={null}
{
  "input_asset_id": "d34db33f-0000-4000-8000-000000000002",
  "content_type": "image/png",
  "width": 1024,
  "height": 1024,
  "expires_at": "2026-08-20T12:00:00Z"
}
```

Source metadata, filenames, and local paths are not part of the managed execution contract. Expired inputs are cleaned automatically.

When an enabled video job is admitted, its normalized opening image is retained
for at least 31 days from that admission, even if the upload initially reported
an earlier expiry. Another admitted video using it extends that period again.
This owner-scoped source lets you make another version with the same settings;
it is separate from the finished video's 30-day retention. Unused uploads keep
their original expiry. No source is made public, and an expired source must be
uploaded again before a new quote can use it.

### 2. Download a finished asset

A completed image job returns one PNG asset. An enabled sprite-sheet job returns one ZIP with the sheet, frames, atlas, preview, and import instructions. Check `content_type` before choosing a filename. Download URLs authorize only the owning account and must not reveal internal storage paths or private routing metadata.

## Confirm it worked

The input response reports normalized PNG metadata. A completed execution returns one owned download URL that serves the finished PNG.

## Common errors

* `413`: reduce the file bytes, dimensions, or pixels.
* `404`: use a current asset owned by the authenticated account.
* Expired inputs must be uploaded again.

## Troubleshooting

Do not cache an input beyond its `expires_at` value. Do not put signed download URLs in public logs or monitoring.

## Next steps

* [Run image-to-image](/agent-api/image-to-image)
* [Review security and privacy](/security-and-privacy)


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