Skip to content

Security

Security architecture.

Defense in depth across the application, edge, and database layers. Here's the detail, not the summary.

Trust summary

The one-screen version.

For a reviewer who needs to paste the essentials into a vendor questionnaire.

Encryption at restAES-256
Encryption in transitTLS 1.2 / 1.3
AuthenticationEmail/password with bcrypt, JWT sessions
MFATOTP, enforceable org-wide
Access controlRBAC + row-level security
Tenant isolationOrganization-scoped RLS on all tables
AuditSoft deletion with full deletion logging
SOC 2Type 2 audit in progress — report expected [DATE]

The detail

Controls, by layer.

Application layer

Password hashing
bcrypt with per-user salt; plaintext passwords are never stored or logged.
Sessions
JWT-based session management with signed, expiring tokens.
Password reset
Rate-limited reset flow with a 60-second cooldown between attempts on the same account.
Email verification
Required on signup before the account can access any protected surface.
MFA (TOTP)
Self-service enrollment via QR code, compatible with any TOTP authenticator; enforceable organization-wide by an admin.
RBAC
Two roles: Admin and Member. Feature access is checked on every request against the caller's assigned role.
Role storage
Roles are stored in a separate table, not on the user profile — specifically to prevent privilege-escalation attacks that mutate a profile record.
Feature-based access
Feature toggles evaluated at both the user and organization level, with the organization value taking precedence.

Cloud and edge layer

JWT verification
All sensitive edge functions verify the caller's JWT before executing any logic; unverified requests are rejected at the boundary.
Error sanitization
Server-side errors are sanitized before being returned to clients to prevent information leakage (stack traces, internal identifiers, query fragments).
CORS
Controlled CORS configuration — allowed origins are enumerated, not wildcarded.
Service role isolation
The service role key is used only from server-side code paths. All user-initiated operations run under an anonymous key subject to row-level security.

Database layer

Row-level security is enabled on every table. Policies are granular per operation — SELECT, INSERT, UPDATE, DELETE are evaluated independently, not collapsed into a single ALL policy.

SELECT
Requires organization membership or admin role.
INSERT
Requires an authenticated user.
UPDATE
Requires owner, organization member, or admin.
DELETE
Requires owner or admin only.
Security-definer functions
Used for role lookups to prevent RLS recursion when a policy needs to check the caller's role against a table that itself has RLS enabled.

Multi-tenancy

organization_id
Every core entity table carries an organization_id column that scopes the row to a single tenant.
RLS enforcement
Organization boundaries are enforced at the database layer via RLS — not just in application code — so a bypassed API cannot leak cross-tenant data.
New users
New users must be assigned to an organization before they can create, read, or modify any core entity.

Audit and deletion safeguards

Soft deletion
Core entities are soft-deleted by default; a deleted row is marked inactive and retained for the recovery window before hard deletion is possible.
Deletion log
Every deletion — soft or hard — is written to an append-only log with actor, timestamp, entity type, entity id, and reason.
Admin only
Deletion of core entities is restricted to admins; members can archive but not delete.
Exact-name confirmation
The admin must type the exact entity name to confirm a deletion — no click-through confirmation.
Reason required
A minimum 10-character reason is required and is written to the deletion log.
Cascading impact
Before confirmation, the UI displays the full cascade — child records, dependent references, and downstream artifacts that will be affected.

What we don't do

The controls that are absent because they are unsafe.

  • No API keys or service role keys in client-side code.
  • No client-side admin checks — every privileged operation is re-verified server-side.
  • No detailed error messages exposed to clients; internals stay server-side.
  • No hard deletion of core entities from user-facing paths.
  • No bypassing RLS for user operations, ever — the service role is not a fallback for missing policies.

SOC 2

Status

Type 2 audit in progress — report expected [DATE]

FactorIQ does not claim SOC 2 certification. The report will be made available under NDA once the audit period completes.

Documentation

Full security architecture

The full security architecture document — including data flow diagrams, backup and recovery, incident response, and subprocessor list — is available on request.

Send this page to your security team.

We'll answer the vendor questionnaire in the format your reviewers already use.

Request a demo