# Amenities

Lists the amenities your agency can assign to a property, with the IDs that amenities expects.

Source: https://dev.alterestate.com/properties/amenities
Last updated: 2026-11-09

Returns every amenity the new-property form offers: the global amenities shared by all agencies and the ones your agency created under Settings → Amenities. Use the id of each item in amenities when you create or edit a property, and in the features filter of List properties.

> This page documents reading the list only. Amenities are created, renamed and removed from the dashboard.

```http
GET https://secure.alterestate.com/api/v1/properties/features/
```

Authentication: `Authorization: Token your_api_key_here`

> **Server-side only.** Call this endpoint from your backend only. The account token acts as the user who owns it and can read and change the agency’s contacts, deals and properties. Never put it in a website, a mobile app or any code that runs in the browser: anyone can open the developer tools and copy it. Have your frontend call your own server, and let your server call AlterEstate.

| Parameter | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `is_global` | query | boolean | no | false returns only the amenities your agency created. true returns only the global ones. Omit it to return both. |
| `name` | query | string | no | Exact amenity name, as stored. Case and accents must match. |
| `category` | query | number | no | Amenity category ID. Returns only amenities in that category. |
| `sort` | query | string | no | name or -name. The default order is by name, A to Z. |

Example request:

```bash
curl --request GET \
  --url 'https://secure.alterestate.com/api/v1/properties/features/?is_global=false' \
  --header 'Authorization: Token your_api_key_here' \
  --header 'Accept: application/json'
```

Response 200 OK:

```json
[
  {
    "id": 73,
    "name": "Gimnasio",
    "name_en": "Gym",
    "category": 2,
    "category_string": "Áreas comunes",
    "is_global": true,
    "editable": false,
    "company": null,
    "merge_id": null,
    "properties_count": 0,
    "deals_count": 0
  },
  {
    "id": 74,
    "name": "Piscina",
    "name_en": "Pool",
    "category": 2,
    "category_string": "Áreas comunes",
    "is_global": true,
    "editable": false,
    "company": null,
    "merge_id": null,
    "properties_count": 0,
    "deals_count": 0
  },
  {
    "id": 10482,
    "name": "Vista al mar",
    "name_en": "Ocean view",
    "category": null,
    "category_string": null,
    "is_global": false,
    "editable": true,
    "company": 512,
    "merge_id": null,
    "properties_count": 18,
    "deals_count": 18
  }
]
```

Response 401 Unauthorized:

```json
{
  "detail": "Invalid token."
}
```

## Fields

| Field | Meaning |
| --- | --- |
| id | The value you send in amenities and in the features filter. |
| name | Name shown in the dashboard, usually in Spanish. |
| name_en | English name, when one exists. |
| category | Amenity category ID, or null. |
| category_string | Amenity category name, or null. |
| is_global | true for amenities shared by every agency. false for amenities your agency created. |
| company | Your company ID on amenities your agency created. null on global amenities. |
| properties_count | Listings of your agency that use this amenity. Always 0 for global amenities. |
| deals_count | Same value as properties_count. Kept for compatibility. |

- The response is a plain list, not paginated. It has no count, next or previous.
- Only amenities of the company that owns the token are returned, together with the global ones. Other agencies’ amenities are never included.
- Any user of the agency can call it. No admin role is required.

Only your agency’s amenities:

```bash
curl 'https://secure.alterestate.com/api/v1/properties/features/?is_global=false' \
  -H 'Authorization: Token YOUR_ACCOUNT_TOKEN'
```

## Using amenity IDs

| Where | How |
| --- | --- |
| Create a property | POST /api/v1/properties/create/ with "amenities": [74, 73]. |
| Edit a property | PATCH /api/v1/properties/edit/{uid}/ with "amenities": [74, 73]. The list replaces the current amenities. Send [] to remove them all. |
| Search listings | GET /api/v1/properties/filter/?features=74&features=73. A listing must have every amenity you pass. |
| Read a listing | GET /api/v1/properties/view/{slug}/ returns amenities as names, not IDs. |

## Common amenity IDs

These global amenities are the same for every agency. Call the endpoint above for the full list, including the ones your agency created.

| ID | Amenity |
| --- | --- |
| 74 | Pool |
| 73 | Gym |
| 77 | Shared terrace |
| 516 | Private terrace |
| 66 | Appliances included (línea blanca) |
| 21 | Elevator |
| 67 | Balcony |
| 27 | Patio |
| 97 | Study |

## Status codes

| Status | Meaning |
| --- | --- |
| 200 | The list of amenities. It can be empty when a filter matches nothing. |
| 401 | The account token is missing or invalid. |
| 500 | Server error while processing the request. |

- [Send amenity IDs when you create a property](https://dev.alterestate.com/properties/create)
- [Replace the amenities of a property](https://dev.alterestate.com/properties/edit)
- [Filter listings by amenity](https://dev.alterestate.com/properties/list)

## FAQ

### How do I get the amenity IDs for my agency?

Send GET https://secure.alterestate.com/api/v1/properties/features/ with Authorization: Token. Each item’s id is the value amenities expects on create and edit.

### Can I create or edit amenities with the API?

This reference only documents the read. Manage amenities in the dashboard under Settings → Amenities.

### Why does a global amenity show properties_count 0?

Usage is counted only for amenities your agency created. Global amenities always report 0, even when your listings use them.
