Introduction
Introduction
Welcome to the Real Estate Projects API documentation.
This REST API provides a robust and secure programming interface for integrating, retrieving, and managing data related to real estate projects, including projects, floorplans, pricing, locations, developers, and associated companies.
It is designed to support seamless integration with external systems and partner solutions.
This documentation contains details about available endpoints, request and response formats, authentication, and practical usage examples.
Key Features
- Architecture: RESTful, with resources accessed using HTTP GET requests.
- Data Format: All requests and responses use standard JSON.
- Authentication: Secure access using Team Command Tokens. All endpoints require authentication. See the Authenticating requests section for details.
- Comprehensive Data: Provides access to projects, floorplans, cities, districts, neighbourhoods, developers, architects, interior designers, prices, documents, sales & marketing companies, and special incentives.
- Rate Limiting: Up to 60 requests per minute per team. Exceeding this limit results in a
429 Too Many Requestsresponse. - Error Handling: Standardized JSON error responses for common issues such as authentication failures (
401 Unauthenticated), missing resources, and rate limits. - Centralized Database: The API interacts with a centralized and regularly updated database of real estate projects.
404 Not Found responses
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"message": "Resource not found"
}
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"message": "Project not found"
}
The API returns clear and consistent 404 responses in two main cases:
- Resource not found: If you request a non-existent endpoint (for example, a typo in the URL), you will receive:
- {Model} not found: If you request a valid endpoint but the specific resource (like a Project, Developer, etc.) does not exist, you will receive: The model name in the message will match the type of resource you requested (e.g., "Developer not found").
How to Use
- Obtain your team command token from your team administrator or team management dashboard.
- Include your team token in the
Authorizationheader of every request:
Authorization: Bearer {YOUR_TEAM_TOKEN} - Explore the available endpoints below to find the data you need.
If you have any questions or need support, please contact your API administrator.
API Changelog
This document tracks all changes to the Red Bricks API endpoints, including new features, modifications, deprecations, and breaking changes.
Version History
Current Version: v1.0.4
- Release Date: October 21, 2025
- Previous Version: v1.0.3
- PHP Version: ^8.3
- Active Development: Continuous development with regular updates
- Lead Developer: Denis Nichik
Version Timeline
- v1.0.0: Initial Launch
- v1.0.1: Post-Launch Updates
- v1.0.2: Search & Response Enhancement
- v1.0.3: Enhanced Data Attributes & Response Improvements
- v1.0.4: Relationship Resources & Data Structure Improvements (Current)
Recent Changes
Version 1.0.4 - Relationship Resources & Data Structure Improvements
Release Date: October 21, 2025
Previous Version: v1.0.3
Added
- Complete Relationship Resources - Added full resource collections for related entities in project responses
developers- Complete DeveloperResource collection replacing simple ID referencesarchitects- Complete ArchitectResource collectioninterior_designers- Complete InteriorDesignerResource collectionsales_marketing_companies- Complete SalesMarketingCompanyResource collection
Updated
- Enhanced Data Structure - Improved data format for better API consumption
- Better structured unit type data with consistent format
- Standardized response structures across related resources
- Formally deprecated legacy ID fields in favor of full resource collections
Deprecated
- Legacy ID Fields - Formally marked several ID-only fields as deprecated
architect_id- Now deprecated in favor of full architects resource collectioninterior_designer_id- Now deprecated in favor of full interior_designers resource collectiondeveloper_id- Now deprecated in favor of full developers resource collection
API Changes
For API Consumers
- No Breaking Changes: All existing API calls continue to work as before
- Enhanced Data: More complete relationship information in a single API call
- Future Planning: Deprecation notices for legacy fields that will be removed in future versions
- Better Integration: Easier integration with related resource data
For Developers
- Cleaner Resource Structure: Better organized resource classes with proper relationship handling
- Reduced Duplication: Eliminated duplicate data between ID fields and resource collections
- Forward Compatibility: Clear migration path from legacy fields to new resource collections
Version 1.0.3 - Enhanced Data Attributes & Response Improvements
Release Date: September 24, 2025
Previous Version: v1.0.2
Added
- Enhanced Name Fields in API Responses - Added human-readable name fields for better data completeness
architect_name- Architect name in project responses (agent, enterprise subscriptions)interior_designer_name- Interior designer name in project responses (agent, enterprise subscriptions)
- Improved Data Structure - Enhanced JSON array formatting for project data
townhouse_types,ownership_types,low_rise_types,low_risesnow properly formatted as JSON arrays
Updated
- Project Resource Enhancement - Improved data formatting and deprecated field handling
- Added deprecation markers for
current_psf_avgandlaunch_psf_avgfields - Added GFA data sanitization to remove invalid
elevatorshaftsdata
- Added deprecation markers for
Breaking Changes
- FloorPlan Resource Fields Removed - ⚠️ BREAKING CHANGE
- Removed
pdf_url,only_for_pro, andurlfields from floorplan responses - These fields are no longer available in API responses
- Impact: Applications relying on these fields will need to be updated
- Migration: Remove references to these fields from your application code
- Removed
API Changes
Enhanced Response Format
- New Name Fields:
architect_name,interior_designer_nameadded to project responses - Improved Array Formatting: All type arrays now properly formatted as JSON arrays instead of strings
- Cleaner FloorPlan Responses: Removed redundant fields for more efficient data transfer
- Deprecated Fields: Marked
current_psf_avgandlaunch_psf_avgas deprecated (still functional)
For API Consumers
- ⚠️ Breaking Changes: FloorPlan responses no longer include
pdf_url,only_for_pro, andurlfields - Enhanced Data: More complete project information with architect and interior designer names
- Better Performance: Optimized floorplan responses with reduced payload size
- Improved Data Quality: Better formatted array data and cleaned webhook processing
- Deprecated Field Notice:
current_psf_avgandlaunch_psf_avgmarked as deprecated - Migration Required: Update applications that depend on removed FloorPlan fields
For Developers
- Cleaner Code Structure: Better organized resource classes with proper data formatting
- Enhanced Webhook Reliability: Improved data validation and sanitization in webhook processing
- Future-Ready Architecture: Proper deprecation handling for smooth API evolution
- Consistent Data Types: All array fields now properly formatted as JSON arrays
Version 1.0.2 - Search & Response Enhancement
Release Date: September 06, 2025
Previous Version: v1.0.1
Added
- Comprehensive Search Functionality - Added
searchquery parameter to/api/v1/projectsendpoint- Searches across: project name, description, developer name, city name, district name, neighbourhood name
- Enhanced API Response Fields - Added human-readable name fields (
city_name,district_name,neighbourhood_name,developer_name) to project responses - Universal Pagination Support - Added
per_pageparameter support to all API endpoints- Consistent pagination behavior across all controllers (architects, cities, developers, districts, documents, floorplans, interior designers, neighbourhoods, prices, sales marketing companies, special incentives)
- Configurable page size with bounds validation (1-50 items per page)
- Default: 20 items per page, Maximum: 50 items per page
- Entity Search Endpoints - Added
searchparameter to all entity endpoints for autosuggest functionality/api/v1/architects?search=term- Search architects by name (LIKE% pattern)/api/v1/cities?search=term- Search cities by name/api/v1/developers?search=term- Search developers by name/api/v1/districts?search=term- Search districts by name/api/v1/interior-designers?search=term- Search interior designers by name/api/v1/neighbourhoods?search=term- Search neighbourhoods by name/api/v1/sales-marketing-companies?search=term- Search sales & marketing companies by name/api/v1/special-incentives?search=term- Search special incentives by name
- Enhanced Webhook Testing - Improved test webhook functionality
- Factory-generated realistic project data for webhook testing
- Proper ProjectResource formatting matching production webhooks
- Added document webhook events support
API Changes
New Query Parameters
search- Comprehensive search across multiple fields (project name, description, developer, city, district, neighbourhood)per_page- Number of items per page for all paginated endpoints (1-50, default: 20)searchparameter added to all entity endpoints:- Architects, Cities, Developers, Districts, Interior Designers, Neighbourhoods, Sales Marketing Companies, Special Incentives
- Uses LIKE% pattern for autosuggest functionality (matches from beginning of name)
Enhanced Response Format
- Added
city_name,district_name,neighbourhood_name,developer_namefields - Maintained backward compatibility with existing field structure
- No changes to existing field names or data types
For API Consumers
- No Breaking Changes: All existing API calls continue to work exactly as before
- Enhanced Search: New powerful search capability with single parameter
- Complete Data: Reduced need for additional API calls to fetch related names
- Better Performance: Optimized queries provide faster responses
- Consistent Pagination: All endpoints now support
per_pageparameter for flexible data retrieval - Autosuggest Support: All entity endpoints now support search for building typeahead/autocomplete features
- Improved Webhook Testing: Test webhooks now use realistic, factory-generated project data
For Developers
- Simplified Integration: Single search parameter replaces need for complex multi-field queries
- Complete Responses: All necessary data available in single API call
- Clear Documentation: Updated examples and comprehensive parameter descriptions
- Future-Ready: Architecture supports easy extension for additional search fields
- Consistent Architecture: Standardized pagination behavior across all controllers
- Factory-Based Testing: Test webhooks use realistic, varied test data
- Enhanced Webhook Events: Added support for document.created and document.updated events
Version 1.0.1 - Post-Launch Updates
Release Date: August 28, 2025
Previous Version: v1.0.0
Added
- API Webhook Server - Complete webhook server implementation with multiple iterations for stability
- Name Filtering - Added filter by
nameparameter for projects endpoint - Sorting Enhancements - Added sorting by
updated_atfield for projects with default option
Updated
- Floor Ranges - Return floor ranges as array format for better data structure
- Projects Endpoint Optimization - Optimized projects endpoint response for faster data retrieval
API Changes
New Query Parameters
name- Filter projects by namesort_by=updated_at- Sort projects by last update timelimit- Limit number of projects returned
For API Consumers
- No Breaking Changes: All existing API calls will continue to work
- New Features: Optional new parameters available for enhanced functionality
- Performance: Existing endpoints will perform better with optimizations
For Developers
- Webhook Integration: New webhook endpoints available for real-time updates
- Enhanced Filtering: Additional filtering options for better data retrieval
- Timezone Awareness: All date/time fields now properly handle timezones
Version 1.0.0 - Initial Launch
Release Date: August 14, 2025 Status: Initial Production Release
Core Features
API v1 Endpoints
- Projects API - Complete project data with comprehensive filtering and pagination
- Floorplans API - Detailed floorplan information and specifications
- Documents API - Project documentation and file management
- Reference Data - Cities, districts, neighbourhoods, developers, architects, interior designers, sales marketing companies, special incentives, and pricing data
Authentication & Security
- Team-based API Tokens - Secure authentication system
- Rate Limiting - 60 requests per minute per token
- Subscription Access Control - Data access based on subscription levels
- Request Logging - Comprehensive API usage tracking
Data Management
- Advanced Filtering - 30+ filter parameters for projects
- Pagination Support - Efficient data pagination (max 50 items per page)
- Sorting Options - Multiple sorting fields and directions
- Range Filters - Price, date, and size range filtering
Last updated: September 24, 2025
Authenticating requests
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_TEAM_TOKEN}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
This API uses Team Command Token Authentication.
To authenticate, include your team command token in the Authorization header of every request, prefixed
with Bearer.
Example header:
Authorization: Bearer {API_TOKEN}
Team command tokens are associated with your team account and provide access to all API endpoints.
You can obtain your team command token from your team administrator or through your team management dashboard.
Keep your token secure and never share it with unauthorized users.
Note: All API endpoints require authentication. Requests without a valid team token will be rejected.
If your token is missing, expired, or invalid, you will receive one of the following error responses:
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"message": "Team token is required"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"message": "Invalid or expired team token"
}
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"message": "Team token has expired"
}
Endpoints
Projects
List all projects
requires authentication
Retrieve a list of all real estate projects with optional filters and pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/projects?name=Aurora+Hills&city=111%2C222%2C333&district=111%2C222%2C333&neighbourhood=111%2C222%2C333&sales_status=Selling&construction_status=Under+Construction&type=Condo&occupancy_date_min=2025-01-01&occupancy_date_max=2026-01-01&launch_date_min=2024-01-01&launch_date_max=2024-12-31&launch_psf_avg_min=1000&launch_psf_avg_max=2000&launch_price_min=300000&launch_price_max=900000&price_per_sqft_min=1000&price_per_sqft_max=2000¤t_price_min=400000¤t_price_max=800000&interior_size_min=500&interior_size_max=2000&maintenance_fees_min=0.5&maintenance_fees_max=1.5&parking_price_min=20000&parking_price_max=50000&locker_price_min=2000&locker_price_max=10000&deposit_min=5&deposit_max=20&developer=Tridel&architect=KPMB&sales_marketing_company=Baker&storeys_min=10&storeys_max=40&building_height_min=50&building_height_max=150&suites_min=100&suites_max=300&beds_min=1&beds_max=3&sort_by=price_per_sqft&sort_direction=asc&per_page=50&page=2&search=Tridel+downtown+toronto" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/projects';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'name' => 'Aurora Hills',
'city' => '111,222,333',
'district' => '111,222,333',
'neighbourhood' => '111,222,333',
'sales_status' => 'Selling',
'construction_status' => 'Under Construction',
'type' => 'Condo',
'occupancy_date_min' => '2025-01-01',
'occupancy_date_max' => '2026-01-01',
'launch_date_min' => '2024-01-01',
'launch_date_max' => '2024-12-31',
'launch_psf_avg_min' => '1000',
'launch_psf_avg_max' => '2000',
'launch_price_min' => '300000',
'launch_price_max' => '900000',
'price_per_sqft_min' => '1000',
'price_per_sqft_max' => '2000',
'current_price_min' => '400000',
'current_price_max' => '800000',
'interior_size_min' => '500',
'interior_size_max' => '2000',
'maintenance_fees_min' => '0.5',
'maintenance_fees_max' => '1.5',
'parking_price_min' => '20000',
'parking_price_max' => '50000',
'locker_price_min' => '2000',
'locker_price_max' => '10000',
'deposit_min' => '5',
'deposit_max' => '20',
'developer' => 'Tridel',
'architect' => 'KPMB',
'sales_marketing_company' => 'Baker',
'storeys_min' => '10',
'storeys_max' => '40',
'building_height_min' => '50',
'building_height_max' => '150',
'suites_min' => '100',
'suites_max' => '300',
'beds_min' => '1',
'beds_max' => '3',
'sort_by' => 'price_per_sqft',
'sort_direction' => 'asc',
'per_page' => '50',
'page' => '2',
'search' => 'Tridel downtown toronto',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/projects"
);
const params = {
"name": "Aurora Hills",
"city": "111,222,333",
"district": "111,222,333",
"neighbourhood": "111,222,333",
"sales_status": "Selling",
"construction_status": "Under Construction",
"type": "Condo",
"occupancy_date_min": "2025-01-01",
"occupancy_date_max": "2026-01-01",
"launch_date_min": "2024-01-01",
"launch_date_max": "2024-12-31",
"launch_psf_avg_min": "1000",
"launch_psf_avg_max": "2000",
"launch_price_min": "300000",
"launch_price_max": "900000",
"price_per_sqft_min": "1000",
"price_per_sqft_max": "2000",
"current_price_min": "400000",
"current_price_max": "800000",
"interior_size_min": "500",
"interior_size_max": "2000",
"maintenance_fees_min": "0.5",
"maintenance_fees_max": "1.5",
"parking_price_min": "20000",
"parking_price_max": "50000",
"locker_price_min": "2000",
"locker_price_max": "10000",
"deposit_min": "5",
"deposit_max": "20",
"developer": "Tridel",
"architect": "KPMB",
"sales_marketing_company": "Baker",
"storeys_min": "10",
"storeys_max": "40",
"building_height_min": "50",
"building_height_max": "150",
"suites_min": "100",
"suites_max": "300",
"beds_min": "1",
"beds_max": "3",
"sort_by": "price_per_sqft",
"sort_direction": "asc",
"per_page": "50",
"page": "2",
"search": "Tridel downtown toronto",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/projects'
params = {
'name': 'Aurora Hills',
'city': '111,222,333',
'district': '111,222,333',
'neighbourhood': '111,222,333',
'sales_status': 'Selling',
'construction_status': 'Under Construction',
'type': 'Condo',
'occupancy_date_min': '2025-01-01',
'occupancy_date_max': '2026-01-01',
'launch_date_min': '2024-01-01',
'launch_date_max': '2024-12-31',
'launch_psf_avg_min': '1000',
'launch_psf_avg_max': '2000',
'launch_price_min': '300000',
'launch_price_max': '900000',
'price_per_sqft_min': '1000',
'price_per_sqft_max': '2000',
'current_price_min': '400000',
'current_price_max': '800000',
'interior_size_min': '500',
'interior_size_max': '2000',
'maintenance_fees_min': '0.5',
'maintenance_fees_max': '1.5',
'parking_price_min': '20000',
'parking_price_max': '50000',
'locker_price_min': '2000',
'locker_price_max': '10000',
'deposit_min': '5',
'deposit_max': '20',
'developer': 'Tridel',
'architect': 'KPMB',
'sales_marketing_company': 'Baker',
'storeys_min': '10',
'storeys_max': '40',
'building_height_min': '50',
'building_height_max': '150',
'suites_min': '100',
'suites_max': '300',
'beds_min': '1',
'beds_max': '3',
'sort_by': 'price_per_sqft',
'sort_direction': 'asc',
'per_page': '50',
'page': '2',
'search': 'Tridel downtown toronto',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200):
{
"data": {
"id": 6508,
"name": "Ullrich-Mayert Tower",
"description": "Odit doloribus repellat officiis corporis nesciunt ut ratione iure. Molestiae ut rem est esse. Aut molestiae sunt suscipit doloribus fugiat. Aut deserunt et error neque recusandae et. Dolorem et ut dicta. Assumenda consequatur ut et sunt quisquam.",
"status": "Under Construction",
"construction_status": "Under Construction",
"media": "[\"https:\\/\\/via.placeholder.com\\/640x480.png\\/00cc99?text=ut\",\"https:\\/\\/via.placeholder.com\\/640x480.png\\/001133?text=alias\"]",
"city_id": 242,
"city_name": "Ashlymouth",
"deposit_with_time": null,
"deposit_full": null,
"deposit": 24,
"deposit_data": null,
"size": null,
"launch_price": null,
"district_id": 263,
"district_name": "recusandae District",
"neighbourhood_id": 699,
"neighbourhood_name": "rerum ex",
"architect_id": "",
"architect_name": "",
"interior_designer_id": "",
"interior_designer_name": "",
"developer_id": "",
"developer_name": "",
"developers": [],
"architects": [],
"interior_designers": [],
"sales_marketing_companies": [
{
"id": 280,
"name": "Fahey, Lesch and Christiansen Sales & Marketing",
"slug": null
}
],
"storeys": 7,
"suites": 188,
"units_condo": 0,
"units_hotel": 0,
"units_rental": 0,
"units_market_rate_rental": 0,
"units_rental_replacement": 0,
"units_affordable_rental": 0,
"building_type": "Townhouse",
"building_height_m": null,
"underground_levels": null,
"launch_date": "2025-12-15",
"occupancy_date": "2026-01-09 19:13:51",
"address": "660 Lambert Neck",
"google_map_link": "http://konopelski.com/a-consectetur-assumenda-eaque-neque-sit",
"walk_score": 42,
"transit_score": null,
"location": ",",
"current_price_from": "622722.00",
"current_price_to": "1234613.00",
"total_parking": 381,
"residential_parking": 337,
"parking_ratio": null,
"residential_parking_ratio": "0.76",
"visitor_parking": 27,
"industrial_parking": 8,
"office_parking": 4,
"retail_parking": null,
"bike_parking": 46,
"parking_price": null,
"parking_details": "Voluptates exercitationem est aperiam quis est nulla.",
"locker_price": "11860",
"locker_details": "Molestiae voluptatem est voluptatem molestiae magnam blanditiis.",
"current_sales_status": "Platinum Access & Selling",
"launch_psf_avg": null,
"maintenance_fees": "1.16",
"maintenance_fees_details": "Eos voluptatem et qui unde et esse pariatur.",
"floorplan_premiums": null,
"development_charges": "49641",
"google_drive_portal": "http://www.gleason.com/sed-dolorem-sed-voluptatem-ut-enim-sed",
"google_drive_archive_portal": "http://www.lang.info/",
"amenities": "facilis error vel omnis tempora",
"finishes": null,
"gfa": null,
"price_per_sqft": 1472,
"bedrooms_info": "Rerum voluptas ab maxime qui rerum sed.",
"bedrooms": [],
"bedrooms_percents": [],
"highlights": null,
"special_incentives": [
{
"id": 106,
"name": "Cashback on Closing",
"slug": null,
"description": null
}
],
"latest_documents": [],
"historical_documents": [],
"launch_price_project": null,
"townhouse_types": [],
"ownership_types": [],
"low_rise_types": [],
"low_rise_storeys": [],
"created_at": "2025-12-05T10:56:33.000000Z",
"updated_at": "2025-12-05T10:56:33.000000Z"
},
"links": "[...]",
"meta": "[...]"
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single project
requires authentication
Retrieve detailed information about a specific project by its unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/projects/1?name=Aurora+Hills&city=111%2C222%2C333&district=111%2C222%2C333&neighbourhood=111%2C222%2C333&sales_status=Selling&construction_status=Under+Construction&type=Condo&occupancy_date_min=2025-01-01&occupancy_date_max=2026-01-01&launch_date_min=2024-01-01&launch_date_max=2024-12-31&launch_psf_avg_min=1000&launch_psf_avg_max=2000&launch_price_min=300000&launch_price_max=900000&price_per_sqft_min=1000&price_per_sqft_max=2000¤t_price_min=400000¤t_price_max=800000&interior_size_min=500&interior_size_max=2000&maintenance_fees_min=0.5&maintenance_fees_max=1.5&parking_price_min=20000&parking_price_max=50000&locker_price_min=2000&locker_price_max=10000&deposit_min=5&deposit_max=20&developer=Tridel&architect=KPMB&sales_marketing_company=Baker&storeys_min=10&storeys_max=40&building_height_min=50&building_height_max=150&suites_min=100&suites_max=300&beds_min=1&beds_max=3&sort_by=price_per_sqft&sort_direction=asc&per_page=50&page=2&search=Tridel+downtown+toronto" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/projects/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'name' => 'Aurora Hills',
'city' => '111,222,333',
'district' => '111,222,333',
'neighbourhood' => '111,222,333',
'sales_status' => 'Selling',
'construction_status' => 'Under Construction',
'type' => 'Condo',
'occupancy_date_min' => '2025-01-01',
'occupancy_date_max' => '2026-01-01',
'launch_date_min' => '2024-01-01',
'launch_date_max' => '2024-12-31',
'launch_psf_avg_min' => '1000',
'launch_psf_avg_max' => '2000',
'launch_price_min' => '300000',
'launch_price_max' => '900000',
'price_per_sqft_min' => '1000',
'price_per_sqft_max' => '2000',
'current_price_min' => '400000',
'current_price_max' => '800000',
'interior_size_min' => '500',
'interior_size_max' => '2000',
'maintenance_fees_min' => '0.5',
'maintenance_fees_max' => '1.5',
'parking_price_min' => '20000',
'parking_price_max' => '50000',
'locker_price_min' => '2000',
'locker_price_max' => '10000',
'deposit_min' => '5',
'deposit_max' => '20',
'developer' => 'Tridel',
'architect' => 'KPMB',
'sales_marketing_company' => 'Baker',
'storeys_min' => '10',
'storeys_max' => '40',
'building_height_min' => '50',
'building_height_max' => '150',
'suites_min' => '100',
'suites_max' => '300',
'beds_min' => '1',
'beds_max' => '3',
'sort_by' => 'price_per_sqft',
'sort_direction' => 'asc',
'per_page' => '50',
'page' => '2',
'search' => 'Tridel downtown toronto',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/projects/1"
);
const params = {
"name": "Aurora Hills",
"city": "111,222,333",
"district": "111,222,333",
"neighbourhood": "111,222,333",
"sales_status": "Selling",
"construction_status": "Under Construction",
"type": "Condo",
"occupancy_date_min": "2025-01-01",
"occupancy_date_max": "2026-01-01",
"launch_date_min": "2024-01-01",
"launch_date_max": "2024-12-31",
"launch_psf_avg_min": "1000",
"launch_psf_avg_max": "2000",
"launch_price_min": "300000",
"launch_price_max": "900000",
"price_per_sqft_min": "1000",
"price_per_sqft_max": "2000",
"current_price_min": "400000",
"current_price_max": "800000",
"interior_size_min": "500",
"interior_size_max": "2000",
"maintenance_fees_min": "0.5",
"maintenance_fees_max": "1.5",
"parking_price_min": "20000",
"parking_price_max": "50000",
"locker_price_min": "2000",
"locker_price_max": "10000",
"deposit_min": "5",
"deposit_max": "20",
"developer": "Tridel",
"architect": "KPMB",
"sales_marketing_company": "Baker",
"storeys_min": "10",
"storeys_max": "40",
"building_height_min": "50",
"building_height_max": "150",
"suites_min": "100",
"suites_max": "300",
"beds_min": "1",
"beds_max": "3",
"sort_by": "price_per_sqft",
"sort_direction": "asc",
"per_page": "50",
"page": "2",
"search": "Tridel downtown toronto",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/projects/1'
params = {
'name': 'Aurora Hills',
'city': '111,222,333',
'district': '111,222,333',
'neighbourhood': '111,222,333',
'sales_status': 'Selling',
'construction_status': 'Under Construction',
'type': 'Condo',
'occupancy_date_min': '2025-01-01',
'occupancy_date_max': '2026-01-01',
'launch_date_min': '2024-01-01',
'launch_date_max': '2024-12-31',
'launch_psf_avg_min': '1000',
'launch_psf_avg_max': '2000',
'launch_price_min': '300000',
'launch_price_max': '900000',
'price_per_sqft_min': '1000',
'price_per_sqft_max': '2000',
'current_price_min': '400000',
'current_price_max': '800000',
'interior_size_min': '500',
'interior_size_max': '2000',
'maintenance_fees_min': '0.5',
'maintenance_fees_max': '1.5',
'parking_price_min': '20000',
'parking_price_max': '50000',
'locker_price_min': '2000',
'locker_price_max': '10000',
'deposit_min': '5',
'deposit_max': '20',
'developer': 'Tridel',
'architect': 'KPMB',
'sales_marketing_company': 'Baker',
'storeys_min': '10',
'storeys_max': '40',
'building_height_min': '50',
'building_height_max': '150',
'suites_min': '100',
'suites_max': '300',
'beds_min': '1',
'beds_max': '3',
'sort_by': 'price_per_sqft',
'sort_direction': 'asc',
'per_page': '50',
'page': '2',
'search': 'Tridel downtown toronto',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Central Park Residences",
"description": "A premium residential complex in downtown.",
"media": [
url,
..
]",
"completion_year": 2025,
"status": "pre-sale",
"city_id": 3,
"city_name": "Toronto",
"deposit_with_time": null,
"deposit_full": null,
"deposit": null,
"size": null,
"launch_price": null,
"district_id": 5,
"district_name": "Downtown",
"neighbourhood_id": 17,
"neighbourhood_name": "Financial District",
"architect_id": 4,
"interior_designer_id": 2,
"developer_id": 7,
"developer_name": "Tridel Corporation",
"storeys": 25,
"suites": null,
"units": 120,
"development_status": "in progress",
"building_type": "Condominium",
"building_height_m": 75,
"underground_levels": null,
"launch_date": "2024-08-01",
"occupancy_date": "2026-05-01",
"address": "123 Main St, Downtown",
"google_map_link": null,
"walk_score": 87,
"transit_score": 90,
"location": null,
"current_price_from": 650000,
"current_price_to": 1200000,
"total_parking": null,
"residential_parking": null,
"parking_ratio": null,
"residential_parking_ratio": null,
"visitor_parking": null,
"industrial_parking": null,
"office_parking": null,
"retail_parking": null,
"bike_parking": null,
"parking_price": null,
"parking_details": null,
"locker_price": null,
"locker_details": null,
"current_sales_status": null,
"launch_psf_avg": null,
"maintenance_fees": null,
"maintenance_fees_details": null,
"floorplan_premiums": null,
"development_charges": null,
"google_drive_portal": null,
"amenities": "Pool,Gym,Concierge,Parking",
"gfa": null,
"price_per_sqft": null,
"bedrooms_info": null,
"bedrooms": "1-bedroom: 45 units, 2-bedroom: 60 units, 3-bedroom: 15 units",
"bedrooms_percents": "1-bedroom: 37.5%, 2-bedroom: 50%, 3-bedroom: 12.5%",
"highlights": "Premium location, Modern amenities, Panoramic city views",
"launch_price_project": 480000,
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Floorplans
List all floorplans for a project
requires authentication
Retrieve a list of all available floorplans for a specific project with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/projects/5/floorplans?name=Aurora+Hills&city=111%2C222%2C333&district=111%2C222%2C333&neighbourhood=111%2C222%2C333&sales_status=Selling&construction_status=Under+Construction&type=Condo&occupancy_date_min=2025-01-01&occupancy_date_max=2026-01-01&launch_date_min=2024-01-01&launch_date_max=2024-12-31&launch_psf_avg_min=1000&launch_psf_avg_max=2000&launch_price_min=300000&launch_price_max=900000&price_per_sqft_min=1000&price_per_sqft_max=2000¤t_price_min=400000¤t_price_max=800000&interior_size_min=500&interior_size_max=2000&maintenance_fees_min=0.5&maintenance_fees_max=1.5&parking_price_min=20000&parking_price_max=50000&locker_price_min=2000&locker_price_max=10000&deposit_min=5&deposit_max=20&developer=Tridel&architect=KPMB&sales_marketing_company=Baker&storeys_min=10&storeys_max=40&building_height_min=50&building_height_max=150&suites_min=100&suites_max=300&beds_min=1&beds_max=3&sort_by=price_per_sqft&sort_direction=asc&per_page=50&page=2&search=Tridel+downtown+toronto" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/projects/5/floorplans';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'name' => 'Aurora Hills',
'city' => '111,222,333',
'district' => '111,222,333',
'neighbourhood' => '111,222,333',
'sales_status' => 'Selling',
'construction_status' => 'Under Construction',
'type' => 'Condo',
'occupancy_date_min' => '2025-01-01',
'occupancy_date_max' => '2026-01-01',
'launch_date_min' => '2024-01-01',
'launch_date_max' => '2024-12-31',
'launch_psf_avg_min' => '1000',
'launch_psf_avg_max' => '2000',
'launch_price_min' => '300000',
'launch_price_max' => '900000',
'price_per_sqft_min' => '1000',
'price_per_sqft_max' => '2000',
'current_price_min' => '400000',
'current_price_max' => '800000',
'interior_size_min' => '500',
'interior_size_max' => '2000',
'maintenance_fees_min' => '0.5',
'maintenance_fees_max' => '1.5',
'parking_price_min' => '20000',
'parking_price_max' => '50000',
'locker_price_min' => '2000',
'locker_price_max' => '10000',
'deposit_min' => '5',
'deposit_max' => '20',
'developer' => 'Tridel',
'architect' => 'KPMB',
'sales_marketing_company' => 'Baker',
'storeys_min' => '10',
'storeys_max' => '40',
'building_height_min' => '50',
'building_height_max' => '150',
'suites_min' => '100',
'suites_max' => '300',
'beds_min' => '1',
'beds_max' => '3',
'sort_by' => 'price_per_sqft',
'sort_direction' => 'asc',
'per_page' => '50',
'page' => '2',
'search' => 'Tridel downtown toronto',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/projects/5/floorplans"
);
const params = {
"name": "Aurora Hills",
"city": "111,222,333",
"district": "111,222,333",
"neighbourhood": "111,222,333",
"sales_status": "Selling",
"construction_status": "Under Construction",
"type": "Condo",
"occupancy_date_min": "2025-01-01",
"occupancy_date_max": "2026-01-01",
"launch_date_min": "2024-01-01",
"launch_date_max": "2024-12-31",
"launch_psf_avg_min": "1000",
"launch_psf_avg_max": "2000",
"launch_price_min": "300000",
"launch_price_max": "900000",
"price_per_sqft_min": "1000",
"price_per_sqft_max": "2000",
"current_price_min": "400000",
"current_price_max": "800000",
"interior_size_min": "500",
"interior_size_max": "2000",
"maintenance_fees_min": "0.5",
"maintenance_fees_max": "1.5",
"parking_price_min": "20000",
"parking_price_max": "50000",
"locker_price_min": "2000",
"locker_price_max": "10000",
"deposit_min": "5",
"deposit_max": "20",
"developer": "Tridel",
"architect": "KPMB",
"sales_marketing_company": "Baker",
"storeys_min": "10",
"storeys_max": "40",
"building_height_min": "50",
"building_height_max": "150",
"suites_min": "100",
"suites_max": "300",
"beds_min": "1",
"beds_max": "3",
"sort_by": "price_per_sqft",
"sort_direction": "asc",
"per_page": "50",
"page": "2",
"search": "Tridel downtown toronto",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/projects/5/floorplans'
params = {
'name': 'Aurora Hills',
'city': '111,222,333',
'district': '111,222,333',
'neighbourhood': '111,222,333',
'sales_status': 'Selling',
'construction_status': 'Under Construction',
'type': 'Condo',
'occupancy_date_min': '2025-01-01',
'occupancy_date_max': '2026-01-01',
'launch_date_min': '2024-01-01',
'launch_date_max': '2024-12-31',
'launch_psf_avg_min': '1000',
'launch_psf_avg_max': '2000',
'launch_price_min': '300000',
'launch_price_max': '900000',
'price_per_sqft_min': '1000',
'price_per_sqft_max': '2000',
'current_price_min': '400000',
'current_price_max': '800000',
'interior_size_min': '500',
'interior_size_max': '2000',
'maintenance_fees_min': '0.5',
'maintenance_fees_max': '1.5',
'parking_price_min': '20000',
'parking_price_max': '50000',
'locker_price_min': '2000',
'locker_price_max': '10000',
'deposit_min': '5',
'deposit_max': '20',
'developer': 'Tridel',
'architect': 'KPMB',
'sales_marketing_company': 'Baker',
'storeys_min': '10',
'storeys_max': '40',
'building_height_min': '50',
'building_height_max': '150',
'suites_min': '100',
'suites_max': '300',
'beds_min': '1',
'beds_max': '3',
'sort_by': 'price_per_sqft',
'sort_direction': 'asc',
'per_page': '50',
'page': '2',
'search': 'Tridel downtown toronto',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"project_id": 5,
"name": "2 Bedroom Suite",
"bedrooms": 2,
"bathrooms": 2,
"size": "950",
"image_url": "https://example.com/floorplans/2br.jpg",
"exposure": "East",
"floor_range": "10-15",
"availability": "Available",
"current_price": 820000,
"current_price_date": "2024-05-22",
"current_psf": 1100,
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/projects/5/floorplans?page=1",
"last": "http://your-app.test/api/v1/projects/5/floorplans?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/projects/5/floorplans?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/projects/5/floorplans",
"per_page": 20,
"to": 20,
"total": 100
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single floorplan in a project
requires authentication
Retrieve detailed information about a specific floorplan by ID within a given project.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/projects/5/floorplans/1?name=Aurora+Hills&city=111%2C222%2C333&district=111%2C222%2C333&neighbourhood=111%2C222%2C333&sales_status=Selling&construction_status=Under+Construction&type=Condo&occupancy_date_min=2025-01-01&occupancy_date_max=2026-01-01&launch_date_min=2024-01-01&launch_date_max=2024-12-31&launch_psf_avg_min=1000&launch_psf_avg_max=2000&launch_price_min=300000&launch_price_max=900000&price_per_sqft_min=1000&price_per_sqft_max=2000¤t_price_min=400000¤t_price_max=800000&interior_size_min=500&interior_size_max=2000&maintenance_fees_min=0.5&maintenance_fees_max=1.5&parking_price_min=20000&parking_price_max=50000&locker_price_min=2000&locker_price_max=10000&deposit_min=5&deposit_max=20&developer=Tridel&architect=KPMB&sales_marketing_company=Baker&storeys_min=10&storeys_max=40&building_height_min=50&building_height_max=150&suites_min=100&suites_max=300&beds_min=1&beds_max=3&sort_by=price_per_sqft&sort_direction=asc&per_page=50&page=2&search=Tridel+downtown+toronto" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/projects/5/floorplans/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'name' => 'Aurora Hills',
'city' => '111,222,333',
'district' => '111,222,333',
'neighbourhood' => '111,222,333',
'sales_status' => 'Selling',
'construction_status' => 'Under Construction',
'type' => 'Condo',
'occupancy_date_min' => '2025-01-01',
'occupancy_date_max' => '2026-01-01',
'launch_date_min' => '2024-01-01',
'launch_date_max' => '2024-12-31',
'launch_psf_avg_min' => '1000',
'launch_psf_avg_max' => '2000',
'launch_price_min' => '300000',
'launch_price_max' => '900000',
'price_per_sqft_min' => '1000',
'price_per_sqft_max' => '2000',
'current_price_min' => '400000',
'current_price_max' => '800000',
'interior_size_min' => '500',
'interior_size_max' => '2000',
'maintenance_fees_min' => '0.5',
'maintenance_fees_max' => '1.5',
'parking_price_min' => '20000',
'parking_price_max' => '50000',
'locker_price_min' => '2000',
'locker_price_max' => '10000',
'deposit_min' => '5',
'deposit_max' => '20',
'developer' => 'Tridel',
'architect' => 'KPMB',
'sales_marketing_company' => 'Baker',
'storeys_min' => '10',
'storeys_max' => '40',
'building_height_min' => '50',
'building_height_max' => '150',
'suites_min' => '100',
'suites_max' => '300',
'beds_min' => '1',
'beds_max' => '3',
'sort_by' => 'price_per_sqft',
'sort_direction' => 'asc',
'per_page' => '50',
'page' => '2',
'search' => 'Tridel downtown toronto',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/projects/5/floorplans/1"
);
const params = {
"name": "Aurora Hills",
"city": "111,222,333",
"district": "111,222,333",
"neighbourhood": "111,222,333",
"sales_status": "Selling",
"construction_status": "Under Construction",
"type": "Condo",
"occupancy_date_min": "2025-01-01",
"occupancy_date_max": "2026-01-01",
"launch_date_min": "2024-01-01",
"launch_date_max": "2024-12-31",
"launch_psf_avg_min": "1000",
"launch_psf_avg_max": "2000",
"launch_price_min": "300000",
"launch_price_max": "900000",
"price_per_sqft_min": "1000",
"price_per_sqft_max": "2000",
"current_price_min": "400000",
"current_price_max": "800000",
"interior_size_min": "500",
"interior_size_max": "2000",
"maintenance_fees_min": "0.5",
"maintenance_fees_max": "1.5",
"parking_price_min": "20000",
"parking_price_max": "50000",
"locker_price_min": "2000",
"locker_price_max": "10000",
"deposit_min": "5",
"deposit_max": "20",
"developer": "Tridel",
"architect": "KPMB",
"sales_marketing_company": "Baker",
"storeys_min": "10",
"storeys_max": "40",
"building_height_min": "50",
"building_height_max": "150",
"suites_min": "100",
"suites_max": "300",
"beds_min": "1",
"beds_max": "3",
"sort_by": "price_per_sqft",
"sort_direction": "asc",
"per_page": "50",
"page": "2",
"search": "Tridel downtown toronto",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/projects/5/floorplans/1'
params = {
'name': 'Aurora Hills',
'city': '111,222,333',
'district': '111,222,333',
'neighbourhood': '111,222,333',
'sales_status': 'Selling',
'construction_status': 'Under Construction',
'type': 'Condo',
'occupancy_date_min': '2025-01-01',
'occupancy_date_max': '2026-01-01',
'launch_date_min': '2024-01-01',
'launch_date_max': '2024-12-31',
'launch_psf_avg_min': '1000',
'launch_psf_avg_max': '2000',
'launch_price_min': '300000',
'launch_price_max': '900000',
'price_per_sqft_min': '1000',
'price_per_sqft_max': '2000',
'current_price_min': '400000',
'current_price_max': '800000',
'interior_size_min': '500',
'interior_size_max': '2000',
'maintenance_fees_min': '0.5',
'maintenance_fees_max': '1.5',
'parking_price_min': '20000',
'parking_price_max': '50000',
'locker_price_min': '2000',
'locker_price_max': '10000',
'deposit_min': '5',
'deposit_max': '20',
'developer': 'Tridel',
'architect': 'KPMB',
'sales_marketing_company': 'Baker',
'storeys_min': '10',
'storeys_max': '40',
'building_height_min': '50',
'building_height_max': '150',
'suites_min': '100',
'suites_max': '300',
'beds_min': '1',
'beds_max': '3',
'sort_by': 'price_per_sqft',
'sort_direction': 'asc',
'per_page': '50',
'page': '2',
'search': 'Tridel downtown toronto',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"project_id": 5,
"name": "2 Bedroom Suite",
"bedrooms": 2,
"bathrooms": 2,
"size": "950",
"image_url": "https://example.com/floorplans/2br.jpg",
"exposure": "East",
"floor_range": "10-15",
"availability": "Available",
"current_price": 820000,
"current_price_date": "2024-05-22",
"current_psf": 1100,
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Documents
List all documents for a project
requires authentication
Retrieve a list of all documents for a specific project with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/projects/5/documents?page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/projects/5/documents';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/projects/5/documents"
);
const params = {
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/projects/5/documents'
params = {
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"project_id": 5,
"name": "Brochure",
"document_type": "PDF",
"file_url": "https://example.com/storage/documents/brochure.pdf",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/projects/5/documents?page=1",
"last": "http://your-app.test/api/v1/projects/5/documents?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/projects/5/documents?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/projects/5/documents",
"per_page": 20,
"to": 20,
"total": 100
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single document in a project
requires authentication
Retrieve detailed information about a document by its ID within a given project.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/projects/5/documents/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/projects/5/documents/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/projects/5/documents/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/projects/5/documents/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"project_id": 5,
"name": "Brochure",
"document_type": "PDF",
"file_url": "https://example.com/storage/documents/brochure.pdf",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Architects
List all architects
requires authentication
Retrieve a collection of all architects with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/architects?search=Zaha&page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/architects';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Zaha',
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/architects"
);
const params = {
"search": "Zaha",
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/architects'
params = {
'search': 'Zaha',
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"name": "Zaha Hadid",
"slug": "zaha-hadid",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/architects?page=1",
"last": "http://your-app.test/api/v1/architects?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/architects?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/architects",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single architect
requires authentication
Retrieve details of a specific architect by their unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/architects/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/architects/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/architects/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/architects/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Zaha Hadid",
"slug": "zaha-hadid",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Cities
List all cities
requires authentication
Retrieve a collection of all cities with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/cities?search=Toronto&page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/cities';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Toronto',
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/cities"
);
const params = {
"search": "Toronto",
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/cities'
params = {
'search': 'Toronto',
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"name": "Toronto",
"slug": "toronto",
"description": "The largest city in Canada.",
"google_map_url": "https://maps.google.com/?q=Toronto",
"map_geometry": "MULTIPOLYGON(((...)))",
"center": "43.6532,-79.3832",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/cities?page=1",
"last": "http://your-app.test/api/v1/cities?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/cities?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/cities",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single city
requires authentication
Retrieve details of a specific city by its unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/cities/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/cities/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/cities/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/cities/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Toronto",
"slug": "toronto",
"description": "The largest city in Canada.",
"google_map_url": "https://maps.google.com/?q=Toronto",
"map_geometry": "MULTIPOLYGON(((...)))",
"center": "43.6532,-79.3832",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Developers
List all developers
requires authentication
Retrieve a collection of all developers with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/developers?search=Great&page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/developers';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Great',
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/developers"
);
const params = {
"search": "Great",
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/developers'
params = {
'search': 'Great',
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"name": "Great Builders Ltd.",
"slug": "great-builders-ltd",
"website": "https://greatbuilders.example.com",
"logo": "https://example.com/storage/logos/greatbuilders.png",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/developers?page=1",
"last": "http://your-app.test/api/v1/developers?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/developers?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/developers",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single developer
requires authentication
Retrieve details of a specific developer by its unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/developers/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/developers/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/developers/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/developers/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Great Builders Ltd.",
"website": "https://greatbuilders.example.com",
"logo": "https://example.com/storage/logos/greatbuilders.png"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Districts
List all districts
requires authentication
Retrieve a collection of all districts with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/districts?search=Central&page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/districts';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Central',
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/districts"
);
const params = {
"search": "Central",
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/districts'
params = {
'search': 'Central',
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"name": "Central District",
"slug": "central-district",
"city_id": 1,
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/districts?page=1",
"last": "http://your-app.test/api/v1/districts?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/districts?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/districts",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single district
requires authentication
Retrieve details of a specific district by its unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/districts/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/districts/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/districts/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/districts/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Central District",
"slug": "central-district",
"city_id": 1,
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Interior Designers
List all interior designers
requires authentication
Retrieve a collection of all interior designers with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/interior-designers?search=Kelly&page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/interior-designers';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Kelly',
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/interior-designers"
);
const params = {
"search": "Kelly",
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/interior-designers'
params = {
'search': 'Kelly',
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"name": "Kelly Hoppen",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/interior-designers?page=1",
"last": "http://your-app.test/api/v1/interior-designers?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/interior-designers?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/interior-designers",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single interior designer
requires authentication
Retrieve details of a specific interior designer by their unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/interior-designers/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/interior-designers/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/interior-designers/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/interior-designers/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Kelly Hoppen",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Neighbourhoods
List all neighbourhoods
requires authentication
Retrieve a collection of all neighbourhoods with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/neighbourhoods?search=Downtown&page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/neighbourhoods';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Downtown',
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/neighbourhoods"
);
const params = {
"search": "Downtown",
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/neighbourhoods'
params = {
'search': 'Downtown',
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"name": "Downtown",
"slug": "downtown",
"description": "Central business district.",
"google_map_url": "https://maps.google.com/?q=Downtown",
"map_geometry": "MULTIPOLYGON(((...)))",
"center": "43.6500,-79.3800",
"district_id": 1,
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/neighbourhoods?page=1",
"last": "http://your-app.test/api/v1/neighbourhoods?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/neighbourhoods?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/neighbourhoods",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single neighbourhood
requires authentication
Retrieve details of a specific neighbourhood by its unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/neighbourhoods/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/neighbourhoods/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/neighbourhoods/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/neighbourhoods/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Downtown",
"slug": "downtown",
"description": "Central business district.",
"google_map_url": "https://maps.google.com/?q=Downtown",
"map_geometry": "MULTIPOLYGON(((...)))",
"center": "43.6500,-79.3800",
"district_id": 1,
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Prices
List all prices
requires authentication
Retrieve a collection of all prices with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/prices?page=2&per_page=50&projects_id=1111%2C222%2C333&floorplans_id=1111%2C222%2C333" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/prices';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'page' => '2',
'per_page' => '50',
'projects_id' => '1111,222,333',
'floorplans_id' => '1111,222,333',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/prices"
);
const params = {
"page": "2",
"per_page": "50",
"projects_id": "1111,222,333",
"floorplans_id": "1111,222,333",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/prices'
params = {
'page': '2',
'per_page': '50',
'projects_id': '1111,222,333',
'floorplans_id': '1111,222,333',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"project_id": 5,
"floorplan_id": 11,
"amount": 750000,
"amount_psf": 1100,
"valid_from": "2024-05-01",
}
],
"links": {
"first": "http://your-app.test/api/v1/prices?page=1",
"last": "http://your-app.test/api/v1/prices?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/prices?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/prices",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single price
requires authentication
Retrieve details of a specific price by its unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/prices/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/prices/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/prices/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/prices/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"project_id": 5,
"floorplan_id": 11,
"amount": 750000,
"amount_psf": 1100,
"valid_from": "2024-05-01"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Sales & Marketing Companies
List all sales & marketing companies
requires authentication
Retrieve a collection of all sales & marketing companies with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/sales-marketing-companies?search=Realty&page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/sales-marketing-companies';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Realty',
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/sales-marketing-companies"
);
const params = {
"search": "Realty",
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/sales-marketing-companies'
params = {
'search': 'Realty',
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"name": "Realty Sales Inc.",
"slug": "realty-sales-inc",
}
],
"links": {
"first": "http://your-app.test/api/v1/sales-marketing-companies?page=1",
"last": "http://your-app.test/api/v1/sales-marketing-companies?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/sales-marketing-companies?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/sales-marketing-companies",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single sales & marketing company
requires authentication
Retrieve details of a specific sales & marketing company by its unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/sales-marketing-companies/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/sales-marketing-companies/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/sales-marketing-companies/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/sales-marketing-companies/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Realty Sales Inc.",
"slug": "realty-sales-inc",
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Special Incentives
List all special incentives
requires authentication
Retrieve a collection of all special incentives with pagination.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/special-incentives?search=Early&page=2&per_page=50" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/special-incentives';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
'query' => [
'search' => 'Early',
'page' => '2',
'per_page' => '50',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/special-incentives"
);
const params = {
"search": "Early",
"page": "2",
"per_page": "50",
};
Object.keys(params)
.forEach(key => url.searchParams.append(key, params[key]));
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/special-incentives'
params = {
'search': 'Early',
'page': '2',
'per_page': '50',
}
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers, params=params)
response.json()Example response (200, Successful response):
{
"data": [
{
"id": 1,
"name": "Early Bird Discount",
"slug": "early-bird-discount",
"description": "Get 5% off if you purchase before June.",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
],
"links": {
"first": "http://your-app.test/api/v1/special-incentives?page=1",
"last": "http://your-app.test/api/v1/special-incentives?page=5",
"prev": null,
"next": "http://your-app.test/api/v1/special-incentives?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 5,
"path": "http://your-app.test/api/v1/special-incentives",
"per_page": 20,
"to": 20,
"total": 100
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Get a single special incentive
requires authentication
Retrieve details of a specific special incentive by its unique ID.
Example request:
curl --request GET \
--get "https://api-staging.redbricksdata.com/api/v1/special-incentives/1" \
--header "Authorization: Bearer {YOUR_TEAM_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/api/v1/special-incentives/1';
$response = $client->get(
$url,
[
'headers' => [
'Authorization' => 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type' => 'application/json',
'Accept' => 'application/json',
],
]
);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/api/v1/special-incentives/1"
);
const headers = {
"Authorization": "Bearer {YOUR_TEAM_TOKEN}",
"Content-Type": "application/json",
"Accept": "application/json",
};
fetch(url, {
method: "GET",
headers,
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/api/v1/special-incentives/1'
headers = {
'Authorization': 'Bearer {YOUR_TEAM_TOKEN}',
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request('GET', url, headers=headers)
response.json()Example response (200, Successful response):
{
"data": {
"id": 1,
"name": "Early Bird Discount",
"slug": "early-bird-discount",
"description": "Get 5% off if you purchase before June.",
"created_at": "2024-05-01T08:13:17.000000Z",
"updated_at": "2024-05-15T08:13:17.000000Z"
}
}
Example response (401, Unauthenticated):
{
"message": "Unauthenticated."
}
Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.
Webhooks
Real-time notifications for data changes in the Red Bricks API
Receive Webhook
This endpoint receives webhook notifications from the Red Bricks API when data changes occur.
Overview
Webhooks allow you to receive real-time notifications when data changes in the API. When an event occurs (such as a project being updated), the API will send a POST request to your configured webhook URL with the event data.
Available Events
project.created- When a new project is createdproject.updated- When an existing project is updatedproject.deleted- When a project is deletedfloorplan.created- When a new floorplan is addedfloorplan.updated- When a floorplan is updatedfloorplan.deleted- When a floorplan is deleteddocument.created- When a new document is addeddocument.updated- When a document is updated
Signature Verification
The webhook signature is calculated using HMAC-SHA256:
$signature = hash_hmac('sha256', $payload, $secret);
Important: Always verify the signature before processing webhook data to ensure the request came from the Red Bricks API.
Implementation Example
<?php
// Get the raw POST body
$receivedPayloadJson = file_get_contents('php://input');
// Get the signature from headers
$receivedSignature = $_SERVER['Signature'] ?? '';
// Your webhook secret (configured when creating the webhook)
$secret = 'your-webhook-secret';
// Calculate the expected signature
$calculatedSignature = hash_hmac('sha256', $receivedPayloadJson, $secret);
// Verify the signature
if (hash_equals($calculatedSignature, $receivedSignature)) {
// Webhook is valid
$payload = json_decode($receivedPayloadJson, true);
// Process the webhook data
$event = $payload['event'];
$data = $payload['data'];
// Handle different events
switch ($event) {
case 'project.created':
handleProjectCreated($data);
break;
case 'project.updated':
handleProjectUpdated($data);
break;
case 'floorplan.created':
handleFloorplanCreated($data);
break;
case 'floorplan.updated':
handleFloorplanUpdated($data);
break;
case 'document.created':
handleDocumentCreated($data);
break;
// ... handle other events
}
// Return success response
http_response_code(200);
echo json_encode(['status' => 'success']);
} else {
// Invalid signature
http_response_code(401);
echo json_encode(['error' => 'Invalid signature']);
}
?>
Example request:
curl --request POST \
"https://api-staging.redbricksdata.com/webhooks/receive"$client = new \GuzzleHttp\Client();
$url = 'https://api-staging.redbricksdata.com/webhooks/receive';
$response = $client->post($url);
$body = $response->getBody();
print_r(json_decode((string) $body));const url = new URL(
"https://api-staging.redbricksdata.com/webhooks/receive"
);
fetch(url, {
method: "POST",
}).then(response => response.json());import requests
import json
url = 'https://api-staging.redbricksdata.com/webhooks/receive'
response = requests.request('POST', url, )
response.json()Received response:
Request failed with error:
Tip: Check that you're properly connected to the network.
If you're a maintainer of ths API, verify that your API is running and you've enabled CORS.
You can check the Dev Tools console for debugging information.