Security

What protects your data, and what doesn't yet.

Security pages are usually a list of acronyms. This one distinguishes between the controls that are enforcing right now and the one that is built, proven and waiting on a deployment step — because a control you are told about but do not have is worse than none.

Tenant isolation on every query

Application

Every read and write is scoped to the caller's tenant before it reaches the database, and it is not a convention — dozens of end-to-end suites create two tenants and assert that neither can see the other's rows. Reverting a tenant filter makes those suites fail, which is how we know they are testing the thing they name.

Row-Level Security, proven and ready

Database

PostgreSQL RLS policies ship with the product and are verified against the real database, so a query that forgot its filter would still return nothing. They are not enabled by default: RLS requires a non-superuser application role and a per-request session variable, and turning it on carelessly denies every query. It is a documented rollout, not a checkbox we have quietly ticked.

Tamper-evident audit chain

Forensics

Mutations link into a SHA-256 hash chain — sequence, previous hash, hash — that any administrator can re-verify from inside the app. A row edited outside Opsylo breaks the chain at that point and the verification names it.

AES-256-GCM for stored secrets

Encryption

Platform AI keys and payment-integration secrets are held in AES-256-GCM envelopes. They are never returned to a browser and never written to a log; the console shows only whether a key is present.

TOTP two-factor and token rotation

Identity

RFC 6238 time-based codes with recovery keys, and refresh tokens that rotate on use — replaying a code or a spent refresh token is refused, and a reused token revokes the whole device family.

Rate limiting on the doors that matter

Perimeter

Per-identity and per-IP sliding windows on login, two-factor verification, API keys and public endpoints. It is real enough that it throttles our own test runs, which is a nicer way to find out than the alternative.

Nothing is hard-deleted

Recoverability

Deletes are soft across every entity — flagged, timestamped and attributed — so a mistake is recoverable and a deletion is itself a fact in the record rather than the absence of one.

Data subject requests, in the product

DPDP & GDPR

Export and erasure are self-service. Erasure redacts personal data in place so the accounting ledger stays balanced — a financial record cannot simply vanish because a contact exercised a right, and it does not have to.

Verify it yourself

Proof you can run, not a badge we drew

Two of the claims above are checkable from inside your own workspace, without asking us.

The audit chain

Open /audit and run verification. Every entry carries its sequence, the hash of the entry before it, and its own hash. If any row was altered outside the application, the chain fails at that entry and the screen tells you which one.

Your data, on the way out

Open /privacy and request an export. You get what we hold. Request erasure and personal data is redacted in place — the ledger stays balanced, the transaction history stays intact, and the person is gone from it.

Reporting a vulnerability

Mail support@opsylo.com with enough detail to reproduce. We do not currently run a paid bounty programme, and we would rather say that than imply one. Acknowledgement follows the grievance SLA on our privacy policy.