RESO fields
The feed speaks the RESO Data Dictionary, so a site that reads one MLS feed can read this one. Fields we add start with LO_.
Property
- RESO field
ListingKey- Type
- string
- From
id- About
- Listing key.
- RESO field
OriginatingSystemName- Type
- string
- From
- fixed
- About
- Always this platform.
- RESO field
StandardStatus- Type
- string
- From
status- About
- RESO StandardStatus.
- RESO field
ListPrice- Type
- integer
- From
price- About
- List price.
- RESO field
ClosePrice- Type
- integer or null
- From
soldPrice- About
- Sold price, when Closed.
- RESO field
UnparsedAddress- Type
- string
- From
street, city, state, zip- About
- Street, city, state ZIP.
- RESO field
City- Type
- string
- From
city- About
- City.
- RESO field
StateOrProvince- Type
- string
- From
state- About
- State.
- RESO field
PostalCode- Type
- string
- From
zip- About
- ZIP.
- RESO field
PropertyType- Type
- string
- From
- fixed
- About
- Always Residential.
- RESO field
PropertySubType- Type
- string
- From
propertyType- About
- RESO PropertySubType.
- RESO field
BedroomsTotal- Type
- integer
- From
beds- About
- Bedrooms.
- RESO field
BathroomsTotalInteger- Type
- integer
- From
baths- About
- Bathrooms counted whole: 2 full and 1 half is 3.
- RESO field
BathroomsFull- Type
- integer
- From
baths- About
- Full bathrooms.
- RESO field
BathroomsHalf- Type
- integer
- From
baths- About
- Half bathrooms.
- RESO field
LivingArea- Type
- integer
- From
sqft- About
- Living area.
- RESO field
LivingAreaUnits- Type
- string
- From
- fixed
- About
- Always Square Feet.
- RESO field
LotSizeAcres- Type
- number or null
- From
lotAcres- About
- Lot size in acres.
- RESO field
YearBuilt- Type
- integer or null
- From
yearBuilt- About
- Year built.
- RESO field
PublicRemarks- Type
- string
- From
remarks- About
- Public remarks.
- RESO field
ListAgentFullName- Type
- string
- From
agent- About
- Listing agent.
- RESO field
ListOfficeName- Type
- string
- From
brokerage- About
- Listing brokerage.
- RESO field
ListingContractDate- Type
- string
- From
listingAgreementAt- About
- Agreement date.
- RESO field
OnMarketDate- Type
- string
- From
createdAt- About
- Day it went on the market.
- RESO field
ModificationTimestamp- Type
- string
- From
updatedAt- About
- Last change.
- RESO field
LO_SellerVisibilityChoice- Type
- string
- From
visibility- About
- Extension: the seller's choice. Members only never appears here.
- RESO field
LO_SellerChoiceRecordedAt- Type
- string
- From
sellerConsentAt- About
- Extension: when the seller's choice was recorded.
- RESO field
Media- Type
- array
- From
photos- About
- With $expand=Media: the photos, in order.
Media
Photos come from /api/reso/Media, or with each record through $expand=Media. MediaURL is a signed link on this host that lasts about 12 hours and stops as soon as the listing leaves the feed: copy the photo, not the link. Every photo is a JPEG of at most 2560 pixels on the long side with its location data removed.
- RESO field
MediaKey- Type
- string
- About
- Photo key.
- RESO field
ResourceRecordKey- Type
- string
- About
- The listing's key (an alias in a members only copy).
- RESO field
ResourceName- Type
- string
- About
- Always Property.
- RESO field
MediaCategory- Type
- string
- About
- Always Photo.
- RESO field
MediaURL- Type
- string
- About
- A signed link to the JPEG on this host.
- RESO field
Order- Type
- integer
- About
- Position from 0.
- RESO field
ImageWidth- Type
- integer
- About
- Pixels; at most 2560 on the long side.
- RESO field
ImageHeight- Type
- integer
- About
- Pixels.
- RESO field
PreferredPhotoYN- Type
- boolean
- About
- True for the first photo.
- RESO field
ModificationTimestamp- Type
- string
- About
- When it was added or last moved.
Our extensions
LO_SellerVisibilityChoice is the seller's recorded choice and LO_SellerChoiceRecordedAt when it was made, so every site can show it honored the seller. Members only never appears: those listings are not in the feed.
Query
- Option
$top- Does
- How many records you want. The server sends at most 50 per page.
- Option
$skip- Does
- Records to skip, up to 100,000.
- Option
$filter- Does
- OData:
eq ne gt ge lt le,and or not, parentheses,nullwith eq and ne. Strings in single quotes, dates as YYYY-MM-DD, timestamps in ISO 8601. Fields: ListingKey, StandardStatus, ListPrice, ClosePrice, City, StateOrProvince, PostalCode, PropertySubType, BedroomsTotal, LivingArea, LotSizeAcres, YearBuilt, ListAgentFullName, ListOfficeName, ListingContractDate, ModificationTimestamp.
- Option
$select- Does
- Comma separated fields to return.
- Option
$orderby- Does
- Up to 5 filterable fields, each optionally
ascordesc.
- Option
$count- Does
trueadds @odata.count.
- Option
$expand- Does
Mediaadds each record's photos, in order, as a Media array. Nothing else expands.
- Option
key- Does
- The API key, for a browser link. Prefer the Authorization header: query strings end up in logs.
curl -G "https://listonce.io/api/reso/Property" \ --data-urlencode "\$filter=City eq 'Austin' and StandardStatus eq 'Active'" \ --data-urlencode "\$top=10" \ -H "Authorization: Bearer ol_demo_7f3a9c2e5b1d4086"
Also served: the service document at /api/reso, the data model at /api/reso/$metadata, every lookup value at /api/reso/Lookup, and one record as Property('OL-4K7Q2M'). $expand takes Media on Property only. Not supported: $search and $apply (501). Order is newest change first unless $orderby says otherwise; follow @odata.nextLink for the next page. The feed follows the RESO Web API Core and Data Dictionary but is not yet RESO certified.
Add and edit
A member brokerage whose system already speaks RESO can enter and change listings in the same field names, as RESO Web API Add/Edit: POST /api/reso/Property and PATCH /api/reso/Property('OL-4K7Q2M') with a listings:write key. It is the same listing, owner and rules as /api/v1/listings. Send two extensions with a new listing: LO_SellerVisibilityChoice and LO_SellerName (seen only by the owner, never in the feed).
- Behavior
- Answer
- How
- POST answers 201 with the record, PATCH 204.
Prefer: return=representationorreturn=minimalpicks; Location and EntityId name the record either way.
- Behavior
- Retries
- How
- Send an
Idempotency-Keyon POST or PATCH; a repeat replays the first answer.
- Behavior
- Read only
- How
- ListingKey, OriginatingSystemName, ListOfficeName, ModificationTimestamp and LO_SellerChoiceRecordedAt are ignored, so a record you read can be sent back. Any other unknown name is refused.
- Behavior
- Errors
- How
- OData errors with
target(Create or Update) anddetailsnaming each RESO field at fault.
curl -X POST "https://listonce.io/api/reso/Property" \
-H "Authorization: Bearer $LISTONCE_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"UnparsedAddress": "88 Cedar Bluff Dr, Austin, TX 78704",
"City": "Austin",
"StateOrProvince": "TX",
"PostalCode": "78704",
"ListPrice": 625000,
"BedroomsTotal": 3,
"BathroomsFull": 2,
"BathroomsHalf": 1,
"LivingArea": 1960,
"LotSizeAcres": 0.18,
"YearBuilt": 2004,
"PropertyType": "Residential",
"PropertySubType": "Single Family Residence",
"PublicRemarks": "Quiet street, open kitchen and a covered patio facing the greenbelt.",
"ListAgentFullName": "Rowan Ellis",
"ListingContractDate": "2026-10-26",
"LO_SellerVisibilityChoice": "members_only",
"LO_SellerName": "A. and T. Monroe"
}'Every field and limit is on the Endpoints page. Add/Edit is not RESO certified either.