> For the complete documentation index, see [llms.txt](https://docs.pullbay.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pullbay.com/api-reference/endpoints/app-store-1.md).

# Apartments

Apartments.com: properties, photos, and reviews. All endpoints are read-only `GET` requests and return public Apartments.com data — no listing of your own is required.

**Base URL:** `https://dashboard.pullbay.com/api`

### Endpoints

| Endpoint                                          | Description                   | Pagination      |
| ------------------------------------------------- | ----------------------------- | --------------- |
| `GET /apartments/properties`                      | Search properties by location | Page / maxItems |
| `GET /apartments/properties/{propertyId}`         | Get a property by ID          | —               |
| `GET /apartments/properties/{propertyId}/images`  | Get images for a property     | —               |
| `GET /apartments/properties/{propertyId}/reviews` | Get reviews for a property    | Page / maxItems |

***

#### Search Properties

Search Apartments.com properties by location with optional rent/bed/bath filters.

**Request**

```
GET /apartments/properties
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter  | Type    | Required | Description                                                       |
| ---------- | ------- | -------- | ----------------------------------------------------------------- |
| `location` | string  | Yes      | Location to search, 2–40 characters (e.g. `Seattle, WA`)          |
| `sort`     | string  | No       | One of `default`, `lastUpdated`, `rentHighToLow`, `rentLowToHigh` |
| `minRent`  | number  | No       | Minimum monthly rent, 0–999999999                                 |
| `maxRent`  | number  | No       | Maximum monthly rent, 0–999999999                                 |
| `minBed`   | number  | No       | Minimum bedroom count, 0–4                                        |
| `maxBed`   | number  | No       | Maximum bedroom count, 0–4                                        |
| `minBath`  | number  | No       | Minimum bathroom count, 0–3                                       |
| `maxBath`  | number  | No       | Maximum bathroom count, 0–3                                       |
| `page`     | integer | No       | Page number, 1–100. Mutually exclusive with `maxItems`            |
| `maxItems` | integer | No       | One-shot bulk pull, 1–200 results. Mutually exclusive with `page` |

**Example**

bash

```bash
curl -G "https://dashboard.pullbay.com/api/apartments/properties" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d location="Seattle, WA" \
  -d minRent=1500 \
  -d maxBed=2 \
  -d page=1
```

**Response**

json

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "id": "swv1xf7",
      "name": "110 Roy Apartments",
      "bedRange": "Studio - 2 Beds",
      "rentRange": "$1,500 - $3,500",
      "address": {
        "streetAddress": "110 Roy St",
        "city": "Seattle",
        "state": "WA",
        "postalCode": "98109"
      }
    }
  ],
  "pagination": { "page": 1, "hasNextPage": true, "cursor": null, "offset": null },
  "pricing": { "creditsCharged": 1 }
}
```

**Credit cost:** dynamic, returned in `pricing.creditsCharged`. Cost scales with the number of properties returned, not the number of requests.

***

#### Get Property

Returns full details for an Apartments.com property. Use the `includeScore`, `includeModelDetails`, and `includeImages` flags to opt into extra fields.

**Request**

```
GET /apartments/properties/{propertyId}
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter             | Type   | Required | Description                                                       |
| --------------------- | ------ | -------- | ----------------------------------------------------------------- |
| `propertyId`          | string | Yes      | Apartments.com property ID, 1–20 characters (path parameter)      |
| `includeScore`        | string | No       | `true` or `false` — include the property's rating in the response |
| `includeModelDetails` | string | No       | `true` or `false` — include detailed floor plan/model data        |
| `includeImages`       | string | No       | `true` or `false` — include photo/floor plan/tour data inline     |

**Example**

bash

```bash
curl -G "https://dashboard.pullbay.com/api/apartments/properties/swv1xf7" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d includeScore=true \
  -d includeModelDetails=true
```

**Response**

json

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "id": "swv1xf7",
      "propertyName": "110 Roy Apartments",
      "url": "https://www.apartments.com/110-roy-apartments-seattle-wa/swv1xf7/",
      "propertyWebsite": "https://www.110royapts.example/",
      "lastUpdated": "2026-04-30T10:00:00.000Z",
      "description": "Modern apartments in the heart of Queen Anne.",
      "rating": 4.2,
      "beds": "Studio - 2 Beds",
      "baths": "1 - 2 Baths",
      "sqft": "500 - 1,200 sq ft",
      "baseRent": { "min": 1500, "max": 3500 },
      "totalRent": { "min": 1580, "max": 3620 },
      "location": {
        "streetAddress": "110 Roy St",
        "city": "Seattle",
        "state": "WA",
        "postalCode": "98109"
      },
      "coordinates": { "latitude": 47.6262, "longitude": -122.3521 },
      "contact": { "phone": "(206) 555-0110", "officeHours": "Mon-Fri 9am-6pm" },
      "specials": null,
      "schools": { "elementary": "John Hay Elementary", "district": "Seattle Public Schools" },
      "amenities": [
        { "category": "Unique Amenities", "items": ["In Unit Washer & Dryer", "Rooftop Deck"] }
      ],
      "fees": [
        { "name": "Application Fee", "amount": "$45" }
      ],
      "models": [
        { "name": "Studio A", "beds": 0, "baths": 1, "sqft": 500 }
      ],
      "rentals": [
        { "unit": "204", "rent": 1750, "sqft": 540, "availability": "2026-07-01" }
      ],
      "transportation": [
        { "type": "Transit", "name": "Route 8", "distance": "0.1 mi" }
      ],
      "transitAndPOI": [
        { "type": "Grocery", "name": "QFC Queen Anne", "distance": "0.3 mi" }
      ]
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Credit cost:** dynamic, returned in `pricing.creditsCharged`.

***

#### Get Property Images

Returns photos, floor plans, virtual tours, and extended virtual tours for a property.

**Request**

```
GET /apartments/properties/{propertyId}/images
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter    | Type   | Required | Description                                                  |
| ------------ | ------ | -------- | ------------------------------------------------------------ |
| `propertyId` | string | Yes      | Apartments.com property ID, 1–20 characters (path parameter) |

**Example**

bash

```bash
curl -G "https://dashboard.pullbay.com/api/apartments/properties/swv1xf7/images" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

**Response**

json

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "photos": [
        { "url": "https://images1.apartments.com/i2/swv1xf7-1/110-roy-apartments-seattle-wa.jpg", "caption": "Building exterior" }
      ],
      "floorPlans": [
        { "name": "Studio A", "url": "https://images1.apartments.com/i2/swv1xf7-floorplan-1/studio-a.jpg" }
      ],
      "virtualTours": [
        { "name": "Studio A 3D Tour", "url": "https://my.matterport.com/show/?m=example1" }
      ],
      "virtualTourExtended": [
        { "name": "Full Property Walkthrough", "url": "https://my.matterport.com/show/?m=example2" }
      ]
    }
  ],
  "pricing": { "creditsCharged": 1 }
}
```

**Credit cost:** dynamic, returned in `pricing.creditsCharged`.

***

#### Get Property Reviews

Returns reviews for an Apartments.com property.

**Request**

```
GET /apartments/properties/{propertyId}/reviews
Authorization: Bearer YOUR_API_KEY
```

**Parameters**

| Parameter    | Type    | Required | Description                                                       |
| ------------ | ------- | -------- | ----------------------------------------------------------------- |
| `propertyId` | string  | Yes      | Apartments.com property ID, 1–20 characters (path parameter)      |
| `page`       | integer | No       | Page number, 1–100. Mutually exclusive with `maxItems`            |
| `maxItems`   | integer | No       | One-shot bulk pull, 1–200 results. Mutually exclusive with `page` |

**Example**

bash

```bash
curl -G "https://dashboard.pullbay.com/api/apartments/properties/swv1xf7/reviews" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d page=1
```

**Response**

json

```json
{
  "status": 200,
  "message": "OK",
  "success": true,
  "data": [
    {
      "key": "r-12345",
      "title": "Loved living here",
      "text": "Great staff and amenities. Highly recommend!",
      "rating": 4.5,
      "submissionDate": "Apr 30, 2026",
      "isOwner": false,
      "positiveFeedbackCount": 3,
      "comments": [
        { "author": "Property Manager", "text": "Thank you for the kind words!" }
      ]
    }
  ],
  "pagination": { "page": 1, "hasNextPage": true, "cursor": null, "offset": null },
  "pricing": { "creditsCharged": 1 }
}
```

**Credit cost:** dynamic, returned in `pricing.creditsCharged`. Cost scales with the number of reviews returned, not the number of requests.

***

### Object schemas

#### ApartmentsProperty object

| Field       | Type   | Description                                             |
| ----------- | ------ | ------------------------------------------------------- |
| `id`        | string | Apartments.com property ID                              |
| `name`      | string | Property name                                           |
| `bedRange`  | string | Bedroom range across all units (e.g. `Studio - 2 Beds`) |
| `rentRange` | string | Rent range across all units (e.g. `$1,500 - $3,500`)    |
| `address`   | object | Property address fields                                 |

#### ApartmentsPropertyDetail object

| Field             | Type               | Description                                                 |
| ----------------- | ------------------ | ----------------------------------------------------------- |
| `id`              | string             | Apartments.com property ID                                  |
| `propertyName`    | string             | Property name                                               |
| `url`             | string             | Apartments.com listing URL                                  |
| `propertyWebsite` | string             | Property's own website                                      |
| `lastUpdated`     | string (date-time) | When the listing was last updated                           |
| `description`     | string             | Property description                                        |
| `rating`          | number             | Average rating (present when `includeScore=true`)           |
| `beds`            | string             | Bedroom range                                               |
| `baths`           | string             | Bathroom range                                              |
| `sqft`            | string             | Square footage range                                        |
| `baseRent`        | object             | Base rent range                                             |
| `totalRent`       | object             | Total rent range (including estimated fees)                 |
| `location`        | object             | Address fields                                              |
| `coordinates`     | object             | `latitude` / `longitude`                                    |
| `contact`         | object             | Contact info (phone, office hours, etc.)                    |
| `specials`        | object, nullable   | Current leasing specials, if any                            |
| `schools`         | object             | Nearby school info                                          |
| `amenities`       | array              | Amenity categories and items                                |
| `fees`            | array              | Fee names and amounts                                       |
| `models`          | array              | Floor plan models (present when `includeModelDetails=true`) |
| `rentals`         | array              | Individual available units                                  |
| `transportation`  | array              | Nearby transit options                                      |
| `transitAndPOI`   | array              | Nearby transit and points of interest                       |

#### ApartmentsPropertyImages object

| Field                 | Type  | Description                      |
| --------------------- | ----- | -------------------------------- |
| `photos`              | array | Property photos                  |
| `floorPlans`          | array | Floor plan images                |
| `virtualTours`        | array | Virtual tour links               |
| `virtualTourExtended` | array | Extended/full virtual tour links |

#### ApartmentsPropertyReview object

| Field                   | Type    | Description                                             |
| ----------------------- | ------- | ------------------------------------------------------- |
| `key`                   | string  | Review ID                                               |
| `title`                 | string  | Review title                                            |
| `text`                  | string  | Review body                                             |
| `rating`                | number  | Rating, e.g. out of 5                                   |
| `submissionDate`        | string  | Date the review was submitted (e.g. `Apr 30, 2026`)     |
| `isOwner`               | boolean | Whether the reviewer is the property owner/manager      |
| `positiveFeedbackCount` | integer | Number of "helpful" votes                               |
| `comments`              | array   | Replies to the review (e.g. property manager responses) |

***

### Errors

All non-2xx responses share the same envelope:

json

```json
{
  "status": 400,
  "message": "Bad request",
  "success": false,
  "error": { "code": "BAD_REQUEST" }
}
```

| Status | Meaning                                  |
| ------ | ---------------------------------------- |
| `400`  | Bad request — missing/invalid parameters |
| `402`  | Insufficient credits                     |
| `404`  | Property or review set not found         |

### Finding Property IDs

* The property ID is the short alphanumeric slug at the end of an Apartments.com listing URL, e.g. `https://www.apartments.com/110-roy-apartments-seattle-wa/swv1xf7/` → `swv1xf7`.
* Run a `properties` search by location first to discover IDs, then use the ID with the detail, images, and reviews endpoints.

### Pagination Notes

* `properties` and `reviews` both use `page` (1-indexed) for page-based pagination, or `maxItems` for a one-shot bulk pull — the two are mutually exclusive on a single request.
* `pagination.hasNextPage` tells you whether to request the next page; `cursor` and `offset` are always `null` for this service since it is page-based, not cursor- or offset-based.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.pullbay.com/api-reference/endpoints/app-store-1.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
