Rapattoni Developer Resources

RESO Web API

Rapattoni offers an implementation of RESO's Web API, and provides data using the RESO Data Dictionary.

Authentication

Authentication URL:

  • https://retsidentityapi.raprets.com/mls/oauth/token

When accessing the Authentication URL, you will need to pass the following in a POST request:

  • grant_type: Currently we only support a grant type of “password”.
  • client_id: given to you by the MLS.
  • client_secret: a password associated with the client id, it is a randomly generated has. If this is ever compromised a new one may be generated by MLS staff.
  • redirect_uri: uri supplied by you to the MLS when they first create your credentials; while not used with the password grant it is still required by us for API access.
  • Username: The MLS ID created in membership.
  • Password: The password associated with the above MLS ID.

Please note, standard web browsers cannot pass all of the criteria; an API client program should be used. One simple testing client is Postman, available here: Get Postman

If the client successfully authenticates you will receive a response similar to the following:
{
“access_token”: “80957f49b90d449c99dfb01871676e3e”,
“token_type”: “bearer”,
“expires_in”: 604799,
“refresh_token”: “018c9daf657c4fd0bccf1268f77b063c”,
“userName”: “username”,
“.issued”: “Fri, 17 Mar 2017 16:41:32 GMT”
“.expires”: “Fri, 24 Mar 2017 16:41:32 GMT”
}

API Transactions

The given access_token bearer token will need to be passed in the Authorization header for all Transactions against the API URL. For example, the above token would be passed as: bearer 80957f49b90d449c99dfb01871676e3e

Responses, unless otherwise specified, will be in the JSON format.

The Service Document is available via a get request against the root URL (http://retswebapi.raprets.com/mls/RESO/odata). By default, this will return in the XML format but can be requested in JSON by passing “application/json” in the Accept header. This document is a standard OData resource listing all top-level entity sets exposed by the service.( ODatav4 10.1)

The Metadata Document is available via a get request against the root URL with /$metadata appended (i.e. http://retswebapi.raprets.com/mls/RESO/odata/$metadata). This resource describes the API’s data model; including data types, relationships between entity sets, and available fields (ODatav4 11.1.2). This resource is only available in the XML format.

The DataSystem endpoint will list all available Resources. The Classes associated with each endpoint can be seen by using the $expand query option as follows:
http://retswebapi.raprets.com/mls/RESO/odata/DataSystem?$expand=Resources
Example DataSystem Results:

                    
{
    "@odata.context": "http://retswebapi.raprets.com/mls/RESO/OData/$metadata#DataSystem/$entity",
    "Id": 1,
    "Mls": "mls",
    "Name": "Rapattoni Rets",
    "ServiceUri": "http://retsapi.raprets.com/mls/RESO/OData",
    "DateTimeStamp": "2017-03-16T10:18:19.26-07:00",
    "TransportVersion": "1.0.2",
    "DataDictionaryVersion": "1.6",
    "Resources": [
        {
            "Id": 1,
            "DataSystemId": 1,
            "Name": "Property",
            "ResourcePath": "/Property",
            "Description": "The property endpoint",
            "DateTimeStamp": "2016-07-11T14:20:13.863-07:00",
            "TimeZoneOffset": 0,
            "Localization": [
                {
                    "Name": "Land",
                    "ResourcePath": "/Property?Class=Land",
                    "Description": "Contains data for Land searches.",
                    "DateTimeStamp": "2017-11-07T18:16:43.1-08:00"
                },
                {
                    "Name": "Residential",
                    "ResourcePath": "/Property?Class=Residential",
                    "Description": "Contains data for Residential searches.",
                    "DateTimeStamp": "2017-11-07T18:16:43.1-08:00"
                }
            ]
        },
        {
            "Id": 2,
            "DataSystemId": 1,
            "Name": "Agent",
            "ResourcePath": "/Agents",
            "Description": "The agent endpoint",
            "DateTimeStamp": "2016-07-11T14:20:13.863-07:00",
            "TimeZoneOffset": 0,
            "Localization": [
                {
                    "Name": "Member",
                    "ResourcePath": "/Agents?Class=Member",
                    "Description": "Contains data for Agent searches.",
                    "DateTimeStamp": "2017-07-18T23:12:38.953-07:00"
                }
            ]
        }
    ]
}
                            
                      

The ResourcePath elements returned from the DataSystem query are the values added to the end of the ServiceUri for querying records. Queries against any entity set MUST include the Class query argument
The following URL would be used for querying the Property entity set and the Residential Class:

  • http://retsapi.raprets.com/mls/RESO/OData/Property?Class=Residential

The following is a short list of the OData commands we support and some examples of their usage.

  • $select : This is used to specify what fields you would like to have return in the results.
    • Example URL: http://retsapi.raprets.com/mls/RESO/OData/Property?Class=Residential&$select=ListingKeyNumeric,ListingId,StandardStatus,City
  • $filter : restrict the returned entities to only those matching the filter criteria (ODatav4 11.2.5.1)
    • Operators
      • eq : Equals
        • Example : StandardStatus equals Active: http://retsapi.raprets.com/mls/RESO/OData/Property?Class=Residential&$filter=StandardStatus eq 'Active'
      • ne : Not Equals
        • Example : City not equals Granite Bay http://retsapi.raprets.com/mls/RESO/OData/Property?Class=Residential&$filter=City ne 'Granite Bay'
      • gt : Greater than
        • Example: BathroomsTotalInteger greater than 2 http://retsapi.raprets.com/mls/RESO/OData/Property?Class=Residential&$filter=BathroomsTotalInteger gt '2'
      • lt : Less than
        • Example: BathroomsTotalInteger less than 2 http://retsapi.raprets.com/mls/RESO/OData/Property?Class=Residential&$filter=BathroomsTotalInteger lt '2'
  • $top : Limit the number of results returned.
    • Example: Returning the first 10 records http://retsapi.raprets.com/mls/RESO/OData/Property?Class=Residential&$top=10
  • $skip : skip a number of records before returning results
    • Example: Skip the first 100 records, then return results. http://retsapi.raprets.com/mls/RESO/OData/Property?Class=Residential&$skip=100