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, null with 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 asc or desc.
Option
$count
Does
true adds @odata.count.
Option
$expand
Does
Media adds 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
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=representation or return=minimal picks; Location and EntityId name the record either way.
Behavior
Retries
How
Send an Idempotency-Key on 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) and details naming each RESO field at fault.
curl
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.