RESO listings (resoProperties)
The resoProperties query returns MLS listing rows modeled as RESO-style groups (listing, location, structure, tax, financial, etc.). Filters are translated to OData against the RESO listings endpoint; results expose rich nested objects on each RESOProperty.
Connection result
| Field | Type | Description |
|---|---|---|
totalCount | Int! | Matching listing count when returned by the backing API. |
nodes | [RESOProperty] | Listings for the current page. |
Endpoint
POST /graphqlRoot query (example)
query ResoListings(
$filter: RESOPropertyFilter!
$limit: Int
$offset: Int
$orderBy: RESOPropertySort
) {
resoProperties(filter: $filter, limit: $limit, offset: $offset, orderBy: $orderBy) {
totalCount
nodes {
cid
listingKey
propertyType
propertySubType
listing {
standardStatus
listPrice
closePrice
}
location {
address {
unparsedAddress
city
stateOrProvince
postalCode
}
}
baseProperty {
countyFipsCode
parcelNumber
}
}
}
}Variables (example)
{
"filter": {
"listing": {
"standardStatus": { "eq": "Active" }
},
"location": {
"address": {
"stateOrProvince": { "eq": "CA" }
}
}
},
"limit": 10,
"offset": 0,
"orderBy": {
"price": { "listPrice": "DESC" },
"dates": { "modificationTimestamp": "DESC" }
}
}How filtering works
- Input type:
RESOPropertyFilterwith top-levelcid,listingKey,propertyType,location,listing. - Listing subtree:
listing.originatingSystemName,listing.standardStatus,listing.price(close/list/previous prices),listing.dates(status/modification/close/on-market/off-market timestamps, days on market),listing.agentOffice(buyer/list/co agents & offices),listing.structure,listing.equipment,listing.leaseAmount,listing.rawMlsPropertySubType. - Location subtree:
location.address.*for street, city, state, postal, county, etc. - each uses RESOStringFilterwitheq,ne,contains,startsWithas defined on that schema. - Operators: Strings use comparison filters as noted above; numeric fields use
FloatFilterandIntFilter; dates useDateTimeFilterwitheq, gt, ge, lt, le. - Combining: Same as base properties: omit top-level
andororfor an implicit AND bundle, or supply explicit logical objects when your client passes structured filters. - Backend: Built server-side into OData for the Property/listings service (not the same entity set as BaseProperties).
| RESOPropertyFilter branch | Role |
|---|---|
cid, listingKey | Pin or scan specific listings / linked public CID. |
propertyType | RESO string filter on listing property type. |
location | Address-centric geographic filters. |
listing | MLS workflow, pricing, dates, agents, equipment, lease, structure hints. |
How sorting works
orderBy: RESOPropertySort supports nested groups:
| Group | Fields |
|---|---|
price | closePrice, listPrice, listPriceLow, originalListPrice, previousListPrice |
dates | modificationTimestamp (and other date sorts if enabled in schema) |
Use ASC or DESC per field. Only mapped fields are sent to the listings OData layer.
How expansion works
- Select any subset of
RESOPropertygroups:business,characteristics,equipment,farming,financial,hoa,listing,location,occupantOwner,structure,tax,unitTypes,utilities, identifiers (universalPropertyId, etc.). baseProperty: Joins to Insights Base Property by CID - include only when you need assessor/public-record fields to avoid an extra Insights fetch per listing.
RESOProperty - root groups (schema)
| Field | GraphQL type | Summary |
|---|---|---|
cid, listingKey, propertyType, propertySubType | Scalars / strings | Identification and classification. |
listing | RESOListingGroup | Status, pricing, dates, agents, remarks, media hooks. |
location | RESOLocationGroup | Address, schools, GIS, parcel context. |
structure, tax, financial, … | RESO groups | Building details, tax roll, finance, HOA, equipment, utilities, etc. |
baseProperty | BaseProperty | Linked assessor/public-record profile. |
See the GraphQL schema / introspection for the full list of leaf fields inside each group.
Pagination
| Argument | Role |
|---|---|
limit | Page size (maps to backend top/skip semantics). |
offset | Rows to skip. |