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

# Create a property

> Manually create a new property record.

## Overview

Creates a new property record from manually entered data, for example when adding a property that doesn't come from an automated source feed. Supporting documents can be attached in the same request.

Send the request as `multipart/form-data` so that files can be included alongside the property fields.

<Note>
  Location fields are auto-derived server-side from `address` — a verified
  live create with only `address` and `property_type` came back with
  `municipality`, `municipal_unit`, `region`, `regional_unit`, `neighborhood`,
  `latitude`, and `longitude` all populated automatically via geocoding.
  There's no need to resolve these yourself before creating a record.
</Note>

<Warning>
  `notes` must be valid HTML, not plain text — sending plain text returns
  `400 {"notes": ["Content must be valid HTML."]}`. Wrap content in a tag,
  e.g. `<p>your text</p>`. On
  [Update a property](/docs/api-reference/endpoint/update), the same invalid input
  returns a `500` instead of this `400`, so validate HTML client-side before
  sending to either endpoint.
</Warning>

***

## Request

### Body (multipart/form-data)

#### 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>
  Always send `purpose` as the fixed value `"property_management"` on
  create. It isn't a field you vary per request.
</Note>

***

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

***

#### Location

<Note>
  Per the backend's own schema, `municipality` is **not** a field you can
  set directly — send `address` and the server geocodes `municipality`,
  `region`, `regional_unit`, and `neighborhood` automatically (verified
  against a live response). Use `region` / `regional_unit` / `neighborhood`
  below only if you need to override the geocoded result.
</Note>

| Field           | Type    | Description                                                      |
| --------------- | ------- | ---------------------------------------------------------------- |
| `address`       | string  | Full address string. Drives automatic geocoding.                 |
| `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). Overrides the geocoded value if set.        |
| `regional_unit` | integer | Regional unit ID (level 4). Overrides the geocoded value if set. |
| `neighborhood`  | integer | Neighborhood ID. Overrides the geocoded value if set.            |

***

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

| Field                    | Type    | Values                                                                                                                                | Description                                       |
| ------------------------ | ------- | ------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| `property_type`          | string  | `Apartment`, `House`, `Field`, `Plot`, `Warehouse`, `Shop`, `Office`, `Storage`, `Retail`, `Right to Build`, `Parking space`, `Other` | Property category. Required.                      |
| `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 creation.
</Note>

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

***

#### Files

| Field   | Type    | Description                                                            |
| ------- | ------- | ---------------------------------------------------------------------- |
| `files` | file\[] | One or more supporting documents to attach. Repeat the field per file. |

***

## Example request

```bash theme={null}
curl -X POST "https://pandora.ask-wire.com/api/assets/" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  --form 'address="12 Ledra Street, Nicosia"' \
  --form 'property_type="Apartment"' \
  --form 'property_usage="residential"' \
  --form 'purpose="property_management"' \
  --form 'price="185000"' \
  --form 'build_area="95"' \
  --form 'number_of_bedrooms="2"' \
  --form 'files=@/path/to/title-deed.pdf'
```

***

## Response

Returns `201 Created` with the full created asset record — same shape as [Update a property](/docs/api-reference/endpoint/update#response). Verified against a live response for a minimal create (`address` + `property_type` only):

```json theme={null}
{
  "id": 2024230,
  "ref_asset_id": null,
  "municipality": { "id": 112, "name_en": "Athens" },
  "municipal_unit": { "id": 1016, "name_en": "Athens" },
  "marketability_report_id": null,
  "marketability_report_status": null,
  "marketability_report_task_id": null,
  "marketability_report_task_status": null,
  "adjusted_price_sqm": null,
  "marketability_report_task_approved_at": null,
  "files": [],
  "sub_assets": [],
  "registration_codes": [],
  "deleted": false,
  "notes": null,
  "created_at": "2026-09-15T16:48:46.873560Z",
  "modified_at": "2026-09-15T16:48:46.873583Z",
  "listing_type": null,
  "title": null,
  "url": null,
  "images": null,
  "source": null,
  "eauction_code": null,
  "reference_id": null,
  "price": null,
  "sales_price": null,
  "auction_status": null,
  "auction_kind": null,
  "auction_notice_date": null,
  "auction_conduct_date": null,
  "address": "Docs Test Street 1, Athens, Greece",
  "country": "greece",
  "client_id": "cln-ixSNPPuSA",
  "district": null,
  "zone_name": null,
  "latitude": 37.9838096,
  "longitude": 23.7275388,
  "property_type": "Apartment",
  "property_usage": null,
  "portfolio": null,
  "build_area": null,
  "basement_area": null,
  "land_area": null,
  "covered_veranda_area": null,
  "uncovered_veranda_area": null,
  "construction_year": null,
  "renovated": null,
  "renovation_year": null,
  "price_per_sqm": null,
  "building_floor_count": null,
  "floor_number": null,
  "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": null,
  "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": 13,
  "regional_unit": 87,
  "neighborhood": 1539
}
```

See [Update a property](/docs/api-reference/endpoint/update#response) for the full response field reference — the shape is identical.


## OpenAPI

````yaml POST /api/assets/
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/:
    post:
      summary: Create a property
      operationId: createAsset
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              allOf:
                - $ref: '#/components/schemas/AssetInput'
                - type: object
                  properties:
                    purpose:
                      type: string
                      enum:
                        - property_management
                      default: property_management
                      description: >-
                        Fixed value. Always send "property_management" on
                        create.
                    files:
                      type: array
                      items:
                        type: string
                        format: binary
      responses:
        '201':
          description: The created property
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Asset'
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

````