API Documentation
StableEstate wraps RentCast's MLS data behind x402 — 140M+ property records, rental and sale listings, automated valuations, and market statistics across all 50 US states. Every paid endpoint costs $0.01 USDC on Base mainnet.
GET /api/healthFree health check, returns 200
POST /api/apartments/searchRental Listings Search
POST /api/sales/searchSale Listings Search
POST /api/properties/searchProperty Records Search
POST /api/properties/randomRandom Properties
GET /api/properties/{id}Property by ID
POST /api/valuations/valueValue Estimate
POST /api/valuations/rentRent Estimate
POST /api/marketsMarket Statistics
Pricing
| Endpoint | Cost |
|---|---|
| Rental Listings Search | $0.01 |
| Sale Listings Search | $0.01 |
| Property Records Search | $0.01 |
| Random Properties | $0.01 |
| Property by ID | $0.01 |
| Value Estimate | $0.01 |
| Rent Estimate | $0.01 |
| Market Statistics | $0.01 |
All endpoints cost $0.01 USDC on Base mainnet via x402. Free endpoints: /api/health, /openapi.json, /llms.txt.
/api/apartments/searchSearch active rental listings across all 50 states. Accepts a JSON body with location and filter parameters.
Location (at least one required)
| Parameter | Type | Description |
|---|---|---|
location | string | Freeform: "Brooklyn, NY", "Austin", "10001" |
city | string | City name (use with state) |
state | string | Two-letter state code |
zipCode | string | ZIP code |
address | string | Street address |
latitude | number | Center of radius search |
longitude | number | Center of radius search |
radius | number | Search radius in miles (max 100) |
Filters
| Parameter | Type | Description |
|---|---|---|
minBedrooms | number | Minimum bedrooms (alias: bedrooms) |
minBathrooms | number | Minimum bathrooms (alias: bathrooms) |
minPrice | number | Minimum monthly rent USD |
maxPrice | number | Maximum monthly rent USD |
minSqft | number | Minimum square footage |
maxSqft | number | Maximum square footage |
propertyType | string | Single Family, Condo, Townhouse, Manufactured, Multi-Family, Apartment |
daysOld | number | Listings added within N days |
status | string | Active (default) or Inactive |
limit | number | Results per page, 1-500 (default 25) |
offset | number | Pagination offset (default 0) |
Example
curl -X POST https://stableestate.dev/api/apartments/search \
-H "Content-Type: application/json" \
-d '{"location": "Brooklyn, NY", "maxPrice": 3000, "minBedrooms": 1}'Response
{
"listings": [
{
"id": "417-Hicks-St,-Apt-3B,-Brooklyn,-NY-11201",
"formattedAddress": "417 Hicks St, Apt 3B, Brooklyn, NY 11201",
"city": "Brooklyn",
"state": "NY",
"zipCode": "11201",
"latitude": 40.688077,
"longitude": -73.998912,
"propertyType": "Condo",
"bedrooms": 1,
"bathrooms": 1,
"squareFootage": 500,
"price": 2875,
"status": "Active",
"listedDate": "2026-02-18T00:00:00.000Z",
"daysOnMarket": 77,
"mlsName": "CorcoranGroup",
"listingAgent": { "name": "Aurora Maldonado", "phone": "7188529050" }
}
],
"totalResults": 1
}/api/sales/searchSearch for-sale property listings. Same location and pagination parameters as rental search. Additional property type "Land" available. Price filters refer to listing price (not monthly rent).
Example
curl -X POST https://stableestate.dev/api/sales/search \
-H "Content-Type: application/json" \
-d '{"location": "Austin, TX", "maxPrice": 500000, "bedrooms": "3"}'Response
{
"listings": [
{
"id": "123-Oak-St,-Austin,-TX-78701",
"formattedAddress": "123 Oak St, Austin, TX 78701",
"city": "Austin",
"state": "TX",
"zipCode": "78701",
"propertyType": "Single Family",
"bedrooms": 3,
"bathrooms": 2,
"squareFootage": 1600,
"price": 450000,
"status": "Active",
"daysOnMarket": 14,
"listingAgent": { "name": "Jane Smith", "phone": "5125551234" }
}
],
"totalResults": 1
}/api/properties/searchSearch property records with structural attributes, tax assessments, ownership details, and transaction history. Same location parameters as other search endpoints.
Additional Filters
| Parameter | Type | Description |
|---|---|---|
bedrooms | string | Count or range (e.g. "3", "2-4") |
bathrooms | string | Count or range |
squareFootage | string | Sq ft range (e.g. "1000-2000") |
lotSize | string | Lot size range in sq ft |
yearBuilt | string | Year or range (e.g. "2000-2024") |
propertyType | string | Includes Land in addition to residential types |
Example
curl -X POST https://stableestate.dev/api/properties/search \
-H "Content-Type: application/json" \
-d '{"location": "Austin, TX", "propertyType": "Single Family", "yearBuilt": "2000-2024"}'Response
{
"properties": [
{
"id": "5500-Grand-Lake-Dr,-San-Antonio,-TX-78244",
"formattedAddress": "5500 Grand Lake Dr, San Antonio, TX 78244",
"propertyType": "Single Family",
"bedrooms": 4,
"bathrooms": 2,
"squareFootage": 1800,
"lotSize": 6500,
"yearBuilt": 1998,
"lastSaleDate": "2020-03-15",
"lastSalePrice": 185000,
"taxAssessments": {
"2024": { "value": 195000, "land": 45000, "improvements": 150000 }
},
"propertyTaxes": { "2024": { "total": 4200 } },
"owner": { "names": ["John Doe"], "type": "Individual" }
}
],
"totalResults": 1
}/api/properties/randomReturns random property records from across the US. Accepts an optional limit parameter (1-500, default 5).
Example
curl -X POST https://stableestate.dev/api/properties/random \
-H "Content-Type: application/json" \
-d '{"limit": 3}'/api/properties/{id}Get a single property record by its ID. Property IDs are returned in search results.
Example
curl https://stableestate.dev/api/properties/5500-Grand-Lake-Dr,-San-Antonio,-TX-78244
/api/valuations/valueAutomated property value estimate (AVM) with comparable sales. Provide an address or lat/lng coordinates. Optionally specify property attributes for a more accurate estimate.
Parameters
| Parameter | Type | Description |
|---|---|---|
address | string | Full property address |
latitude | number | Property latitude |
longitude | number | Property longitude |
propertyType | string | Property type |
bedrooms | number | Number of bedrooms |
bathrooms | number | Number of bathrooms |
squareFootage | number | Living area in sq ft |
maxRadius | number | Max distance for comparables (miles) |
daysOld | number | Max days since comps were listed |
compCount | number | Number of comparables (5-25, default 15) |
Example
curl -X POST https://stableestate.dev/api/valuations/value \
-H "Content-Type: application/json" \
-d '{"address": "5500 Grand Lake Dr, San Antonio, TX 78244"}'Response
{
"price": 245000,
"priceRangeLow": 230000,
"priceRangeHigh": 260000,
"subjectProperty": {
"formattedAddress": "5500 Grand Lake Dr, San Antonio, TX 78244",
"propertyType": "Single Family",
"bedrooms": 4,
"bathrooms": 2,
"squareFootage": 1800
},
"comparables": [
{
"formattedAddress": "5501 Grand Lake Dr, San Antonio, TX 78244",
"price": 240000,
"distance": 0.1,
"correlation": 0.95
}
]
}/api/valuations/rentEstimated monthly rent with comparable rentals. Same parameters as value estimate, except propertyType excludes Land.
Example
curl -X POST https://stableestate.dev/api/valuations/rent \
-H "Content-Type: application/json" \
-d '{"address": "5500 Grand Lake Dr, San Antonio, TX 78244"}'Response
{
"rent": 1850,
"rentRangeLow": 1700,
"rentRangeHigh": 2000,
"subjectProperty": {
"formattedAddress": "5500 Grand Lake Dr, San Antonio, TX 78244",
"bedrooms": 4,
"bathrooms": 2
},
"comparables": [
{
"formattedAddress": "5501 Grand Lake Dr, San Antonio, TX 78244",
"price": 1900,
"distance": 0.1,
"correlation": 0.92
}
]
}/api/marketsAggregate market statistics and listing trends for a US zip code.
Parameters
| Parameter | Type | Description |
|---|---|---|
zipCode | string | 5-digit US zip code (required) |
dataType | string | All (default), Sale, or Rental |
historyRange | number | Historical data range in months (default 12) |
Example
curl -X POST https://stableestate.dev/api/markets \
-H "Content-Type: application/json" \
-d '{"zipCode": "78701", "dataType": "All"}'Response
{
"zipCode": "78701",
"saleData": {
"averagePrice": 450000,
"medianPrice": 420000,
"totalListings": 150,
"averageDaysOnMarket": 32
},
"rentalData": {
"averageRent": 2100,
"medianRent": 1950,
"totalListings": 300,
"averageDaysOnMarket": 18
}
}GET Support
All search, valuation, and market endpoints also accept GET requests with query parameters instead of a JSON body.
GET /api/apartments/search?location=Austin&maxPrice=2000&minBedrooms=2 GET /api/valuations/value?address=5500+Grand+Lake+Dr,+San+Antonio,+TX+78244 GET /api/markets?zipCode=78701&dataType=Rental
Notes
- •All 50 US states covered, 140M+ property records
- •Responses are fast (~1-2 seconds)
- •Data sourced from MLS feeds via RentCast
- •NYC boroughs: use ZIP codes for best results (e.g. 11201 for Brooklyn Heights) — RentCast indexes boroughs inconsistently by city name
- •Rental search uses number type for bedrooms/bathrooms/sqft; property and sale search uses string to support RentCast range syntax (e.g. "2-4")
- •Value and rent estimate endpoints work best with a full street address. You can also pass bedrooms, bathrooms, squareFootage to improve accuracy