1 OAK MLS

Bridge API Reference

Quick reference for working with Bridge/RESO Web API (OData)

Bridge Interactive API Reference

Quick reference for working with Bridge/RESO Web API (OData).

Base URL

https://api.bridgedataoutput.com/api/v2/OData/{dataset_id}/

Common datasets:

  • test — Sandbox/test data
  • Your actual dataset ID (provided by Bridge)

Authentication

Pass token as query parameter:

?access_token=YOUR_TOKEN

Or as header:

Authorization: Bearer YOUR_TOKEN

Common Endpoints

ResourcePathDescription
Property/PropertyListings
Media/MediaPhotos (or expand with Property)
Member/MemberAgents
Office/OfficeBrokerages
OpenHouse/OpenHouseUpcoming open houses

OData Query Parameters

ParameterDescriptionExample
$filterFilter resultsStandardStatus eq 'Active'
$selectChoose fieldsListingKey,ListPrice,City
$topLimit results (max 200)200
$skipPagination offset200
$orderbySort resultsModificationTimestamp desc
$expandInclude related dataMedia
$countInclude total counttrue

Filter Operators

OperatorDescriptionExample
eqEqualsCity eq 'Miami'
neNot equalsStatus ne 'Closed'
gtGreater thanListPrice gt 500000
geGreater than or equalBedrooms ge 3
ltLess thanListPrice lt 1000000
leLess than or equalYearBuilt le 2020
andLogical ANDCity eq 'Miami' and Bedrooms ge 2
orLogical ORCity eq 'Miami' or City eq 'Miami Beach'
contains()String containscontains(City, 'Miami')

Date/Time Filters

ISO 8601 format for timestamps:

ModificationTimestamp gt 2024-01-15T00:00:00Z

Example Queries

Get Active Listings

/Property?$filter=StandardStatus eq 'Active'&$top=200

Incremental Sync (modified after timestamp)

/Property?$filter=ModificationTimestamp gt 2024-01-15T12:00:00Z&$orderby=ModificationTimestamp asc&$top=200

With Media Expanded

/Property?$expand=Media&$top=200

Specific Fields Only

/Property?$select=ListingKey,ListPrice,City,BedroomsTotal&$top=200

Count Total

/Property?$count=true&$top=1

Response Structure

{
  "@odata.context": "...",
  "@odata.count": 2847,
  "@odata.nextLink": "https://api.bridgedataoutput.com/api/v2/OData/test/Property?$skip=200",
  "value": [
    {
      "ListingKey": "123456",
      "ListingId": "A123456",
      "StandardStatus": "Active",
      "ModificationTimestamp": "2024-01-15T14:30:00Z",
      "PropertyType": "Condominium",
      "ListPrice": 750000,
      "BedroomsTotal": 2,
      "BathroomsTotalInteger": 2,
      "LivingArea": 1250,
      "City": "Miami Beach",
      "StateOrProvince": "FL",
      "PostalCode": "33139",
      "UnparsedAddress": "123 Ocean Dr #4A",
      "SubdivisionName": "South Beach",
      "BuildingName": "The Ocean Tower",
      "Latitude": 25.7617,
      "Longitude": -80.1918,
      "PublicRemarks": "Stunning ocean view...",
      "Media": [
        {
          "MediaKey": "m123",
          "MediaURL": "https://...",
          "Order": 1,
          "MediaCategory": "Photo"
        }
      ]
    }
  ]
}

Common RESO Fields

Core Identifiers

RESO FieldDescription
ListingKeyPrimary key (unique across system)
ListingIdMLS number (user-facing)
StandardStatusActive, Pending, Closed, etc.
ModificationTimestampLast modified (for sync)
OriginalEntryTimestampFirst listed

Property Details

RESO FieldDescription
PropertyTypeCondominium, Single Family, etc.
PropertySubTypeMore specific type
BedroomsTotalBedroom count
BathroomsTotalIntegerBathroom count (integer)
BathroomsFullFull bathrooms
BathroomsHalfHalf bathrooms
LivingAreaSquare footage
LotSizeSquareFeetLot size
YearBuiltYear constructed

Pricing

RESO FieldDescription
ListPriceCurrent asking price
ClosePriceFinal sale price (if closed)
OriginalListPriceInitial list price
PricePerSquareFootCalculated $/sqft

Location

RESO FieldDescription
UnparsedAddressFull address string
StreetNumberStreet number
StreetNameStreet name
UnitNumberApt/unit number
CityCity name
StateOrProvinceState code
PostalCodeZIP code
CountyOrParishCounty
SubdivisionNameNeighborhood
BuildingNameCondo/building name
LatitudeGPS latitude
LongitudeGPS longitude

Description

RESO FieldDescription
PublicRemarksMarketing description
PrivateRemarksAgent-only notes (not public!)
DirectionsDriving directions

Dates

RESO FieldDescription
ListingContractDateDate listing agreement signed
OnMarketDateDate went active
CloseDateSale closing date
ExpirationDateListing expiration

Agent/Office

RESO FieldDescription
ListAgentKeyListing agent ID
ListAgentFullNameAgent name
ListOfficeNameBrokerage name
BuyerAgentKeyBuyer agent (if closed)

Pagination Strategy

Bridge limits to 200 results per request.

Using $skip

let skip = 0;
let hasMore = true;

while (hasMore) {
  const response = await fetch(`${baseUrl}/Property?$top=200&$skip=${skip}`);
  const data = await response.json();

  // Process data.value

  hasMore = data.value.length === 200;
  skip += 200;
}
let url = `${baseUrl}/Property?$top=200`;

while (url) {
  const response = await fetch(url);
  const data = await response.json();

  // Process data.value

  url = data['@odata.nextLink'] || null;
}

Rate Limits

  • Check your Bridge subscription for specific limits
  • Generally safe: 1-2 requests/second for bulk operations
  • Add delay between pages: await sleep(100)

Error Handling

Common Errors

StatusMeaningAction
401Invalid tokenCheck token, refresh if OAuth
403Access deniedCheck dataset permissions
404Resource not foundCheck dataset ID
429Rate limitedBack off, retry with delay
500Server errorRetry with backoff

Retry Strategy

async function fetchWithRetry(url, maxRetries = 3) {
  for (let attempt = 1; attempt <= maxRetries; attempt++) {
    try {
      const response = await fetch(url);

      if (response.status === 429) {
        // Rate limited - wait and retry
        await sleep(1000 * attempt);
        continue;
      }

      if (!response.ok) {
        throw new Error(`HTTP ${response.status}`);
      }

      return await response.json();
    } catch (error) {
      if (attempt === maxRetries) throw error;
      await sleep(1000 * Math.pow(2, attempt - 1));
    }
  }
}

Testing Connection

Quick test to verify credentials:

GET /Property?$top=1&$count=true

Success response includes @odata.count with total listings.

On this page