,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

>
DATA RABBIT API DOCUMENTATION
,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

>

Data Rabbit API is a robust real estate data solution designed to make working with real estate data easy and predictable for the average agent, broker, and developer.

Author: APC
API Version :


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

.


,

https://werx.retsrabbit.com/api

,

https://werx.retsrabbit.com/api/datasystem

>
GETTING STARTED
,

https://werx.retsrabbit.com/api/datasystem

>

The Data Rabbit API is organized to conform to the OData v


,

{
    "@odata.context": "api/$metadata",
    "ID": 1,
    "Name": "Rets Rabbit",
    "SeviceURI": "/api/v2",
    "DateTimeStamp": "2016-06-06 7:06pm",
    "Transport": 1.4,
    "DataDictionaryVersion": 1.4,
    "Resources": [
        {
            "Name": "Property",
            "ResourcePath": "/api/v2/property",
            "Description": "RESO Standard Property Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        },
        {
            "Name": "Media",
            "ResourcePath": "/api/v2/media",
            "Description": "RESO Standard Media Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        }
    ]
}

.


,

https://werx.retsrabbit.com/api

standard. It is meant to be compliant with the RESO Web API standards (http://www.reso.org/reso-web-api/).

The Data Rabbit API is organized around REST. We designed the API so it will have predictable, resource-oriented URLs and use HTTP response codes for all responses (even errors). All responses will be returned as JSON, including errors.

Standard Data Rabbit API endpoint


,

https://werx.retsrabbit.com/api

>
,

https://werx.retsrabbit.com/api/datasystem

>
Getting an access token
,

https://werx.retsrabbit.com/api/datasystem

>

We use oAuth


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

.


,

https://werx.retsrabbit.com/api

for authentication and authorization. To get an access code, send a POST request to /oauth/access_token.

Standard API endpoint


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

>

All requests must be made over SSL (https). KEEP YOUR CLIENT ID & SECRET PRIVATE, do not share with anyone. After sending the request you should get an access token back.

Getting the access_token back in a request


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>

Once you have the access token, you must include it in the request when calling the API. You can include it in the URL or pass it along in the header.

In the examples below, assume access_token is being passed

,

https://werx.retsrabbit.com/api/datasystem

>
Getting the resources available in the API
,

https://werx.retsrabbit.com/api/datasystem

>

A component of the RESO Web API standard is an endpoint describing the resources and endpoints available in the API. This can be retrieved using the datasystem endpoint.


,

https://werx.retsrabbit.com/api/datasystem

>

The response will contain the number of Resources you can access via the API, the RESO Web API versions support as well as other information about the API.


,

{
    "@odata.context": "api/$metadata",
    "ID": 1,
    "Name": "Rets Rabbit",
    "SeviceURI": "/api/v2",
    "DateTimeStamp": "2016-06-06 7:06pm",
    "Transport": 1.4,
    "DataDictionaryVersion": 1.4,
    "Resources": [
        {
            "Name": "Property",
            "ResourcePath": "/api/v2/property",
            "Description": "RESO Standard Property Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        },
        {
            "Name": "Media",
            "ResourcePath": "/api/v2/media",
            "Description": "RESO Standard Media Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        }
    ]
}

>
,

https://werx.retsrabbit.com/api/datasystem

>Getting Metadata for a Resource,

https://werx.retsrabbit.com/api/datasystem

>

Next, you’ll want to look up the metadata for a Resource. The metadata will contain information about the response fields & data a resource will return. For example, you can retrieve the metadata for a property resource using the following endpoint:


,

https://werx.retsrabbit.com/api/v2/property/$metadata

>

You’ll see an XML response of fields available when you query for either a collection or individual properties. Our output will largely follow the RESO Data Dictionary standard, which is an industry-wide data schema under adoption by MLSs in the United States.

Example Response:


,

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx
    xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
    <edmx:DataServices>
        <Schema
            xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Retsrabbit.Models.Property">
            <Property Name="AboveGradeFinishedArea" Type="numeric"/>
            <Property Name="AboveGradeFinishedAreaSource" Type="character varying"/>
            <Property Name="AboveGradeFinishedAreaUnits" Type="character varying"/>
            <Property Name="AccessCode" Type="character varying"/>
            <Property Name="AccessibilityFeatures" Type="text"/>
            <Property Name="AdditionalParcelsDescription" Type="character varying"/>
            <Property Name="AdditionalParcelsYN" Type="boolean"/>
            <Property Name="AnchorsCoTenants" Type="text"/>
            <Property Name="Appliances" Type="text"/>
            <Property Name="ApprovalStatus" Type="character varying"/>
            <Property Name="ArchitecturalStyle" Type="text"/>
            <Property Name="AssociationAmenities" Type="text"/>
            <Property Name="AssociationFee" Type="numeric"/>
            ...
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>

>
,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>Properties,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>

Now that you’ve retrieved the metadata, you can interact with the Data Rabbit API® server to search for properties.

,

https://werx.retsrabbit.com/api/datasystem

>
GET A SINGLE PROPERTY
,

https://werx.retsrabbit.com/api/datasystem

>

A single property can be returned using the following


,

GET /v2/property(ListingId)

>

Where ListingId is the unique id (or MLS number) of the property on the RETS server. The response will be a single JSON object containing the property & the fields as defined in the metadata.

Get a listing for ‘


,

GET /v2/property(ListingId)

,

{
    "@odata.context": "api/$metadata",
    "ID": 1,
    "Name": "Rets Rabbit",
    "SeviceURI": "/api/v2",
    "DateTimeStamp": "2016-06-06 7:06pm",
    "Transport": 1.4,
    "DataDictionaryVersion": 1.4,
    "Resources": [
        {
            "Name": "Property",
            "ResourcePath": "/api/v2/property",
            "Description": "RESO Standard Property Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        },
        {
            "Name": "Media",
            "ResourcePath": "/api/v2/media",
            "Description": "RESO Standard Media Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        }
    ]
}

,

{
    "@odata.context": "api/v2/$metadata#property/$entity",
    "id": 2067,
    "ListingKey": "200",
    "ListingId": "74958",
    "StandardStatus": "Active",
    "MlsStatus": null,
    "ApprovalStatus": null,
    "ListingContractDate": "2016-04-12",
    ...
    "listing":
        {
            "server_hash": "86f93cfc06ceb49d6c837916857cef7d",
            "mls_id": "74958",
            "rets_class": "Listing",
            "active": true,
            "lat": null,
            "long": null,
            "geo_partial": false,
            "photos": [
                {
                    "id": 914,
                    "mls_id": "74958",
                    "filename": "74958_Photo_1.jpg",
                    "url": "https://s3.amazonaws.com/rets-rabbit-bucket2/86f93cfc06ceb49d6c837916857cef7d/74958_Photo_1.jpg"
                },
                ...
            ]
        }
}

,

https://werx.retsrabbit.com/api/v2/property/$metadata

,

GET /v2/property(74958)


,

GET /v2/property(74958)

>

Response


,

{
    "@odata.context": "api/v2/$metadata#property/$entity",
    "id": 2067,
    "ListingKey": "200",
    "ListingId": "74958",
    "StandardStatus": "Active",
    "MlsStatus": null,
    "ApprovalStatus": null,
    "ListingContractDate": "2016-04-12",
    ...
    "listing":
        {
            "server_hash": "86f93cfc06ceb49d6c837916857cef7d",
            "mls_id": "74958",
            "rets_class": "Listing",
            "active": true,
            "lat": null,
            "long": null,
            "geo_partial": false,
            "photos": [
                {
                    "id": 914,
                    "mls_id": "74958",
                    "filename": "74958_Photo_1.jpg",
                    "url": "https://s3.amazonaws.com/rets-rabbit-bucket2/86f93cfc06ceb49d6c837916857cef7d/74958_Photo_1.jpg"
                },
                ...
            ]
        }
}

>

The complex value listing is for Data Rabbit API specific information which also includes an array for photos. If you’d like to exclude photos from the response, see the $select option (under Limiting results to specific field values in this section).

,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>Running a Search,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>
,

https://werx.retsrabbit.com/api/datasystem

>Filtering by a field value,

https://werx.retsrabbit.com/api/datasystem

>

Filtering properties by field values can be accomplished using the $filter option. All the names in the $filter option are case-sensitive and match the name of the fields provided by the property resource.

The following expression passed to $filter will get properties where the Listing Agent’s last name (field ListAgentLastName) is ‘DOE’ (case sensitive):


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

https://werx.retsrabbit.com/api

>

Example Response:


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

>

value is an array that will contain the results of the query, each item in the array represents a property. @odata.count and @retsrabbit.total_results will give you the # of results in the value array in the response and the number of records actually in the Data Rabbit API® database. This is useful for pagination, see the Pagination section for more details.

,

https://werx.retsrabbit.com/api/datasystem

>
Filtering by multiple field values
,

https://werx.retsrabbit.com/api/datasystem

>

You can combine expressions together with or and and to perform more complex searches.

Getting properties for Listing Agent matching JOHN DOE:


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>

You can get properties where the listing agent’s last name is either ‘Smith’ or ‘Doe’:


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

https://werx.retsrabbit.com/api/datasystem

>
,

https://werx.retsrabbit.com/api/datasystem

>”Not equals” filtering,

https://werx.retsrabbit.com/api/datasystem

>

Using ne (not equals) it’s possible to filter properties that don’t contain a value:


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

{
    "@odata.context": "api/$metadata",
    "ID": 1,
    "Name": "Rets Rabbit",
    "SeviceURI": "/api/v2",
    "DateTimeStamp": "2016-06-06 7:06pm",
    "Transport": 1.4,
    "DataDictionaryVersion": 1.4,
    "Resources": [
        {
            "Name": "Property",
            "ResourcePath": "/api/v2/property",
            "Description": "RESO Standard Property Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        },
        {
            "Name": "Media",
            "ResourcePath": "/api/v2/media",
            "Description": "RESO Standard Media Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        }
    ]
}

>
,

https://werx.retsrabbit.com/api/datasystem

>
Filtering by wildcards
,

https://werx.retsrabbit.com/api/datasystem

>

You can do wildcard or case insensitive searches by using the following special functions with the $filter option. All of the functions are case-insensitive.

Get all properties whose listing agent’s first name starts with ‘joh’


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

https://werx.retsrabbit.com/api/v2/property/$metadata

>

Get all properties whose listing agent’s first name ends with ‘ohn’


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx
    xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
    <edmx:DataServices>
        <Schema
            xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Retsrabbit.Models.Property">
            <Property Name="AboveGradeFinishedArea" Type="numeric"/>
            <Property Name="AboveGradeFinishedAreaSource" Type="character varying"/>
            <Property Name="AboveGradeFinishedAreaUnits" Type="character varying"/>
            <Property Name="AccessCode" Type="character varying"/>
            <Property Name="AccessibilityFeatures" Type="text"/>
            <Property Name="AdditionalParcelsDescription" Type="character varying"/>
            <Property Name="AdditionalParcelsYN" Type="boolean"/>
            <Property Name="AnchorsCoTenants" Type="text"/>
            <Property Name="Appliances" Type="text"/>
            <Property Name="ApprovalStatus" Type="character varying"/>
            <Property Name="ArchitecturalStyle" Type="text"/>
            <Property Name="AssociationAmenities" Type="text"/>
            <Property Name="AssociationFee" Type="numeric"/>
            ...
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>

>

Get all properties whose listing agent’s first name contains the string ‘oh’


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

GET /v2/property(ListingId)

>

Matching on upper or lower case


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

GET /v2/property(74958)

>
,

https://werx.retsrabbit.com/api/datasystem

>Searching by numeric range,

https://werx.retsrabbit.com/api/datasystem

>

In addition to using eq you can also use gt (greater than), lt (less than), ge (greater than or equals) and le (less than or equals) operators to perform searches on dates and number values.

Properties with a listing price less than $


,

https://werx.retsrabbit.com/api/v2/property/$metadata

,

https://werx.retsrabbit.com/api

K


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

{
    "@odata.context": "api/v2/$metadata#property/$entity",
    "id": 2067,
    "ListingKey": "200",
    "ListingId": "74958",
    "StandardStatus": "Active",
    "MlsStatus": null,
    "ApprovalStatus": null,
    "ListingContractDate": "2016-04-12",
    ...
    "listing":
        {
            "server_hash": "86f93cfc06ceb49d6c837916857cef7d",
            "mls_id": "74958",
            "rets_class": "Listing",
            "active": true,
            "lat": null,
            "long": null,
            "geo_partial": false,
            "photos": [
                {
                    "id": 914,
                    "mls_id": "74958",
                    "filename": "74958_Photo_1.jpg",
                    "url": "https://s3.amazonaws.com/rets-rabbit-bucket2/86f93cfc06ceb49d6c837916857cef7d/74958_Photo_1.jpg"
                },
                ...
            ]
        }
}

>

Properties with a listing price between $


,

https://werx.retsrabbit.com/api/v2/property/$metadata

,

https://werx.retsrabbit.com/api

K & $


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api

,

https://werx.retsrabbit.com/api

K


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api

>

Properties with a listing price greater than $


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api

,

https://werx.retsrabbit.com/api

K


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

>
,

https://werx.retsrabbit.com/api/datasystem

>
Filtering by Date
,

https://werx.retsrabbit.com/api/datasystem

>

You can also use the year, month, day, date, time, hour, minute and second functions to filter properties by date and time.

Properties listed in the year


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api

,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx
    xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
    <edmx:DataServices>
        <Schema
            xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Retsrabbit.Models.Property">
            <Property Name="AboveGradeFinishedArea" Type="numeric"/>
            <Property Name="AboveGradeFinishedAreaSource" Type="character varying"/>
            <Property Name="AboveGradeFinishedAreaUnits" Type="character varying"/>
            <Property Name="AccessCode" Type="character varying"/>
            <Property Name="AccessibilityFeatures" Type="text"/>
            <Property Name="AdditionalParcelsDescription" Type="character varying"/>
            <Property Name="AdditionalParcelsYN" Type="boolean"/>
            <Property Name="AnchorsCoTenants" Type="text"/>
            <Property Name="Appliances" Type="text"/>
            <Property Name="ApprovalStatus" Type="character varying"/>
            <Property Name="ArchitecturalStyle" Type="text"/>
            <Property Name="AssociationAmenities" Type="text"/>
            <Property Name="AssociationFee" Type="numeric"/>
            ...
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>

Properties listed before


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api

,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx
    xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
    <edmx:DataServices>
        <Schema
            xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Retsrabbit.Models.Property">
            <Property Name="AboveGradeFinishedArea" Type="numeric"/>
            <Property Name="AboveGradeFinishedAreaSource" Type="character varying"/>
            <Property Name="AboveGradeFinishedAreaUnits" Type="character varying"/>
            <Property Name="AccessCode" Type="character varying"/>
            <Property Name="AccessibilityFeatures" Type="text"/>
            <Property Name="AdditionalParcelsDescription" Type="character varying"/>
            <Property Name="AdditionalParcelsYN" Type="boolean"/>
            <Property Name="AnchorsCoTenants" Type="text"/>
            <Property Name="Appliances" Type="text"/>
            <Property Name="ApprovalStatus" Type="character varying"/>
            <Property Name="ArchitecturalStyle" Type="text"/>
            <Property Name="AssociationAmenities" Type="text"/>
            <Property Name="AssociationFee" Type="numeric"/>
            ...
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api/datasystem

>

Properties listed in June


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api

,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx
    xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
    <edmx:DataServices>
        <Schema
            xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Retsrabbit.Models.Property">
            <Property Name="AboveGradeFinishedArea" Type="numeric"/>
            <Property Name="AboveGradeFinishedAreaSource" Type="character varying"/>
            <Property Name="AboveGradeFinishedAreaUnits" Type="character varying"/>
            <Property Name="AccessCode" Type="character varying"/>
            <Property Name="AccessibilityFeatures" Type="text"/>
            <Property Name="AdditionalParcelsDescription" Type="character varying"/>
            <Property Name="AdditionalParcelsYN" Type="boolean"/>
            <Property Name="AnchorsCoTenants" Type="text"/>
            <Property Name="Appliances" Type="text"/>
            <Property Name="ApprovalStatus" Type="character varying"/>
            <Property Name="ArchitecturalStyle" Type="text"/>
            <Property Name="AssociationAmenities" Type="text"/>
            <Property Name="AssociationFee" Type="numeric"/>
            ...
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

{
    "@odata.context": "api/$metadata",
    "ID": 1,
    "Name": "Rets Rabbit",
    "SeviceURI": "/api/v2",
    "DateTimeStamp": "2016-06-06 7:06pm",
    "Transport": 1.4,
    "DataDictionaryVersion": 1.4,
    "Resources": [
        {
            "Name": "Property",
            "ResourcePath": "/api/v2/property",
            "Description": "RESO Standard Property Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        },
        {
            "Name": "Media",
            "ResourcePath": "/api/v2/media",
            "Description": "RESO Standard Media Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        }
    ]
}

>
,

https://werx.retsrabbit.com/api/datasystem

>Sorting,

https://werx.retsrabbit.com/api/datasystem

>

You can sort listings using the $orderby option. Just specify the field and the direction of the sort.

Sorting by ListPrice


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api/v2/property/$metadata

>
,

https://werx.retsrabbit.com/api/datasystem

>Pagination,

https://werx.retsrabbit.com/api/datasystem

>

You can limit results and paginate through records from the API using the $top and $skip options.
If you want to limit results to


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

https://werx.retsrabbit.com/api

at a time set the $top parameter to


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

https://werx.retsrabbit.com/api

and $skip to


,

https://werx.retsrabbit.com/api

.


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx
    xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
    <edmx:DataServices>
        <Schema
            xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Retsrabbit.Models.Property">
            <Property Name="AboveGradeFinishedArea" Type="numeric"/>
            <Property Name="AboveGradeFinishedAreaSource" Type="character varying"/>
            <Property Name="AboveGradeFinishedAreaUnits" Type="character varying"/>
            <Property Name="AccessCode" Type="character varying"/>
            <Property Name="AccessibilityFeatures" Type="text"/>
            <Property Name="AdditionalParcelsDescription" Type="character varying"/>
            <Property Name="AdditionalParcelsYN" Type="boolean"/>
            <Property Name="AnchorsCoTenants" Type="text"/>
            <Property Name="Appliances" Type="text"/>
            <Property Name="ApprovalStatus" Type="character varying"/>
            <Property Name="ArchitecturalStyle" Type="text"/>
            <Property Name="AssociationAmenities" Type="text"/>
            <Property Name="AssociationFee" Type="numeric"/>
            ...
        </Schema>
    </edmx:DataServices>
</edmx:Edmx>

>

If you want to get the next set of results, change the $skip parameter to


,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

,

POST https://werx.retsrabbit.com/api/oauth/access_token?
grant_type=client_credentials&
client_id=<your client id>&
client_secret=<your client secret>

.

You can use the @retsrabbit.total_results and @odata.count fields in the response to determine how many “pages” of results to show in your pagination control.

Notice: We no longer return total_results by default in the api responses. To request the total results for a request you must pass one of the following two flags to the $select clause.

  1. total_results: returns the exact number of total results.
  2. estimated_results: returns an estimated number of results.

In most cases we suggest the use of the estimated_results flag as it can dramatically decrease the round trip time of an API call sometimes by more than


,

https://werx.retsrabbit.com/api/v2/property/$metadata

,

https://werx.retsrabbit.com/api

%.

,

https://werx.retsrabbit.com/api/datasystem

>
Limiting results to specific field values
,

https://werx.retsrabbit.com/api/datasystem

>

Occasionally you don’t want to return all of the data available for a resource. You can use the $select option to limit the fields that are returned for a request. The Rets Rabbit specific object ‘listing’ will always be displayed (excluding photos, if you want photos to be displayed, pass photos in the $select option).

Active listings in ‘Columbus’, show only the ListingKey, ListPrice, and StandardStatus fields


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

GET /v2/property(ListingId)

>

Response


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

GET /v2/property(74958)

>
,

https://werx.retsrabbit.com/api/datasystem

>Caching,

https://werx.retsrabbit.com/api/datasystem

>

We cache all api requests for faster response times. There are some cases where you may want to make sure you are not receiving stale data (although our caches have a fairly low ttl,


,

{
    "@odata.context": "api/$metadata",
    "ID": 1,
    "Name": "Rets Rabbit",
    "SeviceURI": "/api/v2",
    "DateTimeStamp": "2016-06-06 7:06pm",
    "Transport": 1.4,
    "DataDictionaryVersion": 1.4,
    "Resources": [
        {
            "Name": "Property",
            "ResourcePath": "/api/v2/property",
            "Description": "RESO Standard Property Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        },
        {
            "Name": "Media",
            "ResourcePath": "/api/v2/media",
            "Description": "RESO Standard Media Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        }
    ]
}

,

https://werx.retsrabbit.com/api/v2/property/$metadata

min). We now have a flag you can pass in the $select clause of a request called no_cache. This basically tells the API to ignore looking up a cached version of this request ensuring you receive an up-to-date response.

,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>Media,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>

If you’d like to retrieve just the available photos for a property outside of a normal property lookup or search you can use the Media endpoint.

Getting the media for property ‘


,

GET /v2/property(ListingId)

,

{
    "@odata.context": "api/$metadata",
    "ID": 1,
    "Name": "Rets Rabbit",
    "SeviceURI": "/api/v2",
    "DateTimeStamp": "2016-06-06 7:06pm",
    "Transport": 1.4,
    "DataDictionaryVersion": 1.4,
    "Resources": [
        {
            "Name": "Property",
            "ResourcePath": "/api/v2/property",
            "Description": "RESO Standard Property Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        },
        {
            "Name": "Media",
            "ResourcePath": "/api/v2/media",
            "Description": "RESO Standard Media Resource",
            "DateTimeStamp": "2016-06-06 7:06pm",
            "TimeZoneOffset": 0,
            "Localizations": []
        }
    ]
}

,

{
    "@odata.context": "api/v2/$metadata#property/$entity",
    "id": 2067,
    "ListingKey": "200",
    "ListingId": "74958",
    "StandardStatus": "Active",
    "MlsStatus": null,
    "ApprovalStatus": null,
    "ListingContractDate": "2016-04-12",
    ...
    "listing":
        {
            "server_hash": "86f93cfc06ceb49d6c837916857cef7d",
            "mls_id": "74958",
            "rets_class": "Listing",
            "active": true,
            "lat": null,
            "long": null,
            "geo_partial": false,
            "photos": [
                {
                    "id": 914,
                    "mls_id": "74958",
                    "filename": "74958_Photo_1.jpg",
                    "url": "https://s3.amazonaws.com/rets-rabbit-bucket2/86f93cfc06ceb49d6c837916857cef7d/74958_Photo_1.jpg"
                },
                ...
            ]
        }
}

,

https://werx.retsrabbit.com/api/v2/property/$metadata

,

GET /v2/property(74958)


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

{
    "@odata.context": "api/v2/$metadata#property/$entity",
    "id": 2067,
    "ListingKey": "200",
    "ListingId": "74958",
    "StandardStatus": "Active",
    "MlsStatus": null,
    "ApprovalStatus": null,
    "ListingContractDate": "2016-04-12",
    ...
    "listing":
        {
            "server_hash": "86f93cfc06ceb49d6c837916857cef7d",
            "mls_id": "74958",
            "rets_class": "Listing",
            "active": true,
            "lat": null,
            "long": null,
            "geo_partial": false,
            "photos": [
                {
                    "id": 914,
                    "mls_id": "74958",
                    "filename": "74958_Photo_1.jpg",
                    "url": "https://s3.amazonaws.com/rets-rabbit-bucket2/86f93cfc06ceb49d6c837916857cef7d/74958_Photo_1.jpg"
                },
                ...
            ]
        }
}

>

Example Response


,

https://werx.retsrabbit.com/api/datasystem

,

https://werx.retsrabbit.com/api

>
,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>
Support
,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

>

Send an email to support@apcdata.net for any questions or issues.


,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api

,

{
    "access_token":"<your access token>",
    "token_type":"bearer",
    "expires":<timestamp>,
    "expires_in":3600
}

,

https://werx.retsrabbit.com/api

APC Data Analytics, LLC All rights reserved.