You need to ship a property search that lists residential homes this week. By the end of this guide, you’ll query real listings within map bounds, suggest locations as users type, and fetch full property details using a single API key from Zyla API Hub.
What this API gives you
The Canada Real Estate API exposes endpoints to:
- Return keyword-based location suggestions for faster user input (Auto Complete).
- List residential properties for sale or rent within a geographic bounding box (List Residential).
- Fetch detailed information for a specific property (Property Detail).
Developers use it for map-based search UIs, lead capture forms, agent/broker portals, and internal tools needing up-to-date residential inventory in Canada.
If you’re new to the marketplace, Zyla API Hub centralizes more than 10,000 public APIs with one account, one API key, and a subscription + quota model. You can browse categories and documentation at Zyla API Hub and subscribe to individual APIs as needed.
Getting started on Zyla API Hub
Open the Canada Real Estate API page, click Subscribe or Start Free Trial (when available), and retrieve your API key. The first API on your account typically offers a 7-day trial or 50 requests. For current access options and pricing, always check the listing.
Start here: Start 7-day trial on Canada Real Estate API
All requests use the header Authorization: Bearer YOUR_API_KEY against Zyla’s hub URLs. Billing is subscription + quota, not pay-per-call. There’s no Free Plan.
Endpoints you’ll use
1) Auto Complete
Use this to suggest locations as the user types. This improves conversion and reduces null-search results.
- Method: GET
- URL: https://zylalabs.com/api/5902/canada-real-estate-api/7768/auto-complete
- Description: Send a GET request with a search term to get keyword-based location suggestions, optimizing the property search experience.
- Parameters (as provided):
- Query (string, required): Quebec
- CultureId (string, optional): 1
- IncludeLocations (string, optional): true
Official curl:
curl -s -X GET "https://zylalabs.com/api/5902/canada-real-estate-api/7768/auto-complete?Query=Quebec&CultureId=1&IncludeLocations=true" \
-H "Authorization: Bearer YOUR_API_KEY"
Official JSON response:
{"ErrorCode":{"Id":200,"Description":"Success - OK","ProductName":"Realtor API 7 | 20241202.1 | 1018e702fe06dda8279318e12b199910ca21c3ff | Monday, December 2, 2024 12:21:41 PM","Version":"1.0.9102.31292"},"Results":[{"Type":1,"ListingId":"27656697","ReferenceNumber":"X10440405","Address_EN":"191 QUEBEC STREET","Address_FR":"191 QUEBEC STREET","City":"Bracebridge (Macaulay)","PostalCode":"p1l1e3","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27656697\/191-quebec-street-bracebridge-macaulay-macaulay","RelativeURLFr":"\/immobilier\/27656697\/191-quebec-street-bracebridge-macaulay","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27661192","ReferenceNumber":"X10428998","Address_EN":"549 QUEBEC STREET","Address_FR":"549 QUEBEC STREET","City":"London","PostalCode":"n5w3y9","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27661192\/549-quebec-street-london-east-g","RelativeURLFr":"\/immobilier\/27661192\/549-quebec-street-london","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27720876","ReferenceNumber":"R2949266","Address_EN":"212 4928 QUEBEC STREET","Address_FR":"212 4928 QUEBEC STREET","City":"Vancouver","PostalCode":"v5w2n2","Province":"BC","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27720876\/212-4928-quebec-street-vancouver","RelativeURLFr":"\/immobilier\/27720876\/212-4928-quebec-street-vancouver","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27741486","ReferenceNumber":"X11894528","Address_EN":"558 QUEBEC STREET","Address_FR":"558 QUEBEC STREET","City":"Hamilton (Parkview)","PostalCode":"l8h6v4","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27741486\/558-quebec-street-hamilton-parkview-parkview","RelativeURLFr":"\/immobilier\/27741486\/558-quebec-street-hamilton-parkview","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27754883","ReferenceNumber":"S11901084","Address_EN":"267 QUEBEC STREET","Address_FR":"267 QUEBEC STREET","City":"Clearview (Stayner)","PostalCode":"l0m1s0","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27754883\/267-quebec-street-clearview-stayner-stayner","RelativeURLFr":"\/immobilier\/27754883\/267-quebec-street-clearview-stayner","isReferenceMatch":false,"isPostalCodeMatch":false}],"ResultsMapBox":[{…
What you’ll actually use from this payload:
- ErrorCode.Id and ErrorCode.Description to check success (200 and “Success - OK”).
- Results[n].Address_EN, City, PostalCode, Province to render autocomplete items.
- Results[n].ListingId and ReferenceNumber if you want to jump straight to a detail view after selection.
2) List Residential
This is the core “list residential” call. You provide a geographic bounding box (lat/long min/max) and receive available residential listings in that area. You can drive it from your map’s viewport or a saved search.
- Method: GET
- URL: https://zylalabs.com/api/5902/canada-real-estate-api/7769/list-residential
- Description: Submit a GET request with parameters such as location, price range and property type to list available residential properties for sale or rent.
- Parameters (as provided):
- LatitudeMax (number, required): 81.14747595814636
- LatitudeMin (number, required): -22.26872153207164
- LongitudeMax (number, required): -10.267941690981388
- LongitudeMin (number, required): -136.83037765324116
Copy-pasteable curl:
Notes that save time:
- Coordinates are standard decimal degrees (WGS84). Use your map viewport’s north-east as max and south-west as min.
- The response includes a Paging object (e.g., RecordsPerPage, CurrentPage, TotalRecords, TotalPages). Use it to paginate your UI and avoid fetching more than needed.
- The API may return map pin counts (e.g., Pins) and per-page caps (e.g., MaxRecords). Respect those in your batching and caching.
3) Property Detail
After the user clicks a listing card, use this endpoint to fetch full details such as description and property characteristics for the given property.
- Method: GET
- URL: https://zylalabs.com/api/5902/canada-real-estate-api/7770/property-detail
- Description: Submit a GET request with a specific property ID to obtain detailed information such as images, description and full property characteristics.
- Parameters (as provided):
- ReferenceNumber (string, required): 67b74ee58bc56b22659786b3
- PropertyID (string, required): 27935110
Sample curl:
End-to-end flow you can ship
- As the user types a city or street, call Auto Complete to suggest locations and known addresses.
- Translate the chosen location into a bounding box (e.g., your map’s current viewport) and call List Residential to get inventory.
- When the user clicks a card, call Property Detail to render a complete page or a right-side drawer with full remarks and attributes.
Python example: fetch residential listings within a map viewport
The snippet below calls the List Residential endpoint, checks for success, and prints a few fields from the results. It uses only the parameters shown above.
import os
import requests
API_KEY = os.getenv("ZYLALABS_API_KEY", "YOUR_API_KEY")
url = "https://zylalabs.com/api/5902/canada-real-estate-api/7769/list-residential"
params = {
"LatitudeMax": "81.14747595814636",
"LatitudeMin": "-22.26872153207164",
"LongitudeMax": "-10.267941690981388",
"LongitudeMin": "-136.83037765324116",
}
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get(url, headers=headers, params=params, timeout=30)
resp.raise_for_status()
data = resp.json()
# Basic success check
err = data.get("ErrorCode", {})
if err.get("Id") != 200:
raise SystemExit(f"API error: {err}")
# Read paging info if present
paging = data.get("Paging", {})
print("RecordsPerPage:", paging.get("RecordsPerPage"))
print("CurrentPage:", paging.get("CurrentPage"))
print("TotalRecords:", paging.get("TotalRecords"))
print("TotalPages:", paging.get("TotalPages"))
# Print a few listings
for item in (data.get("Results") or [])[:5]:
listing_id = item.get("Id")
mls = item.get("MlsNumber")
remarks = item.get("PublicRemarks")
print("-----")
print("Id:", listing_id)
print("MLS:", mls)
if remarks:
print("Remarks:", (remarks[:180] + "...") if len(remarks) > 180 else remarks)
Implementation tips:
- Cache by bounding box rounded to 3–4 decimal places to reduce duplicate calls as users pan/zoom.
- If Paging.TotalPages is present, build a lazy “Load more” button instead of prefetching everything.
- Guard for missing fields because listings can vary by source.
Practical use cases
- Map search: tie the bounding box to your map viewport and re-query on bounds_changed with debounce.
- Lead form: use Auto Complete to normalize neighborhood or street inputs before saving a lead.
- Saved searches: persist the user’s last bounds and recreate the query with List Residential when they return.
- Detail pages: pull long-form remarks and characteristics with Property Detail only on demand to keep the list fast.
Calling from an AI agent via MCP
If you automate workflows with MCP-compatible clients (e.g., Claude Code, Cursor, Windsurf), you can make the same HTTPS calls through the Zyla MCP endpoint. Pass your key as a query parameter at:
https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY
Learn more here: MCP
Your agent can call the exact hub URLs documented above with the Authorization: Bearer YOUR_API_KEY header. This keeps your agent’s tool stack consistent with your server code. For marketplace context and additional APIs you might chain, browse Zyla API Hub.
Operational notes
- Auth: always Authorization: Bearer YOUR_API_KEY.
- HTTP: GET for all three endpoints shown.
- Pagination: when Paging is present, prefer incremental fetches. Don’t assume unlimited pages—respect MaxRecords.
- Coordinates: use decimal degrees; ensure LatitudeMin ≤ LatitudeMax and LongitudeMin ≤ LongitudeMax from your viewport.
- Errors: check ErrorCode.Id and ErrorCode.Description before processing Results.
- Trial and quotas: the first API typically offers a 7-day trial or 50 requests. Always confirm current limits on the listing page.
Why this setup ships fast
- No custom auth servers: one API key across Zyla APIs.
- Clear separation: autocomplete for inputs, list for search results, detail for deep pages.
- MCP support: the same endpoints can power tool-based agents that help you test or glue workflows.
Reference: endpoint summaries
Auto Complete
GET https://zylalabs.com/api/5902/canada-real-estate-api/7768/auto-complete
Purpose: keyword-based location suggestions during search.
List Residential
GET https://zylalabs.com/api/5902/canada-real-estate-api/7769/list-residential
Purpose: get residential inventory within a bounding box.
Property Detail
GET https://zylalabs.com/api/5902/canada-real-estate-api/7770/property-detail
Purpose: detailed info for a single property by ID + reference.
FAQ
How do I authenticate requests?
Send Authorization: Bearer YOUR_API_KEY on every request to the hub URLs.
What’s the fastest way to build a map search?
Use Auto Complete to normalize input, then feed your map viewport to List Residential via LatitudeMin/Max and LongitudeMin/Max. Debounce calls on pan/zoom and paginate using Paging fields.
How do I get property-level details?
Call Property Detail with the PropertyID and ReferenceNumber provided by your listing results to load full remarks and characteristics.
Is there a free plan?
No Free Plan. The first API on your account typically includes a 7-day trial or 50 requests. Check the API page for current access options and pricing.
Can I call these endpoints from an AI agent?
Yes. Use the MCP endpoint at https://mcp.zylalabs.com/mcp?apikey=YOUR_API_KEY and the same hub URLs shown above.
Ready to implement “API to list residential” in your app? Subscribe and grab your key on the listing page: Start 7-day trial on Canada Real Estate API. You can extend the same key to other categories across Zyla API Hub as your project grows.
Official API response
{"ErrorCode":{"Id":200,"Description":"Success - OK","ProductName":"Realtor API 7 | 20241202.1 | 1018e702fe06dda8279318e12b199910ca21c3ff | Monday, December 2, 2024 12:21:41 PM","Version":"1.0.9102.31292"},"Results":[{"Type":1,"ListingId":"27656697","ReferenceNumber":"X10440405","Address_EN":"191 QUEBEC STREET","Address_FR":"191 QUEBEC STREET","City":"Bracebridge (Macaulay)","PostalCode":"p1l1e3","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27656697\/191-quebec-street-bracebridge-macaulay-macaulay","RelativeURLFr":"\/immobilier\/27656697\/191-quebec-street-bracebridge-macaulay","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27661192","ReferenceNumber":"X10428998","Address_EN":"549 QUEBEC STREET","Address_FR":"549 QUEBEC STREET","City":"London","PostalCode":"n5w3y9","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27661192\/549-quebec-street-london-east-g","RelativeURLFr":"\/immobilier\/27661192\/549-quebec-street-london","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27720876","ReferenceNumber":"R2949266","Address_EN":"212 4928 QUEBEC STREET","Address_FR":"212 4928 QUEBEC STREET","City":"Vancouver","PostalCode":"v5w2n2","Province":"BC","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27720876\/212-4928-quebec-street-vancouver","RelativeURLFr":"\/immobilier\/27720876\/212-4928-quebec-street-vancouver","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27741486","ReferenceNumber":"X11894528","Address_EN":"558 QUEBEC STREET","Address_FR":"558 QUEBEC STREET","City":"Hamilton (Parkview)","PostalCode":"l8h6v4","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27741486\/558-quebec-street-hamilton-parkview-parkview","RelativeURLFr":"\/immobilier\/27741486\/558-quebec-street-hamilton-parkview","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27754883","ReferenceNumber":"S11901084","Address_EN":"267 QUEBEC STREET","Address_FR":"267 QUEBEC STREET","City":"Clearview (Stayner)","PostalCode":"l0m1s0","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27754883\/267-quebec-street-clearview-stayner-stayner","RelativeURLFr":"\/immobilier\/27754883\/267-quebec-street-clearview-stayner","isReferenceMatch":false,"isPostalCodeMatch":false}],"ResultsMapBox":[{…
Official API response
{"ErrorCode":{"Id":200,"Description":"Success - OK","ProductName":"Realtor API 7 | 20241202.1 | 1018e702fe06dda8279318e12b199910ca21c3ff | Monday, December 2, 2024 12:21:41 PM","Version":"1.0.9102.31292"},"Results":[{"Type":1,"ListingId":"27656697","ReferenceNumber":"X10440405","Address_EN":"191 QUEBEC STREET","Address_FR":"191 QUEBEC STREET","City":"Bracebridge (Macaulay)","PostalCode":"p1l1e3","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27656697\/191-quebec-street-bracebridge-macaulay-macaulay","RelativeURLFr":"\/immobilier\/27656697\/191-quebec-street-bracebridge-macaulay","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27661192","ReferenceNumber":"X10428998","Address_EN":"549 QUEBEC STREET","Address_FR":"549 QUEBEC STREET","City":"London","PostalCode":"n5w3y9","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27661192\/549-quebec-street-london-east-g","RelativeURLFr":"\/immobilier\/27661192\/549-quebec-street-london","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27720876","ReferenceNumber":"R2949266","Address_EN":"212 4928 QUEBEC STREET","Address_FR":"212 4928 QUEBEC STREET","City":"Vancouver","PostalCode":"v5w2n2","Province":"BC","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27720876\/212-4928-quebec-street-vancouver","RelativeURLFr":"\/immobilier\/27720876\/212-4928-quebec-street-vancouver","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27741486","ReferenceNumber":"X11894528","Address_EN":"558 QUEBEC STREET","Address_FR":"558 QUEBEC STREET","City":"Hamilton (Parkview)","PostalCode":"l8h6v4","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27741486\/558-quebec-street-hamilton-parkview-parkview","RelativeURLFr":"\/immobilier\/27741486\/558-quebec-street-hamilton-parkview","isReferenceMatch":false,"isPostalCodeMatch":false},{"Type":1,"ListingId":"27754883","ReferenceNumber":"S11901084","Address_EN":"267 QUEBEC STREET","Address_FR":"267 QUEBEC STREET","City":"Clearview (Stayner)","PostalCode":"l0m1s0","Province":"ON","Details_Small_EN":null,"Details_Small_FR":null,"RelativeURLEn":"\/real-estate\/27754883\/267-quebec-street-clearview-stayner-stayner","RelativeURLFr":"\/immobilier\/27754883\/267-quebec-street-clearview-stayner","isReferenceMatch":false,"isPostalCodeMatch":false}],"ResultsMapBox":[{…