# Edit a property

Updates an existing property. Send only the fields that change.

Source: https://dev.alterestate.com/properties/edit
Last updated: 2026-10-13

Change one field or many on a listing that already exists. Fields you omit stay as they are. The public list endpoint is read-only and cannot update a property.

> Identify the property by uid, the value returned by List properties. The numeric cid is a public code and is not accepted in this URL.

```http
PATCH https://secure.alterestate.com/api/v1/properties/edit/{uid}/
```

Authentication: `Authorization: Token your_api_key_here`

| Parameter | In | Type | Required | Group | Description |
| --- | --- | --- | --- | --- | --- |
| `uid` | path | string | yes |  | Property uid from List properties. Example result: cid 292960, uid JSORJ9S5AY. |
| `name` | body | string | no | Main information | Public title. Maximum 300 characters. |
| `short_description` | body | string | no | Main information | Short text shown on cards. |
| `description` | body | string | no | Main information | Full description. |
| `category` | body | number | no | Main information | Category ID. See Categories below. |
| `listing_type` | body | number[] | no | Main information | Operations: 1 sale, 2 rent. Replaces the current list. Example: [1] or [1, 2]. |
| `condition` | body | string | no | Main information | Condition code. See Condition below. |
| `status` | body | string | no | Main information | Publication status. See Status below. |
| `show_on_website` | body | boolean | no | Main information | Whether the listing is visible on the agency website. |
| `featured` | body | boolean | no | Main information | Mark the listing as featured. |
| `exclusive` | body | boolean | no | Main information | Mark the listing as exclusive. |
| `furnished` | body | boolean | no | Main information | Whether the property is furnished. |
| `year_construction` | body | string | no | Main information | Year the property was built. |
| `sale_price` | body | number | no | Price | Sale price, in currency_sale. |
| `currency_sale` | body | string | no | Price | Currency of sale_price. See Currencies below. |
| `rent_price` | body | number | no | Price | Long-term rent price, in currency_rent. |
| `currency_rent` | body | string | no | Price | Currency of rent_price. |
| `rental_price` | body | number | no | Price | Short-term rent price, in currency_rental. |
| `currency_rental` | body | string | no | Price | Currency of rental_price. |
| `furnished_price` | body | number | no | Price | Furnished rent price, in currency_furnished. |
| `currency_furnished` | body | string | no | Price | Currency of furnished_price. |
| `furnished_sale_price` | body | number | no | Price | Furnished sale price, in currency_sale_furnished. |
| `currency_sale_furnished` | body | string | no | Price | Currency of furnished_sale_price. |
| `maintenance_fee` | body | number | no | Price | Maintenance fee, in currency_maintenance. |
| `currency_maintenance` | body | string | no | Price | Currency of maintenance_fee. |
| `room` | body | number | no | Features | Bedrooms. |
| `bathroom` | body | number | no | Features | Bathrooms. |
| `half_bathrooms` | body | number | no | Features | Half bathrooms. |
| `parkinglot` | body | number | no | Features | Parking spaces. |
| `property_area` | body | number | no | Features | Built area. |
| `terrain_area` | body | number | no | Features | Land area. |
| `amenities` | body | number[] | no | Features | Amenity IDs. Replaces the current list. Same IDs as the features filter on List properties. |
| `country` | body | number | no | Location | Country ID. |
| `province` | body | number | no | Location | Province ID. See Locations. |
| `city` | body | number | no | Location | City ID. See Locations. |
| `sector` | body | number | no | Location | Sector ID. See Locations. |
| `address` | body | string | no | Location | Street address. |
| `address2` | body | string | no | Location | Additional address line. |
| `zip_code` | body | string | no | Location | Postal code. |
| `latitude` | body | string | no | Location | Latitude. |
| `longitude` | body | string | no | Location | Longitude. |
| `hide_location` | body | boolean | no | Location | Hide the exact location on the public site. |
| `agents` | body | string[] | no | Agent and extras | UIDs of the agents responsible for the listing. Replaces the current list. Get uids from Users. |
| `virtual_tour` | body | string | no | Agent and extras | Virtual tour URL. Do not send embed markup. |
| `youtubeiframe` | body | string | no | Agent and extras | YouTube video URL. Do not send embed markup. |
| `external_route` | body | string | no | Agent and extras | Public URL of this listing on an external website. Maximum 255 characters. |
| `ikey` | body | string | no | Agent and extras | Your own internal property code. |

Example request:

```bash
curl --request PATCH \
  --url 'https://secure.alterestate.com/api/v1/properties/edit/JSORJ9S5AY/' \
  --header 'Authorization: Token your_api_key_here' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{
  "name": "Modern apartment in Naco",
  "room": 3,
  "bathroom": 2,
  "sale_price": 250000,
  "currency_sale": "USD",
  "short_description": "Bright apartment close to parks and restaurants.",
  "show_on_website": true
}'
```

Response 200 OK:

```json
{
  "cid": 292960,
  "uid": "JSORJ9S5AY",
  "name": "Modern apartment in Naco",
  "room": 3,
  "bathroom": 2,
  "sale_price": 250000,
  "currency_sale": "USD",
  "short_description": "Bright apartment close to parks and restaurants.",
  "show_on_website": true
}
```

Response 400 Bad Request:

```json
{
  "message": "failed",
  "details": {
    "category": [
      "Invalid pk \"999\" - object does not exist."
    ]
  }
}
```

Response 403 Forbidden:

```json
{
  "detail": "No estas autorizado para visualizar esto."
}
```

Response 404 Not Found:

```json
{
  "detail": "Not found."
}
```

## Categories

| ID | Category |
| --- | --- |
| 1 | Apartments |
| 2 | Houses |
| 3 | Buildings |
| 4 | Lots |
| 5 | Hotels |
| 6 | Commercial spaces |
| 7 | Industrial warehouses |
| 10 | Penthouses |
| 13 | Villas |
| 14 | Lofts |
| 17 | Townhouses |

## Condition

| Value | Meaning |
| --- | --- |
| 1 | New |
| 9 | Ready |
| 5 | In construction |
| 2 | Second use |
| 3 | Remodeled |
| 7 | In plans |

## Status

| Value | Meaning |
| --- | --- |
| 1 | Published |
| 2 | Reserved |
| 3 | Sold |
| 4 | Rented |
| 6 | Unpublished |

## Currencies

Send the amount and its currency together. Supported values: USD, DOP, MXN, COP, CRC, GTQ and PEN. AlterEstate stores the price in that currency. You do not convert it to USD.

## Status codes

| Status | Meaning |
| --- | --- |
| 200 | The property was updated. The body is the property record. |
| 400 | The body is invalid. message is "failed" and details names the field. |
| 401 | The account token is missing or invalid. |
| 403 | This user cannot edit this property. |
| 404 | No property exists with that uid. |
| 500 | Server error while processing the request. |

- Use PATCH. A PUT expects a full property payload.
- amenities and agents, when sent, replace the current list.
- external_route accepts at most 255 characters. A longer URL returns 400.
- The account token comes from POST /api/v1/login/ with username and password. The response field is token. The public aetoken cannot call this endpoint.
- The user must belong to the agency that owns the property and must be allowed to edit it: an administrator, or an agent assigned to that listing.

- [Find a property uid](https://dev.alterestate.com/properties/list)
- [City and sector IDs](https://dev.alterestate.com/locations)
- [Agent uids](https://dev.alterestate.com/users)

## FAQ

### Do I update a property with cid or uid?

Use uid in the URL. List properties returns cid and uid together. cid is the public listing code and is not accepted by this endpoint.

### Can the public API token update a property?

No. The aetoken only reads listings. Send Authorization: Token with an account token from POST /api/v1/login/.

### Do I have to send every property field?

No. PATCH updates only the fields you send. amenities and agents are the exception: sending either one replaces that whole list.
