Skip to main content

Built for developers who ship fast

Everything you need to build, test, and scale property management integrations.

Unified Data Model

Every PMS speaks a different language. Propexo normalizes residents, leases, units, charges, and payments into a single consistent schema so you never write per-vendor parsing logic again.

  • Consistent field names and types across all PMS platforms
  • Automatic data validation and transformation
  • Versioned schemas with backward compatibility
GET /v1/leases/lease_42

{
  "id": "lease_42",
  "resident_id": "res_98765",
  "unit_id": "unit_204B",
  "start_date": "2025-01-01",
  "end_date": "2026-01-01",
  "monthly_rent": 2150.00,
  "status": "active"
}
POST /v1/connections

{
  "provider": "entrata",
  "credentials": {
    "api_key": "ent_...",
    "domain": "acme.entrata.com"
  },
  "sync_config": {
    "models": ["residents", "leases"],
    "frequency": "realtime"
  }
}

Multi-PMS Authentication

Connect to any supported PMS through a single, unified authentication flow. Propexo handles OAuth, API keys, and token refresh for each provider so you don't have to.

  • One connection endpoint for all providers
  • Automatic credential management and token refresh
  • Encrypted storage with SOC 2 compliance

Webhook Events

Subscribe to granular events and get notified the moment data changes across any connected PMS. No polling required.

  • Real-time push notifications for all data models
  • Automatic retries with exponential backoff
  • HMAC signature verification for security
POST /v1/webhooks

{
  "url": "https://your-app.com/hooks",
  "events": [
    "resident.created",
    "lease.updated",
    "payment.received"
  ],
  "secret": "whsec_..."
}
GET /v1/units?page=2&per_page=50

{
  "data": [...],
  "pagination": {
    "total": 1250,
    "page": 2,
    "per_page": 50,
    "total_pages": 25
  }
}

# Response headers:
# X-RateLimit-Limit: 1000
# X-RateLimit-Remaining: 847
# X-RateLimit-Reset: 1735689600

Rate Limiting & Pagination

Built-in cursor and offset pagination with predictable rate limits. Propexo handles upstream PMS rate limits automatically so your requests never get throttled.

  • Transparent rate limit headers on every response
  • Automatic upstream throttle management
  • Flexible offset and cursor-based pagination

SDKs for Python, Node.js & Ruby

Official client libraries with full TypeScript support, auto-generated from our OpenAPI spec. Install with one command and start making API calls in minutes.

  • Type-safe clients with full IDE autocompletion
  • Built-in retry logic and error handling
  • Auto-generated from OpenAPI specification
# Python
from propexo import Propexo

client = Propexo(api_key="px_live_...")
residents = client.residents.list(
    property_id="prop_12345"
)

# Node.js
import Propexo from '@propexo/sdk';

const client = new Propexo('px_live_...');
const residents = await client.residents
  .list({ propertyId: 'prop_12345' });
# Use test API keys — no real PMS needed

curl -X GET https://api.propexo.com/v1/residents \
  -H "Authorization: Bearer px_test_..." \
  -H "Content-Type: application/json"

# Returns realistic mock data
# identical to production format

Sandbox & Testing

A full-featured sandbox environment with realistic mock data. Test every endpoint, webhook, and edge case before touching a production PMS.

  • Realistic data seeded for every supported model
  • Simulated webhook delivery for testing
  • Error simulation for edge case testing

Ready to build your integration?