Bridge Documentation
Bridge is a data distribution platform that allows MLSs and other data providers to manage licensing, billing and data access using APIs built on modern industry standards.
For software developers, the platform standardizes how you access MLS datasets and other real estate data in the United States and Canada. MLS data is normalized to RESO Data Dictionary standards and made available through a variety of transports, including RESO Web API and RETS.
Support and Updates
Recent updates to the platform and functionality can be found here: https://www.bridgeinteractive.com/bridge-platform-updates/
If you have any questions about using the APIs available on the platform, contact support at api@bridgeinteractive.com.
For questions related to MLS licensing agreements and listing data, it’s usually best to talk to the MLS directly, as all access is at their discretion.
At this time support is only offered in English.
Getting started with the Bridge Platform
The Bridge platform is comprised of two components:
- The platform dashboard: for managing data access, API tokens and documentation.
- The data transports: RESO Web API, RETS and Bridge Web API.
Access to the Bridge platform is typically initiated by the MLS. If you are looking to access MLS data, first contact the relevant MLS to request an invite to the platform.
Step 1: Registering on the Bridge platform
If you are invited directly by a data provider to the Bridge platform, click the link in the email invitation and follow the prompts to complete the registration process.
Once registered, you will be able to log into the dashboard to manage various aspects of your applications, including getting API tokens and data. If the data provider has included data licenses in your invitation, you'll be able to execute the agreements and manage your billing if applicable.
What is an application?
An application represents a product that consumes data using the API and requires a distinct API token. Elements linked to an application include:
- The application profile
- API tokens
- Data access approvals for various datasets
- API traffic logs
When registering your account, your first application is automatically generated. While most users will only need a single application, you may create as many as you need. Typically you’ll only need more than one if you are receiving multiple feeds from a single MLS.
For example, if you are receiving an IDX feed and a VOW feed from a single MLS, then you will need to create an additional application for the second feed. This can then be re-used for other MLSs that also want to give multiple feeds. Note that you will now have two sets of API access tokens - one for each type of feed.
Your Primary application
By default, your first application is set as the Primary application. Any data access that is shared with you (either from an MLS invite or by a Broker) is provisioned against your Primary application. You can specify which application is Primary under Application Settings on the dashboard.
Application Profile
Your application profile is shown to data providers during the approval process, and allows you to add details that will help them decide whether or not to grant access and what type of data feed you should get.
If you are a vendor working with a specific brokerage, be sure to include the brokerage name and contact details.
Including details about what data you need, as well as how and where the data will be used, will speed up the approval process. Consider adding a link to your application or website, as well as screenshots to help provide context for your request.
Note that each application will have its own profile, and they can be updated at any time.
Merging Accounts
If you have more than one account on the platform, you may use the tool in your account settings to merge them together. By doing so, you will combine all the applications, users, agreements and payment profiles into a single account. You will require the platform credentials for the account you wish to merge.
Since all the users will still be active, you are able to sign into the platform with any of the credentials. You may de-activate a user by adjusting your account settings.
Accounts can only be merged if they have the same role (broker, agent or vendor). If you require the account role to be updated, please reach out to support.
Account merges cannot be undone.
If you previously had separate accounts for Bridge Agreement Management and Bridge API, you will be able to merge these, allowing you to see your data access and agreements in a single dashboard.
If you sign in using your MLS's SSO, you may still merge with your Bridge API account, and continue to sign in using either method. You are not able to merge two SSO accounts together.
If your Bridge Agreement Management and Bridge API used the same email and password, you'll be signed in to your Bridge API account by default. To see your agreements you'll need to merge in your Agreement Management account.
Step 2: Data Access
The Bridge platform allows you to request data access from any of our customer data providers. All datasets available through the platform require approval from the data provider. Whether they approve your request, or what is required to get that approval, is at their discretion. In some cases, data providers may require you to execute data license agreements, pay fees or do compliance testing.
A list of available datasets you can apply for can be found in your dashboard. Not all available MLSs are listed here; some have additional requirements you must fulfil in order to apply for the dataset.
If you are a member of an MLS that you want to work with, and you do not see that MLS on the dashboard, please reach out to support to see if we are able to facilitate access.
If you have been invited onto the platform by an MLS, your Primary application will automatically have data access to that MLS in a pending state. Once the MLS makes final approval, that status will change to “Approved”, and you will be able to retrieve data via the API.
Data Access Statuses
- Pending: Your application has been submitted to the data provider and is pending approval.
- Approved: Your application has been approved by the data provider, and the data is available through the Bridge.
- Denied: Your application has been denied for a data license. A reason will be supplied when you are notified of this status change. You may apply again if desired.
- Suspended: Your application has been temporarily suspended.
- Revoked: The data provider has revoked your access to their data. The data feed for this resource is no longer available. You will need to reapply to regain access.
Data Approval
MLSs will approve your application for specific feed types. These typically represent whether access is provisioned for an IDX, VOW, BBO, or other data license.
Each feed type has its own set of rules that govern the subset of data you are granted. These rules include which fields and which records are available, as well as any conditional field suppression that might apply.
Indication of what data you have been granted access to is available using the metadata endpoint for each dataset.
The MLS is also able to specify whether you are allowed to replicate datasets (as opposed to only making on-demand API queries), as well as to specify the ability for brokers to share data access with 3rd parties.
You will be notified by email when an MLS has approved your data access request.
Test datasets
Every application is automatically approved for access a Test dataset. This is machine-generated and useful when trying an initial integration with the platform using generic, static data. Note that test data may not accurately match real data that will be provisioned, which will vary between MLSs.
This dataset should not be used for building production integration tests, as it is subject to change.
Combined Feed Types
MLSs may approve a single application for multiple feed types. This is done to create efficiencies for data consumers, who may have multiple data licenses with an MLS.
By combining multiple feed types within a single approval, instead of maintaining two or more feeds with similar data, all the data available to you from the MLS is accessible in one.
The API response will include a superset of all available listings, while still respecting the underlying rules for each type.
Managing Combined Feed Types
Each record in an API response contains the field “FeedTypes”. This automatically-generated field indicates which feed type(s) the record is sourced from - and therefore what license rules would be applicable.
Splitting combined feeds
While the FeedTypes field itself not queryable, you are able to split a combined feed into its individual components by adding the feed type metadata tag into the API path:
Return only IDX properties from a combined feedhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/idx/PropertiesField level rules
In addition to knowing which license type governs a listing, you are also able to use the API to determine the licenses type for each field. This is important for the scenario where a listing is sourced from multiple feed types that have different field payloads.
Since the payloads are combined, this functionality makes it easier to determine which fields are allowed to be used for each feed type. This information is available using the “FieldRules” resource. This resource allows you to answer the following two questions:
- “What data licenses back this field?”
- “What fields can be used as part of this data license”
The values returned in this resource are automatically derived from the field payloads available as part of the underlying feed types that make up your combined feeds.
Note that fields in this resource are not queryable. If you'd like to see only the relevant fields for a specific subset of a combined feed you may include the feed type metadata tag into the URL path:
Return only IDX fieldshttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/idx/FieldShared MLS data access
When approving your application, an MLS may also allow you to share your data access with addtional 3rd party vendors, at your discretion. This ability is only available for broker and agent accounts.
To share data access, go to Share Data on your dashboard, and enter the details of the vendor you want to give access. If this vendor is not on the platform they will be sent an invite, otherwise data access will be provisioned on their Primary application.
If you are a vendor, any data access that has been shared with you is visible under Approved Datasets on your dashboard.
Virtual MLS datasets
Virtual Datasets are designed to allow you to make on-demand queries for data across your approved MLS datasets using a single endpoint. You are able to choose which datasets you'd like to include in each virtual dataset, and you may create as many as you need.
- Virtual Datasets may only be comprised of your approved MLS datasets
- The Metadata and Replication endpoints are not available for Virtual Datasets.
- Virtual Datasets are only available using the RESO Web API and Bridge Web API.
- The response schema for each record is identical to the schema returned by the parent dataset. Schemas are not normalized between child datasets.
Step 3: Using the APIs
The platform offers various transport mechanisms to choose from when accessing MLS data:
- RESO Web API
- RETS
- Our proprietary Bridge Web API
All APIs make the same data available (ie whatever the specific data provider has allowed you access to). For MLS data, we recommend using the RESO Web API, as it conforms to the latest industry standards and will provide the most interoperability with other MLS data distribution platforms.
MLS data is normalized to RESO Data Dictionary standards. Any fields that are not able to be normalized to the RESO Data Dictionary are name-spaced with a prefix corresponding to the dataset.
Each API request should contain the dataset code of the MLS, the resource you are querying, your access token, and any parameters you’d like to use to constrain the result set. HTTPS is required, as the Bridge only respond to encrypted traffic.
Program defensively! MLS data is prone to change as data providers have the ability to update restrictions and field payloads at their discretion. To avoid disruption, we recommend that you program with this expectation in mind.
Dataset Codes
All API requests need to include a dataset code. This indicates which dataset you wish to query and either represents a specific data provider or a virtual dataset consisting of multiple MLS datasets.
Resources
Records are organized into standardized resources: typically Properties, Members, and Offices. Most MLSs will also have Open Houses available and possibly other resources like Rooms and UnitTypes.
API Access Tokens
All data access for an application is authorized and authenticated using API tokens. Your Client ID, Client Secret, Browser and Server tokens can be found on your dashboard.
For Web API we recommend using the Server token to implement server-to-server API requests. Including your token in user-accessible client code may allow unauthorized access to your data feeds.
Token | Description |
---|---|
Client ID | Use as your username for the RETS API |
Client Secret | Use as your password for the RETS API |
Server Token | Use as the bearer token for API requests |
Browser Token | Used for websites that may query the API directly from the browser; be sure to set the Referrer Domain if you use this approach |
IP and Domain whitelisting
Authorization tokens will only work on the HTTP referrer domains and IP addresses you have specified for your application settings in the dashboard. You may specify multiple domains, but no wildcards. If no domains or IPs have been set, this validation is skipped.
Regenerating your Client Secret
You're able to regenerate your Client Secret at any time. It's important to note that the Client Secret is used in the generation of both Server and Browser tokens, and when regenerating you are effectively expiring all tokens that were generated off that Client Secret. It may be useful to regenerate your Client Secret if your Client Secret or any of the subsequent tokens have been compromised.
Rate limits
There is no usage cap on the total number of API requests or concurrent requests you can make against a token. However, there is a default rate limit of 5,000 requests per hour. If your application has high usage, please reach out to discuss increasing the limit.
In addition to the hourly rate limit, we have introduced a burst rate limit to better manage sudden spikes in traffic. This burst rate limit is set on a per-minute basis and is equal to 1/15 of the hourly rate limit. By default, this means you can make up to 334 requests per minute (since 5,000 / 15 = 333.33, rounded up to 334).
There are six rate limit headers that are included in every response from the Bridge.
Rate Limit Header | Description |
---|---|
Application-RateLimit-Limit | The maximum number of API requests that can be made in an hour |
Application-RateLimit-Remaining | The number of API requests that can still be made. This number will be set to the value of application-ratelimit-limit when the application rate limit resets |
Application-RateLimit-Reset | The UTC time at which the application rate limit resets |
Burst-RateLimit-Limit | The maximum number of API requests that can be made in a minute |
Burst-RateLimit-Remaining | The number of API requests that can still be made. This number will be set to the value of burst-ratelimit-limit when the burst rate limit resets |
Burst-RateLimit-Reset | The UTC time at which the burst rate limit resets |
Error Codes
The Web API may return the following HTTP status codes. For non-200 statuses, we also return an error object in the response body, with a message containing additional specifics about the error.
HTTP Status Code | Description |
---|---|
200 | OK |
400 | Bad request |
401 | Unauthorized |
403 | Forbidden |
404 | Not found |
408 | Request timeout |
415 | Unsupported MIME type |
429 | Too many requests |
500 | Internal server error |
503 | Service unavailable |
Using the API Explorer
Our API Explorer is the simplest way to query the API. It allows you to build and make API requests in the browser.
By default, the API Explorer is set to use a public API token that only has access to a test dataset. Alternatively, you can specify your application's Server token and any dataset you have been approved for.
You can use the UI to build simple queries using various parameters and filters using Data Dictionary fields. To handcraft and test more complex queries, we recommend using an API client such as Postman.
RESO Web API
The Bridge platform allows you to query MLS data using the RESO Web API specification, which is based on OData. For more information about the specification, please visit the RESO website. The API has been RESO Platinum Certified to version 1.0.2.
Authorization
Your application should send an Authorization header with every HTTP request to the API:
Authorization: Bearer {token}If you can't set headers, you can send the token in the access_token
parameter in the query string of your request:
API Response
By default, the RESO Web API will return 10 listings, regardless of the number of total records available. You may use the $top
parameter to specify your request to return up to 200 listings at a time.
If there are more than 200 records available, you will need to paginate through the results.
If you wish to paginate through more than 10,000 listings you will need to use the dedicated replication endpoint.
All API responses besides metadata are returned in JSON format.
Paginating through results
If the total number of records that are returned by a query is greater than 200 (the maximum limit of a result set), then you will need to paginate through the results. This is done by incrementing the number of skipped records.
Return the next 200 records, ordered by ListPricehttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/{resource}?access_token=access_token&$top=200&$skip=200&$orderby=ListPrice descUsing Expand
Using the $expand
operator allow you to include associated data from additional resources. For example, you are able to bring in more detail about the relevant office or member into the response payload for a property, without having to make a second or third API query to the other resources.
- You are not able to use all query parameters on data you’ve expanded into your response.
- If you are using the `$select` parameter in your query to limit the fields in the response payload, be sure to include the expanded field as well (eg, add the ListOffice field if you're expanding ListOffice)
Dataset Replication
While we encourage the use of the API to query the listing data as needed, there are use-cases where replication of the full dataset may be preferred.
To help with this, you are able to request data with the /replication
endpoint. Whereas on-demand API requests can have a maximum of 200 results returned at once, with this endpoint the maximum $top
parameter is 2,000 results.
The header of the response will contain a 'next' link. Results are returned ordered from oldest to newest, so by using the next link you are able to pull down all the available records to seed your data, and then continue using the next link at regular intervals to keep up to date.
Use the replication endpointhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property/replication?access_token=access_token- If you are trying to replicate anything more than 10,000 records you will need to use the replication endpoint.
- Because of the potential payload size, this is only suitable for server to server requests.
- This functionality is only available at the discretion of the MLS that has authorized data access.
- Certain parameters like ‘skip’ and ‘orderby’ are not available with this endpoint.
- To reduce payload size and improve performance we recommend using the `select` parameter to request only the fields you need.
- BridgeModificationTimestamp is the best field to use for incremental updates as it represents the last modification in the Bridge system; ModificationTimestamp is ingested directly from the MLS system and is not a consistent proxy for modifications to the listing in the Bridge database.
Media
Rather than keeping it in a separate resource, Media is returned as an object directly on the Property record. Typically, it is the highest resolution media available from the MLS and is stored on our CDN. You may link directly to the CDN.
Metadata
You can request metadata that will return the fields and lookup values that have been made available to by the data provider. Metadata is returned in XML, according to the RESO spec.
Request metadatahttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/$metadata?access_token=access_tokenOperators
You can constrain the result set of a resource by passing additional operators with your request. Valid operators include:
Operator | Description |
---|---|
eq | Equal |
ne | Not equal |
gt | Greater than |
lt | Less than |
ge | Greater than or equal |
le | Less than or equal |
and | Logical and |
or | Logical or |
not | Logical not |
Parameters
The following query parameters may be passed to narrow down your results.
Name | Type | Description |
---|---|---|
access_token | string | Token to identify the application. This is always required.Example request: return all datasets approved for an applicationhttps://api.bridgedataoutput.com/api/v2/OData/DataSystem?access_token=access_token |
ListingKey | string | The listing key, available on the /Properties resource.return data relating to a listing where the ListingKey “12345”https://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties(‘12345’)?access_token=access_token |
MemberKey | string | The member key, available on the /Members resource.Return data relating to a member where the memberKey is “12345https://api.bridgedataoutput.com/api/v2/OData/dataset_id/Members('12345')?access_token=access_token |
OfficeKey | string | The office key, available on the /Offices resource.Return data relating to an office where the officeKey is “12345”https://api.bridgedataoutput.com/api/v2/OData/dataset_id/Offices('12345')?access_token=access_token |
$skip | number | Skips this number of resultsSkip the first 10 records of a datasethttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$skip=10 |
$select | string | Select the fields to be returnedOnly return the LivingArea fieldhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$select=LivingArea |
$unselect | string | Select the fields to be exludedDo not return the Media objecthttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$unselect=Media |
$filter | string | Filter the results to be returnedOnly return the listings where the ListPrice is greater than $100000https://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=ListPrice gt 100000 |
$top | number | Limits the size of the result set. Default is 10, maximum is 200.Limit results from the Test dataset to only 2https://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$top=2 |
$orderby | string | Response field to sort query by (either “desc” or “asc”)Sort order by descending pricehttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$orderby=ListPrice desc |
$expand | string | Include query specified entities inline with responseExpand the relevant listing agent for a given propertyhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$expand=ListAgent |
Query Functions
Function | Description |
---|---|
any | Search fields where any element of an array is satisfied by a conditionReturn listings where there is an option of electric heatinghttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=Heating/any(a: a eq 'Electric') |
all | Search fields where all elements of an array is satisfied by a conditionReturn listings where all of the flooring is hardwoodhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=Flooring/all(a: a eq 'Hardwood') |
geo.distance | Search by coordinatesReturn listings that are near specific co-ordinates, to a radius of 0.5 mileshttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=geo.distance(Coordinates, POINT(-118.62 34.22)) lt 0.5 |
geo.intersects | If you know the extents of a polygonal region, you can provide the each point as co-ordinatesReturn listings within a shapehttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=geo.intersects(Coordinates, POLYGON((-127.02 45.08,-127.02 45.38,-127.32 45.38,-127.32 45.08,-127.02 45.08))) |
tolower | Search fields with lowercase queriesReturn listings using a lowercase queryhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=tolower(StandardStatus) eq 'active' |
startswith | Search fields by a string prefixReturn listings using a city that starts with a specific stringhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=startswith(City, 'Spring') |
endswith | Search fields by string endingReturn listings using a city that ends with a specific stringhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=endswith(City, 'field') |
contains | Search field by string inclusionReturn listings using a city that contains a specific stringhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=contains(City, 'nge') |
date | Search fields by dateReturn listings with a specific datehttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=date(ModificationTimestamp) eq 2017-08-29 |
time | Search fields by timeReturn listings with a specific timehttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=time(ModificationTimestamp) eq 17:03:04 |
year | Search fields by yearReturn listings with a specific yearhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=year(ModificationTimestamp) eq 2017 |
month | Search fields by monthReturn listings with a specific monthhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=month(ModificationTimestamp) eq 12 |
day | Search fields by dayReturn listings with a specific dayhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=day(ModificationTimestamp) eq 23 |
hour | Search fields by hourReturn listings with a specific hourhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=hour(ModificationTimestamp) eq 17 |
now() | Search fields by current timestampReturn listings within the current timestamphttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Properties?access_token=access_token&$filter=ModificationTimestamp eq now() |
Examples
Search for a specific property by ListingIdhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property?access_token=access_token&$filter=ListingId eq ‘123456789’Search for a property by addresshttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property?access_token=access_token&$filter=UnparsedAddress eq ‘123 Main’Search for a property by address, using ‘tolower’ to work around API case-sensitivityhttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property?access_token=access_token&$filter=tolower(UnparsedAddress) eq ‘123 main’Search for all residential properties that are on salehttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property?access_token=access_token&$filter=PropertyType eq ‘Residential’ and StandardStatus eq ‘Active’Search for all residential properties that are for renthttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property?access_token=access_token&$filter=PropertyType eq ‘Residential Income’ and StandardStatus eq ‘Active’Search for all residential properties that are for sale and in a specific zip codehttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property?access_token=access_token&$filter=PropertyType eq ‘Residential Lease’ and PostalCode eq ‘90210’ and StandardStatus eq ‘Active’Search for all properties that are in one of two zip codeshttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property?access_token=access_token&$filter=PostalCode eq ‘12345’ or PostalCode eq ‘54321’Search using complex nested querieshttps://api.bridgedataoutput.com/api/v2/OData/dataset_id/Property?access_token=access_token&$filter=((InternetEntireListingDisplayYN ne false) and ((StandardStatus eq ‘Closed’) and (((YearBuilt eq null) or ((YearBuilt le 1986) and (YearBuilt ge 1976))) and (((LivingArea eq null) or ((LivingArea le 3264) and (LivingArea ge 2412))) and ((CloseDate ge 2019-09-01) and (((BedroomsTotal eq null) or ((BedroomsTotal le 5) and (BedroomsTotal ge 3))) and (((BathroomsTotalDecimal eq null) or ((BathroomsTotalDecimal le 3.5) and (BathroomsTotalDecimal ge 1.5))) and ((SpecialListingConditions ne ‘Auction’) and ((SpecialListingConditions ne ‘Probate’) and ((SpecialListingConditions ne ‘Short Sale’) and ((SpecialListingConditions ne ‘REO’) and (((ClosePrice eq null) or ((ClosePrice le 472666) and (ClosePrice ge 315110))) and (geo.distance(Coordinates,POINT(-115.10998 36.091513)) lt 0.5)))))))))))))RETS
Using the virtual RETS API (vRETS) you are able to get listing data just as you previously had with a traditional RETS server. This makes the Bridge platform backwards-compatible with existing data transport standards that are still used by many data consumers in the real estate space.
This API was built to allow data consumers to continue to use RETS as a transport layer if an MLS's RETS server is no longer available.
Any data consumer that has been approved for access (with replication) on the Bridge platform by an MLS is able to use RETS API.
The virtual RETS API is built according to the RESO specifications for RETS v1.9. It may not support functionality that extended the spec to deal with edge-cases specific to an MLS’s requirements.
It's important to note that the virtual RETS API will likely not be a drop-in replacement for an existing MLS RETS feed, as there will be a difference in the data being served. All data on the Bridge platform has been normalized to RESO Data Dictionary standards, unlike most MLS RETS feeds, and some fields may be generated differently from the native MLS server (e.g., short/system names).
Using your Bridge application Client ID and Secret as your RETS username and password, you can create a RETS session and make DMQL queries for data. Responses can be formatted in either XML or CSV. Data served by the RETS API is identical to what has been made available to you with the RESO Web API: normalized to RESO Data Dictionary standards and respecting any data restrictions that the MLS has put in place.
BridgeModificationTimestamp is the best field to use for incremental updates as it represents the last modification in the Bridge system; ModificationTimestamp is ingested directly from the MLS system and is not a consistent proxy for modifications to the listing in the Bridge database.
Complete documentation for using the RETS specification is available here: RESO RETS Specifications.
Media
Media should be retrieved using GetObject. One key difference from previous RETS standards is that the default GetObject location behavior changed from Location=0 to Location=1. We only support Location=1 (returning the URL for the object rather than the object itself), which is in line with the RETS 1.9 specification.
Establishing a session
Establish a session with the virtual RETS API login URL, either through your preferred RETS client or directly. For Username, use your Client ID token. For Password, use your Client Secret. Both tokens can be found in your application profile on your dashboard under API Access.
Establish a sessionhttps://api.bridgedataoutput.com/api/v2/rets/dataset_id/loginQuerying for metadata
Complete documentation for requesting metadata using RETS is available here: RESO RETS Specifications.
Query for metadatahttps://api.bridgedataoutput.com/api/v2/rets/dataset_id/getMetadata?Type=METADATA-RESOURCE&ID=0Querying for listing data
Complete documentation for requesting data using RETS is available here: RESO RETS Specifications.
Query for Active listingshttps://api.bridgedataoutput.com/api/v2/rets/dataset_id/search?SearchType=Property&Query=(StandardStatus=Active)Tips
When searching for a value that has a space in the string, enclose it in double quotes.
Example query to search on PropertyType of Residential Leasehttps://api.bridgedataoutput.com/api/v2/rets/dataset_id/search?SearchType=Property&Query=(PropertyType="Residential Lease")Bridge Web API
While we generally recommend using the RESO Web API for querying MLS data, you are also able to use our simple native syntax as well.
This is also the only API that can be used for the non-MLS datasets available on our platform, like Zillow Group Data.
Authorization
Your application should send an Authorization header with every HTTP request to the API:
Authorization: Bearer {token}If you can't set headers, you can send the token in the access_token
parameter in the query string of your request:
API Response
By default, the Bridge Web API will return 10 listings, regardless of the number of total records available. You may use the limit
parameter to specify your request to return up to 200 listings at a time.
If there are more than 200 records available, you will need to paginate through the results.
If you wish to paginate through more than 10,000 listings you will need to use the dedicated replication endpoint, which is only available when using the RESO Web API.
All API responses besides metadata are returned in JSON format.
Paginating through results
If the total number of records returned by a query is greater than 200 (the maximum limit of a result set), then you will need to paginate through the results. This is done by incrementing the number of skipped records.
When paginating through records, it's necessary to sort the results as there is no guarantee on the order, and multiple pages may include the same record more than once.
Return the next 200 records, sorted by ListPricehttps://api.bridgedataoutput.com/api/v2/dataset_id/{resource}?access_token=access_token&limit=200&offset=200&sortBy=ListPrice&order=ascOperators
You can constrain the result set of a resource by passing additional operators with your request.
Operator | Description |
---|---|
eq | equal |
ne | not equal |
gt | greater than |
lt | less than |
gte | greater than or equal |
lte | less than or equal |
in | comma-separated list, equal only |
nin | not in comma-separated list |
If the operator is omitted, the eq operator is assumed.
Parameters
The following query parameters may be passed to narrow down your results. Note that geographic coordinates should be ordered {Lng},{Lat} and contain a decimal.
Path Parameters
Name | Type | Description |
---|---|---|
access_token | string | Token to identify the application. This is always required.Example request: return all datasets approved for an applicationhttps://api.bridgedataoutput.com/api/v2/datasets?access_token=access_token |
datasetID | string | Specifies the dataset to get the data from.Return all listings from a datasethttps://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token |
listingId | string | The listing ID, available on the /listings resource.return data relating to listing with the key 12345https://api.bridgedataoutput.com/api/v2/dataset_id/listings/12345?access_token=access_token |
agentId | string | The Agent ID, available on the /agents resource.Return data relating to an agent with the key 12345https://api.bridgedataoutput.com/api/v2/dataset_id/agents/12345?access_token=access_token |
officeId | string | The office ID, available on the /offices resource.Return data relating to an office with the key 12345https://api.bridgedataoutput.com/api/v2/dataset_id/offices/12345?access_token=access_token |
Query parameters
Name | Type | Description |
---|---|---|
offset | number | Skips this number of results.Skip the first 10 listingshttps://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&offset=10 |
limit | number | Limits the size of the result set. Default is 10, maximum is 200Limit results from a dataset to 200https://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&limit=200 |
sortBy | string | Response field to sort query by.Sort order by pricehttps://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&sortBy=ListPrice |
order | string | Order of responses: "asc/desc".Sort order by descending pricehttps://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&sortBy=ListPrice&order=asc |
near | string | Coord or location e.g. near={Lng},{Lat} or near=San DiegoReturn listings that are near specific co-ordinateshttps://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&limit=200&near=-122.395743,37.793662 |
radius | string | Radius to search within. Can be suffixed with units mi(miles) or km(kilometer). Miles are default.Return listings that near to specific co-ordinants, constrained 5 mileshttps://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&limit=2&near=-122.395743,37.793662&radius=5mi |
box | string | If you know the extents of a box-shaped region, you can provide the lower-left and upper-right co-ordinates "{lng1},{lat1},{lng2},{lat2}" as a string or you can provide them as an array [[{lng1},{lat1}],[{lng2},{lat2}]] box parameter.Return listings within a boxhttps://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&box=-122.435676,37.781368,-122.415764,37.799580 |
poly | string | If you know the extents of a polygonal region, you can provide the each point as co-ordinates "{lng-1},{lat-1},{lng-2},{lat-2}...{lng-n},{lat-n}" as a string or you can provide them as an array [[{lgn-1},{lat-2}],[{lng-2},{lat-2}]]....,[{lng-n},{lat-n}]] poly parameter.Return listings within a box-shapehttps://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&poly=-122.435676,37.781368,-122.415764,37.799580,-122.447092,37.796291 |
Examples
Get a list of all datasets approved for an applicationhttps://api.bridgedataoutput.com/api/v2/datasets?access_token=access_tokenGet listings in the dataset where price is greater than $500,000https://api.bridgedataoutput.com/api/v2/dataset_id/listings?access_token=access_token&ListPrice.gt=500000Get a set of agents in the dataset whose name is not 'Ursula'https://api.bridgedataoutput.com/api/v2/dataset_id/agents?access_token=access_token&firstName.ne=UrsulaGet a set of offices in the dataset that are located in Vermonthttps://api.bridgedataoutput.com/api/v2/dataset_id/offices?access_token=access_token&state=VTZillow Group Data
As well as MLS data, the Bridge API platform also offers access to various datasets from Zillow Group:
Access to these datasets requires approval from Zillow Group and can be applied for in the same way as MLS datasets.
Before applying for Zillow Group data, please ensure your use-case is allowable by the Zillow Terms of Use.
We do receive a high volume of requests for this data so please allow at least 10+ business days for us to determine your eligibility.
Please include the following information in your application profile before applying:
- Are you requesting this for Personal or Business use?
- Who is the audience?
- How will the data be used?
- Is this a paid service?
- Will you be storing data?
- Will you be displaying Zillow data as an as-is metric or combining it with other data to create a derivative work/calculation?
- Where are you and your company located?
- You are able to query all these datasets using the Bridge Web API, as well as the RESO Web API for Zestimates
- Replication and metadata endpoints are not available.
- Access requires adherence to the Zillow Data Terms of Use.
Public Records Data
This includes property records, tax assessments, and transaction records for approximately 148,000,000 properties across 3,200 counties throughout the United States. By default, you are limited to 1,000 API requests per day.
Coverage for any given data point, as well as update frequency, may differ between counties depending on how their data is made available.
Parcels
The Parcels resource includes a document for each property in our dataset, whether it's a detached home, a strata lot, a business, a bare land property, or any other kind of property. It’s typically a subset of data available from the Assessments and Transactions resources. Each record will contain links to the Assessments and Transactions relevant to that parcel.
Assessments
The Assessments resource includes present and historical property tax assessments. This includes estimated market and taxable values, tax amounts, and information about the property itself.
Transactions
The Transactions resource includes present and historical property transactions. Any type of change to a property's ownership is reflected in the transactions data set, including sale of new and existing properties, title transfers within families, and finance changes (such as a home loan refinance).
Public Records Field Enumerations
The following is a list of possible values for any fields with closed enumerations for the parcels, transactions and assessments resources: Public Records Enumerations
Examples
Query parcel by with the APN "12345"https://api.bridgedataoutput.com/api/v2/api/v2/zestimates_v2/zestimates?access_token=access_token&apn=12345Get all transactions for a specific parcel with the id "12345"https://api.bridgedataoutput.com/api/v2/pub/parcels/12345/transactions?access_token=access_tokenQuery for all assessments for "123 Main Street", sorted by yearhttps://api.bridgedataoutput.com/api/v2/pub/assessments?access_token=access_token&zpid=55023086&address.full="123 Main Street"&sortBy=yearZestimates
This API will return all current Property and Rental Zestimates available on Zillow.com. Note that not all properties will have associated Zestimates. For more information about Zestimates, visit Zillow.com.
Examples
Query Zestimate by addresshttps://api.bridgedataoutput.com/api/v2/zestimates_v2/zestimates?access_token=access_token&address="123 Main Street"Query by list of ZPIDshttps://api.bridgedataoutput.com/api/v2/zestimates_v2/zestimates?access_token=access_token&zpid.in=123456,54321,15243Zillow Group Economic Data
This API provides housing market metrics otherwise made available as CSV downloads on www.zillow.com/data. This API is intended for organizations and individuals who want programmatic access to those metrics for their own tools and apps.
Most metrics are published monthly. You can access the most recent publication date by accessing the releaseDate
field in the API.
Zillow's Econ team has created some supplemental docs with some examples using this API: Additional Documentation
Note that the Create Date is the date the metric was calculated, while Report Date is the date that the metric represents. For example, if you want to know what the Zillow Home Value Index was on 4/31, the Report Date would be 4/31, while the Create Date might say 5/10 if it was calculated 10 days later.
Examples
Get market report for State FIPS "48"https://api.bridgedataoutput.com/api/v2/zgecon/marketreport?access_token=access_token&stateCodeFIPS=48Use the Region endpoint to get metadata for State FIPs "48"https://api.bridgedataoutput.com/api/v2/zgecon/region?access_token=access_token&stateCodeFIPS=48Use the Type endpoint to get metadata about the metricTypeKey "uloc" in a market reporthttps://api.bridgedataoutput.com/api/v2/zgecon/type?access_token=access_token&key="uloc"Zillow Agent Reviews
Consumers increasingly make decisions on what product or service to use after reviewing online reviews, and real estate agents are no different. The Zillow Agent Reviews API is designed to assist the consumer in choosing the best agent for their particular set of needs.
At Zillow, we have found one of the most important factors in an agent's success on Zillow is the number of reviews they make available to consumers.
Hundreds of thousands of consumers have posted reviews on Zillow. Now we are making those available on partner sites via the Zillow Agent Reviews API.
Both the RESO Web API and the Bridge native syntax can be used. There are two resources available: Reviewees (all agents who have reviews), and Reviews (all the available reviews).
The Reviews resource returns 10 most recent reviews for each respective reviewee. To return reviews for a team profile, start by locating the TeamLeadAccountId in the Reviews resource.
The Replication endpoint is not available for the Agent Reviews API.
Examples
Return all agentshttps://api.bridgedataoutput.com/api/v2/OData/reviews/RevieweesReturn all reviewshttps://api.bridgedataoutput.com/api/v2/OData/reviews/ReviewsReturn all reviews for a specific agent using their primary keyhttps://api.bridgedataoutput.com/api/v2/OData/reviews/Reviews?$filter=RevieweeKey eq 'f0406f76c3c46b10494c29dc'Locate data for a specific agent by email, and include all available reviewshttps://api.bridgedataoutput.com/api/v2/OData/reviews/Reviewees?$filter=RevieweeEmail eq 'agent@domain.com'&$expand=ReviewsGlossary of common terminology
Term | Description |
---|---|
Application | A representation of a single product that consumes data via the API. Each application has a profile, a set of access tokens and a set of data approvals. |
API Key | Also called an API Token, it’s an authorization code sent with an API request that identifies the user, and also what data they are allowed to see. |
API Platform | The system that an MLS will leverage to manage and monitor data distribution, and provide software developers with various APIs to get data. |
Authentication | Identifying the user of the API. Common techniques include API Keys and OAuth Tokens. |
Authorization | The data an authenticated user of the API is allowed to access and query. |
CDN | Content Delivery Network - a network of servers used to store data to provide high availability and performance. |
Data License | A legal agreement between a data provider and a data consumer to allow access to content. |
Dataset | A representation of either a single MLS on the platform, or an aggregation of multiple MLSs available through a single endpoint. |
Endpoint | A web address that specifies the data or service the user is requesting. For example, going to the “/Offices” address in the Web API will return office data. |
JSON | Similar to XML or CSV, JSON is a simple way to represent data, but it’s easy for both humans and machines to interpret. By default, the RESO Web API returns data in JSON. |
Latency | The amount of time it takes to get data back. This may include how long it took the server to find the right data and how long data took to travel back to the recipient. |
OAuth | A specification for token-based authentication and authorization. The RESO Web API can use this to determine who is allowed to get data and what data they are allowed to see. |
OData | A standard specification for APIs that defines how the data should be organized and how it can be queried. The RESO Web API is based on this specification. |
Metadata | Information about the data the user has access to, usually accessible from a dedicated API endpoint. May include things like the available fields and their possible values. |
MLS | Multiple Listing Service. An MLS is a network for agents and brokers that grants them access to exchange property listing information and share compensation for a sale. |
Payload | A bundle of data that is returned by an API. |
Query | The request a user makes to an API endpoint, which usually contains their API key, what data they want, and any additional parameters, like filters. |
Rate Limit | Limits on how many requests to an API can be made within a specific time frame. There may be multiple rate limits in place specific to the user or the data they are requesting. |
Replication | The process of recreating and storing your own version of the original database and continuously updating to keep the two copies in sync. |
Resource | A collection of data within a dataset, e.g. Properties, Members, Offices, or Open Houses. |
Frequently asked questions
How do I set up a Bridge account?
Typically an invitation for access to the Bridge platform is initiated by the data providers (MLSs).
How long does it take for an MLS to approve my data access?
Any data access is wholly at the discretion of the MLS, and each will have their own processes and criteria for approval.
What MLSs do you currently have API integrations for?
Currently available datasets can be seen on the dashboard after you have created an account. We are always in the process of adding more datasets. If you are a brokerage and a member of an MLS that you do not see on the dashboard, please reach out to us to discuss further options.
Is the RESO Web API and Data Dictionary RESO certifed?
Yes, our RESO Web API is Platinum compliant and certified. MLS data is normalized to RESO Data Dictionary standards.
How does the MLS data get returned?
MLS data is normalized to the RESO Data Dictionary and returned in JSON format (from the Web API), XML or CSV (from RETS), Any fields that are not able to be normalized (e.g. 'custom' or 'native' fields) are made available as well, at the MLS's discretion.
I am a broker and a member of multiple MLSs - can I get all my data with a single feed?
Yes, you may create a virtual dataset that will allow you to retrieve listing data across all of your datasets.
How often do you refresh the MLS listing data?
Typically we refresh listing data every 10 minutes or less, depending on the resource and the MLS.
What MLS listing data will I have access to after access has been approved?
The API can serve all data from all resources (including Properties, Members, Offices, Open Houses and any others like Rooms and UnitTypes), as well as off-market data. However, the MLS has full control of what data is served through the API on a per application basis, and access is at their discretion.
Can I use the Bridge to replicate an entire MLS dataset?
Yes, we have tools that make replication easy, although this is only available at the discretion of the MLS that has approved your data access. See the documentation for more information.
Can I get access to all MLS listing data nationwide?
No - the Bridge is available on an MLS by MLS basis, and each of them individually control the data they distribute.
How can I access non-MLS datasets?
The process is essentially the same as for MLS data access. After registering an account, apply for access to any available dataset you are interested in. Access will be granted depending on your specific use-case.
How much does using the Bridge API cost?
Bridge Interactive does not charge vendors and brokerages any additional service fees when integrating with our partner MLSs. Note that MLSs may charge their own licensing fees, at their discretion.
There are three data transports available, which should I use?
For MLS data you may choose between the Bridge Web API, the RESO Web API, or RETS. We recommend using the RESO Web API for accessing MLS data as it uses the latest industry standard and has the best interoperability with other real estate API platforms. RETS can be used if you wish to leverage your existing data ingestion pipeline. The Bridge Web API is best for simple API queries and is required for any non-MLS datasets.