Authentication
To access the API, authentication and authorization is required. The API uses the OAuth2 Client Credentials flow for authentication. For more information, Check Authentication section.
Reading the Metadata
Once you've authenticated, the next step for building a client is finding out what data you can get out of Realtyfeed API. To do this, you query the metadata endpoint.
GET https://api.realtyfeed.com/reso/odata/$metadata
Now that we know what fields are available via Realtyfeed API, it's time to start fetching property data.
Retrieving Data
To retrieve data from the Realtyfeed API, please include the following headers in each request:
Authorization
: Set this header with the value "Bearer <access_token>" (replace<access_token>
with the actual access token obtained during authentication).x-api-key
: Include this header with the API key provided by Realtyna. (Optional)Origin
: Include this header with the API key provided by Realtyna. (Optional)Referer
: Include this header with the API key provided by Realtyna. (Optional)
The endpoint structure of all search requests is:
GET https://api.realtyfeed.com/reso/odata/{resource}
Valid resource
values include the names of the valid RESO resources: Property, Member, Office, PropertyRooms and OpenHouse.
Sample for Property Search:
https://api.realtyfeed.com/reso/odata/Property
Media list is nested within the Property Resource. All the images are stored on our CDN. You may link directly to the CDN.
Thumbnail version of the images are available as well.
Realtyfeed Output excludes any fields with null value from the payload to keep that as small as possible. To get all the fields, check Request Parameters section.
By default, Realtyfeed API returns 20 records per query. If this is your first foray into Realtyfeed API, it will be enough for you to learn about the structure of the data that's returned.
Parameter | Description |
---|---|
| URI for getting the next set of records. Will only be present when there are more records to retrieve. |
| An array of objects. The data you came for. |
| Max number of returned records |
| Total number of pages to get all the records |
| Total number of the records |
While you look through the data you have pulled back, there is one field that you should pay special attention to: ListingKey. This field is the unique identifier for the Property record.
ListingKey is the unique identifier for Property records
Realtyfeed API returns only important fields by default. use $select=ALL to get all the available fields.
Request Parameters
The Realtyfeed API supports the following parameters for search requests:
Parameter | Description |
---|---|
$top | To get more records per query, we use the $top parameter. If you want just one record, you can specify $top=1, or if you want one hundred, $top=100. (default is 20 - max value is 200) |
$skip | Use $skip to skip over a number of records. This is most useful in combination with $top to iterate over the results of a query. (default is 0) |
$select | You can limit the fields you want with $select. For example, if you want just the ListingKey and the StandardStatus, you would use $select=ListingKey, StandardStatus Realtyfeed API returns only important fields by default. use $select=ALL to get all the available fields. |
$filter | You can get specific records you want with the $filter. Check Searchable fields section. |
$expand | Pull in data from related resources. For example, $expand=OpenHouse would retrieve associated Openhouses data. |
$apply | to perform data transformation operations. Sample: $apply=groupby((CountyOrParish), (aggregate($count as ListingCount))) will return number of records in each available County |
$feature | It’s a RealtyFeed exclusive parameter which will prioritize the response. |
The supported parameters can be combined as needed
$filter
The $filter system query option restricts the set of items returned. MLS Router supports a set of built-in filter operations, as described in this section:
Operator | Meaning | Example |
---|---|---|
eq | Equal To | ListingKey eq '123456' |
ne | Not Equal To | PropertyType ne 'Residential' |
gt | Greater Than | BedroomsTotal gt 3 |
ge | Greater Than or Equal To | BathroomsTotalInteger ge 2 |
lt | Less Than | ListPrice lt 350000 |
le | Less Than or Equal To | LotSizeArea le 5 |
and | Both conditions are true | BedroomsTotal eq 3 and BathroomsTotalInteger eq 2 |
or | Either condition is true | BedroomsTotal ge 3 or BathroomsTotalInteger ge 3 |
in | Value is in List | StandardStatus in ('Active', 'Pending') |
These operators can be combined to form very complex queries, e.g. ((ListPrice lt 300000 and LotSizeAcres lt 3) or (BedroomsTotal gt 4 and StandardStatus eq 'Active'))
Working with strings in $filter:
Strings are relatively straightforward in Realtyfeed API. They are always enclosed in single quotes (') and if you need a single quote in the string, you simply double it up, e.g. 'O''Brien'.
In addition to all of the basic operators that you can use with strings, there is a function to help out as well:
Function | Description |
---|---|
contains(haystack, 'needle') | Returns response if needle is found in haystack |
Working with geo coordinates in $filter:
Function | Description |
---|---|
geo.distance(Coordinates, POINT(-96.818747 32.928812)) lt 10km | Returns property listings within geo distance of 10km from a specific point |
Retrieving Single Record
Use this endpoint to get details about a specific record:
GET https://api.realtyfeed.com/reso/odata/{resource}('resource_id')
The API returns record within the specified resource having a primary key value matching the provided resource_id
. For example:
Request
GET https://api.realtyfeed.com/reso/odata/Property('ListingKey') or GET https://api.realtyfeed.com/reso/odata/Member('MemberKey')
Don’t hesitate to contact Realtyna Support, if you have any questions.
Searchable Fields:
Property
Field | Description |
---|---|
ListingKey |
|
ModificationTimestamp | last modified timestamp by MLS |
RFModificationTimestamp | last modified timestamp by MLS Router |
ListingId |
|
PropertyType | A list of types of properties such as Residential, Land, Commercial Sale, etc... |
PropertySubType | A list of sub types to Residential, Residential Lease, Manufactured in Park, Commercial and Business Opportunity listings. e.g. Single Family Residence, Condominium, Manufactured on Land, Townhouse, Multi Family, Office, Retail, etc. |
ListPrice | The current price of the property as determined by the seller and the seller's broker. For auctions this is the minimum or reserve price. |
BathroomsTotalInteger | The simple sum of the number of bathrooms. For example for a property with two Full Bathrooms and one Half Bathroom, the Bathrooms Total Integer will be 3. |
BedroomsTotal | The total number of bedrooms in the dwelling. |
StandardStatus | The status of the listing on RF |
MlsStatus | The status of the listing on MLS |
DaysOnMarket |
|
LotSizeArea | The total area of the lot. |
LivingArea | The total livable area within the structure. |
BuildingAreaTotal | Total area of the structure. Includes both finished and unfinished areas. |
OriginatingSystemName | The name of the Originating record provider. Most commonly the name of the MLS. |
City | The city in listing address. |
PostalCode | The postal code portion of a street or mailing address. |
UnparsedAddress | The UnparsedAddress is a text representation of the address with the full civic location as a single entity. It may optionally include any of City, StateOrProvince, PostalCode and Country. |
YearBuilt | The year that an occupancy permit is first granted for the house or other local measure of initial habitability of the build. |
ListAgentFullName | The full name of the listing agent. (First Middle Last) |
ListAgentMlsId |
|
CoListAgentMlsId |
|
BuyerAgentMlsId |
|
CoBuyerAgentMlsId |
|
ListOfficeName | The legal name of the brokerage representing the seller. |
ListOfficeMlsId |
|
ListAOR |
|
ListAgentAOR |
|
ListOfficeAOR |
|
CoListOfficeMlsId |
|
BuyerOfficeMlsId |
|
CoBuyerOfficeMlsId |
|
StoriesTotal | The total number of floors in the building. |
TaxYear | A type of legal description for land in developed areas where streets or other rights-of-ways delineate large parcels of land referred to as divided into lots on which homes or other types of developments are built. |
TaxAnnualAmount | A type of legal description for land in developed areas where streets or other rights-of-ways delineate large parcels of land referred to as divided into lots on which homes or other types of developments are built. |
GarageSpaces | The number of spaces in the garage(s). |
Cooling | A list describing the cooling or air conditioning features of the property. |
InteriorFeatures | A list of features or description of the interior of the property included in the sale/lease. |
ExteriorFeatures | A list of features or description of the exterior of the property included in the sale/lease. |
PublicRemarks | Text remarks that may be displayed to the public. |
LaundryFeatures | A list of features and locations where the laundry is located in the property being sold. i.e. Gas Dryer Hookup, In Kitchen, In Garage, etc. |
FireplacesTotal | The total number of fireplaces included in the property. |
PoolFeatures | A list of features or description of the pool included in the sale/lease. |
PetsAllowed | Are pets allowed at the property? A list of yes, no and more detailed restrictions/allowances. |
WaterfrontFeatures | Features of the waterfront on which the property is located. |
AccessibilityFeatures | A list or description of the accessibility features included in the sale/lease. |
LotFeatures | A list of features or description of the lot included in the sale/lease. |
Member
Field | Description |
---|---|
MemberFullName |
|
MemberEmail |
|
MemberMlsId | MLS ID of the agent in MLS |
OfficeMlsId | MLS ID of the agent’s Office in MLS |
ModificationTimestamp |
|
OriginatingSystemName |
|
MemberKey | Agent’s system Key in MLS |
MemberStatus |
|
OfficeKey |
|
MemberDirectPhone |
|
Office
Field | Description |
---|---|
OfficeName |
|
OfficeEmail |
|
OfficeMlsId | MLS ID of the agent in MLS |
ModificationTimestamp |
|
OriginatingSystemName |
|
OfficeStatus |
|
OfficeKey |
|
OpenHouse
Field | Description |
---|---|
OpenHouseKey |
|
ListingKey | Get Openhouse records based on associated ListingKey |
ListingId | Get Openhouse records based on associated ListingID |
ModificationTimestamp |
|
OriginatingSystemName |
|
OpenHouseStatus |
|
OpenHouseDate |
|
PropertyRooms
Field | Description |
---|---|
RoomKey |
|
ListingKey | Get Room records based on associated ListingKey |
ListingId | Get Room records based on associated ListingID |
ModificationTimestamp |
|
OriginatingSystemName |
|