Security and trust
What the platform actually does to protect your data, and — just as important — what it does not do yet.
Last reviewed: 21 October 2026
This page is written from the implementation, not from a template. Every control below exists in the product; every control we have not built is listed further down with the reason. If something here is out of date, write to us and we will correct it.
Access control
Who can reach your data, and what they can do with it once they are in.
Every account is a named person
Accounts are created against a verified e-mail address with a password. There are no shared logins, no default accounts and no demo workspace with real content in it.
- Accounts are created against a verified e-mail address with a password
- No shared or generic accounts — access is always attributable to a person
- The last owner of a workspace cannot be removed, so a workspace can never be orphaned
Roles, enforced on the server
A workspace has four roles. The check happens in the API and in the database, not in the interface, so a modified client cannot talk its way past it.
- Owner — billing, members, domains and everything below
- Admin — members, domains, projects, publishing
- Editor — create and publish tours, no access to billing or members
- Viewer — read-only access to projects and analytics
- Role checks run server-side on every write, and only an Owner can promote someone to Owner
Row-level security in the database
Every workspace table has row-level security enabled. A query that does not carry the right organisation context returns no rows — not filtered rows, no rows.
- RLS is enabled on all twelve workspace tables, including projects, tours, scenes, hotspots, assets and leads
- Cross-workspace reads are impossible at the database level, not merely blocked in application code
- Service-role access exists only inside the server, for the handful of operations that need it (audit writes, rate-limit bookkeeping)
Data protection
What is encrypted, what is hashed, and what is deliberately truncated.
Everything is served over HTTPS
Every response from the marketing site and the studio carries HSTS, a content security policy, and the standard anti-sniffing and framing headers.
- TLS on every page, API call and embed
- HSTS, CSP, X-Content-Type-Options, Referrer-Policy and Permissions-Policy on every response
- The viewer and embed routes are served with no-store, so a tour is not cached on a shared machine
Access passwords are hashed, never stored
A tour protected by a password stores a scrypt hash. The comparison is constant-time, so the response does not leak how much of the password was correct.
- scrypt hashing with a per-tour salt
- Timing-safe comparison on every attempt
- The unlock cookie is httpOnly, Secure and SameSite=Lax, and expires after 24 hours
- Five attempts per minute per IP; the sixth is refused with a Retry-After header
Visitor IP addresses are truncated
Analytics store the visitor's network rather than the address itself. A full IP is never written to the database.
- IP addresses are truncated to the /16 network before they are stored
- The truncated value is used for unique-visitor counting and nothing else
Published content
How a published tour is protected once it is live.
Published versions are immutable
The build a visitor is looking at cannot change underneath them. Changes ship as a new version, and any previous version can be restored.
- A published version is frozen — the same build serves every visitor
- Full version history with one-click rollback
- Visibility is explicit: public, unlisted or password-protected
Access rules you can tighten
Beyond the password, a tour can be given an expiry date or restricted to a set of domains that are allowed to embed it.
- Expiring share links — the tour stops resolving on the date you set
- Domain allow-lists — the embed is refused on any host that is not on the list
- Both are enforced on the viewer and on the embed, not only in the editor
Your content is portable
A tour can be exported at any time as a package containing the configuration and the source panoramas, so leaving Mango360 does not mean losing your work.
- Per-tour export: scene graph, hotspots, floor plans and branding as JSON, plus the source panorama files
- Analytics and lead data export to CSV
- Exports are produced on demand, with no lock-in window
Abuse prevention
The limits that stop one client from consuming the platform.
Every write endpoint is rate limited
Each write path has its own budget, keyed by IP address, and answers with the standard rate-limit headers so a well-behaved client can back off correctly.
- Ten publishes per minute, twenty unpublishes per minute, twenty rollbacks per minute
- Sixty analytics events per minute, thirty panorama processing jobs per minute
- Five lead submissions per ten minutes — the tightest budget in the system
- Responses carry X-RateLimit-Limit, X-RateLimit-Remaining and Retry-After
Publishing is a controlled operation
Publishing is the most expensive thing a client can ask the platform to do, so it carries the tightest write budget and the most validation.
- Every publish is a new immutable version with a full audit entry
- Version history records who published, when, and which version
Operations and monitoring
How the service is observed and kept running.
Errors are monitored, not guessed
The studio application reports errors and performance traces to Sentry, including session replay, so a fault is noticed before a customer reports it.
- Client error reporting and performance tracing in the studio application
- Session replay for reproducing a fault without asking the user to describe it
The audit trail
Administrative actions are recorded with the actor and the timestamp. This is a record for investigation, not a screen in the interface — if you need a per-action report, ask us and we will pull it from the database.
- Recorded: publishes, unpublishes, tour and project deletions, domain creations and verifications, live-session starts and ends, lead status changes
- Each entry stores the acting user, the action, the target and the time
- Sign-ins and membership changes are not recorded yet
Privacy and legal
The documents and the people behind them.
Published policies, named contacts
The privacy policy and the terms of service are public and versioned, and each has a mailbox attached to it that a person reads.
- Privacy policy and terms of service, published on this site
- privacy@mango360.app for data-protection requests
- legal@mango360.app for contracts and agreements
- support@mango360.app for product questions
Data subject requests
Requests to access, correct or delete personal data are handled by e-mail. We answer the ones that concern visitor data directly and forward the ones that concern your account data to the workspace owner.
- Access, correction and deletion requests at privacy@mango360.app
- We will confirm what we hold for a given visitor before acting on it
Subprocessors and agreements
The list of service providers we rely on is available on request, as is a data processing agreement. Neither is a self-serve download today, and we would rather say so than pretend otherwise.
- The current subprocessor list is sent on request
- A data processing agreement is available for Business and Enterprise customers
Not available yet
This is the list of controls a security review will ask about and we cannot answer with a yes. We publish it because a vendor that hides the gaps is harder to assess than one that names them.
SSO / SAML / OIDC single sign-on
Authentication is e-mail and password only. There is no identity-provider integration in the product today. If your organisation requires SSO, treat this as a blocker and talk to us before you commit.
SOC 2 Type II and ISO 27001
We are not certified and no certification audit is in progress. We will not put a badge on this page that we cannot show a report for.
Data residency and regional storage
All data lives in a single region, and there is no option to select another one. The region is documented in the subprocessor list sent on request.
Published backup, RPO and RTO commitments
We do not publish a recovery-point or recovery-time objective. If your policy requires one, that is a question to answer in a contract rather than on a website.
Public status page and uptime SLA
There is no public status page and no uptime percentage we commit to. Incidents are reported to affected customers by e-mail.
Encryption at rest with customer-managed keys
Storage is encrypted by the provider with provider-managed keys. Customer-managed keys and BYOK are not available.
Where your data lives
The same table is what we walk a customer's security team through. It is deliberately specific about retention, including the places where we do not yet delete automatically.
| What | Where | Retention |
|---|---|---|
| Panorama images, floor plans and media you upload | Object storage (Supabase Storage) in a single region | Until you delete the project |
| Tour configuration: scenes, hotspots, floor plans, branding, published versions | PostgreSQL | Until you delete the project; published versions survive a tour deletion |
| Analytics events: views, scene retention, hotspot clicks | PostgreSQL | No automatic deletion today. Export to CSV and ask us to purge |
| Lead submissions from tour forms and from this site | PostgreSQL | Until you delete them or close the workspace |
| Account records: e-mail, password hash, workspace membership and role | PostgreSQL (Supabase Auth) | Until the account is closed |
Questions we get in reviews
Is there a status page I can subscribe to?
Do you sign a data processing agreement?
Can I keep my data in the EU?
How do I get my data out?
Are analytics events deleted automatically?
Do you support single sign-on?
Found something?
Send the details to security@mango360.app. We will acknowledge the report, and we will tell you whether we are going to fix it before we ship the fix. If you are looking for something specific that is not on this page, ask — we will answer rather than point you at a PDF.