Authentication
All /api/* endpoints require authentication. Use one of:
• Bearer token: Authorization: Bearer YOUR_TOKEN
• Session cookie: Obtained via POST /auth/login
Unauthenticated requests return 401 Unauthorized.
Authenticate and receive a session cookie. Body: { "token": "YOUR_API_TOKEN" }
Clear session cookie and redirect to login page.
Get current authenticated user info.
Portfolio Intelligence
Combined intelligence: regime detection + Monte Carlo forecasts + pricing recommendations + market KPIs. Powers the dashboard Overview tab.
Portfolio-level YTD revenue vs. same time last year (STLY). Includes monthly breakdown, YoY %, annualized projection, and management fees.
Cached: 2 hours
Portfolio analyzer: comp set analysis, APS scores, pricing signals for all properties.
Legacy dashboard endpoint (v1 compatibility).
Market Intelligence
Live KPI data for all 4 primary markets: occupancy, ADR, RevPAR, booking window, YoY comparisons.
K-Means regime detection for all markets. Returns bull/sideways/bear classification with confidence, momentum, volatility, and transition risk.
Cached: 15 minutes | Uses seeded PRNG for deterministic results
Regime for a specific market by name slug (e.g., galveston-island) or UUID.
:marketName — Market name slug or UUID
Legacy market KPIs endpoint (v1 compatibility).
Pricing & Recommendations
Market-level pricing recommendations combining regime detection and Monte Carlo signals.
Property-specific recommendations. Body: { "properties": [...] }
Recommendation history log.
?limit=50 — Number of entries to return
Per-property, per-month pace intelligence. Compares property booking pace against market benchmarks and generates RAISE/HOLD/CUT/DEAD_MARKET recommendations with revenue-at-risk calculations.
Cached: 2 hours
Pace index for all properties across forward booking windows.
Properties
All properties with occupancy metrics, APS scores, and pricing recommendations.
Deep dive on a single property with full calendar metrics.
Current property targets (APS, Target Annual Rent).
Scanning & Actions
Run the weekly tactical pricing scanner. Identifies rate adjustment opportunities.
?refresh=true — Force cache clear and fresh scan
Cached: 1 hour
Run weekly scan AND push results to Google Sheet.
Per-date gap scanner (365 days). Each date evaluated on its own booking curve.
?refresh=true — Force cache clear
Cached: 1 hour
Run per-date scan AND push to Google Sheet.
Monthly strategic review with forward Quibble min/max guardrails per market.
Cached: 24 hours
Decisions & Alerts
Get pricing decisions for current and next 2 months. Persisted in PostgreSQL.
Save a pricing decision. Body: { "property": "id", "date": "YYYY-MM-DD", "action": "CUT", "reason": "..." }
Remove a decision.
?monthKey=YYYY-MM — Required month key
Recent regime shift alerts. Persisted in PostgreSQL.
?check=1 — Trigger live regime detection (otherwise returns cached alerts)
?limit=20 — Number of alerts to return
Mark an alert as acknowledged.