Legal · Code census
Cookie & browser storage inventory
Last updated: September 4, 2026
Our Privacy Policy describes WaterMark's first-party browser storage and says we do not use advertising pixels or cross-site tracking. This inventory makes that statement verifiable against the current web code.
Census finding: some browser storage is optional
WaterMark's two cookies are essential. The code census also found first-party localStorage entries for language, layouts, saved views, collapsed panels, and dismissed guidance. Those convenience preferences are optional: the related screens still work with their defaults if the entries are absent. This corrects the older shorthand that all WaterMark local storage was essential.
WaterMark does not use advertising pixels, cross-site tracking scripts, analytics cookies, or third-party browser-storage keys. Product analytics disclosed in the Privacy Policy is sent server-to-server and does not add a browser cookie.
Complete current inventory
Names in braces are runtime parts of a key: for example, the WaterMark company or construction project number. “Persistent” browser storage remains until WaterMark removes or overwrites it, or you clear site data. “Tab session” storage ends when that browser tab closes.
| Type | Exact name or pattern | Plain-language purpose | Lifespan | Classification |
|---|---|---|---|---|
| Cookie | wm_office_refresh | Keeps an office user signed in by holding the rotating refresh credential. It is HttpOnly, SameSite=Strict, and limited to /api/auth. | Persistent: configured for 7–180 days; 60 days by default. Replaced during rotation and removed at sign-out. | Essential |
| Cookie | wm_csrf | Supplies the readable half of the same-origin CSRF check for cookie-authenticated office requests. It does not authorize a request by itself. | Same configured duration as the refresh cookie; replaced with the session and removed at sign-out. | Essential |
| Local storage | wm_office_migrate_attempts | Bounds retries while an older browser session is moved from legacy stored credentials to safer cookies. | Persistent only during migration; removed after success, a definitive refusal, or the three-attempt limit. | Essential |
| Local storage | wm_lang | Remembers whether public and homeowner pages should open in English or Spanish. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_view | Reopens the office dashboard view you last used. | Persistent until another view is chosen or site data is cleared. | Optional |
| Local storage | wm_view_all_companies | Remembers whether a multi-company office is viewing one company or all managed companies. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_demo_tour_dismissed_{organization_id|public} | Remembers that the demo guide was dismissed for that company or public demo. | Persistent until site data is cleared. | Optional |
| Local storage | wm_demo_banner_compact_{organization_id|public} | Remembers whether the demo banner is compact for that company or public demo. | Persistent until the banner is expanded or site data is cleared. | Optional |
| Local storage | wm_onboard_{organization_id|x}_imported | Remembers that a customer import completed so onboarding guidance reflects that step. | Persistent until site data is cleared. | Optional |
| Local storage | wm_onboard_{organization_id|x}_customer-import-active | Holds the active import batch number so an interrupted customer import can resume after a reload. | Until the import completes, definitively fails, or the marker is invalid; otherwise until site data is cleared. | Essential |
| Local storage | wm_onboard_{organization_id|x}_dismissed | Remembers that the office dismissed its onboarding checklist. | Persistent until site data is cleared. | Optional |
| Local storage | wm_onboard_{organization_id|x}_convDone | Prevents the post-setup plan prompt from being shown repeatedly after a choice. | Persistent until site data is cleared. | Optional |
| Local storage | wm_rm_view | Remembers Route Manager filters and display configuration. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wk_layout | Remembers whether the week board uses day columns or technician swim lanes. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_office_panel_collapsed_{organization_id|office}_unpaid | Remembers whether the Unpaid Invoices office panel is collapsed. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_office_panel_collapsed_{organization_id|office}_chem-tech | Remembers whether the Chemical Cost by Technician panel is collapsed. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_office_panel_collapsed_{organization_id|office}_chem-pool | Remembers whether the Chemical Cost by Pool panel is collapsed. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_office_panel_collapsed_{organization_id|office}_sms | Remembers whether the Customer Messages panel is collapsed. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_ops_alerts_collapsed_{organization_id|office} | Remembers whether the Operations Alerts panel is collapsed. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_command_center_collapsed_{organization_id|office} | Remembers whether the office command-center panel is collapsed. | Persistent until changed or site data is cleared. | Optional |
| Local storage | wm_command_center_high_water_{organization_id|office} | Remembers the highest dollar exposure shown in the command center so its visual scale stays comparable. | Persistent until overwritten or site data is cleared. | Optional |
| Session storage | wm_call_seen_{organization_id|x} | Records the latest call ID seen by the live-call poller so old calls are not presented again in the same tab. | Tab session. | Essential |
| Session storage | wm.billing.intent.draw.{project_id} | Keeps one idempotency reference for an unresolved construction draw so a retry cannot create a duplicate invoice. | Until a definitive outcome, or when the tab closes. | Essential |
| Session storage | wm.billing.intent.retainage.{project_id} | Keeps one idempotency reference for an unresolved retainage release so a retry cannot bill twice. | Until a definitive outcome, or when the tab closes. | Essential |
| Session storage | wm_pay_method | Carries the selected card or bank-payment method through the payment-provider redirect. | One redirect: removed when the portal returns, or when the tab closes. | Essential |
Legacy cleanup entries
The current web code does not create these entries. It recognizes and removes them so browsers returning from an older version are migrated or cleaned up safely.
| Type | Exact name | Plain-language purpose | Lifespan | Classification |
|---|---|---|---|---|
| Legacy local storage | wm_office_token | Old office access credential, now read only to exchange it for the cookie session and then erase it. | Not created now; an old copy persists only until migration or browser-data clearing. | Essential, legacy |
| Legacy local storage | wm_office_refresh_token | Old office refresh credential, now consumed once to establish the HttpOnly cookie session and then erased. | Not created now; an old copy persists only until migration or browser-data clearing. | Essential, legacy |
| Legacy local storage | wm:office:appearance:v1 | Retired office appearance preference. The dashboard only removes it. | Not created now; removed when the dashboard loads. | Optional, legacy |
This inventory covers the production web surface. Mobile operating-system storage and server database records are outside browser cookie and Web Storage APIs and are described separately in the Privacy Policy.