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

# Update a property

> Update an existing, manually managed property record.

## Overview

Partially updates a property record by its Ask Wire `id`. Only the fields included in the request body are changed; omitted fields are left as-is.

Send the request as `application/json`. To attach or replace supporting documents, use the asset files endpoints instead of this one.

> [!WARNING]
>
> `notes` must be valid HTML (e.g. `<p>your text</p>`), not plain text.
> Sending plain text in `notes` currently fails with
> `500 {"error": "Asset update failed"}` on this endpoint — [Create a
> property](https://docs.ask-wire.com/docs/api-reference/endpoint/create.md) rejects the same input more
> correctly, with `400 {"notes": ["Content must be valid HTML."]}`.
> Wrapping the value in an HTML tag updates successfully here. Every other
> field verified below updates successfully regardless of format.

> [!NOTE]
>
> Sending an explicit `null` for a field does not clear it — the field keeps
> its previous value. There is currently no verified way to clear a field via
> this endpoint.

***

## Path parameters

| Parameter | Type | Description |
| - | - | - |
| `id` | integer | Ask Wire ID of the property to update. |

***

## Request

### Body (application/json)

Accepts the same fields as [Create a property](https://docs.ask-wire.com/docs/api-reference/endpoint/create.md) (except `purpose`, see below), all optional — include only the fields you want to change.

#### Core fields

| Field | Type | Description |
| - | - | - |
| `portfolio` | string | Portfolio the property belongs to. |
| `ref_asset_id` | string | Your own external reference ID for this property. |
| `reference_id` | string | Source system reference ID. |
| `notes` | string | Free-text internal notes. |

> [!NOTE]
>
> `purpose` is not accepted on this endpoint — it's set on create and
> isn't changed via update. It's still returned in the response below.

***

#### Location

> [!NOTE]
>
> `address`, `latitude`, `longitude`, `property_type`, `price`, and
> `floor_number` were verified against a live PATCH response. Per the
> backend's own schema, `municipality` is **not** a writable field —
> `region`, `regional_unit`, and `neighborhood` (plain integer IDs) are what
> the endpoint actually accepts for geography.

| Field | Type | Description |
| - | - | - |
| `address` | string | Full address string. |
| `latitude` | number | Latitude coordinate. |
| `longitude` | number | Longitude coordinate. |
| `district` | string | Free-text district name. |
| `zone_name` | string | Free-text zone name. |
| `region` | integer | Region ID (level 3). |
| `regional_unit` | integer | Regional unit ID (level 4). |
| `neighborhood` | integer | Neighborhood ID. |

***

#### Classification

| Field | Type | Values | Description |
| - | - | - | - |
| `country` | string | `greece`, `cyprus` | Country the property is located in. |
| `listing_type` | string | `rent`, `sale`, `sold` | Listing type, if this asset is also a listing. |
| `listing_status` | string | `active`, `inactive` | Listing status. |

***

#### Property details

> [!NOTE]
>
> `property_type` is the only field below with a server-enforced enum,
> verified against the backend's own schema. `property_usage`,
> `heating_type`, `energy_class`, `condition`, and `view` are free-text
> strings (up to 255 characters) as far as the API is concerned — the values
> listed for them are conventions used by the Ask Wire web app, not
> constraints the API enforces.

| Field | Type | Values | Description |
| - | - | - | - |
| `property_type` | string | `Apartment`, `House`, `Field`, `Plot`, `Warehouse`, `Shop`, `Office`, `Storage`, `Retail`, `Right to Build`, `Parking space`, `Other` | Property category. |
| `property_usage` | string | e.g. `residential`, `commercial`, `mixed` | Intended use of the property. Free text. |
| `land_use` | string | e.g. `residential`, `commercial`, `mixed` | Zoning / permitted use of the land. Free text. |
| `price` | number | | Asking or listed price. |
| `build_area` | number | | Built area in sqm. |
| `land_area` | number | | Land area in sqm. |
| `basement_area` | number | | Basement area in sqm. |
| `covered_veranda_area` | number | | Covered veranda area in sqm. |
| `uncovered_veranda_area` | number | | Uncovered veranda area in sqm. |
| `construction_year` | integer | | Year the building was constructed. |
| `renovated` | boolean | `true`, `false` | Whether the property has been renovated. |
| `renovation_year` | integer | | Year of the most recent renovation. |
| `building_floor_count` | integer | | Total number of floors in the building. |
| `floor_number` | integer | | Floor the property is on. |
| `number_of_bedrooms` | integer | | Number of bedrooms. |
| `number_of_bathrooms` | integer | | Number of bathrooms. |
| `parking_space` | integer | | Number of parking spaces. |
| `storage_space` | integer | | Number of storage spaces. |
| `heating_type` | string | e.g. `autonomous (Oil)`, `autonomous (Gas)`, `central (Oil)`, `central (Gas)`, `heatpump`, `Fireplace/Stove` | Type of heating system. Free text. |
| `energy_class` | string | e.g. `A+`, `A`, `B+`, `B`, `C`, `D`, `E`, `F`, `G` | Energy performance rating. Free text. |
| `condition` | string | e.g. `poor`, `fair`, `good` | Overall condition of the property. Free text. |
| `view` | string | e.g. `poor`, `fair`, `good` | Quality of the view from the property. Free text. |
| `garden` | boolean | `true`, `false` | Has a garden. |
| `swimming_pool` | boolean | `true`, `false` | Has a swimming pool. |
| `road_access` | boolean | `true`, `false` | Has direct road access. |
| `percent_of_ownership` | number | | Percentage of ownership held for this property. |
| `building_coefficient` | number | | Building coefficient for the plot. |
| `coverage_ratio` | number | | Coverage ratio for the plot. |

***

#### Cadastral details

> [!NOTE]
>
> `sheet_number`, `plan_number`, `parcel_block_number`, `parcel_number`,
> and `block_number` are **not** fields on this endpoint — per the backend
> schema, only the fields below are accepted here. Those other identifiers
> belong to a separate Cyprus cadastral-search lookup flow in the app, not
> to asset updates.

| Field | Type | Description |
| - | - | - |
| `parcel_id` | string | Parcel identifier (max 30 characters). |
| `registration_number` | string | Cadastral registration number. |
| `registration_block` | string | Cadastral registration block. |
| `registration_codes` | array | Array of `{ code, country }` objects. `code` is required per entry. |

***

## Example request

```bash theme={null}
curl -X PATCH "https://pandora.ask-wire.com/api/assets/4521/" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "price": 179000,
    "condition": "good",
    "renovated": true,
    "renovation_year": 2024
  }'
```

***

## Response

Returns the full, updated asset record. Verified against a live response — field set and shapes below are accurate as observed, not assumed.

```json theme={null}
{
  "id": 2023964,
  "ref_asset_id": "test apart gr",
  "municipality": { "id": 208, "name_en": "Thessaloniki" },
  "municipal_unit": { "id": 1293, "name_en": "Thessaloniki" },
  "marketability_report_id": 9074,
  "marketability_report_status": "draft",
  "marketability_report_task_id": 9012,
  "marketability_report_task_status": "in_progress",
  "adjusted_price_sqm": 3606.67027,
  "marketability_report_task_approved_at": null,
  "files": [],
  "sub_assets": [],
  "registration_codes": [],
  "deleted": false,
  "notes": null,
  "created_at": "2026-09-11T12:25:33.079474Z",
  "modified_at": "2026-09-15T16:41:13.613932Z",
  "listing_type": "sale",
  "title": null,
  "url": null,
  "images": null,
  "source": null,
  "eauction_code": null,
  "reference_id": "test apart gr",
  "price": "150000.0000",
  "sales_price": null,
  "auction_status": null,
  "auction_kind": null,
  "auction_notice_date": null,
  "auction_conduct_date": null,
  "address": "Melenikou Konstantinou Street 29, 546 35 Thessaloniki, Greece",
  "country": "greece",
  "client_id": "cln-ixSNPPuSA",
  "district": null,
  "zone_name": null,
  "latitude": 40.6339461,
  "longitude": 22.9543579,
  "property_type": "Apartment",
  "property_usage": null,
  "portfolio": null,
  "build_area": 38.0,
  "basement_area": null,
  "land_area": null,
  "covered_veranda_area": null,
  "uncovered_veranda_area": null,
  "construction_year": 1964,
  "renovated": true,
  "renovation_year": 2024,
  "price_per_sqm": null,
  "building_floor_count": null,
  "floor_number": 1,
  "parking_space": null,
  "has_parking_space": null,
  "storage_space": null,
  "garden": null,
  "heating_type": null,
  "cooling_type": null,
  "number_of_bedrooms": null,
  "number_of_bathrooms": null,
  "swimming_pool": null,
  "condition": null,
  "energy_class": null,
  "view": null,
  "right_of_ownership": null,
  "description": null,
  "seller": null,
  "listing_status": null,
  "marketability_report_reference": null,
  "owner": null,
  "auction": false,
  "road_access": false,
  "client_name": "Georgios Xydias",
  "share_on_sale": null,
  "overview": null,
  "coverage_ratio": null,
  "building_coefficient": null,
  "map_url": null,
  "registration_number": null,
  "registration_block": null,
  "parcel_id": null,
  "purpose": "property_management",
  "region": 2,
  "regional_unit": 32,
  "neighborhood": 1589
}
```

### Response fields

| Field | Type | Description |
| - | - | - |
| `id` | integer | Ask Wire asset ID. |
| `ref_asset_id` / `reference_id` | string | Your external reference ID(s) for this asset. |
| `municipality`, `municipal_unit` | object \| null | `{ id, name_en }`. Read-only — derived from `address` (or from `region`/`regional_unit`/`neighborhood` if set); not a field you can send directly. |
| `region`, `regional_unit`, `neighborhood` | integer \| null | Geographic hierarchy IDs. Writable — see Location fields above. |
| `sub_assets` | array | Related sub-assets, managed via a separate endpoint, not this one. |
| `marketability_report_id`, `marketability_report_status`, `marketability_report_task_id`, `marketability_report_task_status`, `marketability_report_task_approved_at`, `marketability_report_reference` | various | Linked valuation/marketability report state. Read-only. |
| `adjusted_price_sqm` | number \| null | Computed price per sqm used in valuation. |
| `files` | array | Attached documents. Managed via the asset files endpoints, not this one. |
| `registration_codes` | array | Array of `{ code, country }` objects. |
| `deleted` | boolean | Soft-delete flag. |
| `notes` | string \| null | Internal notes. See warning above — cannot currently be set via PATCH. |
| `created_at`, `modified_at` | datetime | Record timestamps. |
| `listing_type` | string \| null | e.g. `sale`. |
| `title`, `url`, `images`, `source`, `eauction_code` | string \| null | Metadata, mostly populated for auction/source-linked assets. |
| `price`, `sales_price`, `price_per_sqm` | string \| null | Monetary fields. **`price` is returned as a decimal string**, not a number. |
| `auction`, `auction_status`, `auction_kind`, `auction_notice_date`, `auction_conduct_date` | various | Auction metadata, when applicable. |
| `address`, `country`, `district`, `zone_name` | string \| null | Location fields. `district` is a plain string here, not an object. |
| `client_id`, `client_name`, `owner`, `seller` | string \| null | Ownership / client attribution. |
| `latitude`, `longitude` | number \| null | Coordinates. |
| `property_type`, `property_usage`, `portfolio`, `purpose` | string \| null | Classification fields. |
| `build_area`, `land_area`, `basement_area`, `covered_veranda_area`, `uncovered_veranda_area` | number \| null | Areas in sqm. |
| `construction_year`, `renovated`, `renovation_year` | various | Construction details. |
| `building_floor_count`, `floor_number` | integer \| null | Floor details. |
| `parking_space`, `has_parking_space`, `storage_space` | various | Parking / storage. |
| `garden`, `swimming_pool`, `road_access` | boolean \| null | Amenity flags. |
| `heating_type`, `cooling_type`, `energy_class`, `condition`, `view`, `right_of_ownership` | string \| null | Building/condition attributes. |
| `description`, `overview`, `map_url` | string \| null | Free-text and link fields. |
| `coverage_ratio`, `building_coefficient` | number \| null | Plot ratios. |
| `registration_number`, `registration_block`, `parcel_id` | string \| null | Cadastral identifiers. |
| `listing_status`, `share_on_sale` | string \| null | Listing state. |


## OpenAPI

````yaml PATCH /api/assets/{id}/
openapi: 3.1.0
info:
  title: Properties API
  version: 1.0.0
  description: Public properties and foreclosure listings API
servers:
  - url: https://pandora.ask-wire.com
    description: Main API (Properties)
  - url: https://zeus.ask-wire.com
    description: Auth API
security:
  - bearerAuth: []
paths:
  /api/assets/{id}/:
    patch:
      summary: Update a property
      operationId: updateAsset
      parameters:
        - name: id
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AssetInput'
      responses:
        '200':
          description: The updated property
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Asset'
        '404':
          description: Not found
components:
  schemas:
    AssetInput:
      type: object
      required:
        - property_type
      properties:
        portfolio:
          type: string
          nullable: true
        ref_asset_id:
          type: string
          nullable: true
        reference_id:
          type: string
          nullable: true
        notes:
          type: string
          nullable: true
          description: Must be valid HTML, e.g. <p>text</p>.
        address:
          type: string
          nullable: true
        latitude:
          type: number
          nullable: true
        longitude:
          type: number
          nullable: true
        district:
          type: string
          nullable: true
          description: Free-text district name.
        zone_name:
          type: string
          nullable: true
        country:
          type: string
          enum:
            - greece
            - cyprus
        region:
          type: integer
          nullable: true
        regional_unit:
          type: integer
          nullable: true
        neighborhood:
          type: integer
          nullable: true
        listing_type:
          type: string
          nullable: true
          enum:
            - rent
            - sale
            - sold
            - ''
        listing_status:
          type: string
          nullable: true
          enum:
            - active
            - inactive
            - ''
        property_type:
          type: string
          enum:
            - Apartment
            - House
            - Field
            - Plot
            - Warehouse
            - Shop
            - Office
            - Storage
            - Retail
            - Right to Build
            - Parking space
            - Other
        property_usage:
          type: string
          nullable: true
          description: Free text, not a server-enforced enum.
        price:
          type: string
          format: decimal
          nullable: true
        sales_price:
          type: string
          format: decimal
          nullable: true
        build_area:
          type: number
          nullable: true
        land_area:
          type: number
          nullable: true
        basement_area:
          type: number
          nullable: true
        covered_veranda_area:
          type: number
          nullable: true
        uncovered_veranda_area:
          type: number
          nullable: true
        construction_year:
          type: integer
          nullable: true
        renovated:
          type: boolean
          nullable: true
        renovation_year:
          type: integer
          nullable: true
        building_floor_count:
          type: integer
          nullable: true
        floor_number:
          type: integer
          nullable: true
        number_of_bedrooms:
          type: integer
          nullable: true
        number_of_bathrooms:
          type: integer
          nullable: true
        parking_space:
          type: integer
          nullable: true
        has_parking_space:
          type: boolean
          nullable: true
        storage_space:
          type: integer
          nullable: true
        heating_type:
          type: string
          nullable: true
          description: Free text, not a server-enforced enum.
        cooling_type:
          type: string
          nullable: true
        energy_class:
          type: string
          nullable: true
          description: Free text, not a server-enforced enum.
        condition:
          type: string
          nullable: true
          description: Free text, not a server-enforced enum.
        view:
          type: string
          nullable: true
          description: Free text, not a server-enforced enum.
        right_of_ownership:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        seller:
          type: string
          nullable: true
        owner:
          type: string
          nullable: true
        auction:
          type: boolean
        road_access:
          type: boolean
        garden:
          type: boolean
          nullable: true
        swimming_pool:
          type: boolean
          nullable: true
        building_coefficient:
          type: number
          nullable: true
        coverage_ratio:
          type: number
          nullable: true
        parcel_id:
          type: string
          nullable: true
          maxLength: 30
        registration_number:
          type: string
          nullable: true
        registration_block:
          type: string
          nullable: true
        registration_codes:
          type: array
          nullable: true
          items:
            type: object
            required:
              - code
            properties:
              code:
                type: string
                nullable: true
              country:
                type: string
                nullable: true
    Asset:
      type: object
      description: >-
        A manually managed property record, as returned by create, retrieve, and
        update. Verified against live responses.
      properties:
        id:
          type: integer
        ref_asset_id:
          type: string
          nullable: true
        reference_id:
          type: string
          nullable: true
        municipality:
          type: object
          nullable: true
          properties:
            id:
              type: integer
            name_en:
              type: string
        municipal_unit:
          type: object
          nullable: true
          properties:
            id:
              type: integer
            name_en:
              type: string
        region:
          type: integer
          nullable: true
        regional_unit:
          type: integer
          nullable: true
        neighborhood:
          type: integer
          nullable: true
        marketability_report_id:
          type: integer
          nullable: true
        marketability_report_status:
          type: string
          nullable: true
        marketability_report_task_id:
          type: integer
          nullable: true
        marketability_report_task_status:
          type: string
          nullable: true
        marketability_report_task_approved_at:
          type: string
          format: date-time
          nullable: true
        marketability_report_reference:
          type: string
          nullable: true
        adjusted_price_sqm:
          type: number
          nullable: true
        files:
          type: array
          items: {}
        sub_assets:
          type: array
          items: {}
        registration_codes:
          type: array
          items:
            type: object
            properties:
              code:
                type: string
                nullable: true
              country:
                type: string
                nullable: true
        deleted:
          type: boolean
        notes:
          type: string
          nullable: true
          description: HTML content.
        created_at:
          type: string
          format: date-time
        modified_at:
          type: string
          format: date-time
        listing_type:
          type: string
          nullable: true
          enum:
            - rent
            - sale
            - sold
            - ''
        title:
          type: string
          nullable: true
        url:
          type: string
          nullable: true
        images:
          type: string
          nullable: true
        source:
          type: string
          nullable: true
        eauction_code:
          type: string
          nullable: true
        price:
          type: string
          nullable: true
          description: Decimal string, e.g. "150000.0000".
        sales_price:
          type: string
          nullable: true
        price_per_sqm:
          type: string
          nullable: true
        auction:
          type: boolean
        auction_status:
          type: string
          nullable: true
        auction_kind:
          type: string
          nullable: true
        auction_notice_date:
          type: string
          format: date-time
          nullable: true
        auction_conduct_date:
          type: string
          format: date-time
          nullable: true
        address:
          type: string
          nullable: true
        country:
          type: string
          enum:
            - greece
            - cyprus
        district:
          type: string
          nullable: true
        zone_name:
          type: string
          nullable: true
        client_id:
          type: string
          nullable: true
        client_name:
          type: string
          nullable: true
        owner:
          type: string
          nullable: true
        seller:
          type: string
          nullable: true
        latitude:
          type: number
          nullable: true
        longitude:
          type: number
          nullable: true
        property_type:
          type: string
          nullable: true
          enum:
            - Apartment
            - House
            - Field
            - Plot
            - Warehouse
            - Shop
            - Office
            - Storage
            - Retail
            - Right to Build
            - Parking space
            - Other
        property_usage:
          type: string
          nullable: true
          enum:
            - residential
            - commercial
            - mixed
        portfolio:
          type: string
          nullable: true
        purpose:
          type: string
          nullable: true
        build_area:
          type: number
          nullable: true
        land_area:
          type: number
          nullable: true
        basement_area:
          type: number
          nullable: true
        covered_veranda_area:
          type: number
          nullable: true
        uncovered_veranda_area:
          type: number
          nullable: true
        construction_year:
          type: integer
          nullable: true
        renovated:
          type: boolean
          nullable: true
        renovation_year:
          type: integer
          nullable: true
        building_floor_count:
          type: integer
          nullable: true
        floor_number:
          type: integer
          nullable: true
        parking_space:
          type: integer
          nullable: true
        has_parking_space:
          type: boolean
          nullable: true
        storage_space:
          type: integer
          nullable: true
        garden:
          type: boolean
          nullable: true
        swimming_pool:
          type: boolean
          nullable: true
        road_access:
          type: boolean
          nullable: true
        heating_type:
          type: string
          nullable: true
        cooling_type:
          type: string
          nullable: true
        energy_class:
          type: string
          nullable: true
        condition:
          type: string
          nullable: true
        view:
          type: string
          nullable: true
        right_of_ownership:
          type: string
          nullable: true
        description:
          type: string
          nullable: true
        overview:
          type: string
          nullable: true
        map_url:
          type: string
          nullable: true
        coverage_ratio:
          type: number
          nullable: true
        building_coefficient:
          type: number
          nullable: true
        registration_number:
          type: string
          nullable: true
        registration_block:
          type: string
          nullable: true
        parcel_id:
          type: string
          nullable: true
        listing_status:
          type: string
          nullable: true
          enum:
            - active
            - inactive
            - ''
        share_on_sale:
          type: string
          nullable: true
        number_of_bedrooms:
          type: integer
          nullable: true
        number_of_bathrooms:
          type: integer
          nullable: true
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT

````

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