# Get a listing

Source: https://help.ruuster.com/api/properties-get

```http
GET https://api.ruuster.com/v1/properties/{propertyId}
```

One listing with its photo gallery and the home's details (beds, baths, living area, lot, year built, garage, HOA, taxes). Any listing by propertyId, whether or not it's yours; your own listings also by MLS number (mls:<number>).

- Authentication: `x-api-key` and `x-email` headers of an owner or admin
- Rate limit: 120 requests per minute per key

Pass a `propertyId` to read **any** listing in Ruuster, one per call: your own, or a home one of your leads looked at (the `propertyId` in an event or in a lead's activity). `ownedByYou` tells you which. You can also pass `mls:<number>`, for example `/properties/mls:22418765`, to find one of **your** listings by MLS number with the matching rules on [MLS numbers](https://help.ruuster.com/api/mls-numbers); for any other listing's MLS number use [Look up any listing by MLS number](https://help.ruuster.com/api/properties-lookup). An unknown `propertyId`, or an MLS number that isn't one of your listings, returns `404 not_found`.

This is the only call that returns the full gallery and the home's details, so they stay one listing per call. Nothing lists listings beyond your own inventory.

## Path parameters

| Name | Type | Description |
|---|---|---|
| `propertyId` | string | The listing's `propertyId` (uuid), or `mls:<number>` to find it by MLS number. See [MLS numbers](https://help.ruuster.com/api/mls-numbers) |

## Query parameters

| Name | Type | Default | Description |
|---|---|---|---|
| `agent` | string | your default agent | Whose page the listing link (`url`) opens under: an `agentId`, email or landing-page slug from [List agents](https://help.ruuster.com/api/agents-list). Whoever signs up from the link becomes that agent's lead. Without it, the link credits your brokerage's default agent (where unassigned leads go). `meta.agent` names the agent credited |

## Response

`data.property` is one property object, described on [List listings](https://help.ruuster.com/api/properties-list), plus:

| Field | Description |
|---|---|
| `photos` | Every image URL of the listing in the MLS's order, up to 50. `photoUrl` is the first of them. The URLs are the MLS feed's own; hosting and expiry are the MLS's, and use is subject to your MLS's rules |
| `details` | The home, from its MLS record (the same facts a [CMA](https://help.ruuster.com/api/cma-create) reads for its subject): `propertyType` (`house`, `townhouse`, `condo`, `other`), `bedrooms`, `bathrooms` (total), `bathroomsFull`, `bathroomsHalf`, `livingArea` (sq ft), `lotSizeAcres`, `yearBuilt`, `garageSpaces`, `stories`, `pool`, `basement` (`none`, `unfinished`, `finished`), `view`, `subdivision`, `newConstruction`, `hoa` (`hasHoa`, `feeMonthly`), `taxAnnual`, `taxYear`. A fact the MLS doesn't publish is `null` |
| `ownedByYou` | `true` when the listing is attributed to your brokerage. For another brokerage's listing `matchSource`, `firstSeenAt`, `lastSeenAt` and `updatedAt` are `null` |

## Example request

cURL:

```bash
curl -s "https://api.ruuster.com/v1/properties/5b7e2d94-1c63-4a8f-b5e0-9d3c7a2f1e86" \
  -H "x-api-key: $RUUSTER_API_KEY" \
  -H "x-email: $RUUSTER_EMAIL"
```

Node.js:

```javascript
const res = await fetch("https://api.ruuster.com/v1/properties/5b7e2d94-1c63-4a8f-b5e0-9d3c7a2f1e86", {
  headers: {
    "x-api-key": process.env.RUUSTER_API_KEY,
    "x-email": process.env.RUUSTER_EMAIL,
  },
});
const body = await res.json();
if (!body.ok) throw new Error(`${body.error.code}: ${body.error.message} (${body.requestId})`);
console.log(body.data);
```

Python:

```python
import os
import requests

res = requests.get(
    "https://api.ruuster.com/v1/properties/5b7e2d94-1c63-4a8f-b5e0-9d3c7a2f1e86",
    headers={"x-api-key": os.environ["RUUSTER_API_KEY"], "x-email": os.environ["RUUSTER_EMAIL"]},
    timeout=30,
)
body = res.json()
if not body["ok"]:
    raise RuntimeError(f'{body["error"]["code"]}: {body["error"]["message"]} ({body.get("requestId")})')
print(body["data"])
```

## Example response

```json
{
  "ok": true,
  "data": {
    "property": {
      "propertyId": "5b7e2d94-1c63-4a8f-b5e0-9d3c7a2f1e86",
      "mlsId": "3f4a7b12-6c85-4d93-a1e0-8b2f5c9d7e31",
      "mlsName": "MLS of Southern Arizona",
      "mlsRecordId": "22418765",
      "mlsRecordIdCore": "22418765",
      "address": "4182 E Saguaro Bloom Dr",
      "city": "Tucson",
      "state": "AZ",
      "postalCode": "85718",
      "price": 489000,
      "status": "active",
      "mlsStatus": "Active",
      "onMarketDate": "2026-08-27",
      "closeDate": null,
      "listAgentMlsId": "28301",
      "listOfficeMlsId": "333802",
      "matchSource": "agent",
      "photoUrl": "https://cdn.example-mls.com/22418765/1.jpg",
      "mediaCount": 38,
      "url": "https://saguaro.ruuster.com/agent/jane-doe/listings/5b7e2d94-1c63-4a8f-b5e0-9d3c7a2f1e86",
      "previousPropertyIds": [],
      "firstSeenAt": "2026-08-27T15:02:11Z",
      "lastSeenAt": "2026-10-01T06:12:30Z",
      "mlsModifiedAt": "2026-09-29T19:41:00Z",
      "updatedAt": "2026-10-01T06:12:30Z",
      "ownedByYou": true,
      "photos": [
        "https://cdn.example-mls.com/22418765/1.jpg",
        "https://cdn.example-mls.com/22418765/2.jpg",
        "https://cdn.example-mls.com/22418765/3.jpg"
      ],
      "details": {
        "propertyType": "house", "bedrooms": 4, "bathrooms": 3, "bathroomsFull": 3, "bathroomsHalf": 0, "livingArea": 2210,
        "lotSizeAcres": 0.21, "yearBuilt": 1998, "garageSpaces": 2, "stories": 1, "pool": true, "basement": null, "view": false,
        "subdivision": "Catalina Foothills Estates", "newConstruction": false, "hoa": { "hasHoa": true, "feeMonthly": 45 },
        "taxAnnual": 3812, "taxYear": 2025
      }
    }
  },
  "meta": {
    "brokerageId": "4f6c2a9e-8d31-4b57-9a0e-2c7d5e1b8f43",
    "coverage": { "ownershipAsOf": "2026-10-01T06:12:30Z" },
    "agent": {
      "agentId": "8d2f4a61-3c7e-4b95-a0d8-6e1f9b2c5a73", "firstName": "Jane", "lastName": "Doe", "email": "jane@saguarorealty.com", "phone": "+15205550134",
      "photoUrl": "https://cdn.example.com/agents/jane-doe.jpg", "landingPageUrl": "https://saguaro.ruuster.com/agent/jane-doe", "source": "default"
    }
  }
}
```
