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

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

### 2. Download a finished asset

A completed job returns at most one PNG asset in V1. 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)
