IDX Data Partnership

Tropical Listings MLS — IDX Feed Documentation

Live Caribbean & Latin America real estate data for your website or app. Apply, get approved, and start syncing listings today.

Quick Start

1) Apply for IDX access   2) Get your API key on approval   3) Call the feed — that's it.

https://tropicallistingsmls.com/functions/idxFeed?api_key=YOUR_API_KEY&country=DO&status=active&limit=50

Approved partner? Open your personalized setup guide with your API key pre-filled: /IDXSetup?client_id=YOUR_CLIENT_ID

Endpoints
GET
/functions/idxFeed
Main IDX Feed
https://tropicallistingsmls.com/functions/idxFeed
GET
/functions/retsDataFeed
RETS-style Feed
https://tropicallistingsmls.com/functions/retsDataFeed
GET
/functions/resoOdataFeed
RESO Web API — OData V4
https://tropicallistingsmls.com/functions/resoOdataFeed
Authentication

Pass your API key as a query parameter on every request. Keys are issued per partner after approval and are visible in the IDX Partner Portal.

https://tropicallistingsmls.com/functions/idxFeed?api_key=YOUR_API_KEY

Note: Keep your API key confidential — do not commit it to version control or expose it in public client-side code; proxy requests through your server instead.

Images & Media — first-class in every listing

Every listing carries full image data in three formats, so you can consume whichever fits your platform:

PhotosPlain array of direct image URLs, in display order — the simplest way to render a gallery.
PrimaryPhotoURLThe hero image link — ready for listing cards, map pins, and thumbnails.
MediaRESO-style objects (MediaKey, MediaURL, MediaObjectURL, Order, MimeType) for standard IDX platforms.
PhotoCountNumber of photos — useful for badges ("12 Photos") before loading the gallery.

All image links are direct, hot-linkable URLs (no auth needed to load the images themselves). VirtualTourURL, VideoURL and FloorPlanURL are included when the listing has them.

Virtual Tours — every listing gets one

Tropical Listings MLS produces a room-by-room cinematic walk-through for every listing, so your site can offer an immersive tour even when the listing member never supplied one. Each tour is 90 seconds or less, is built only from photos that cleared our photo compliance review, and becomes available once the listing has been live for 48 hours.

VirtualTourURLAbsolute https link — either our generated walk-through or a member-supplied tour that passed verification. Empty when no tour exists yet.
Tour rulesTours are branding-free by policy: no logo, watermark, phone number, email or agent name inside the walk-through. Member tours with contact information only in the closing seconds are trimmed before publishing.
{
  "ListingId": "DR1234567",
  "VirtualTourURL": "https://tropicallistingsmls.com/VirtualTour/vt_9f2c...",
  "Media": [ { "MediaCategory": "Photo", "MediaURL": "https://.../01.jpg" } ]
}

# Display side-by-side with your gallery — no key needed to play the tour:
# <iframe src="${VirtualTourURL}" allow="autoplay; fullscreen"></iframe>

The tour link is public and shareable so it can travel to portals and social channels; it carries listing facts only, never the listing member's contact details.

Response Structure
{
  "feed": {
    "name": "Tropical Listings MLS — IDX Feed",
    "version": "1.0",
    "feedType": "public",
    "attribution": "Data provided by Tropical Listings MLS...",
    "disclaimer": "IDX information is provided exclusively for
                   consumers' personal, non-commercial use..."
  },
  "pagination": {
    "total": 1284, "limit": 50, "offset": 0,
    "returned": 50, "has_more": true, "next_offset": 50
  },
  "listings": [
    {
      "ListingKey": "6a8...",
      "ListingId": "DR1234567",
      "StandardStatus": "active",
      "ListPrice": 485000,
      "Currency": "USD",
      "PropertyType": "condo",
      "PropertyClass": "condo_apartment",
      "Country": "DO", "StateOrProvince": "La Altagracia",
      "Municipality": "Higüey", "City": "Punta Cana",
      "BedroomsTotal": 3, "BathroomsFull": 2,
      "LivingArea": 1450,

      "PrimaryPhotoURL": "https://.../hero.jpg",
      "PhotoCount": 12,
      "Photos": ["https://.../01.jpg", "https://.../02.jpg", "..."],
      "Media": [
        { "MediaKey": "...-photo-0", "MediaURL": "https://.../01.jpg",
          "MediaObjectURL": "https://.../01.jpg", "Order": 1,
          "MediaCategory": "Photo", "MimeType": "image/jpeg" }
      ],
      "VirtualTourURL": "https://...",
      "VideoURL": "https://...",

      "OpenHouses": [ { "date": "2026-10-04", ... } ]
    }
  ]
}

Listings use a RESO-inspired schema (ListingId, ListPrice, Media, StandardStatus, …) including tropical-specific fields like OceanView, Beachfront, DistanceToBeachKM and TitleStatus.

RESO Web API — OData V4 (Data Dictionary 2.0)

The standards layer on top of the IDX feed: an OData V4 service exposing listings as the RESO Property resource (Data Dictionary 2.0 StandardNames plus tropical extensions), with standard $filter / $orderby / $select / $count / $top / $skip, @odata.nextLink paging, delta links for incremental replication, bilingual (EN/ES) Localizations on every listing, and a developer sandbox that needs no credentials. One API key and one license agreement cover all markets.

# 1. Schema — OData $metadata (EDM XML, no key required)
curl "https://tropicallistingsmls.com/functions/resoOdataFeed/$metadata"

# 2. Developer sandbox — fictional sample listings, NO API key required
curl "https://tropicallistingsmls.com/functions/resoOdataFeed/Property?mode=sandbox"

# 3. Initial replication pull — everything, ascending by ModificationTimestamp
curl "https://tropicallistingsmls.com/functions/resoOdataFeed/Property?api_key=YOUR_API_KEY&$top=500&$orderby=ModificationTimestamp%20asc"

# 4. Incremental sync — only what changed since your last pull
curl "https://tropicallistingsmls.com/functions/resoOdataFeed/Property?api_key=YOUR_API_KEY&$filter=ModificationTimestamp%20gt%20'2026-10-01T00:00:00Z'&$orderby=ModificationTimestamp%20asc"

# Follow @odata.nextLink for the next page; the last page carries @odata.deltaLink
# (the incremental query for your next sync). Bilingual content ships in
# Localizations (en/es) on every listing.

Replication: pull the full set once with $orderby=ModificationTimestamp asc (following @odata.nextLink), then use the last page's @odata.deltaLink — or $filter=ModificationTimestamp gt '<last synced>' — to fetch only changes. Field names, types and lookups are all in $metadata, so standard OData client libraries work out of the box.

Ready to integrate?

Apply for access — evaluations and trials are typically approved within 1–2 business days.