API Reference¶
Comprehensive API documentation for the WFRMLS Python client.
📚 Available Endpoints¶
Core Resources¶
- Properties - Search and retrieve property listings
- Members - Access real estate agent and broker information
- Offices - Get brokerage and office details
- OpenHouse - Find scheduled open house events
Specialized Endpoints¶
- ADU - Accessory Dwelling Unit information
- Property Unit Types - Multi-unit property details
- Lookup - Enumeration values and reference data
- Deleted - Track deleted records for synchronization
System Endpoints¶
- Resource - Discover available API endpoints
- Data System - API version and configuration information
� Quick Start¶
from wfrmls import WFRMLSClient
# Initialize client
client = WFRMLSClient(bearer_token="your_token_here")
# Search properties
properties = client.property.get_properties(
filter_query="ListPrice ge 500000 and ListPrice le 750000",
select=["ListingKey", "UnparsedAddress", "ListPrice"],
top=10
)
# Get agent information
member = client.member.get_member_by_mls_id("123456")
# Find open houses
open_houses = client.openhouse.get_upcoming_open_houses(days_ahead=7)
📊 Common Patterns¶
Pagination¶
All endpoints support pagination using top and skip parameters:
# Get results in pages of 50
page_size = 50
page = 0
while True:
results = client.property.get_properties(
top=page_size,
skip=page * page_size
)
if not results["value"]:
break
# Process results
for property in results["value"]:
process_property(property)
page += 1
Field Selection¶
Use the select parameter to request only needed fields:
# Get only specific fields
results = client.property.get_properties(
select=["ListingKey", "UnparsedAddress", "ListPrice", "BedroomsTotal"]
)
Filtering¶
Use OData filter syntax for complex queries:
# Complex filter example
filter_query = (
"StandardStatus eq 'Active' and "
"BedroomsTotal ge 3 and "
"ListPrice ge 400000 and ListPrice le 600000"
)
results = client.property.get_properties(filter_query=filter_query)
Sorting¶
Control result order with the orderby parameter:
# Sort by price descending
results = client.property.get_properties(
orderby="ListPrice desc"
)
# Multiple sort fields
results = client.property.get_properties(
orderby="City asc, ListPrice desc"
)
�️ Response Structure¶
All endpoints return a consistent OData response format:
{
"@odata.context": "$metadata#EntityType",
"value": [
// Array of results
],
"@odata.count": 12345, // When count=true
"@odata.nextLink": "https://..." // When more pages available
}
The actual data is always in the value array.
⚡ Best Practices¶
- Use field selection - Only request fields you need to reduce payload size
- Implement pagination - Always paginate large result sets
- Cache lookup values - Store enumeration values locally
- Handle rate limits - Implement retry logic with exponential backoff
- Monitor deletions - Regularly sync deleted records
- Validate data - Always validate critical fields exist before use