API Version 1.4

Introduction

Welcome to the AnyProp RESO Listings API documentation. Our API provides access to real estate listing data following the Real Estate Standards Organization (RESO) Web API standards. We utilize OData (Open Data Protocol) to offer a flexible and powerful querying capability for our data resources.

Authentication

All API calls (except the token endpoint) require a Bearer token in the Authorization header:

Authorization: Bearer your_access_token

Getting an Access Token

Get authentication token

post

Obtain an access token using your credentials

Body
usernamestringRequired

Your API username

passwordstring · passwordRequired

Your API password

Responses
200

Successful authentication

application/json
post
/v1/token

Account Resources, Settings, and Permission

You can view account settings and permissions on the account/resources endpoint.

Get account resources

get

Retrieve resources and permissions for the account

Authorizations
Responses
200

Successful response

application/json
get
/v1/account/resources

MLS Profiles

You can get mls profiles (including logos, disclaimers, and basic compliance elements).

Get MLS profiles

get

Retrieve profiles for active MLSes (including logos, disclaimers, and basic compliance elements).

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Responses
200

Successful response

application/json
get
/v1/listings/mls_profiles

API Resources

The base URL for all listings API requests is:

Property Resource

Get property listings

get

Retrieve property listings with support for OData query options

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
$filterstringOptional

OData filter expression

Example: contains(PropertyType, 'Lease') or StandardStatus eq 'Active'
$selectstringOptional

Select specific fields

Example: ListingId,BedroomsTotal
$orderbystringOptional

Order results by specified fields (append 'desc' for descending order)

Example: ModificationTimestamp desc
$expandstringOptional

Expand related entities

Example: Media($select=MediaKey),OpenHouse($select=OpenHouseKey)
$topinteger · max: 25000Optional

Limit the number of results

Default: 10
$skipintegerOptional

Skip number of results

Default: 0
$ignorenullsbooleanOptional

Ignore null fields and omit them from the results

Default: falseExample: true
$applystringOptional

Allows groups and aggregates data by specified fields

Example: groupby((OriginatingSystemName,ListingId))
Responses
200

Successful response

application/json
get
/v1/listings/data/Property

Available $filter fields:

OriginatingSystemName, ModificationTimestamp, PhotosChangeTimestamp, StandardStatus, PropertyType, ListingId, ListOfficeMlsId, ListingKey, OnMarketTimestamp, ListingContractDate, OnMarketDate, ListPrice, OriginalListPrice, CloseDate, StatusChangeTimestamp, MlsStatus, City, PostalCode, PostalCodePlus4, StateOrProvince, StreetDirPrefix, StreetDirSuffix, StreetName, StreetNumber, StreetSuffix, UnitNumber, UnparsedAddress, ListAgentFullName, ListOfficeName, CoListAgentFullName, BuyerAgentFullName, CoBuyerAgentFullName, CoListOfficeName, BuyerOfficeName, CoBuyerOfficeName, BathroomsTotalInteger, PropertySubType, BathroomsPartial, BathroomsHalf, BathroomsFull, LotSizeArea, LotSizeSquareFeet, Latitude, Longitude, GarageYN, GarageSpaces, CarportYN, CarportSpaces, PoolPrivateYN, SeniorCommunityYN, AssociationYN, NewConstructionYN, BedroomsTotal, DaysOnMarket, YearBuiltEffective, YearBuilt, PhotosCount, LivingArea, SpecialListingConditions, CountyOrParish, ListOfficeName, RawLocation, Location

$expand options:

  • Media - Property media (join from the Media resource)

  • OpenHouse - Property open houses (join from the OpenHouse resource)

  • PropertyChange - (Non-RESO) Historical change tracking for property fields with old/new values and modification timestamps

  • PreferredMedia - (Non-RESO) Optimized expand that returns the first 2 photos by media order, with priority given to the preferred photo (much faster than expanding Media)

Geospatial Filtering:

Supported via geo.distance on RawLocation or Location. Only le comparison is accepted (distance in meters):

Text Search:

The API supports fuzzy text matching using the search.text function. This feature allows you to search for properties using partial or incomplete text across multiple fields.

Address Search:

Search for properties using partial or incomplete addresses with the RawAddressSearchText field.

Note: This performs fuzzy text matching only; it is not a geocoding service.

Syntax:

Example:

Agent and Office Search:

Search for properties by agent, co-agent, office, or co-office names using search.text on the following fields. This search encompasses both listing and buyer agents, as well as their respective co-agents and offices:

  • ListAgentSearchText - Listing agent names

  • BuyerAgentSearchText - Buyer agent names

  • ListOfficeSearchText - Listing office names

  • BuyerOfficeSearchText - Buyer office names

Syntax:

Example:

Sorting by Relevance:

To sort results by the best match, use:

Complete Example:

Media Resource

Get media resources

get

Retrieve media resources with support for OData query options

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
$filterstringOptional

OData filter expression

Example: Order eq 1
$selectstringOptional

Select specific fields

Example: MediaKey,Order
$orderbystringOptional

Order results by specified fields (append 'desc' for descending order)

Example: ModificationTimestamp desc
$topinteger · max: 25000Optional

Limit the number of results

Default: 10
$skipintegerOptional

Skip number of results

Default: 0
$ignorenullsbooleanOptional

Ignore null fields and omit them from the results

Default: falseExample: true
$applystringOptional

Allows groups and aggregates data by specified fields

Example: groupby((OriginatingSystemName,ListingId))
Responses
200

Successful response

application/json
get
/v1/listings/data/Media

Available $filter fields:

OriginatingSystemName, ModificationTimestamp, MediaKey, MediaStatus, Order, MediaCategory, ResourceName, ResourceRecordKey, ResourceRecordID

Member Resource

Get member information

get

Retrieve member data with support for OData query options

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
$filterstringOptional

OData filter expression

Example: contains(OriginatingSystemName, 'sample')
$selectstringOptional

Select specific fields

Example: MemberMlsId
$orderbystringOptional

Order results by specified fields (append 'desc' for descending order)

Example: ModificationTimestamp desc
$topinteger · max: 25000Optional

Limit the number of results

Default: 10
$skipintegerOptional

Skip number of results

Default: 0
$ignorenullsbooleanOptional

Ignore null fields and omit them from the results

Default: falseExample: true
$applystringOptional

Allows groups and aggregates data by specified fields

Example: groupby((OriginatingSystemName,ListingId))
Responses
200

Successful response

application/json
get
/v1/listings/data/Member

Available $filter fields:

OriginatingSystemName, ModificationTimestamp, MemberMlsId, MemberFullName, MemberStatus, MemberStateOrProvince, MemberStateLicense

Office Resource

Get office information

get

Retrieve office data with support for OData query options

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
$filterstringOptional

OData filter expression

Example: contains(OriginatingSystemName, 'sample')
$selectstringOptional

Select specific fields

Example: OfficeMlsId
$orderbystringOptional

Order results by specified fields (append 'desc' for descending order)

Example: ModificationTimestamp desc
$topinteger · max: 25000Optional

Limit the number of results

Default: 10
$skipintegerOptional

Skip number of results

Default: 0
$ignorenullsbooleanOptional

Ignore null fields and omit them from the results

Default: falseExample: true
$applystringOptional

Allows groups and aggregates data by specified fields

Example: groupby((OriginatingSystemName,ListingId))
Responses
200

Successful response

application/json
get
/v1/listings/data/Office

Available $filter fields:

OriginatingSystemName, ModificationTimestamp, OfficeMlsId, OfficeName, OfficeStateOrProvince, OfficeStatus

OpenHouse Resource

Get open house information

get

Retrieve open house data with support for OData query options

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Query parameters
$filterstringOptional

OData filter expression

Example: contains(OriginatingSystemName, 'sample')
$selectstringOptional

Select specific fields

Example: OfficeMlsId
$orderbystringOptional

Order results by specified fields (append 'desc' for descending order)

Example: ModificationTimestamp desc
$topinteger · max: 25000Optional

Limit the number of results

Default: 10
$skipintegerOptional

Skip number of results

Default: 0
$ignorenullsbooleanOptional

Ignore null fields and omit them from the results

Default: falseExample: true
$applystringOptional

Allows groups and aggregates data by specified fields

Example: groupby((OriginatingSystemName,ListingId))
Responses
200

Successful response

application/json
get
/v1/listings/data/OpenHouse

Available $filter fields:

OriginatingSystemName, ModificationTimestamp, OpenHouseKey, ListingId, OpenHouseDate

Query Parameters

OData Query Support

All resources support the following OData query parameters:

  • $filter: Filter results using OData filter expressions

  • $select: Select specific fields to return

  • $top: Limit the number of results (default: 500, max: 5000)

  • $skip: Skip a number of results for pagination

Additionally, the Property resource supports:

  • $expand: Include related Media and OpenHouse data

Our API supports comprehensive OData filtering capabilities:

Comparison Operators

  • eq: Equal to

  • ne: Not equal to

  • gt: Greater than

  • ge: Greater than or equal to

  • lt: Less than

  • le: Less than or equal to

Logical Operators

  • and: Both conditions must be true

  • or: Either condition must be true

  • not: Negates the condition

String Functions

  • contains(field, 'value'): Checks if field contains the specified value

  • startswith(field, 'value'): Checks if field starts with the specified value

  • endswith(field, 'value'): Checks if field ends with the specified value

Example complex queries:

API Grouping Results

The OData API supports data aggregation using $apply=groupby(). Note that ALL grouping is case insensitive for string fields.

Syntax

Response Schema

The grouping response contains the following:

  • group

    • groupby: Field being grouped.

    • count: Total groups.

    • buckets: Array of group results.

      • key: Group value.

      • count: Items in the group.

      • group: Nested grouping (for multiple fields).


Example Response

Error Handling

All errors follow the standard OData format:

Last updated