---
title: "Update Asset"
method: PUT
path: "/api/v1/assets/properties/{property_id}/{asset_id}"
tags: ["Assets"]
---

# Update Asset

`PUT /api/v1/assets/properties/{property_id}/{asset_id}`

## Request

- Base URL: `https://api.getanana.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getanana.com/api/v1/assets/properties/{property_id}/{asset_id}`
- Auth: none declared

Update an asset's editable metadata (alt text, page link). The binary is
immutable — re-upload for a new file.

## Path parameters

- `property_id` string, uuid, required
- `asset_id` string, uuid, required

## Request body

- AssetUpdate: Editable metadata on an existing asset (the binary is immutable). PUT semantics: every field is written, so callers send the full desired state.
  - `alt_text` string, nullable
  - `content_page_id` string, uuid, nullable
  - `in_gallery` boolean, required
  - `tags` string[], required

## Response `200`

Successful Response

- AssetRead
  - `id` string, uuid, required
  - `property_id` string, uuid, required
  - `kind` 'IMAGE' | 'DESIGN_PDF' | 'PANORAMA', required
  - `source` 'UPLOAD' | 'WEBSITE' | 'PMS', required: Where an asset's bytes came from — set once, at creation. "Knowledge Center" is not a source: it stays derived from ``content_page_id`` (where the asset is used, not where it came from).
  - `s3_key` string, required
  - `public_url` string, nullable, required
  - `content_type` string, required
  - `filename` string, required
  - `file_size` integer, nullable, required
  - `alt_text` string, nullable, required
  - `source_url` string, nullable, required
  - `source_removed_at` string, date-time, nullable, required
  - `tags` string[], required
  - `content_page_id` string, uuid, nullable, required
  - `display_order` integer, required
  - `in_gallery` boolean, required
  - `room_type_ids` string[]
  - `panorama_tiles` PanoramaTiles, required: What a viewer needs to show a panorama from its tiles (PSV's ``EquirectangularTilesAdapter``). ``tile_url_template`` holds ``{col}`` and ``{row}``.
    - `width` integer, required
    - `cols` integer, required
    - `rows` integer, required
    - `base_url` string, required
    - `tile_url_template` string, required

## Other responses

- `422`: Validation Error

## Changes

> 55 revisions in range; 1 not diffed.

- **2026-10-09** `34a89100c23a`: 1 warning, 2 info
  - added the new `PANORAMA` enum value to the `kind` response property for the response status `200`
  - added the required property `panorama_tiles` to the response with the `200` status
  - added the required property `source_removed_at` to the response with the `200` status
- **2026-10-08** `7d6e69e42bc4`: 2 info
  - added the optional property `room_type_ids` to the response with the `200` status
  - added the required property `source` to the response with the `200` status
- **2026-09-03** `d65b8fefae34`: 2 info
  - added the optional property `detail/items/ctx` to the response with the `422` status
  - added the optional property `detail/items/input` to the response with the `422` status

[Operation history](https://skmtc.dev/getanana/apis/cleon-api/changes/api/v1/assets/properties/:property_id/:asset_id/put.md)

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getanana/apis/cleon-api/revisions/4d9d38769a75?raw)
