Open House provides a comprehensive REST API that allows you to integrate property management and visitor tracking into your applications. This documentation covers all available endpoints and authentication methods.
All API requests require authentication using API keys:
Bearer YOUR_API_KEY
curl -H "Authorization: Bearer YOUR_API_KEY" \
https://api.openhouse.com/v1/properties
All API endpoints are relative to the base URL:
https://api.openhouse.com/v1
Retrieve a list of all properties for the authenticated user.
GET /properties
page
(optional): Page number for pagination (default: 1)per_page
(optional): Number of properties per page (default: 20, max: 100)status
(optional): Filter by status (active, pending, sold)search
(optional): Search in property title and address{
"data": [
{
"id": "uuid",
"title": "Beautiful Family Home",
"price": 450000,
"address": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip_code": "90210",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 50,
"last_page": 3
}
}
Retrieve a specific property by ID.
GET /properties/{id}
{
"data": {
"id": "uuid",
"title": "Beautiful Family Home",
"price": 450000,
"address": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip_code": "90210",
"description": "Rich text description...",
"property_type": "single_family",
"bedrooms": 3,
"bathrooms": 2,
"square_feet": 2000,
"lot_size": "0.25 acres",
"year_built": 2010,
"mls_number": "MLS123456",
"status": "active",
"featured_image": "https://...",
"gallery_images": ["https://...", "https://..."],
"public_url": "https://openhouse.com/p/property-slug",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
}
Create a new property listing.
POST /properties
{
"title": "Beautiful Family Home",
"price": 450000,
"address": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip_code": "90210",
"description": "Rich text description...",
"property_type": "single_family",
"bedrooms": 3,
"bathrooms": 2,
"square_feet": 2000,
"lot_size": "0.25 acres",
"year_built": 2010,
"mls_number": "MLS123456",
"status": "active"
}
{
"data": {
"id": "uuid",
"title": "Beautiful Family Home",
"price": 450000,
"address": "123 Main St",
"city": "Anytown",
"state": "CA",
"zip_code": "90210",
"description": "Rich text description...",
"property_type": "single_family",
"bedrooms": 3,
"bathrooms": 2,
"square_feet": 2000,
"lot_size": "0.25 acres",
"year_built": 2010,
"mls_number": "MLS123456",
"status": "active",
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z"
}
}
Update an existing property.
PUT /properties/{id}
Include only the fields you want to update.
{
"price": 475000,
"status": "pending"
}
Delete a property (this action cannot be undone).
DELETE /properties/{id}
{
"message": "Property deleted successfully"
}
Retrieve visitors for a specific property.
GET /properties/{property_id}/visitors
page
(optional): Page number for paginationper_page
(optional): Number of visitors per pageinterest_level
(optional): Filter by interest level (high, medium, low)date_from
(optional): Filter by sign-in date (YYYY-MM-DD)date_to
(optional): Filter by sign-in date (YYYY-MM-DD){
"data": [
{
"id": "uuid",
"name": "John Doe",
"email": "[email protected]",
"phone": "+1234567890",
"interest_level": "high",
"timeline": "1-3 months",
"financing": "cash",
"notes": "Interested in the backyard",
"signed_in_at": "2024-01-15T14:30:00Z",
"created_at": "2024-01-15T14:30:00Z"
}
],
"meta": {
"current_page": 1,
"per_page": 20,
"total": 25,
"last_page": 2
}
}
Retrieve a specific visitor by ID.
GET /properties/{property_id}/visitors/{visitor_id}
Create a new visitor sign-in record.
POST /properties/{property_id}/visitors
{
"name": "John Doe",
"email": "[email protected]",
"phone": "+1234567890",
"interest_level": "high",
"timeline": "1-3 months",
"financing": "cash",
"notes": "Interested in the backyard"
}
Upload images for a property.
POST /properties/{property_id}/images
Use multipart/form-data to upload files.
featured_image
(optional): Set as featured imagegallery_images[]
(optional): Array of gallery images{
"data": {
"featured_image": "https://...",
"gallery_images": ["https://...", "https://..."]
}
}
Export property data in various formats.
GET /properties/{id}/export
format
(required): Export format (pdf, csv, json)include_images
(optional): Include images in export (default: true)Export visitor data for a property.
GET /properties/{property_id}/visitors/export
format
(required): Export format (pdf, csv, json)date_from
(optional): Filter by date rangedate_to
(optional): Filter by date rangeAll errors follow a consistent format:
{
"error": {
"message": "Error description",
"code": "ERROR_CODE",
"details": {
"field": "Additional error details"
}
}
}
401
: Unauthorized (invalid API key)403
: Forbidden (insufficient permissions)404
: Not found (resource doesn't exist)422
: Validation error (invalid request data)429
: Rate limit exceeded500
: Internal server errorAPI requests are rate limited to ensure fair usage:
We provide official SDKs for popular programming languages:
npm install openhouse-api
composer require openhouse/api
pip install openhouse-api
gem install openhouse-api
const OpenHouse = require('openhouse-api');
const client = new OpenHouse({
apiKey: 'YOUR_API_KEY'
});
// List properties
const properties = await client.properties.list();
// Create a property
const property = await client.properties.create({
title: 'Beautiful Home',
price: 450000,
address: '123 Main St',
city: 'Anytown',
state: 'CA',
zip_code: '90210'
});
Receive real-time notifications when events occur:
POST /webhooks
{
"url": "https://your-app.com/webhooks/openhouse",
"events": ["property.created", "visitor.signed_in"],
"secret": "your-webhook-secret"
}
{
"event": "property.created",
"timestamp": "2024-01-15T10:30:00Z",
"data": {
"property": {
"id": "uuid",
"title": "Beautiful Home",
"price": 450000
}
}
}