API Access
Programmatic access to the National Office Listing Exchange. Pull listings into your own tools, CRM, or website in real time.
What Is the 1MLX API?
The 1MLX API allows your firm's technology team to pull live listing data directly from 1MLX into your own internal systems — your CRM, your proprietary search tools, or your client-facing availability reports. Instead of logging in manually, your team connects once using a secure API key and receives up-to-date listing data automatically.
This means your internal platforms stay current with 1MLX listings without any manual effort.
To request access, complete the form below.
Overview
The 1MLX API provides RESTful access to office listing data across all participating brokerages. Use it to integrate 1MLX listings into your CRM, website, internal tools, or data analytics platform.
All API responses are returned in JSON format. The base URL for all endpoints is:
https://api.1mlx.com/v1
Authentication
All API requests must include your API key in the request header. Pass your key using the Authorization header with a Bearer prefix:
curl https://api.1mlx.com/v1/listings \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json"
Requests without a valid API key will return a 401 Unauthorized error.
API Keys
Your firm administrator can generate and manage API keys from the Dashboard. Each key is scoped to your firm's data.
1mlx_live_••••••••••••••••••••••••
Endpoints
Listings
Returns a paginated list of office listings matching the specified filters.
| Parameter | Type | Description |
|---|---|---|
| market | string | Filter by market (e.g., "Manhattan", "Chicago") |
| submarket | string | Filter by submarket (e.g., "Midtown", "Loop") |
| min_sf | integer | Minimum rentable square feet |
| max_sf | integer | Maximum rentable square feet |
| max_rent | number | Maximum asking rent per RSF |
| lease_type | string | "direct", "sublet", or "all" (default: "all") |
| status | string | "active", "pending", or "all" (default: "active") |
| page | integer | Page number (default: 1) |
| per_page | integer | Results per page, max 100 (default: 25) |
{
"data": [
{
"id": "lst_8x7kM2nR",
"building_code": "BLD-001",
"address": "285 Fulton Street, New York, NY 10007",
"suite": "8500",
"floor": 85,
"rsf": 12500,
"asking_rent": 82.00,
"lease_type": "direct",
"available_date": "2026-04-01",
"status": "active",
"firm": "CBRE",
"agents": ["Sarah Chen"]
}
],
"meta": {
"total": 847,
"page": 1,
"per_page": 25,
"total_pages": 34
}
}
Buildings
Agents
Rate Limits
API requests are rate-limited to ensure fair usage across all participants. Limits are applied per API key.
Rate limit headers are included in every response:
X-RateLimit-Limit: 1000 X-RateLimit-Remaining: 847 X-RateLimit-Reset: 1709510400
Error Codes
The API uses standard HTTP status codes. Error responses include a JSON body with details:
{
"error": {
"code": "unauthorized",
"message": "Invalid or expired API key.",
"status": 401
}
}
| Code | Meaning |
|---|---|
| 200 | Success |
| 201 | Created successfully |
| 400 | Bad request (invalid parameters) |
| 401 | Unauthorized (invalid or missing API key) |
| 403 | Forbidden (insufficient permissions) |
| 404 | Resource not found |
| 429 | Rate limit exceeded |
| 500 | Internal server error |
SDKs & Examples
Get started quickly with code examples in common languages:
Python
import requests API_KEY = "1mlx_live_YOUR_KEY_HERE" BASE_URL = "https://api.1mlx.com/v1" # Search for office listings in Manhattan response = requests.get( f"{BASE_URL}/listings", headers={"Authorization": f"Bearer {API_KEY}"}, params={ "market": "Manhattan", "min_sf": 5000, "lease_type": "direct" } ) listings = response.json()["data"] for listing in listings: print(f"{listing['address']} Suite {listing['suite']} - {listing['rsf']} RSF @ ${listing['asking_rent']}/RSF")
JavaScript
const API_KEY = '1mlx_live_YOUR_KEY_HERE'; // Fetch active listings in Chicago const response = await fetch( 'https://api.1mlx.com/v1/listings?market=Chicago&status=active', { headers: { 'Authorization': `Bearer ${API_KEY}`, 'Content-Type': 'application/json' } } ); const { data, meta } = await response.json(); console.log(`Found ${meta.total} listings`);