Security & trust

The mechanisms behind the claims

Contrayo does not hold a SOC 2 certification today, so we're not showing you a report or a badge. What we can show you is real: the specific mechanisms built into the product today, described plainly enough for your own security team to go verify them.

Where we are today. Contrayo is an early-stage, self-serve product with real production customers. Contrayo does not hold a SOC 2 certification today. An independent penetration test has been commissioned but not yet completed. Everything else on this page describes real, shipped functionality that exists in the product's own code today, not a plan.
Account security

How your login is protected

Password storage

Passwords are hashed with scrypt, a deliberately memory-hard algorithm, using a unique random salt per password and a constant-time comparison on verification. Your actual password is never stored, logged, or compared in plain text anywhere in the system.

Session tokens

Signing in issues a random 256-bit token. Only its cryptographic hash is ever stored in the database — the raw token exists solely in your browser's cookie, so reading the database itself doesn't hand over anything that still works as a credential.

Cookie hardening

The session cookie is marked HttpOnly (invisible to page scripts, closing off theft via a cross-site scripting bug), SameSite=Lax (a real defense against cross-site request forgery), and Secure whenever served over HTTPS.

HTTP security headers

Every response carries a strict Content-Security-Policy — no inline scripts, no third-party script sources — plus Strict-Transport-Security,X-Frame-Options, X-Content-Type-Options, andReferrer-Policy. Standard browser-level defenses against clickjacking, MIME-sniffing, and script injection, sent on every response, including error pages.

Login throttling

Failed logins are rate-limited both per account and per source IP address, with a temporary lockout after repeated failures. A login attempt against an email with no account takes exactly as long as one against a real account with the wrong password, so timing alone can't be used to discover which emails have accounts.

Session lifecycle

Sessions expire automatically, and specific events revoke them outright: resetting a password, or an admin deactivating an account, immediately signs that account out of every session it holds — not just the one that triggered it.

Password reset

Reset links are single-use and expire after one hour. They're stored the same hashed-not-raw way session tokens are, and the link itself is only ever returned once, directly to whoever requested it — never written to a log.

Multi-factor authentication

Time-based one-time passcodes (TOTP, compatible with any standard authenticator app), email one-time codes, and SMS one-time codes are all live today. TOTP and email are available on every tier; SMS is a Mid-market/Enterprise capability. Any user can turn one on for their own account, and an organization can require MFA for everyone — enforcement is free on every tier, not a paid add-on, matching the majority pattern in this category (GitHub, Slack, GitLab, Zoom, and Salesforce all give it away too). The secret behind each enrollment is encrypted at rest — never stored or logged in the clear — and ten single-use recovery codes are issued at enrollment in case a device is lost.

Login and logout history

Every sign-in attempt, sign-out, and session expiration is recorded with its timestamp, IP address, and browser — a failed attempt is logged too, though never in a way that reveals whether the email itself has an account. Any user can see their own history; an org admin can see it for the whole organization. This log is best-effort, not a substitute for the full audit trail described below — a logging failure never blocks a real sign-in.

Access control

Your organization's data stays your organization's

Closed by default

Every API route requires an authenticated session unless it's on a short, explicit public list (signing in, signing out, requesting or confirming a password reset, and reading the current published legal terms). Nothing else is reachable without one.

Tenant isolation, enforced on every request

One organization's data is walled off from every other organization's. A shared, tested check runs on every request that references another record — confirming it not only exists but actually belongs to the caller's own organization — rather than trusting a query's own filter to be enough.

One authorization chokepoint

Every permission decision in the product is decided by a single function, and it fails closed: a permission it doesn't recognize, or a session with no matching grant, is denied by default rather than allowed.

Configurable password policy

Your organization sets its own minimum password length and composition requirements. The exact same check that shows a live checklist to the person setting a password also runs on the server, so what the screen shows can never disagree with what the server actually accepts.

Single sign-on & SCIM provisioning

OIDC single sign-on and SCIM 2.0 user provisioning are available on our Mid-market and Enterprise plans. Sign-in is verified against your identity provider's own signed token and matched to your organization by its email domain; deactivating someone in your identity provider deactivates their account here too.

Test Environments

A real, isolated copy of your organization — its contract types, statuses, hierarchies, clause library, and full policy history — for trying a policy change or a bulk import without touching production. Contract data inside it is synthetic, generated from your production data's aggregate statistics, never a copy of real contracts, counterparties, or values. Mid-market and Enterprise only, and only an org admin can provision, reset, or sync one.

A hard stop on external AI processing, when your DPA requires it

If your organization's negotiated Data Processing Addendum prohibits sending your content to an external AI processor, we set that restriction ourselves — it isn't a toggle your own admins configure. Once set, it's enforced at the single point every AI capability in the product has to pass through, ahead of any per-feature setting, and every AI capability in your admin console shows as disabled with a plain explanation of why.

Built into the approval engine

Controls that come from the product itself, not a bolt-on

Segregation of duties

When your organization turns the setting on, the delegation-of-authority engine enforces it directly: the same person who approved a contract can't also be the one who signs it.

Full approval history

Every approve, reject, and sign decision on a contract is recorded — who acted, when, and, if they acted through a delegation on someone else's behalf, who they were standing in for — visible in that contract's own history.

Full platform audit trail

Beyond the approval history above, every action across the product — not just contract approvals — is recorded to a separate, immutable, hash-chained audit trail, live in our production environment today. Altering an earlier entry breaks the chain from that point forward, so tampering doesn't go unnoticed.

Admin accountability

Deactivating a member's account immediately revokes every session they hold, and an organization can never be left with zero administrators able to manage it — the app blocks any change that would leave one with none.

Encryption in transit

Requests to Contrayo travel over HTTPS/TLS, standard practice for any properly deployed web application today.

An anonymous channel for reporting concerns

Anyone — staff, contractors, customers, or vendors — canreport a suspected violation of our Code of Business Conductanonymously. The form collects no name, email address, or other identifying information, and retaliation against a good-faith report is prohibited.

What we don't have yet

Named directly rather than left for you to discover during a security review:

  • No SOC 2 certification exists today.
  • No independent penetration test has been completed yet. An external, authenticated test has been commissioned. We also run our own internal, automated attack suite against the product — session and login attacks, cross-tenant data isolation, privilege escalation, injection, forged-identity attempts, and more — as a standing part of our own development process. That's real testing, but it's internal and self-run, not a substitute for an independent third-party assessment.

If any of these are a hard requirement for your organization today, we'd rather tell you now than have you find out during procurement.

Security questions a questionnaire needs answered?

Get in touch and we'll answer directly — no sales call required to get a straight answer.

Get in touch