MLS IDX API Documentation
Recommended Time to Pull Data
Data collection, synchronization, and distribution through the MLS IDX API occur through centralized processes that run during the early hours of each day. To ensure you are receiving the most accurate and up-to-date listing information, and to avoid possible inconsistencies, it is recommended that clients begin pulling data from MLS IDX API feeds after 10:00 AM.
Data Feed Overview
The MLS IDX API supports five core transactions: Login, Metadata, Search, GetObject, and Logout. These transactions are built on Representation State Transfer (REST) architecture, ensuring smooth and reliable data exchange between the MLS IDX API server and the websites or applications consuming the data.
All transactions can be performed by clients using either HTTPS GET or HTTPS POST methods.
Security Requirements:
- The minimum supported TLS version is TLS v1.2.
- All incoming requests must be made over HTTPS to ensure secure data transfer and compliance with modern encryption standards.
RETS Support
The MLS IDX API follows the Real Estate Transaction Standard (RETS) version 1.7.2 as closely as possible. However, there are a few important differences between this service and a fully certified RETS server:
- Compact and Compact-Decoded Formats
These formats are currently available only for Property searches. Compact responses use the RESO Data Dictionary, which as of Version 1.0 only provides a Property dictionary. Once Agent and Office dictionaries are finalized, support for these formats will be added. - Query Restrictions
Ad-hoc querying of records is not supported. Any filtering of results must be configured by the feed owner before data is retrieved. - Select Limitations
The Select function is only supported for Property queries in Compact or Compact-Decoded format. - Server Limits
A strict limit is enforced on the number of details that can be returned in a single Search request. Any Search request exceeding this server maximum will be rejected.
Authentication
All access to the MLS IDX API requires authentication using digest authentication (RFC 2617, HTTP Authentication).
- Login Requirement
A client must issue a Login request before making any other request. The Login transaction validates the provided credentials and initiates a session. - Session Management
Once authenticated, session control may be handled through HTTP cookies or other supported methods. Clients must support at least session control via cookies. - Credentials
Each registered MLS IDX API user is assigned unique authentication credentials when their data feed is set up. These credentials identify the user and grant access to all property, agent, and office data available to them. - Subsequent Requests
All requests for Metadata, Search, GetObject, and Logout must include both the Digest Authentication authorization header and the active session cookie.
Login Transaction
Description
Before any other request can be made, a client must issue a Login request. The Login transaction verifies the provided credentials and establishes a session.
Session control may be managed through HTTP cookies or other supported methods, but all clients must support cookie-based session handling.
The server’s response to the Login request includes all the necessary details for subsequent API calls. This information may include:
- URLs for other supported transactions
- Identity details associated with the destination owner
- Metadata version and timestamp information required by the system
Endpoint
https://sample.mlsidxapi.com/Login.svc/Login
Request Arguments
The Login transaction does not require any request arguments.
Login Response Body Format
A successful Login response will return an XML structure similar to the following:
<?xml version="1.0" encoding="UTF-8"?>
<RETS ReplyText="Operation Successful" ReplyCode="0">
<RETS-RESPONSE>
Broker=(Destination Owner ID)
MemberName=(Destination Owner Name)
MetadataVersion=(Current metadata version number)
MinMetadataVersion=(Earliest version of metadata supported by server)
MetadataTimestamp=(Timestamp of current version of metadata)
MinMetadataTimestamp=(Timestamp of earliest version of metadata supported by server)
User=(Destination Owner ID,,, Destination Owner ID)
GetObject=(URL to use for GetObject requests)
Login=(URL to use for Login requests)
Logout=(URL to use for Logout requests)
Search=(URL to use for Search requests)
GetMetadata=(URL to use for GetMetadata requests)
</RETS-RESPONSE>
</RETS>
Important Notes
A successful Login response header includes a Set-Cookie with an X-SESSIONID value. This X-SESSIONID must be submitted with every request made after logging in.
Clients must include any cookies set by the server in subsequent requests. See the official RETS Specifications for details.
Metadata Transaction
Description
The Metadata transaction is used to retrieve information about the structure and definitions of the data available through the MLS® IDX API. Metadata allows clients to properly format listing data for display and to organize it efficiently for future retrieval and storage.
End Point
https://sample.mlsidxapi.com/Metadata.svc/GetMetadata
| Argument | Type | Description | Default | Required | Supported Values |
|---|---|---|---|---|---|
| Type | String | Selects the type of metadata to be returned | RETS 1.7.2 | METADATA-SYSTEM METADATA-RESOURCE METADATA-CLASS METADATA-LOOKUP METADATA-LOOKUP_TYPE | |
| Format | String | Selects the supported data return format for the query response | STANDARD-XML | STANDARD-XML COMPACT | |
| ID | String | List of the names of the parent elements for the desired element, separated by colons Resource:Lookup Eg; Property:MesureUnit | 0 – request for all Type metadata contained within that level *. – request is for all Type metadata contained within that level and within the requested Type (i.e. all metadata) Resource:Class | ||
| Culture | String | Select the language of the results | en-CA | en-CA fr-CA |
Note: The metadata ID for METADATA-SYSTEM and METADATA-RESOURCE must be 0 or *.
Note: METADATA-LOOKUP and METADATA-LOOKUP_TYPE requests only support STANDARD-XML format
Metadata Examples
| Action | Syntax |
|---|---|
| Retrieve all Resource metadata, all levels | Type=METADATA RESOURCE&Format=COMPACT&ID=* |
| Retrieve all Class metadata, class level only | Type=METADATA CLASS&Format=COMPACT&ID=* |
| Retrieve Class metadata for a specific resource | Type=METADATA CLASS&Format=COMPACT&ID=Property |
| Retrieve Table metadata for a specific resource and class | Type=METADATA TABLE&Format=COMPACT&ID=Property:Property |
| Retrieve Lookup metadata for a specific resource | Type=METADATA-LOOKUP&Format=STANDARD- XML&ID=Property |
| Retrieve Lookup metadata for a specific resource and lookup type | Type=METADATA LOOKUP_TYPE&Format=STANDARD XML&ID=Property:Crop |
Server Response Header Fields
| Request Argument | Type | Description | Default | Required | Supported Values |
|---|---|---|---|---|---|
| Content-type | String | Media type of the underlying data | RETS 1.7.2 | text/xml |
Search Transactions and Data Synchronization
The MLS® IDX API allows clients to request and receive MLS® listing data for use on their websites and applications. This data must be refreshed regularly, as records are continuously added, updated, or removed.
The set of records available to each client is determined by:
- The type of destination making the request
- The owner of the destination
- The approval settings of boards, associations, brokerages, and/or salespersons (where applicable)
The MLS IDX API does not support ad-hoc queries against its data. Search filtering — such as restricting results to specific property types or price ranges — is not part of the Search transaction itself. Instead, filters are configured when a data feed is registered or edited.
Search transactions can be performed against three possible resource types: Office, Agent, and Property. The search process is the same for each resource:
- Retrieve all active records updated since a specified date/time
- Retrieve a master list of all active records (IDs and LastUpdated values)
- Compare the master list to the client’s local data store by matching IDs, identifying any records that are missing or have different LastUpdated values
- Retrieve the set of records by ID
Step 1: Retrieve All Active Records Updated Since a Specific Date/Time
It is neither necessary nor efficient to pull full property details for every active record on each request. Instead, clients should request only those records that have been updated since the last retrieval.
Including a LastUpdated query parameter in a search will return complete record details for all listings that have been updated since the specified date/time.
The following parameters are supported when using LastUpdated queries:
- Limit – Controls how many results are returned per page
- Offset – Specifies the starting point for the results, allowing pagination
- Count – Returns a count of matching records along with the results
When Count is requested, the response will include a Pagination element containing:
- TotalRecords
- Limit
- Offset
- RecordsReturned
- TotalPages
Query Syntax:
LastUpdated=RETSDateTime
Sample Result (Standard-XML):
<?xml version="1.0"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<RETS-RESPONSE xmlns="MLSIDXAPI.Search.Property">
<Pagination>
<TotalRecords>41</TotalRecords>
<Limit>10</Limit>
<Offset>21</Offset>
<TotalPages>5</TotalPages>
<RecordsReturned>10</RecordsReturned>
</Pagination>
<PropertyDetails>
<ID>10494823</ID>
<LastUpdated>Tue, 07 Jun 2011 04:20:24 GMT </LastUpdated>
<ListingID>55131841</ListingID>
<Building>
<BathroomTotal>1</BathroomTotal>
<BedroomsTotal>3</BedroomsTotal>
...
Sample Result (Compact)
<?xml version="1.0" encoding=UTF-8"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<COUNT Records="40"/>
<DELIMITER value="09"/>
<COLUMNS> ArchitecturalStyle AttachedGarageYN BathroomsHalf</COLUMNS>
<DATA> False 1 3 </DATA>
<DATA> False 1 3 </DATA>
...
Step 2. Retrieve a master list of all active records
Master Record List Search
This type of search provides clients with a complete master list of all records that should exist in their data store. Each record in the list includes two key values:
- Record ID
- LastUpdated timestamp
By comparing this master list to the client’s local data store, it becomes possible to identify which records need to be updated, deleted, or inserted.
- The master list search always returns a full set of records.
- Paging with Limit and Offset is not supported in Standard-XML, but it is supported for Compact format queries.
Query Syntax:
(ID=*)
Compact Format Option:
When requesting data in Compact format, the master list can also be retrieved by selecting only the ListingKey and ModificationTimestamp:
SELECT=(ListingKey,ModificationTimestamp)
This will return all records, regardless of any query supplied.
Sample Result (Standard-XML)
<?xml version="1.0"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<RETS-RESPONSE xmlns="MLSIDXAPI.Search.Property">
<Pagination>
<Property LastUpdated="THU,03 DEC 2026 01:55:46 GMT ID="10166883"/>
<Property LastUpdated="THU,03 DEC 2026 01:54:42 GMT ID="10166883"/>
<Property LastUpdated="THU,03 DEC 2026 01:53:06 GMT ID="10166883"/>
<Property LastUpdated="THU,03 DEC 2026 01:52:12 GMT ID="10166883"/>
<Property LastUpdated="THU,03 DEC 2026 01:51:07 GMT ID="10166883"/>
...
Sample Result (Compact)
<?xml version="1.0" encoding=UTF-8"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<COUNT Records="40"/>
<DELIMITER value="09"/>
<COLUMNS> ListingKey ModificationTimestamp>
<DATA> 799656 24/09/2026 10:05:23 AM</DATA>
<DATA> 799656 24/09/2026 10:12:17 AM</DATA>
<DATA> 799656 24/09/2026 10:25:32 AM</DATA>
<DATA> 799656 24/09/2026 10:38:23 AM</DATA>
<DATA> 799656 24/09/2026 10:44:34 AM</DATA>
...
Step 3. Compare Master List to Client Data Store
Any properties, offices, or agents in a client’s local data store that are not present in the master list must be removed.
For example, the master list will include a property only while it is active on the market and approved for distribution. Once the property is no longer active (e.g., sold, cancelled, or otherwise removed), it will be excluded from the master list and should be deleted from the client’s data store.
The master list also serves as a tool for data integrity. Steps 1 and 2 of the synchronization process should typically be enough for clients to maintain accurate datasets for all resources. However, if discrepancies arise between the LastUpdated values in the master list and the client’s local store (such as a missing or outdated property), these issues can be corrected in Step 4.
Step 4. Retrieve Records by ID
This search method allows clients to request records by specifying either a single ID or a comma-separated list of IDs. The server will return the complete set of matching records, if available.
Paging through results with Limit and Offset is not supported for this type of query.
Query Syntax: (ID=1*9Digit (,1*9Digit))
Sample Result (Standard-XML)
<xml version="1.0"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<RETS-RESPONSE Xmlns="MLSIDXAPI.Search.Property">
<PropertyDetails>
<ID>10166883</ID>
<LastUpdated>Thu, 03 Dec 2026 01:43:14 GMT</LastUpdated>
<ListingID>41111923</ListingID>
<Building>
<BathroomTotal>0</BathroomTotal>
...
Sample Result (Standard-XML)
<xml version="1.0" encoding="UTF-8"?>
<RETS ReplyText="Operation successful" ReplyCode="0">
<COUNT Records="1"/>
<DELIMITER value="09"/>
<COLUMNS> ArchitecturalStyle AttachedGarageYN BathroomTotal </COLUMNS>
...
<DATA> False 1 3 </DATA>
...
Property Photos Handling
Search transactions performed against the Property resource will return property details. However, photos are not included in full detail and must be retrieved separately using the GetObject transaction, along with the data provided in the Search transaction.
Once you’ve determined that full details for a property need to be requested, property photos should be managed as follows:
Adding Property Photos (Initial Download)
When a new property is added to the client’s data store, all related property photos should also be retrieved.
- Use the GetObject transaction to request all photos for the property.
- When requesting all photos, they are returned as a single multipart MIME object.
- Clients must parse this object and extract individual photos, which are separated by a boundary marker (
--boundary) and a content header.
Refer to the GetObject section for examples on how to request all photos for a property and how to handle multipart image objects.
Updating Property Photos
If a property is updated in the client’s data store, you must also check whether its photos have changed.
- Standard-XML Search: Compare the
PhotoLastUpdatedvalue for each photo with the value stored locally. If different, request and replace that specific photo using GetObject. - Compact Search: Since Compact responses do not include individual photo attributes, compare the
PhotosChangeTimestampat the property level. If it differs, delete all local property photos and re-download them using GetObject.
Adding New Property Photos
If new property photos have been added since your last update:
- Standard-XML Search: Compare the
SequenceIDvalues of each photo against those in the local data store. If a new one is detected, download it using GetObject. - Compact Search: Compare the
PhotosChangeTimestamp. If it has changed, delete all local photos and re-download them all using GetObject.
Removing Property Photos
If photos have been removed:
- Standard-XML Search: Compare the
SequenceIDvalues of each property photo against the client’s local data. If a photo is missing, delete it from the local store. - Compact Search: Compare the
PhotosChangeTimestamp. If it has changed, delete all local photos and re-download the complete set using GetObject.
Default Property Photo
Each property has a default photo, identified by SequenceID = 0. Clients with specific constraints may choose to use only the default photo.
Refer to the GetObject section for syntax examples on requesting:
- All property photos
- A specific property photo
- The default property photo
8. Search Transaction
The Search transaction is used to query and retrieve available offices, agents, and properties from the MLS® IDX API.
https://sample.MLSIDXAPI.com/Search.svc/Search
Request Arguments
| Argument | Type | Description | Default | Required | Supported Values |
|---|---|---|---|---|---|
| Format | String | Specifies the data return format to be used for the query response. | Sandard-XML | Standard-XML Standard-XML-Encoded COMPACT COMPACT-Decoded | |
| SearchType | String | Specifies the resource type to be returned in the query response. | RETS 1.7.2 | Office Agent Property | |
| Class | String | Defines the class of data within the selected SearchType. | RETS 1.7.2 | Office Agent Property | |
| QueryType | String | Specifies the language in which the query is submitted. | RETS 1.7.2 | DMQL2 | |
| Query | String | Defines the query statement that will be executed by the server. | RETS 1.7.2 | (ID=*)or(ID=0+) (,ID=1*9Digit (,1*9Digit)) LastUpdated=RETSDateType) | |
| Select | String | Specifies which fields should be returned in the query response. (Supported in COMPACT format only). | All elements | See list of elements in Appendix J – Property Details Payload (Compact) | |
| Count | Integer | Determines whether the server response should include a count of matching records. | 1 | 0 – results only 1 – record count and results 2 – record count only | |
| Limit | String | Specifies a maximum number of records to be returned in the search results. | “None” | “None” 1*9Digit (greater than 0, maximum of 100) | |
| Offset | Integer | Specifies an offset value, instructing the server to begin returning results from a position other than the first record in the matching set. | 1 | “None” 1*9Digit (greater than 0, maximum of 100) | |
| Culture | String | Defines how the results are localized, such as adapting data to a specific region or language setting. | en-CA | en-CA fr-CA |
Query Parameters Supported
| Query Parameter | Type | Resource | Required | Description |
|---|---|---|---|---|
| LastUpdated | RETSDateTime | Office Agent Property | Limits response to only those resources that have been updated since the supplied date/time. Example: 2011-05-08T22:0:17Z | |
| ID | 1*9Digit (,1*Digit) – or – String | Office Agent Property | MLS® IDX API | Single or comma separated list of IDs to include in the response. – or – Asterisk (*) or (0+), which signifies all available records will be returned |
Note
When specific records are requested using the ID parameter, the LastUpdated filter is ignored. Matching records will be returned regardless of their last update time.
Select Parameters Supported
This server implementation does not support customizing the response content using Select arguments.
Search Response Body Format
<?xml version"1.0" encoding="UTF-8"?>
<RETS ReplyText="Operation Successful" ReplyCode="0">
<RETS-RESPONSE>
(<Pagination>)
(Office Payload)
(OfficeDetails Payload)
(Agent Payload)
(AgentDetails Payload)
(Property Payload)
(PropertyDetails Payload)
</RETS-RESPONSE>
</RETS>
Pagination
When the server receives a request asking for record count to be provided, a Pagination element is returned as part of the response.
| Attribute | Description |
|---|---|
| Total Records | Indicates the total number of records that match the search criteria. |
| Limit | Specifies the number of records returned in a single page. This value equals the Limit parameter if provided; otherwise, it defaults to the system’s standard page size. |
| Offset | Indicates the starting record position within a set of paged search results. |
| TotalPages | Indicates the total number of pages available based on the search criteria and pagination settings. |
| RecordsReturned | Specifies the number of records returned in the current result set. |
Difference Between Compact and Standard-XML
Compact format payloads contain tabular data wrapped in an XML structure, following the RETS 1.7.2 standard (see RESO specifications). A <COLUMNS> element defines the table headers, and each record is represented as a single, flat <DATA> element.
Because the Compact format is consistent across RETS servers, many commonly available RETS tools and libraries are designed to work directly with it. The MLS IDX API provides Compact data as described in the RESO Data Dictionary 1.0 (see RESO Data Dictionary). With the exception of some legacy analytics elements (retained for backward compatibility), all payload elements originate from this dictionary.
Compact support for Agent and Office searches will be introduced once the RESO Data Dictionary includes finalized standards for these resources.
Limitations:
The RESO Data Dictionary 1.0 has a few known limitations, such as:
- Support for a maximum of 2 agents per property
- Support for up to 20 rooms per property
- Several data elements that are available in Standard-XML format are not currently represented in the Data Dictionary
Standard-XML
Standard-XML is the default format for search transactions. Payloads contain fully structured XML that mirrors the data provided by boards and associations as closely as possible.
Unless you are specifically using RETS tools that support only Compact format, it is recommended to use Standard-XML whenever possible for maximum compatibility and accuracy.
Difference Between STANDARD-XML and STANDARD-XML-Encoded
The STANDARD-XML format returns field data in a fully expanded, human-readable form. In contrast, the STANDARD-XML-Encoded format returns data in coded form, with a matching lookup available in the metadata.
The corresponding LookupType table contains four values:
- MetadataEntryID
- Value
- LongValue
- ShortValue
Example:
- A property might have a
LandscapeFeaturesvalue of “Vegetable garden”. - If requested in STANDARD-XML, the response will return just the text value:
Vegetable garden - If requested in STANDARD-XML-Encoded, the response will return the text value along with the associated code and the name of the lookup table that contains the
Value/LongValuepairs.
Comparison:
- STANDARD-XML provides a lighter payload, making storage and display simpler.
- STANDARD-XML-Encoded allows for more normalized data storage, enabling more advanced and flexible search capabilities.
| STANDARD-XML | <LandscapeFeatures>Landscaped, Vegetable Garden</LandscapeFeatures> |
| STANDARD-XML-Encoded | <LandscapeFeatures ID=”1.3″ LookupName=”LandscapeFeatures”>Landscaped, Vegetable garden </LandscapeFeatures> |
Measurement Handling in STANDARD-XML vs. STANDARD-XML-Encoded
Another key difference between STANDARD-XML and STANDARD-XML-Encoded formats is how measurement values are returned:
- In STANDARD-XML, measurements are provided as a fully formatted string, ready for direct display (e.g., “1200 sq ft”).
- In STANDARD-XML-Encoded, measurements are separated into two parts: a numeric value and a unit type ID.
The Unit attribute returned in the encoded format can be cross-referenced with the values provided by the MeasureUnit lookup in the metadata.
| STANDARD-XML | <SizeFrontage>125 sqft</SizeFrontage> |
| STANDARD-XML-Encoded | <SizeFrontage Unit=”1″>125</SizeFrontage> |
9. GetObject Transaction
The GetObject transaction is used to retrieve structured information associated with known system entities. This includes multimedia files such as property photos, documents, and other object-related data.
Objects requested and returned through this transaction are delivered as MIME media types. When multiple images are included in a response, they are separated by a boundary marker and associated content headers (such as Content-Type, Content-ID, Object-ID, and Content-Description). The final image in the set is followed by a closing boundary marker.
sample.mlsidxapi.com/Object.svc/GetObject
| Request Argument | Type | Description | Default | Required | Supported Values |
|---|---|---|---|---|---|
| Accept | String | Acceptable media types | RETS 1.7.2 | Image/jpeg |
Request Arguments
| Request Argument | Type | Description | Default | Required | Supported Values |
|---|---|---|---|---|---|
| Resource | String | Represents a resource as defined in the system’s metadata dictionary. | RETS 1.7.2 | Office Agency Property | |
| Type | String | Specifies the object type as defined in the system’s metadata. | Photo | RETS 1.7.2 | Photo Thumbnail/Photo LargePhoto See Type Argument Notes section below |
| ID | String | A string that identifies the object or group of objects being requested. | RETS 1.7.2 | See ID Argument Explanation section below | |
| Culture | String | Specifies results localization, applicable only when querying the Office resource. | en-CA | en-CA fr-CA |
Type Argument Notes
- Office supports: ThumbnailPhoto only
- Agent supports: ThumbnailPhoto and LargePhoto
- Property supports: Photo, ThumbnailPhoto, and LargePhoto
ID Argument Explanation
The MLS® IDX API supports only a limited subset of ID arguments as defined in the RETS 1.7.2 specification.
| ID | ::= resource-set |
| resource-set | ::= resource-entity [: object-id-list ] |
| resource-entity | ::= 1*ALPHANUM |
| object-id-list | ::= * | object-id * (, object-id) |
| object-id | ::= * | 1*5DIGIT |
Object-ID Argument Support
The Property resource is the only one that supports object-id arguments. For Agent and Office resources, only a single image is available, so in these cases the resource-entity field is the only one used.
Server Response Header Fields
| Request Argument | Type | Description | Default | Required | Supported Values |
|---|---|---|---|---|---|
| Content-Type | String | Specifies the media type of the object or objects being returned. | RETS 1.7.2 | Image/jpeg Multipart/parallel; boundary = | |
| Content-ID | String | Provides the identifier of the object, corresponding to the ID that was requested. | RETS 1.7.2 Only Returned in a multipart response | ||
| Object-ID | Indicates the object number that is being returned in the response. | RETS 1.7.2 | Integer * (only if error processing multipart/parallel response) | ||
| MIME-Version | String | Specifies the MIME version of the response object. | RETS 1.7.2 | 1.0 |
Response Arguments
Objects retrieved through this transaction are delivered as MIME media types. For successful requests, the message body contains only the objects in the specified MIME type. If an error occurs, the response will follow the standard error response format.
| Action | Syntax |
|---|---|
| Get agent High Resolution photo for agent 12345 | Resource=Agent&Type=LargePhoto&ID=12345 |
| Get office logo for office 12345 | Resource=Office&Type=ThumbnailPhoto&ID=12345 |
| Get all medium resolution photos for property with ID 12345 | Resource=Property&Type=PhotoID=12345 –or– Resource=Property&Type=Photo&ID=12345:* |
| Get High Resolution photo #3 for property with ID 12345 | Resource=Property&Type=LargePhoto&ID=12345:3 |
| Return default Medium resolution photo for property with ID 12345 | Resource=Property&Type=PhotoID=12345:0 |
| Return Medium Resolution photos 2,4 and 7 for property with ID 12345 | Resource=Property&Type=Photo&ID=12345:2,4,7 |
Multiple Images (Multipart) Feed Example
–creaboundary
Content-Type: image/jpeg
Content-ID:12345
Object-ID:1
Content-Description: null
<image 1 data>
–creaboundary
Content-Type: image/jpeg
Content-ID:12345
Object-ID:2
Content-Description: null
<image 2 data>
–creaboundary—
10.Logout Transaction
Description
The Logout transaction is used to terminate an active session. Clients should send a Logout request at the end of every session. While the server cannot strictly enforce Logout due to the stateless nature of requests, proper session termination is required for compliance. Failure to consistently log out may result in future login attempts being rejected until the previous session has been properly closed.
Endpoint
https://sample.mlsidxapi.com
Request Arguments
The Logout transaction does not require any request arguments.
Logout Response Body Format
<?xml version="1.0" encoding="UTF-8"?>
<RETS ReplyText="Operation Successful" ReplyCode="0" />
Powered by: REALTOR.ca Logos
All real estate advertising websites, partner sites, and member websites are required to display the “Powered by REALTOR.ca” badge. This badge must link back to the original listing on REALTOR.ca.
If a REALTOR® is managing their own website directly (without using a third-party provider), it is their responsibility to ensure the badge is displayed on every listing page.
Use the following code snippets to embed the “Powered by REALTOR.ca” logos and links into your website:
English
<a href="https://www.realtor.ca/en" alt="Powered by: REALTOR.ca" target="_blank"> <img width="125" src="https://www.realtor.ca/images/en-ca/powered_by_realtor.svg"/></a>
French
<a href="https://www.realtor.ca/fr" alt="Alimenté par: REALTOR.ca" target="_blank"> <img width="125" src="https://www.realtor.ca/images/fr-ca/powered_by_realtor.svg"/></a>
Analytics
In addition to distributing listing data to member websites, brokerage websites, franchisors, and third-party platforms, the MLS IDX API also supports integration with various public websites and mobile applications.
Since a single listing can appear across multiple sites and apps, it’s important for agents and brokerages to be able to track where and how often their listings are being viewed. To enable this, the MLS® IDX API includes support for a data warehousing solution that collects and organizes listing activity.
Analytics can be broken down across several dimensions, such as:
- Website or application where the listing was viewed
- Listing agent
- Real estate firm
- Brokerage owner
- Franchisor
This ensures agents and brokerages have clear insight into the performance and visibility of their listings across multiple channels.
Analytics Web Service
The Analytics Web Service is used to capture listing activity and statistics from various sources. Whenever a listing-related event occurs (such as a property being viewed), the website or application should send a request to the Analytics Web Service to record the event.
No response handling is required, which means these requests can be made asynchronously without interrupting the user experience.
End Point
https://analytics.crea.ca/LogEvents.svc/LogEvents
Request Arguments
| Argument | Type | Description | Required | Supported Values |
|---|---|---|---|---|
| ListingID | Integer | Specifies the ID of the listing. | Yes | |
| DestinationID | Integer | Specifies the ID of the destination where the data is being sent or recorded. | Yes | Specifies the destination ID of the data feed where the event takes place. |
| EventType | String | Specifies the event being tracked by the analytics system (for example, a property view or other listing interaction). | Yes | Refer to the Event Types section below for supported values. |
| UUID | String | Specifies the unique identifier for a user or device. This value should remain consistent across all requests made by the same user or device. | Yes | A GUID or device identifier combined with the Destination ID. Note: UUIDs are tracked in 5-minute windows. If the same UUID generates an identical event within that timeframe, the duplicate event is ignored. |
| IP | IP Address | Provides the IP address of the client or device, if available. | No | Note This parameter is used to resolve geographic data. If it is not provided, geographic information will not be included in the results. |
| RefererralURL | URL | Specifies the URL associated with the event, which is validated during analytics processing. | No | |
| LanguageID | Integer | Indicates the language preference of the user. | No | 1: English 2: French |
Event Types
| Event | Description |
|---|---|
| View | Event to be triggered when a listing is viewed on a website. |
| Click | This event applies to third party websites only. It should be triggered when the MoreInformationLink (included in the PropertyDetails payload) is clicked. |
| email_realtor | This event applies to third party websites only. It should be triggered when an email inquiring about a particular listing is sent to the REALTOR®. |
Example
Appendix – Payload Legend
This appendix describes the columns used in the payload tables in Appendix A-J
Cardinality is used to identify how many times an element can be expected within the Standard-XML payload.
1 Exactly one instance of this element.
0..1 Zero or one instance of this element.
0..* Zero or more instances of this element.
1..* One or more instances of this element will be included
Type is used to identify the type of data to be expected in an element within the Standard-XML payload.
Boolean True/False
Collection A collection of similar elements
Complex Comprised of primitive data types and/or other complex elements.
DateTime A date and time
Integer A whole number
Lookup A value taken from the associated lookup. In Encoded format, the
both the lookup ID and text value is available.
Lookup
(CSV)
A comma separated list of values taken from the associated lookup.
In Encoded format, the both the lookup ID and text values are
available.
Script A JavaScript script to be used for gathering analytics data from client
websites (deprecated, still included for backwards compatibility)
String String
(CSV) Free text representation of the value
A comma separated set of free text values
URL Website address
Type is used to identify the metadata lookup table associated with the element. Any values available in the element can be found in the identified Lookup table.
Office Payload
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| Office | 1 | ID | Integer | Unique ID assigned to the office | |
| Office | 1 | Last Updated | DateTime | The date the office information was last updated |
OfficeDetails Payload
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| OfficeDetails | 1 | Name | String | The name of the Office | |
| OfficeDetails | 1 | ID | Integer | Unique ID assigned to the Office | |
| OfficeDetails | 1 | LastUpdated | DateTime | Date the information was last updated | |
| OfficeDetails | 0..1 | Logo | Complex | Details of an Office’s photo | |
| Logo | 0..1 | ThumbnailIURL | String | Includes Url of the Thumbnail image | |
| Logo | 0..1 | LogoLastUpdated | DateTime | The date the logo was last updated | |
| OfficeDetails | 1 | OrganizationType | Lookup | The type of organization | OrganizationType |
| OfficeDetails | 0..1 | Designation | Lookup | The designation of the organization | OrganizationDesignations |
| OfficeDetails | 1 | Address | Complex | Address of the office. See Appendix G – Address Payload | |
| OfficeDetails | 0..1 | Phones | Collection | Collection of Phone. See Appendix H – Phone Payload | |
| OfficeDetails | 0..1 | Websites | Collection | Collection of Website. See Appendix I – Website Payload | |
| OfficeDetails | 0..1 | Franchisor | Lookup | The name of the franchisor | Franchisor |
Agent Payload
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| Agent | 1 | ID | Integer | (Attribute) Unique ID assigned to the Agent | |
| Agent | 1 | LastUpdated | DateTime | (Attribute) The date agent information was last updated |
AgentDetails Payload
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| AgentDetails | 1 | Name | String | The name of the Agent | |
| AgentDetails | 1 | ID | Integer | (Attribute) Unique ID assigned to the Agent | |
| AgentDetails | 1 | LastUpdated | String | (Attribute) The date the agent was last updated | |
| AgentDetails | 0..1 | Position | String | The position of the Agent | |
| AgentDetails | 0..1 | Websites | Collection | Collection of Website. See Appendix I – Website Payload | |
| AgentDetails | 0..1 | Phones | Collection | Collection of Phone. See Appendix H – Phone Payload | |
| AgentDetails | 1 | Office | Complex | The organization that the Agent works for. See Appendix B – OfficeDetails Payload | |
| AgentDetails | 0..1 | EducationCredentials | String (CSV) | The credentials of the Agent | |
| AgentDetails | 0..1 | Photo | Complex | Details of the Agent Photo | |
| Photo | 0..1 | LastUpdated | DateTime | The date the photo was last updated | |
| Photo | 0..1 | ThumbnailURL | String | Includes Url of the Thumbnail image | |
| Photo | 0..1 | LargePhotoURL | String | Includes Url of the High resolution image | |
| AgentDetails | 1 | Address | Complex | Address of the office. See Appendix G – Address Payload | |
| AgentDetails | 0..1 | Specialties | Collection | The specialty of the Agent | |
| Specialties | 1..* | Specialty | Lookup | The specialty of the Agent | Specialties |
| AgentDetails | 0..1 | Designations | Collection | Collection of Designation | |
| Designations | 1..* | Designation | Lookup | The designation of the Agent | IndividualDesignations |
| AgentDetails | 0..1 | Languages | Collection | Collection of Language | |
| Languages | 1..* | Language | Lookup | Language spoken of the Agent | Languages |
| AgentDetails | 0..1 | TradingAreas | Collection | Collection of TradingArea | |
| TradingAreas | 1..* | TradingArea | String | Trading area of the agent |
Property Payload (Standard-XML)
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| Property | 1 | ID | Integer | Unique ID assigned to the Property | |
| Property | 1 | LastUpdated | DateTime | The date the property was last updated |
PropertyDetails Payload (Standard-XML)
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| PropertyDetails | 1 | ID | Integer | (Attribute) Unique ID assigned to the property | |
| PropertyDetails | 1 | ListingID | String | The MLS® Number of the property. | |
| PropertyDetails | 1 | LastUpdated | DateTime | (Attribute) The date the property was last updated | |
| PropertyDetails | 0..1 | Business | Complex | Business details of property | |
| PropertyDetails | 0..1 | Board | Integer | ID of the Board/Association responsible for the listing | Boards |
| Business | 0..1 | BusinessType | Lookup (CSV) | Type of Business | BusinessType |
| Business | 0..1 | BusinessSubType | Lookup (CSV) | Business Sub Type | BusinessSubType |
| Business | 0..1 | EstablishedDate | String | Date the Business was established | BasementType |
| Business | 1 | Franchise | Boolean | Indicates whether business is a franchise or not | |
| Business | 0..1 | Name | String | Business Name | |
| Business | 0..1 | OperatingSince | String | Date indicating how long the business has been opened | |
| PropertyDetails | 1 | Building | Complex | Building details of the property | |
| Building | 0..1 | BathroomTotal | Integer | Number of bathrooms | |
| Building | 0..1 | BedroomsAboveGround | Integer | Number of bedrooms above ground | |
| Building | 0..1 | BedroomsBelowGround | Integer | Number of bedrooms below ground | |
| Building | 0..1 | BedroomsTotal | Integer | Number of bedrooms (below + above ground) | |
| Building | 0..1 | Age | String | The age of the building | |
| Building | 0..1 | Amenities | Lookup (CSV) | The building amenities | Amenities |
| Building | 0..1 | Amperage | Lookup (CSV) | The building amperage | Amperage |
| Building | 0..1 | Anchor | String | The building anchor | |
| Building | 0..1 | Appliances | Lookup (CSV) | The appliances included with the building | Appliances |
| Building | 0..1 | ArchitecturalStyle | Lookup (CSV) | Architectural style of the building | ArchitecturalStyle |
| Building | 0..1 | BasementDevelopment | Lookup (CSV) | Development of the basement | BasementDevelopment |
| Building | 0..1 | BasementFeatures | Lookup (CSV) | Features of the basement | BasementFeatures |
| Building | 0..1 | BasementType | Lookup (CSV) | The type of basement | BasementType |
| Building | 0..1 | BomaRating | String | BOMA energy performance rating | |
| Building | 0..1 | CeilingHeight | String | Ceiling height of the building | MeasureUnit* |
| Building | 0..1 | CeilingType | Lookup (CSV) | Ceiling type of the building | CeilingType |
| Building | 0..1 | ClearCeilingHeight | Lookup (CSV) | Clear ceiling height of the building | ClearCeilingHeight |
| Building | 0..1 | ConstructedDate | String | The year the building was built | |
| Building | 0..1 | ConstructionMaterial | Lookup (CSV) | List of construction materials used in the building | ConstructionMaterial |
| Building | 0..1 | ConstructionStatus | Lookup | The status of the building | ConstructionStatus |
| Building | 0..1 | ConstructionStyleAttachment | Lookup | The attachment style of the building | ConstructionStyleAttachment |
| Building | 0..1 | ConstructionStyleOther | Lookup | Construction style other | ConstructionStyleOther |
| Building | 0..1 | ConstructionStyleSplitLevel | Lookup | Construction style split level | ConstructionStyleSplitLevel |
| Building | 0..1 | CoolingType | Lookup (CSV) | Type of Cooling in the building | CoolingType |
| Building | 0..1 | EnerguideRating | String | Energuide energy performance rating | |
| Building | 0..1 | ExteriorFinish | Lookup (CSV) | The exterior finish of the building | ExteriorFinish |
| Building | 0..1 | FireProtection | Lookup (CSV) | Fire protection and security features of building | FireProtection |
| Building | 0..1 | FireplaceFuel | Lookup (CSV) | List of fireplace fuels for the fireplaces in building | FireplaceFuel |
| Building | 0..1 | FireplacePresent | String | Indicates whether there is a fireplace in building | |
| Building | 0..1 | FireplaceTotal | Integer | Total number of fireplaces present in building | |
| Building | 0..1 | FireplaceType | Lookup (CSV) | The types of fireplace in the building | FireplaceType |
| Building | 0..1 | Fixture | Lookup (CSV) | Building fixture | Fixture |
| Building | 0..1 | FlooringType | Lookup (CSV) | The type of flooring in the building | FlooringType |
| Building | 0..1 | FoundationType | Lookup (CSV) | The type of foundation of the building | FoundationType |
| Building | 0..1 | HalfBathTotal | String | The number of half Bathrooms | |
| Building | 0..1 | HeatingFuel | Lookup (CSV) | Fuel used for heating the building | Heating Fuel |
| Building | 0..1 | HeatingType | Lookup (CSV) | The heating type of the building | HeatingType |
| Building | 0..1 | LeedsCategory | String | LEEDS green building certification category | |
| Building | 0..1 | LeedsRating | String | LEEDS green building certification rating | |
| Building | 0..1 | RenovatedDate | String | The date the building was renovated | |
| Building | 0..1 | RoofMaterial | Lookup (CSV) | The type of roofing material of the building | RoofMaterial |
| Building | 0..1 | RoofStyle | Lookup (CSV) | The roof style of the building | RoofStyle |
| Building | 0..1 | Rooms | Collection | Collection of Room | |
| Rooms | 1..* | Room | Complex | Details of a single room | |
| Room | 0..1 | Type | Lookup | Type of room | RoomType |
| Room | 0..1 | Width | String | Width of the room | MeasureUnit* |
| Room | 0..1 | Level | Lookup | The level of the room | RoomLevel |
| Room | 0..1 | Length | String | The length of the room | MeasureUnit* |
| Room | 0..1 | Description | String | General description of the room | |
| Room | 0..1 | Dimension | String | The dimensions of the room | |
| Building | 0..1 | StoriesTotal | Integer | The number of stories of the building | |
| Building | 0..1 | SizeExterior | String | Building interior size | MeasureUnit* |
| Building | 0..1 | SizeInterior | String | Building exterior size | MeasureUnit* |
| Building | 0..1 | SizeInteriorFinished | String | The size of finished interior | MeasureUnit* |
| Building | 0..1 | StoreFront | Lookup (CSV) | The building storefront | StoreFront |
| Building | 0..1 | TotalFinishedArea | String | Total finished area | MeasureUnit* |
| Building | 0..1 | Type | Lookup (CSV) | Type of Building | BuildingType |
| Building | 0..1 | Uffi | String | UFFI (Urea Formaldehyde Foam Insulation) status | |
| Building | 0..1 | UnitType | String | Type of unit | |
| Building | 0..1 | UtilityPower | Lookup (CSV) | The types of power in the building | UtilityPower |
| Building | 0..1 | UtilityWater | Lookup (CSV) | Building water type | UtilityWater |
| Building | 0..1 | VacancyRate | String | The rate of vacancy | |
| PropertyDetails | 0..1 | Land | Complex | Details about the land of the property | |
| Land | 0..1 | SizeTotal | String | The total size of the property | MeasureUnit* |
| Land | 0..1 | SizeTotalText | String | The total size of the property as text | |
| Land | 0..1 | SizeFrontage | String | The amount of frontage of the property | MeasureUnit* |
| Land | 0..1 | AccessType | Lookup (CSV) | The type of access to the property | AccessType |
| Land | 0..1 | Acreage | Boolean | Whether the property has acreage or not | |
| Land | 0..1 | Amenities | Lookup (CSV) | The land amenities | AmenitiesNearby |
| Land | 0..1 | ClearedTotal | String | The amount of cleared land | MeasureUnit* |
| Land | 0..1 | CurrentUse | Lookup (CSV) | What the land is currently used for | CurrentUse |
| Land | 0..1 | Divisible | String | Whether the land is divisible or not (True/False) | |
| Land | 0..1 | FenceTotal | String | The amount of fencing | MeasureUnit* |
| Land | 0..1 | FenceType | Lookup (CSV) | The type of fence | FenceType |
| Land | 0..1 | FrontsOn | Lookup | The front type | FrontsOn |
| Land | 0..1 | LandDisposition | Lookup (CSV) | List of disposition features of the land | LandDispositionType |
| Land | 0..1 | LandscapeFeatures | Lookup (CSV) | List of landscape features of the land | LandscapeFeatures |
| Land | 0..1 | PastureTotal | String | The amount of pasture available | MeasureUnit* |
| Land | 0..1 | Sewer | Lookup (CSV) | List of sewer types on the land | Sewer |
| Land | 0..1 | SizeDepth | String | The depth of the land | MeasureUnit* |
| Land | 0..1 | SizeIrregular | String | The size of irregular land | |
| Land | 0..1 | SoilEvaluation | Lookup | The soil evaluation | SoilEvaluationType |
| Land | 0..1 | SoilType | Lookup (CSV) | The type of soil | SoilType |
| Land | 0..1 | SurfaceWater | Lookup (CSV) | List of surface water types on the land | SurfaceWater |
| Land | 0..1 | TiledTotal | String | The size of tiled land | MeasureUnit* |
| Land | 0..1 | TopographyType | Lookup (CSV) | Land topography type | TopographyType |
| PropertyDetails | 0..1 | AgentDetails | Complex | Agent details. See Appendix D – AgentDetails Payload | |
| PropertyDetails | 1..* | Address | Complex | Address of property. See Appendix G – Address Payload | |
| PropertyDetails | 0..1 | AlternateURL | Complex | Set of links to information about the property | |
| AlternateURL | 0..1 | BrochureLink | URL | Link to brochure web site or document | |
| AlternateURL | 0..1 | MapLink | URL | Link to a mapping site displaying the property location | |
| AlternateURL | 0..1 | PhotoLink | URL | Link to a site containing additional photos | |
| AlternateURL | 0..1 | SoundLink | URL | Link to a site containing sound clips | |
| AlternateURL | 0..1 | VideoLink | URL | Link to a site containing video for the property | |
| PropertyDetails | 0..1 | AmmenitiesNearBy | Lookup (CSV) | List of amenities nearby to the property | AmenitiesNearBy |
| PropertyDetails | 0..1 | CommunicationType | Lookup (CSV) | The communication type available | CommunicationType |
| PropertyDetails | 0..1 | CommunityFeatures | Lookup (CSV) | The community features | CommunityFeatures |
| PropertyDetails | 0..1 | Crop | Lookup (CSV) | The types of crops available | Crop |
| PropertyDetails | 0..1 | DocumentType | Lookup (CSV) | Documents available | DocumentType |
| PropertyDetails | 0..1 | EquipmentType | Lookup (CSV) | List of equipment available | EquipmentType |
| PropertyDetails | 0..1 | Easement | Lookup (CSV) | The property easement types | Easement |
| PropertyDetails | 0..1 | FarmType | Lookup (CSV) | The type of farm | FarmType |
| PropertyDetails | 0..1 | Features | Lookup (CSV) | The property features available | Features |
| PropertyDetails | 0..1 | IrrigationType | Lookup (CSV) | The type of irrigation of the property | IrrigationType |
| PropertyDetails | 0..1 | Lease | String | Lease value | |
| PropertyDetails | 0..1 | LeasePerTime | Lookup | Lease time e.g. quarterly | PaymentUnit |
| PropertyDetails | 0..1 | LeasePerUnit | Lookup | Lease unit e.g. square feet | MeasureUnit |
| PropertyDetails | 0..1 | LeaseTermRemaining | String | Duration of the lease remaining. | |
| PropertyDetails | 0..1 | LeaseTermRemainingFreq | Lookup | The frequency of the remaining lease e.g. daily | PaymentUnit |
| PropertyDetails | 0..1 | LeaseType | Lookup | Type of lease | LeaseType |
| PropertyDetails | 0..1 | ListingContractDate | String | The effective date of the agreement between the seller and the seller’s broker | |
| PropertyDetails | 0..1 | LiveStockType | Lookup (CSV) | The types of livestock available | LiveStockType |
| PropertyDetails | 0..1 | LoadingType | Lookup (CSV) | Property loading type available | LoadingType |
| PropertyDetails | 0..1 | LocationDescription | String | A description of the location | |
| PropertyDetails | 0..1 | Machinery | Lookup (CSV) | Machinery available | Machinery |
| PropertyDetails | 0..1 | MaintenanceFee | String | Condo/Maintenances fees | |
| PropertyDetails | 0..1 | MaintenanceFeePaymentUnit | String | Condo/Maintenances fee payment unit (Frequency) | |
| PropertyDetails | 0..1 | MaintenanceFeeType | Lookup (CSV) | Condo/Maintenances fee type | MaintenanceFeeType |
| PropertyDetails | 0..1 | ManagementCompany | String | The name of management company | |
| PropertyDetails | 0..1 | MunicipalID | String | The id of municipality | |
| PropertyDetails | 0..1 | OpenHouse | Collection | Collection of open house Events | |
| OpenHouse | 1..* | Event | Complex | Details of a single open house event | |
| Event | 1 | StartDateTime | DateTime | The open house start date and time | |
| Event | 1 | EndDateTime | DateTime | The open house End date and time | |
| Event | 1 | Comments | String | Comments about the open house | |
| PropertyDetails | 0.1 | LiveStream | Collection | Collection of Live Streame Open House events | |
| LiveStream | 1..* | Event | Complex | Details of a Live Stream Open House event | |
| Event | 1 | StartDateTime | DateTime | The Live Stream Start date and time | |
| Event | 1 | EndDateTime | DateTime | The Live Stream End date and time | |
| Event | 1 | URL | String | URL to the Live Stream | |
| PropertyDetails | 0..1 | OwnershipType | Lookup | The type of ownership ex: Condo/Strata, freehold etc. | OwnershipType |
| PropertyDetails | 0..1 | ParkingSpaces | Collection | Collection of Parking. Available if parking type details are available | |
| ParkingSpaces | 1..* | Parking | Complex | Details of the parking type | |
| Parking | 1 | Name | Lookup | Type of parking available | ParkingType |
| Parking | 1 | Spaces | String | Number of spaces for the associated parking type | |
| PropertyDetails | 0..1 | ParkingSpaceTotal | String | The total number of parking spaces | |
| PropertyDetails | 0..1 | Photo | Collection | Collection of PropertyPhoto | |
| Photo | 1..* | PropertyPhoto | Complex | Details of a single property photo | |
| PropertyPhoto | 1 | SequenceID | Integer | ID of the property photo. Required for GetObject calls | |
| PropertyPhoto | 0..1 | Description | String | Description of the photo | |
| PropertyPhoto | 1 | LastUpdated | DateTime | The timestamp, not including time zone, of when the photo was last updated | |
| PropertyPhoto | 1 | PhotoLastUpdated | DateTime | The timestamp, including time zone, of when the photo was last updated. Example: Tue, 20 Oct 2015 09:23:13 GMT | |
| PropertyPhoto | 0..1 | ThumbnailURL | String | Includes Url of the Thumbnail image | |
| PropertyPhoto | 0..1 | PhotoURL | String | Includes Url of the Medium resolution image | |
| PropertyPhoto | 0..1 | LargePhotoURL | String | Includes Url of the High resolution image | |
| PropertyDetails | 0..1 | Plan | String | Plan of the property | |
| PropertyDetails | 0..1 | PoolType | Lookup (CSV) | The type of pool on the property | PoolType |
| PropertyDetails | 0..1 | PoolFeatures | Lookup (CSV) | The features of the pool | PoolFeatures |
| PropertyDetails | 0..1 | Price | String | Price of the Property | |
| PropertyDetails | 0..1 | PricePerTime | Lookup | Price of property per time | PaymentUnit |
| PropertyDetails | 0..1 | PricePerUnit | String | Price of property per unit | MeasureUnit |
| PropertyDetails | 0..1 | PropertyType | Lookup | Type of real estate property | PropertyType |
| PropertyDetails | 0..1 | PublicRemarks | String | Description of the property | |
| PropertyDetails | 0..1 | RentalEquipmentType | Lookup (CSV) | The type of rental equipment | RentalEquipmentType |
| PropertyDetails | 0..1 | RightType | Lookup (CSV) | List of property rights | RightType |
| PropertyDetails | 0..1 | RoadType | Lookup (CSV) | Type of road | RoadType |
| PropertyDetails | 0..1 | StorageType | Lookup (CSV) | Storage Type Included | StorageType |
| PropertyDetails | 0..1 | Structure | Lookup (CSV) | List of structures on the property | StructureType |
| PropertyDetails | 0..1 | SignType | Lookup (CSV) | Type of signage | SignType |
| PropertyDetails | 0..1 | TransactionType | Lookup | Type of transaction (e.g. sale, lease) | TransactionType |
| PropertyDetails | 0..1 | TotalBuildings | String | Total number of buildings included in the property | |
| PropertyDetails | 0..1 | UtilitiesAvailable | Collection | Collection of Utility | |
| UtilitiesAvailable | 1..* | Utility | Complex | Details of a single utility | |
| Utility | 1 | Type | Lookup | Type of utility available | UtilityType |
| Utility | 1 | Description | String | Description of utility available | |
| PropertyDetails | 0..1 | ViewType | Lookup (CSV) | Types of views available | ViewType |
| PropertyDetails | 0..1 | WaterFrontType | Lookup | Waterfront type of the property | WaterFrontType |
| PropertyDetails | 0..1 | WaterFrontName | String | Name of the waterfront the property is on | |
| PropertyDetails | 0..1 | AdditionalInformationIndicator | String | Additional information indicator text | |
| PropertyDetails | 0..1 | ZoningDescription | String | Description of the zoning | |
| PropertyDetails | 0..1 | ZoningType | Lookup | Property Zoning type | ZoningType |
| PropertyDetails | 1 | MoreInformationLink | URL | Link to the property details page on Realtor.ca | |
| PropertyDetails | 1 | SocialMediaWebsite | URL | Link to property specified by Agent/Realtor Member | |
| PropertyDetails | 1 | AnalyticsClick | Script | Used for statistical tracking of MoreInformationLink. (deprecated, included for backwards compatibility) | |
| PropertyDetails | 1 | AnalyticsView | Script | Used for statistical tracking of property details views on DDF® client sites. (deprecated, included for backwards compatibility) |
Appendix G – Address Payload
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| Address | 0..1 | StreetAddress | String | This field returns a formatted street address. It may contain a vertical bar (I) line delimiter if address contains multiple lines. It includes the following address fields if available: AdditionalStreetInfo, UnitNumber, StreetNumber, StreetDirectionPrefix, StreetName, StreetSuffix, StreetDirectionSuffix, BoxNumber, If the above fields do not yield a valid street Address, the following fields will be included instead (if available) AdditionalStreetInfo, UnitNumber, AddressLine1, AddressLine2 | |
| Address | 0..1 | AddressLine1 | String | The first address line of the address | |
| Address | 0..1 | AddressLine2 | String | The second address line of the address | |
| Address | 0..1 | StreetNumber | String | The building number in the address | |
| Address | 0..1 | StreetDirectionPrefix | String | Directional indicator that precedes the street name | |
| Address | 0..1 | StreetName | String | Official name of the street in the address | |
| Address | 0..1 | StreetSuffix | String | The street type | |
| Address | 0..1 | StreetDirectionSuffix | String | Directional indicator that follows a street name | |
| Address | 0..1 | UnitNumber | String | Apartment, suite or office number portion of a postal address | |
| Address | 0..1 | BoxNumber | String | Post office box if applicable | |
| Address | 0..1 | City | String | City of the address | |
| Address | 0..1 | Province | String | Province of the address | |
| Address | 0..1 | PostalCode | String | Postal code of the address | |
| Address | 0..1 | Country | String | Country of the address | |
| Address | 0..1 | AdditionalStreetInfo | String | Additional information about the street | |
| Address | 0..1 | CommunityName | String | Community name of the address | |
| Address | 0..1 | Neighbourhood | String | Neighbourhood name of the address | |
| Address | 0..1 | Subdivision | String | Subdivision name of the address | |
| Address | 0..1 | Latitude | String | Latitude coordinates | |
| Address | 0..1 | Longitude | String | Longitude coordinates |
Appendix H – Phone Payload
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| Phones | 1..* | Phone | String | The phone number | |
| Phone | 1 | ContactType | String | (Attribute) The type of contact, e.g. Business | |
| Phone | 1 | PhoneType | String | (Attribute) The Type of phone line (Toll free, Fax, etc.) |
Appendix I – Website Payload
| Parent | Cardinality | Name | Type | Description | Lookup |
|---|---|---|---|---|---|
| Websites | 1..* | Website | String | The website of the organization | |
| Website | 1 | ContactType | String | (Attribute) The type of contact (Business, Office, etc.) | |
| Website | 1 | WebsiteType | String | (Attribute) The type of the website |
Appendix J- PropertyDetails Payload (Compact)
Payload based on RESO Data Dictionary 1.0: https://www.reso.org/data-dictionary
| Standard Name | Data Type | Encoded | Lookup Name | RESO Field Description |
|---|---|---|---|---|
| ArchitecturalStyle | String | Y | A list describing the style of the structure. For example, Victorian, Ranch, Craftsman, etc. | |
| AssociationFee | Decimal | A fee paid by the homeowner to the Home Owners Association which is used for the upkeep of the common area, neighborhood or other association related benefits. Synonym: Condo fee | ||
| AssociationFeeFrequency | String | The frequency the association fee is paid. For example, Weekly, Monthly, Annually, Bi-Monthly, One Time, etc. | ||
| AttachedGarageYN | Boolean | A flag indicating that the garage attached to the dwelling. | ||
| BathroomsHalf | Integer | A room containing 2 of the 4 elements constituting a bath, which are; Toilet, Sink, Bathtub or Shower Head. A Half Bath will typically contain a Sink and Toilet. | ||
| BathroomsTotal | String | String allowing for whatever total of bathrooms existed in legacy systems. Examples may be “three full and one half”, 1.2, One and a half, 1.5 | ||
| BedroomsTotal | Integer | The total number of bedrooms in the dwelling. | ||
| Building AreaTotal | Decimal | Total area of the structure. Includes both finished and unfinished areas. | ||
| BuildingAreaUnits | String | Y | MeasureUnit | A pick list of the unit of measurement for the area. i.e. Square Feet, Square Meters, Acres, etc. |
| CarportSpaces | Integer | The number of carport spaces included in the sale. | ||
| CarportYN | Boolean | A flag indicating that the listing has a garage. This flag may be T/F, Y/N or other true, false or unknown indicator. As with all flags, the field may be null. | ||
| City | String | The city in listing address. | ||
| CoListAgentCellPhone | String | |||
| CoListAgentDesignation | String | Y | IndividualDesignations | Designations and certifications acknowledging experience and expertise in various real estate sectors are awarded by NAR and each affiliated group upon completion of required courses. |
| CoListAgentDirectPhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentFax | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentFulIName | String | The full name of the co-listing agent. (First Middle Last) | ||
| CoListAgentKey | String | A system unique identifier. Specifically, in aggregation systems, the Key is the system unique identifier from the system that the record was just retrieved. This may be identical to the related xxxID identifier, but the key is guaranteed unique for this record set. | ||
| CoListAgentOfficePhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentOfficePhonext | String | The extension of the given phone number (if applicable). | ||
| CoListAgentPager | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentTollFreePhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentDesignation | String | IndividualDesignations | Designations and certifications acknowledging experience and expertise in various real estate sectors are awarded by NAR and each affiliated group upon completion of required courses. | |
| CoListAgentDirectPhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentFax | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentFullName | String | The full name of the co-listing agent. (First Middle Last) | ||
| CoListAgentKey | String | A system unique identifier. Specifically, in aggregation systems, the Key is the system unique identifier from the system that the record was just retrieved. This may be identical to the related xxxID identifier, but the key is guaranteed unique for this record set. | ||
| CoListAgentOfficePhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentOfficePhonExt | String | The extension of the given phone number (if applicable). | ||
| CoListAgentPager | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentTollFreePhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListAgentURL | String | The website URI of the co-listing agent. | ||
| CoListOfficeFax | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListOfficeKey | String | A system unique identifier. Specifically, in aggregation systems, the Key is the system unique identifier from the system that the record was just retrieved. This may be identical to the related xxxID identifier, but the key is guaranteed unique for this record set. | ||
| CoListOfficeName | String | The legal name of the brokerage co-representing the seller. | ||
| CoListOfficePhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| CoListOfficePhoneExt | String | The extension of the given phone number (if applicable). | ||
| CoListOfficeURL | String | The website URI for the co-listing office. | ||
| CommunityFeatures | String | Y | CommunityFeatures | A list of features related to, or available within, the community. |
| ConstructionMaterials | String | Y | ConstructionMaterial | A list of the materials that were used in the construction of the property. |
| Cooling | String | Y | CoolingType | A list describing the cooling or air conditioning features of the property. |
| CoolingYN | Boolean | The property has cooling or Air Conditioning. | ||
| Country | String | The country abbreviation in a postal address. | ||
| CoveredSpaces | Integer | |||
| Fencing | String | FenceType | A list of types of fencing found at the property being sold. | |
| FireplaceFeatures | String | FireplaceType | A list of features or description of the fireplace(s) included in the sale/lease. | |
| FireplaceFuel | String | Y | FireplaceFuel | A list describing the types of fuel that may be used in the property’s fireplace(s). |
| FireplacesTotal | Integer | The total number of fireplaces included in the property. | ||
| Flooring | String | Y | FlooringType | A list of the type(s) of flooring found within the property. |
| FrontageLength | Decimal | Textual description of the length of the frontages selected in the Frontage Type field. | ||
| FrontageType | String | Y | FrontsOn | Pick list of types of frontage. i.e. Oceanfront, Lakefront, Golf course…etc…. |
| GarageSpaces | Integer | The number of spaces in the garage(s). | ||
| GarageYN | Boolean | A flag indicating that the listing has a garage. This flag may be T/F, Y/N or other true, false or unknown indicator. As with all flags, the field may be null. | ||
| GreenBuildingCertification | String | The name of the certification awarded to a new or pre-existing residential or commercial structure. For example: LEED, Energy Star, ICC-700. | ||
| GreenCertificationRating | String | Many certifications have a rating system that provides an indication of the structure’s level of energy efficiency. This is commonly expressed in a numeric value but can also be a name, such as Gold or Silver. | ||
| Heating | String | Y | Heating Type | A list describing the heating features of the property. |
| Heating Fuel | String | Y | HeatingFuel | A list describing the heating fuel of the property. |
| Lease | String | Lease | Lease value. | |
| LeaseFrequency | String | Y | LeaseFrequency | The frequency of lease payments. |
| LeaseTerm | String | LeaseTerm | The lease term payment type. | |
| Levels | String | The number of levels in the property being sold. For example, One Level, Two Levels, Split Level, Three or More Levels, Multi Level, Loft. A discreet horizontal plane of interior living space (excluding basements). | ||
| ListAOR | String | Y | Boards | The responsible Board or Association of REALTORS for this listing. |
| ListAgentCellPhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| ListAgentDesignation | String | Y | IndividualDesignations | Designations and certifications acknowledging experience and expertise in various real estate sectors are awarded by NAR and each affiliated group upon completion of required courses. |
| ListAgentFax | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| ListAgentFullName | String | The full name of the listing agent. (First Middle Last) | ||
| ListAgentKey | String | A system unique identifier. Specifically, in aggregation systems, the ListAgentKey is the system unique identifier from the system that the record was retrieved. This may be identical to the related xxxID. | ||
| ListAgentOfficePhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| ListAgentOfficePhoneExt | String | The extension of the given phone number (if applicable). | ||
| ListAgentPager | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| ListAgentURL | String | The website URI of the listing agent. | ||
| ListingID | String | The well-known identifier for the listing. The value may be identical to that of the Listing Key, but the Listing ID is intended to be the value used by a human to retrieve the information about a specific listing. In a multiple originating system or a merged system, this value may not be unique and may require the use of the provider system to create a synthetic unique value. | ||
| ListingContractDate | String | The effective date of the agreement between the seller and the seller’s broker. This is the date entered by the agent reflecting when the change occurred contractually, not a timestamp of when the change was made in the MLS®. | ||
| ListingKey | String | A unique identifier for this record from the immediate source. This may be a number, or string that can include URI or other forms. This is the system you are connecting to and not necessarily the original source of the record. | ||
| ListOfficeFax | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| ListOfficeKey | String | A system unique identifier. Specifically, in aggregation systems, the Key is the system unique identifier from the system that the record was just retrieved. This may be identical to the related xxxID identifier, but the key is guaranteed unique for this record set. | ||
| ListOfficeName | String | The legal name of the brokerage representing the seller. | ||
| ListOfficePhone | String | North American 10 digit phone numbers should be in the format of ###-###-#### (separated by hyphens). Other conventions should use the common local standard. International numbers should be preceded by a plus symbol. | ||
| Should be preceded by a plus symbol. | ||||
| ListOfficePhoneExt | Decimal | The extension of the given phone number (if applicable). | ||
| ListOfficeURL | String | The website URI for the listing office. | ||
| ListPrice | String | 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. | ||
| LotFeatures | String | Y | LandscapeFeatures | A list of features or description of the lot included in the sale/lease. |
| LotSizeArea | Decimal | The total area of the lot. See Lot Size Units for the units of measurement (Square Feet, Square Meters, Acres, etc.). | ||
| LotSizeUnits | String | Y | MeasureUnit | A pick list of the unit of measurement for the area. i.e. Square Feet, Square Meters, Acres, etc. |
| ModificationTimestamp | DateTime | The transactional timestamp automatically recorded by the MLS® system representing the date/time the listing was last modified. | ||
| MoreInformationLink | URL | Link to a site providing more information about that property. | ||
| NumberOfUnitsTotal | Integer | Total number of units included in the income property, occupied or unoccupied. | ||
| OpenParkingSpaces | Integer | The number of open or uncovered parking spaces included in the sale. | ||
| OpenParkingYN | Boolean | A flag indicating that any parking spaces associated with the property are not covered by a roof. | ||
| OriginatingSystemKey | String | Unique identifier from the originating system which is commonly a key to that system. In the case where data is passed through more than one system, this is the originating system key. | ||
| OriginatingSystemName | String | The name of the originating record provider. Most commonly the name of the MLS®. The place where the listing is originally input by the member. The legal name of the company. To be used for display. | ||
| ParkingTotal | Integer | The total number of parking spaces included in the sale. | ||
| PhotosChangeTimestamp | DateTime | System generated timestamp of when the last update or change to the photos for this listing was made. | ||
| PhotosCount | Integer | The total number of pictures or photos included with the listing. | ||
| ResourceRecordID | This is the Listing ID | |||
| Order | Order is the Sequence ID of the images | |||
| MediaURL | This is the path to the photo URL | |||
| MediaModificationTimestamp | This the timestamp in ISO8601 | |||
| PoolFeatures | String | Y | PoolFeatures | A list of features or description of the pool included in the sale/lease. |
| PoolYN | Boolean | The property has a pool. | ||
| PostalCode | String | The postal code portion of a street or mailing address. | ||
| PropertyType | String | Y | PropertyType | A list of types of properties such as Residential, Lease, Income or Land. |
| PublicRemarks | String | Text remarks that may be displayed to the public. In an MLS®, it is the field where information is entered for the public. This information is intended to be visible on-line. This is typically information that describes the selling points of the building and/or land for sale. Local conditions and rules will determine what such content can contain. Generally, the following information is excluded: any information pertaining to entry to the property, the seller and/or tenant, listing member contact information. In other systems, these remarks will be determined by local business rules. | ||
| Roof | String | Y | RoofStyle | A list describing the type or style of roof. For example Spanish Tile, Composite, Shake, etc. |
| RoomDimensions * | String | * This field is a repeating element. If this field is repeated, add 1, 2, 3, etc., to the end of the field. The dimensions of the room minimally represented as length and width (i.e. 12 x 10). For irregular rooms a measurement of all sides of the polygon representing the inner walls of the room. i.e. 10×12 x 8 x 2. | ||
| RoomLength * | Decimal | * This field is a repeating element. If this field is repeated, add 1, 2, 3, etc., to the end of the field. Measurement specifying the horizontal dimension of something that is fixed in place. The source attribute defines the source of the measurement, while the units attribute defines the unit of measurement: feet, meters or other units of measure. The general use of this is restricted to regular rectangular objects. | ||
| RoomLengthWidthUnits * | String | Y | MeasureUnit | * This field is a repeating element. If this field is repeated, add 1, 2, 3, etc., to the end of the field. A pick list of the unit of measurement for the area. i.e. Square Feet, Square Meters, Acres, etc. |
| RoomLevel * | String | Y | RoomLevel | * This field is a repeating element. If this field is repeated, add 1, 2,3, etc., to the end of the field. The level or floor on which the room is located. This should correspond to the selections in the Levels field. |
| RoomType * | String | Y | RoomType | * This field is a repeating element. If this field is repeated, add 1, 2, 3, etc., to the end of the field. i.e. RoomType1, RoomType2, etc. The Type is a list of possible room types. i.e. Bedroom, Bathroom, Living Room, Workshop, etc. |
| RoomWidth * | Decimal | * This field is a repeating element. If this field is repeated, add 1, 2, 3, etc., to the end of the field. Measurement specifying the smaller horizontal dimension of something that is fixed in place. The source attribute defines the source of the measurement, while the units attribute defines the unit of measurement: feet, meters or other units of measure. The general use of this is restricted to regular rectangular objects. | ||
| Sewer | String | Y | Sewer | A list describing the sewer or septic features of the property. |
| StateOrProvince | String | Text field containing the accepted postal abbreviation for the state or province. | ||
| Stories | String | The number of floors in the property being sold. | ||
| StreetAdditionalInfo | String | Information other than a prefix or suffix for the street portion of a postal address. | ||
| StreetDirPrefix | String | The direction indicator that precedes the listed property’s street name. | ||
| StreetDirSuffix | String | The direction indicator that follows a listed property’s street address. | ||
| StreetName | String | The street name portion of a listed property’s street address. | ||
| StreetNumber | String | The street number portion of a listed property’s street address. | ||
| StreetSuffix | String | The suffix portion of a listed property’s street address. | ||
| SubdivisionName | String | A neighbourhood, community, complex or builder tract. | ||
| UnitNumber | String | Text field containing the number or portion of a larger building or complex. Unit Number should appear following the street suffix or, if it exists, the street suffix direction, in the street address. Examples are: “APT G”, “55”, etc. | ||
| UnparsedAddress | String | 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. | ||
| View | String | Y | ViewType | A view as seen from the listed property. |
| ViewYN | Boolean | The property has a view. | ||
| WaterBodyName | String | The name, if known, of the body of water on which the property is located. (E.g., lake name, river name, ocean name, sea name, canal name). | ||
| WaterfrontYN | Boolean | The property is on the waterfront. | ||
| YearBuilt | Integer | The year that an occupancy permit is first granted for the house or other local measure of initial habitability of the build. The type definition permits an empty value with an attribute noting that it is an unknown date or that the building is new construction. While constraints have not been applied, convention at the time of adoption has this as a four (4) digit year value. | ||
| Zoning | String | Y | ZoningType | A division of the city or county into areas of different permissible land uses. |
| AnalyticsView | String | Used for statistical tracking of MoreInformationLink. (deprecated, included for backwards compatibility | ||
| AnalyticsClick | String | Used for statistical tracking of property details views on DDF® client sites. (deprecated, included for backwards compatibility) |
Appendix K – Digest Authentication
Digest Authentication is a security mechanism that allows a client application to authenticate itself to the server by sending a message digest along with its HTTP request. The digest is generated by applying a one-way hash algorithm to a combination of the HTTP request message and the client’s password.
A typical digest authentication process includes the following steps:
Step 1:
The client sends an initial request that requires authentication but does not include a username or password.
Step 2:
The server responds with a 401 Unauthorized status code and provides an authentication realm along with a nonce (a randomly generated, single-use value).
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="MLS.IDX.API",
nonce="NjM0NjkxNDY3NDU3NzYuNDo3YWNiNjk3NjIzNmY2MWU2ZmY2ZGRlZWRlMWFiYmVhNw==",
qop="auth"
This response indicates that authentication is required. The server includes a realm (identifying the authentication scope) and a nonce (a unique, single-use value) that the client must use when generating the digest for the next request.
Step 3 – Client Authorization Request
The client then makes another request, this time including an Authorization header containing the digest credentials.
Authorization: Digest
username="11UUctLDhfS8hkqpuhkgfhrB",
realm="MLS.IDX.API",
nonce="NjM0NjkxNDY3NDU3NzYuNDo3YWNiNjk3NjIzNmY2MWU2ZmY2ZGRlZWRlMWFiYmVhNw==",
uri="/Login.svc/Login",
cnonce="5ee95aeee8c10a3e780da1455e33a2f3",
nc=00000001,
response="a5621bb7658b8936808db14d5ac02862",
qop="auth"
This header allows the client to securely prove its identity using the server-provided nonce and its own credentials, without sending the password in plain text.
Step 4 – Server Response and Session Establishment
If the authentication is successful, the server processes the request and returns a session ID cookie as part of the response. This session ID must be included in subsequent requests to maintain the authenticated session.
Example response:
HTTP/1.1 200 OK
Set-Cookie: X-SESSIONID=c838d36c-506e-4595-9697-3f7a6ae6e08d;
expires=Fri, 04-May-2012 14:36:34 GMT;
path=/
The X-SESSIONID value uniquely identifies the session and is required for all future authenticated requests until logout or session expiration.
Step 5 – Invalid Credentials
If the provided username or password is incorrect, the server responds with a 401 Unauthorized status code and issues a new nonce value. The client must then retry the authentication process using the updated nonce.
Example response:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="MLS.IDX.API",
nonce="NjM0NjkxNDY3NDU3NzYuNDo3YWNiNjk3NjIzNmY2MWU2ZmY2ZGRlZWRlMWFiYmVhNw==",
qop="auth"
This ensures that authentication remains secure and that nonce values are used only once per authentication attempt.
Digest Authentication Response Calculations
https://en.wikipedia.org/wiki/Digest_access_authentication
The “response” value is calculated in three steps, as follows. Where values are combined, they
are delimited by colon symbols.
- The MD5 hash of the combined username, authentication realm and password is
calculated. The result is referred to as HA1. - The MD5 hash of the combined method and digest URI is calculated, e.g. of “GET” and
“/dir/index.html”. The result is referred to as HA2. - The MD5 hash of the combined HA1 result, server nonce (nonce), request counter (nc),
client nonce (cnonce), quality of protection code (qop) and HA2 result is calculated. The
result is the “response” value provided by the client.
Since the server has the same information as the client, the response can be checked by
performing the same calculation. In the example given above the result is formed as follows,
where MD5() represents a function used to calculate an MD5 hash, backslashes represent a
continuation and the quotes shown are not used in the calculation.
Completing the example given in RFC 2617 gives the following results for each step.
HA1 = MD5( “Mufasa:[email protected]:Circle Of Life” )
= 939e7578ed9e3c518a452acee763bce9
HA2 = MD5( “GET:/dir/index.html” )
= 39aff3a2bab6126f332b942af96d3366
Response = MD5( “939e7578ed9e3c518a452acee763bce9:\
dcd98b7102dd2f0e8b11d0f600bfb0c093:\
00000001:0a4f113b:auth:\
39aff3a2bab6126f332b942af96d3366″ )
= 6629fae49393a05397450978507c4ef1
At this point the client may make another request, reusing the server nonce value (the server
only issues a new nonce for each “401” response) but providing a new client nonce (cnonce). For
subsequent requests, the hexadecimal request counter (nc) must be greater than the last value
it used – otherwise an attacker could simply “replay” an old request with the same credentials. It
is up to the server to ensure that the counter increases for each of the nonce values that it has
issued, rejecting any bad requests appropriately. Obviously changing the method, URI and/or
counter value will result in a different response value.
The server should remember nonce values that it has recently generated. It may also remember
when each nonce value was issued, expiring them after a certain amount of time. If an expired
value is used, the server should respond with the “401” status code and add stale=TRUE to the
authentication header, indicating that the client should re-send with the new nonce provided,
without prompting the user for another username and password.
The server does not need to keep any expired nonce values – it can simply assume that any
unrecognised values have expired. It is also possible for the server to only allow each nonce
value to be returned once, although this forces the client to repeat every request. Note that
expiring a server nonce immediately will not work, as the client would never get a chance to
use it.
Appendix L – Reply Codes
| Transaction | Reply Code | Meaning |
|---|---|---|
| Login Metadata Search GetObject Logout | 0 | Operation successful |
| Login | 20022 | Additional login not permitted There is already a user logged in with this user name, and this server does not permit multiple logins. |
| Login | 20036 | Miscellaneous server login error The quoted-string of the body-start-line contains text that SHOULD be displayed to the user |
| Search | 20201 | No Records Found No matching records were found. |
| Search | 20203 | Miscellaneous Search Error The quoted-string of the body-start-line contains text that MAY be displayed to the user. |
| Search | 20206 | Invalid Query Syntax The query could not be understood due to a syntax error. |
| Search | 20208 | Maximum Records Exceeded The specified server limit exceeds the maximum allowed. |
| GetObject | 20400 | Invalid Resource The request could not be understood due to an unknown resource. |
| GetObject | 20401 | Invalid Type The request could not be understood due to an unknown object type for the resource. |
| GetObject | 20402 | Invalid Identifier The identifier does not match the KeyField of any data in the resource. |
| GetObject | 20403 | No Object Found No matching object was found to satisfy the request. |
| GetObject | 20413 | Miscellaneous error The server encountered an internal error. |
| Metadata | 20500 | Invalid Resource The request could not be understood due to an unknown resource. |
| Metadata | 20501 | Invalid Type The request could not be understood due to an unknown metadata type. |
| Metadata | 20502 | Invalid Identifier The identifier is not known inside the specified resource. |
| Metadata | 20503 | No Metadata Found No matching metadata of the type requested was found. |
| Metadata | 20509 | Metadata Unavailable The requested metadata is currently unavailable. |
| Metadata | 20513 | Miscellaneous error The server encountered an internal error. |
| Metadata Search GetObject Logout | 20701 | Not logged in The server did not detect an active login for the session in which the Logout transaction was submitted. |
| Logout | 20702 | Miscellaneous error. The transaction could not be completed. The ReplyText gives additional information. |
Appendix M – Complete List of Metadata Lookups Available
| Resource | Metadata-Lookup |
|---|---|
| Property | Access Type |
| Property | Amenities |
| Property | AmenitiesNearby |
| Property | Amperage |
| Property | Appliances |
| Property | ArchitecturalStyle |
| Property | BasementDevelopment |
| Property | BasementFeatures |
| Property | BasementType |
| Property | Boards |
| Property | BuildingType |
| Property | BusinessSubType |
| Property | BusinessType |
| Property | CeilingType |
| Property | ClearCeilingHeight |
| Property | CommunicationType |
| Property | CommunityFeatures |
| Property | ConstructionMaterial |
| Property | ConstructionStatus |
| Property | ConstructionStyleAttachment |
| Property | ConstructionStyleOther |
| Property | ConstructionStyleSplitLevel |
| Property | Cooling Type |
| Property | Crop |
| Property | CurrentUse |
| Property | DocumentType |
| Property | Easement |
| Property | EquipmentType |
| Property | ExteriorFinish |
| Property | FarmType |
| Property | Features |
| Property | FenceType |
| Property | FireProtection |
| Property | FireplaceFuel |
| Property | FireplaceType |
| Property | Fixture |
| Property | FlooringType |
| Property | FoundationType |
| Property | FrontsOn |
| Property | Heating Type |
| Property | HeatingFuel |
| Property | IrrigationType |
| Property | LandDispositionType |
| Property | LandscapeFeatures |
| Property | LeaseType |
| Property | LiveStockType |
| Property | LoadingType |
| Property | Machinery |
| Property | MaintenanceFeeType |
| Property | MeasureUnit |
| Property | OwnershipType |
| Property | ParkingType |
| Property | PaymentUnit |
| Property | PoolFeatures |
| Property | PoolType |
| Property | PropertyType |
| Property | RentalEquipmentType |
| Property | RightType |
| Property | RoadType |
| Property | RoofMaterial |
| Property | RoofStyle |
| Property | Room Level |
| Property | RoomType |
| Property | Sewer |
| Property | SignType |
| Property | SoilEvaluationType |
| Property | SoilType |
| Property | StorageType |
| Property | StoreFront |
| Property | StoreFront |
| Property | StructureType |
| Property | SurfaceWater |
| Property | TopographyType |
| Property | TransactionType |
| Property | UffiCodes |
| Property | UtilityPower |
| Property | UtilityType |
| Property | UtilityWater |
| Property | ViewType |
| Property | WaterFrontType |
| Property | ZoningType |
| Agent | Boards |
| Agent | IndividualDesignations |
| Agent | Languages |
| Agent | Specialties |
| Office | Franchisor |
| Office | OrganizationType |
| Office | OrganizationDesignations |
CONTACT US
Get In Touch With Us
Ready to transform your real estate platform with the most comprehensive MLS data? Contact us today to get started with our API service and take your business to the next level!