AI usage (token cost visibility)
These routes use the same management session as the browser — complete Getting Started — Recommended Setup Sequence steps 1–3 (Users, Preferences) before scripting POST /auth/login. Pair with Management session authentication for JWT + refresh cookie examples. There is no management-frontend screen for this ledger today; external clients poll HTTP or build internal dashboards. Workflow pairing: Setup sequence after go-live (hub: API Reference — Setup sequence after go-live).
Start with Who can call these routes, then Endpoints for GET /ai-usage and GET /ai-usage/summary. Filter with Query parameters; interpret rows in Response fields and Feature values. Contrast Management session (operator JWT) with partner Authentication (integration Bearer keys). Non-linear operator habits (Lockout catch-up, Pending manual receipt approval, Reject/revert mistaken receipts, Portfolio segmentation by tenant category, Notification row-click navigation, Payment alert to receivables triage, Confirmation alert triage, Finance debt receivables triage, Handling a Late Payment collections, Finance Income status drill-down, Cash flow forecast drill-down) have matching Related subsections below. Full pairing matrix: AI usage section cross-reference · API Reference — API guide cross-reference.
Vivin records every LLM call that flows through the shared metered Anthropic chokepoint into an append-only ai_usage ledger — one row per model invocation, scoped to the owning accountId. These Core API routes expose that ledger to signed-in operators for cost visibility and internal reporting.
Recording is best-effort: a failed insert never breaks the AI feature that produced the call. Costs are Vivin's internal provider cost in USD (not tenant-facing billing).
Who can call these routes
| Requirement | Detail |
|---|---|
| Auth | Management JWT from Management session authentication (Authorization: Bearer <JWT>) |
| Permission | account_settings.module — same gate as Account Settings tabs |
| Tenancy | Every query is filtered to the signed-in user's accountId; you cannot read another workspace's usage |
401 / 403 responses follow Error handling. Do not call these routes with partner integration Bearer keys.
Endpoints
GET /ai-usage
Returns a paginated list of individual AI calls for the signed-in account, newest first.
GET /ai-usage?page=1&limit=50 HTTP/1.1
Host: api.vivin.app
Authorization: Bearer <JWT>
Response (200) — paginated envelope:
{
"items": [
{
"id": "…",
"accountId": "…",
"feature": "landlord_chat",
"provider": "anthropic",
"model": "claude-sonnet-4-20250514",
"inputTokens": 1200,
"outputTokens": 340,
"cacheCreationInputTokens": 0,
"cacheReadInputTokens": 0,
"totalTokens": 1540,
"cost": 0.004512,
"currency": "USD",
"pricingSnapshot": {
"currency": "USD",
"perMTok": { "input": 3, "output": 15 }
},
"userId": "…",
"source": "Frontend",
"conversationId": "…",
"referenceId": null,
"metadata": null,
"createdAt": "2026-07-01T14:22:11.000Z"
}
],
"total": 128,
"page": 1,
"limit": 50
}
Use this route when you need call-level drill-down (conversation id, model id, per-call token splits, optional referenceId such as a utility bill id).
GET /ai-usage/summary
Returns aggregate totals plus a per-feature / per-model breakdown for the signed-in account.
GET /ai-usage/summary?from=2026-06-01T00:00:00.000Z&to=2026-06-30T23:59:59.999Z HTTP/1.1
Host: api.vivin.app
Authorization: Bearer <JWT>
Response (200) — summary envelope:
{
"currency": "USD",
"totals": {
"calls": 42,
"inputTokens": 88000,
"outputTokens": 12000,
"cacheCreationInputTokens": 0,
"cacheReadInputTokens": 4000,
"totalTokens": 104000,
"cost": 0.312
},
"breakdown": [
{
"feature": "landlord_chat",
"model": "claude-sonnet-4-20250514",
"calls": 38,
"inputTokens": 82000,
"outputTokens": 11000,
"cacheCreationInputTokens": 0,
"cacheReadInputTokens": 4000,
"totalTokens": 97000,
"cost": 0.285,
"pricePerMTok": { "input": 3, "output": 15 }
},
{
"feature": "utility_bill_extraction",
"model": "claude-sonnet-4-20250514",
"calls": 4,
"inputTokens": 6000,
"outputTokens": 1000,
"cacheCreationInputTokens": 0,
"cacheReadInputTokens": 0,
"totalTokens": 7000,
"cost": 0.027,
"pricePerMTok": { "input": 3, "output": 15 }
}
]
}
Use this route for month-end roll-ups or dashboards. Breakdown rows include the current price per million tokens map entry for each model (pricePerMTok); individual list rows also store a pricingSnapshot so historical costs stay reproducible if rates change later.
Query parameters
Both routes accept the same filter query string (pagination applies only to GET /ai-usage):
| Parameter | Type | Description |
|---|---|---|
from | ISO date-time | Inclusive lower bound on createdAt |
to | ISO date-time | Inclusive upper bound on createdAt |
feature | enum | Restrict to one product feature — see Feature values |
page | integer ≥ 1 | Page number for GET /ai-usage (default 1) |
limit | integer 1–200 | Page size for GET /ai-usage (default 50, max 200) |
Example — landlord chat only, June 2026:
curl -sS -b cookies.txt -H "Authorization: Bearer ${VIVIN_JWT}" \
'https://api.vivin.app/ai-usage/summary?feature=landlord_chat&from=2026-06-01T00:00:00.000Z&to=2026-06-30T23:59:59.999Z'
Response fields
| Field | Meaning |
|---|---|
feature | Product surface that invoked the model — Feature values |
provider | LLM vendor (today anthropic) |
model | Model id string passed to the provider |
inputTokens / outputTokens | Uncached input and output token counts |
cacheCreationInputTokens / cacheReadInputTokens | Anthropic prompt-cache write and read tokens when applicable |
totalTokens | Sum of the four token counters (convenience for sorting and display) |
cost / currency | Vivin internal provider cost ( USD today) |
pricingSnapshot | Per-MTok rates used to compute cost on that row |
userId | Operator who triggered the call when recorded |
source | Origin label when set (for example Frontend, Whatsapp) |
conversationId | AI Chat thread id when the call came from /ai-chat |
referenceId | Optional domain key (for example a utility bill id) |
metadata | Optional JSON bag for feature-specific context |
createdAt | When the call was recorded (UTC) |
Rows with accountId: null exist only for system/global calls with no tenant context (for example the shared utility-bill mailbox). GET /ai-usage never returns those rows to operator sessions — only the signed-in account's usage.
Feature values
Persisted string values in ai_usage.feature (append-only — do not rename existing values):
| Value | Product surface | Operator docs |
|---|---|---|
landlord_chat | AI Chat (/ai-chat) and embedded Landlord MCP tool loops in-process | Automation & AI — Management AI Assistant |
utility_bill_extraction | Utilities Upload PDF / AI invoice reader | Automation & AI — AI Invoice Reader, Entering Monthly Utility Bills |
New AI features add new enum values when they start calling the metered service.
Command-line example
After Management session login:
# Paginated call log (newest first)
curl -sS -b cookies.txt -H "Authorization: Bearer ${VIVIN_JWT}" \
'https://api.vivin.app/ai-usage?limit=10' | jq .
# Month-end summary by feature and model
curl -sS -b cookies.txt -H "Authorization: Bearer ${VIVIN_JWT}" \
'https://api.vivin.app/ai-usage/summary?from=2026-06-01T00:00:00.000Z&to=2026-06-30T23:59:59.999Z' | jq .
Replace api.vivin.app with your API host (http://localhost:3000 when running Core API locally with a full env).
AI usage section cross-reference
| Topic | Pair with |
| --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Who can call these routes | Management session, Users and roles — Role permissions |
| Endpoints | Error handling (401 / 403), Core Swagger /api when enabled — Management session — Core API Swagger |
| Feature values | AI Chat module, Utilities — Bills tab, Landlord MCP (external clients use MCP tools, not this ledger, for operational automation) |
| Cost review habit | Portfolio KPI review (reconcile AI spend with utility and chat adoption) |
| Settings gates | Users and roles (account_settings.module), Integrations (Bearer vs JWT contrast), Subscription (platform billing vs internal AI cost), Payments, Invoicing & Utilities (utility_bill_extraction driver), General Information, Owners, Contract templates, Services, Categories, Tenant categories (segment filters vs account-scoped ledger), My Profile (JWT refresh after lockout), Interface language (JWT refresh after lockout — locale independent), Integration field capability (partner matrix vs JWT ledger), Account Settings hub (setup tabs + account_settings.module gate) |
| Module & concept surfaces | Modules hub (screen workspaces + AI cost review habit), Listings (utility_bill_extraction), Audit (landlord_chat during manual-block hygiene), Booking engine details (partner Bearer vs JWT), Legacy /properties URLs, Booking Lifecycle, Integrations & Distribution, Deep Links, Tenant Portal (not metered), Payment Allocation (month-end reconciliation habit), Services Marketplace (ancillary income review), Create New menu (utility_bill_extraction from Upload Utility Bills) |
| Partner API contrast | Creating Bookings, Listings & Availability, Webhooks & Notifications, iCal feeds, Full listing feeds, Booking Lifecycle & Validations, Booking engine integration — integration Bearer keys return 401 |
| Notification row-click navigation | Poll usage after alert triage sessions | API Reference — Notification row-click navigation, Common Workflows — Notification row-click navigation, Notifications module — Notification row-click navigation |
| Payment alert to receivables triage | Token metering vs payment overdue row-click | API Reference — Payment alert to receivables triage, Common Workflows — Payment alert to receivables triage, Handling a Late Payment — Step 1 |
| Confirmation alert triage | Usage spikes during confirmation-week triage | API Reference — Confirmation alert triage, Common Workflows — Confirmation alert triage, Processing a New Booking — Step 5b |
| Finance debt receivables triage | Portfolio reads after receivables triage | API Reference — Finance debt receivables triage, Common Workflows — Finance debt receivables triage, Finance module — Finance debt receivables triage |
| Handling a Late Payment collections | Integration surface vs operator collections Steps 1–6 |
| Finance Income status drill-down | Assistant answers vs Income segment modals | API Reference — Finance Income status drill-down, Common Workflows — Finance Income status drill-down, FAQ — Finance Income status drill-down hub |
| Cash flow forecast drill-down | Collections context vs forecast bar-click | API Reference — Cash flow forecast drill-down, Common Workflows — Cash flow forecast drill-down, FAQ — Cash flow forecast drill-down hub |
Related
Setup sequence after go-live
- Steps 1–3 — Operator account and
account_settings.modulebefore firstGET /ai-usagepoll - After go-live — Use
/ai-usage/summaryfor internal cost dashboards; validatelandlord_chatspikes against AI Chat adoption andutility_bill_extractionagainst Entering Monthly Utility Bills volume
Lockout catch-up after password recovery
When sign-in was restored mid-month, refresh the management JWT (Resetting a Management User Password — Step 3) before polling usage — expired tokens return 401, not partial data.
Pending manual receipt approval
Unrelated to AI metering — see Finance — Pending manual payments.
Reject/revert mistaken receipts
Unrelated to AI metering — see Payment Allocation — Correcting mistaken receipts.
Portfolio segmentation by tenant category
AI usage is account-scoped, not tenant-category-scoped — segment operational follow-up with Bookings — Other filters when chat or utility AI activity clusters on one tenant segment.
Notification row-click navigation
GET /ai-usage metering does not replace /notifications row-click — poll token cost after operator alert triage, not instead of inbox navigation. Hub parity: API Reference — Notification row-click navigation. Full pairing matrix: AI usage section cross-reference · API guide cross-reference.
- API Reference — Notification row-click navigation — Hub matrix (
notifications-module-row-click-target.png,notifications-row-navigation-flow.mp4) - Common Workflows — Notification row-click navigation — Operator procedure hub
- Notifications module — Notification row-click navigation — Canonical
/notificationsinbox pairing - FAQ — Notification row-click navigation hub — Symptom table
Payment alert to receivables triage
Landlord MCP or assistant summaries about overdue balances still require payment overdue row-click into booking Transactions before collections outreach. Hub parity: API Reference — Payment alert to receivables triage. Full pairing matrix: AI usage section cross-reference · API guide cross-reference.
- API Reference — Payment alert to receivables triage — Hub matrix (
notifications-row-navigate-to-booking-detail.png,notifications-row-navigation-flow.mp4) - Common Workflows — Payment alert to receivables triage — Operator procedure hub
- Handling a Late Payment — Step 1 — Collections follow-through after row-click
- FAQ — Payment alert to receivables triage hub — Symptom table
Confirmation alert triage
High landlord_chat usage during confirmation week pairs with Upcoming alert triage — assistant output does not approve confirmation receipts. Hub parity: API Reference — Confirmation alert triage. Full pairing matrix: AI usage section cross-reference · API guide cross-reference.
- API Reference — Confirmation alert triage — Hub matrix (
notifications-row-navigate-to-booking-detail.png,bookings-detail-transactions-approve-payment-modal.png) - Common Workflows — Confirmation alert triage — Operator procedure hub
- Processing a New Booking — Step 5b / Step 6 — Canonical confirmation gates
- FAQ — Confirmation alert triage hub — Symptom table
Finance debt receivables triage
AI portfolio summaries are not a substitute for Finance → Overview → Debt Aging Top debtors after partner import alert triage. Hub parity: API Reference — Finance debt receivables triage. Full pairing matrix: AI usage section cross-reference · API guide cross-reference.
- API Reference — Finance debt receivables triage — Hub matrix (
finance-overview-income-chart-debt-aging.png,finance-overview-debt-aging-walkthrough-flow.mp4) - Common Workflows — Finance debt receivables triage — Operator procedure hub
- Finance module — Finance debt receivables triage — Debt Aging canonical surface
- FAQ — Finance debt receivables triage hub — Symptom table
Handling a Late Payment collections
Partner integration reads on Ai Usage do not replace operator collections — payment overdue in-app rows still need Handling a Late Payment — Steps 1–6 after receivables triage. Hub parity: Common Workflows — Handling a Late Payment collections hub. Full pairing matrix: ai-usage-section-cross-reference · API guide cross-reference.
- API Reference — Handling a Late Payment collections — Hub matrix (
finance-overview-income-chart-debt-aging.png,notifications-row-navigate-to-booking-detail.png) - Common Workflows — Handling a Late Payment collections hub — Operator procedure hub
- Payment alert to receivables triage — payment overdue alert before collections
- Finance debt receivables triage — Debt Aging before tenant outreach
- Handling a Late Payment — Step 1 — Collections follow-through
- FAQ — Handling a Late Payment collections hub — Symptom table
Finance Income status drill-down
Management JWT GET /ai-usage pairs with operator Income chart segment clicks — chat answers do not open month-scoped payment-line modals. Hub parity: API Reference — Finance Income status drill-down. Full pairing matrix: AI usage section cross-reference · API guide cross-reference.
- API Reference — Finance Income status drill-down — Hub matrix (
finance-overview-income-status-in-debt-modal.png,finance-overview-income-drill-down-flow.mp4) - Common Workflows — Finance Income status drill-down — Operator procedure hub
- Finance module — Income status drill-down — Canonical Finance → Overview surface
- FAQ — Finance Income status drill-down hub — Symptom table
Cash flow forecast drill-down
Token-cost reads during month-end reconciliation — contrast assistant collections narrative with Cash flow forecast bar-click modals on Finance → Overview. Hub parity: API Reference — Cash flow forecast drill-down. Full pairing matrix: AI usage section cross-reference · API guide cross-reference.
- API Reference — Cash flow forecast drill-down — Hub matrix (
finance-overview-cash-flow-all-payments-modal.png,finance-overview-cash-flow-day-view.png,finance-overview-cash-flow-drill-down-flow.mp4) - Common Workflows — Cash flow forecast drill-down — Operator procedure hub
- Finance module — Cash flow forecast drill-down — Canonical Finance → Overview surface
- FAQ — Cash flow forecast drill-down hub — Symptom table
Deeper concept reads
- Automation & AI — Where AI runs in the product
- Landlord MCP — External automation surface (distinct from this cost ledger)
Deeper workflow reads
- Entering Monthly Utility Bills —
utility_bill_extractionvolume driver - Portfolio KPI review — Month-end reconciliation habit
- Handling a Late Payment —
landlord_chatduring Step 6 month-end escalation - Processing a New Booking —
landlord_chatduring Step 6b confirmation receipt mesh - Managing a Check-in —
landlord_chatduring Step 6b move-in receipt mesh - Managing a Check-out —
utility_bill_extraction+landlord_chatduring departure-week month-end - Manual block hygiene —
landlord_chatwhen Step 5 uses MCP or AI Chat for vacancy reconciliation - Cancelling a Booking — Step 6b settlement mesh
- Onboarding a New Property — Baseline AI adoption after first full month on new inventory
- Resetting a Management User Password — Refresh management JWT before first
GET /ai-usagepoll after lockout - Using in-app support — Cite
landlord_chat/utility_bill_extractionfilters when filing AI Chat or MCP product tickets
Key glossary terms
Glossary rows pair with Glossary cluster cross-reference and month-end reconciliation habits. Full pairing matrix: AI usage section cross-reference.
-
Glossary — AI usage ledger — Append-only
ai_usagerows withfeature, token splits, and internal USDcost -
FAQ — AI token usage — Operator-facing summary when there is no management-frontend ledger screen
-
FAQ — AI token usage — Poll GET /ai-usage / GET /ai-usage/summary with management JWT;
landlord_chat+utility_bill_extraction; no management UI screen yet -
Glossary — Deposit lifecycle status — Month-end
GET /ai-usage/summarypairs with Finance → Deposits refund triage on the same portfolio review pass -
Glossary — End-of-Booking cost split — Charge Time → End of Booking splits daily overage across every occupied unit; still-staying roommates stay in the denominator (#2111)
-
Glossary — Change history — Operator-initiated edits on Listings setup and Bookings Changelog; create-time defaults excluded (#2093)
-
FAQ — Booking Changelog scope — Operator-initiated edits only; create-time defaults excluded (#2093)
-
Glossary — Archived booking ledger visibility — Delete Booking hides manual/provider_platform rows on Finance → Transactions; vIBAN and credit card stay visible (#1897)
-
Bookings — Provider platform payment — Non-rejected provider platform in-payment blocks Delete Booking until Reject or assign (#2076)
-
FAQ — Delete Booking on integration reservation — Clear pending provider platform in-payment with Reject or assign before soft-archive (#2076)
-
Listings — Property edit sidebar pills — Setup / Full integration / Photos pills on property and unit edit sidebars; replaced the old Go to details shortcut (#2082)
-
Glossary — Finance tenant category cache refresh — Recategorizing a tenant on Tenants → Tenant Info force-refreshes Finance caches so Contract Values, Overview, and Deposits filters match within seconds (#2088)
-
FAQ — Finance tenant category filter parity — Finance Other filters drawer lists segments on cached bookings only; mirror Bookings / Tenants when a segment is missing
-
FAQ — Assign tenant category for direct booking — Add booking has no category field; assign on Tenants → Tenant Info or + Create New → Tenant before contract mail
-
Glossary — SIMAR water contract ID — SIMAR (Loures e Odivelas) water bills use Cód. Local in Connections — not Nº de Contador; leading zeros stripped (#2110)
-
FAQ — SIMAR water bill property match — Cód. Local in Connections — not Nº de Contador; strip leading zeros (#2110)
-
Glossary — Per-booking maintenance ticket opt-out — Add booking checkboxes skip automatic CI/CO tickets for one reservation only; property rule unchanged (#1140)
-
FAQ — Cancel Booking vs Delete Booking — Cancel for real stays with settlement; Delete soft-archives mistaken/test rows (#1897 / #2076)
-
Glossary — Archived property — Archive retires a building to Listings → Archived without deleting bookings; distinct from Delete Booking (reservation soft-archive) — Listings — Archived properties
-
FAQ — Archive a property — Edit property sidebar Archive / Unarchive on Listings; building-level — not Delete Booking or Cancel booking
-
FAQ — Portfolio retirement decisions — Archive property (building) vs Cancel booking vs Delete Booking (reservation soft-archive) — three-way decision table
-
Finance — Deposit lifecycle status cards — Deposit lifecycle status row on Finance → Deposits; click Partial paid for collection shortfalls (#2091)
-
FAQ — Partly collected security deposit — Paid above zero but below Amount on booking Deposit; Partial paid card on Finance → Deposits (#2090 / #2091)
-
Finance — Deposit status filter — Other filters → Deposit status multi-select on Bookings and Finance (#2090)
-
Operations — Tickets toolbar search — Paste the full sequential ticket ID (for example
S259,T27) in toolbar Search (#2074) -
FAQ — Find a ticket by its ID — Paste the full sequential ticket ID (for example
S259,T27) in Operations → Tickets toolbar Search (#2074) -
FAQ — Skip automatic check-in/out tickets for one booking — Turn off Use unit contract rents and other contract details on Add booking to reveal CI/CO ticket checkboxes (#1140)
-
FAQ — Same-day turnovers — Check-out + check-in on one unit same day: Operations → Check-in & Check-out, Timeline / Multicalendar, turnover tickets
-
FAQ — Manual payments after Delete Booking — Delete Booking hides manual/provider_platform rows on Finance → Transactions; vIBAN and credit card stay visible (#1897)
-
Glossary — Directory list load failures — First-fetch directory failures show Retry / Try again; distinct from filter-empty states and booking-sidebar tab errors
-
Glossary — Vacant Unit Preference — Include manual blocks counts operator holds as free on Dashboard / Sales vacancy surfaces (#1427)
-
FAQ — Communication or Tickets load failure — Tab-scoped Refresh (Communication) or Retry (Tickets); other booking sidebar tabs stay usable
-
Operations — Property-level ticket search — Property-name matches share the top relevance tier with unit hits; building-scoped rows float first under an active Property filter (#2089)
-
Glossary — Credit note (payment reject/revert) — Unrelated to AI metering; cited when
landlord_chatsurfaces mistaken receipt triage during cost review -
Glossary — Invoiced floor (rent) — Rent edits blocked below exported invoice totals — orthogonal to LLM cost but part of the same month-end reconciliation habit
-
FAQ — Bulk Hostkit invoicing slow — Vivin paces Hostkit API calls and retries HTTP 429 during bulk Issue allocation / Invoice selected; refresh Transactions before re-issuing
-
FAQ — Bulk Hostkit invoicing hub — Symptom table + per-guide mesh
-
FAQ — Tenant contract signing blocked — No PDF yet, mandatory Your Details gates, category locks, or Lease purpose; portal signing vs paper upload on Contract Info
-
FAQ — Automatic check-in email — Trigger matrix, 15-day cutoff, paper upload vs portal signing, Nuki-only toggle, Send / Resend on Contract Info
-
FAQ — WhatsApp and email per booking — Bookings → Communication tab when tenant chatbot is enabled; Inbox for portfolio-wide triage
-
FAQ — Deposit missing on Finance Deposits — Default ~3 months date range; clear or widen before triaging older move-outs or dispute row actions
-
FAQ — Pending manual in-payment on /notifications — Alert persists until Approve payments clears Finance or booking Transactions
-
FAQ — Uncovered Debt KPI — Finance Total Debt minus deposit offsets; pair with Debt Aging and In debt drill-down
-
FAQ — Dashboard Total Debt subtitle — Post-login Total Debt card headline vs >15 days subtitle; ongoing bookings only
-
FAQ — Analytics (KPI workspace) — Portfolio KPIs vs Sales/Listings/Dashboard; load-failure Try again
-
FAQ — Lower rent below invoiced — Change monthly rent clamps and Contract Values → Edit amount blocks net below exported invoice totals; use credit notes in accounting when you truly need a reduction
-
Glossary — Fixed invoice date — Account-wide Invoice date before bulk Issue allocation / Invoice selected; amber banner on Finance → Transactions until you turn Use today as invoice date back on
-
FAQ — Month-end invoicing (fixed date) hub — Symptom table + toggle reset after batch
-
FAQ — Reject or revert an incoming payment — Reject pending rows or Revert confirmed ones; Finance → Transactions uses Reject selected bulk-only; modals warn about credit notes when Finance already invoiced
-
FAQ — Manual receipt still pending — Operator-recorded receipts stay pending until Approve payments; triage on Finance → Transactions (Pending chip) or booking Transactions; Total Debt and Manual Payments KPI lag until approval
-
FAQ — Finance Income status drill-down hub — Symptom table for segment vs Debt Aging
-
FAQ — Finance Income status drill-down — Overview Income chart (Paid / Scheduled / In debt); click a segment for month-scoped payment-line modal; Debt Aging for booking-level receivables
-
FAQ — Cash flow forecast drill-down hub — Symptom table for collections vs Income / Dashboard
-
FAQ — Cash flow forecast drill-down — Month / Day bar-click habit
-
FAQ — Permission denied toast — Red You do not have permission to perform this action. toast when RBAC blocks a save; fix in Users → Role Permissions
-
FAQ — Phone shows Operations only — Mobile phone user agent locks operators with Operations access to
/operations; iPads and narrow desktop browsers keep the full module list -
FAQ — Notification row-click navigation — On
/notifications, row click marks unread then openslink,bookingId,tenantId,listingId, orpropertyId(first match); Dashboard bell General rows stay in-panel unlesslinkis set -
FAQ — Bookings that owe money — Top debtors and overdue buckets on Finance → Overview; Total Debt KPI is not a table
-
FAQ — Fixed rent on variable unit — Variable listing + equal rent every contract month → booking stores fixed headline Monthly rent; payment plan unchanged
Module documentation hubs
Module hubs pair with Modules — Module cross-reference for screen-by-screen follow-up after polling usage. Full pairing matrix: AI usage section cross-reference.
- AI Chat module —
landlord_chatvolume driver for in-management assistant sessions (hub) - Utilities module —
utility_bill_extractionvolume driver on Bills tab PDF upload (hub) - Dashboard module — Same-day KPI snapshot before month-end cost review (hub)
- Analytics module — Month-range portfolio charts to contextualize AI adoption spikes (hub)
- Finance module — Deposits and Transactions tabs paired with month-end
/ai-usage/summaryreview (hub) - Bookings module — Deposit tab lifecycle pills when reconciling deposit shortfalls alongside AI spend (hub)
- Operations module — Ticket triage when
landlord_chatsurfaces maintenance context (hub) - Account Settings —
account_settings.modulegate and workspace setup before firstGET /ai-usagepoll (hub)