Developer Hub
The CRE API
developers want.
420+ REST endpoints. Strongly typed SDKs. A schema that maps to real CRE objects — not generic tables. Build integrations, automate workflows, and power analytics on data that actually makes sense.
Quickstart
Up and running in 5 minutes.
Get an API key
Find your organization on HqO and request a developer API key from your account settings.
Install the SDK
Install the TypeScript or Python SDK.
npm install @hqo/sdk
Initialize the client
Import and initialize the client with your API key.
import { HqO } from '@hqo/sdk';
const hqo = new HqO({ apiKey: process.env.HQO_API_KEY });Make your first query
Fetch your portfolio buildings.
const buildings = await hqo.buildings.list(); console.log(buildings.data); // Array of Building objects
SDKs
Your language. Your toolchain.
TypeScript SDK
v2.4.1
Fully typed client with auto-generated models from our OpenAPI spec. First-class support for async/await, streaming, and webhooks.
Python SDK
v2.3.0
Python 3.9+ client with asyncio support, Pydantic v2 models, and type stubs. Works with Django, FastAPI, and raw scripts.
REST API
OpenAPI 3.1
Use any HTTP client or import our OpenAPI spec into Postman, Insomnia, or any toolchain. 420+ endpoints fully documented.
Core Concepts
The patterns that matter.
Authentication
All API calls require a Bearer token. Tokens are organization-scoped and carry fine-grained permission masks per object type.
const hqo = new HqO({
apiKey: 'hqo_live_sk_...',
region: 'us-east-1',
});Pagination
All list endpoints use cursor-based pagination. Pass a cursor token from meta.next_cursor to get the next page.
const page1 = await hqo.leases.list({ per_page: 25 });
const page2 = await hqo.leases.list({
cursor: page1.meta.next_cursor,
});Webhooks
Subscribe to any object lifecycle event. HqO signs all payloads with HMAC-SHA256. Verify signatures to ensure authenticity.
hqo.webhooks.verify(payload, signature, secret);
hqo.webhooks.on('lease.created', async (event) => {
await syncToERP(event.data.lease);
});Rate Limits
Rate limits are communicated via response headers. Use the X-RateLimit-Remaining header to implement backoff.
// SDK handles 429s with automatic retry
const hqo = new HqO({
apiKey: process.env.HQO_API_KEY,
retryConfig: { maxRetries: 3, backoff: 'exponential' },
});Start building.
Get an API key, read the reference, or explore the TypeScript SDK. Your first query takes 5 minutes.