Encryption: at rest and in transit
TLS 1.2+ on every public endpoint with HSTS preload, AES-256 at rest across Postgres, Redis, and object storage. Virtual keys are SHA-256 hashed on creation; the plaintext is shown once and never stored.
NemoRouter is the gateway for every prompt, every key, and every dollar of spend. This page is the engineering deep-dive: the request path, the RLS contract, and the credit-safety invariants auditors walk through.
Architectural invariants
Backed by managed Cloud Run + Supabase
At rest + TLS 1.2+ in transit
Every Nemo table, no exceptions
LLM traffic uses virtual keys only
Framework status (SOC 2, GDPR, HIPAA, PCI) lives on the compliance page; documents and posture on the trust center.
Every request flows through Nemo Backend before it touches a provider. Auth checks, RLS scope, credit reservation, and guardrails all live on the same hop. There is no shortcut path for the frontend to call an LLM directly.
Request flow
Client / SDK
Bearer sk-nemo-โฆ
Only virtual keys leave the client; master keys never ship.
Frontend (Next.js)
Cloud Run
Server actions add auth + RLS scope before forwarding.
Nemo Backend
NemoRouter
Auth, credit reserve, guardrails, observability โ in path.
Nemo routing core
Routing engine
Cost & usage tracking, rate limits, provider fallback chains.
Provider
Vertex / Anthropic / OpenAI
Outbound traffic only; no inbound provider calls.
The Nemo routing core is fully managed. Every request is authed, scoped, and guardrailed before it reaches a provider, with nothing for you to harden.
Every NemoRouter customer gets the full security posture from day one. No โEnterprise tierโ for SSO, audit logs, or guardrails. These are not features we sell, they are guarantees we ship.
TLS 1.2+ on every public endpoint with HSTS preload, AES-256 at rest across Postgres, Redis, and object storage. Virtual keys are SHA-256 hashed on creation; the plaintext is shown once and never stored.
Row-Level Security on every Nemo table, every policy scoped by organization_id. No `USING (true)` anywhere. Cross-tenant reads are impossible at the database layer, and a continuous gap-hunter scanner verifies the contract holds.
Customer LLM traffic only ever uses virtual keys (sk-nemo-โฆ) with per-key spend tracking, RPM/TPM caps, and instant revocation. Master keys are reserved for internal management CRUD. Never the dashboard, playground, or your code.
Every request passes through auth, RLS scoping, guardrails, and credit reserve+settle before it reaches a provider. CSP, X-Frame-Options, and Stripe webhook signature checks ride on every response and event.
PII redaction (Microsoft Presidio), prompt-injection detection, secret scanning, abuse blocking, and response scanning. Included on every plan, configurable at org > team > key scope.
Every administrative action, key change, guardrail trigger, and budget event is logged with actor, source IP, payload diff, and timestamp. Append-only, exportable as CSV/JSON for SIEM ingestion. 90-day request log retention; longer on Enterprise.
Multi-tenancy is enforced at the database, not the application layer. The application can have bugs; the database refuses to return rows from the wrong tenant.
Tenant isolation
Every record is scoped to your organization, and Row-Level Security enforces that boundary at the database itself. A query against the wrong tenant returns zero rows. There is no mapping table to drift, no sync layer to compromise.
RLS policy spot-check
Every LLM request reserves credits before forwarding and settles after the cost header arrives. Failures release the reservation. There is no path to a negative balance because the database refuses to write one.
Reserve + settle
The credit ledger applies every increment/decrement atomically, so concurrent writes never race. Webhooks are idempotent on Stripe event id. Reservations expire automatically if a request never settles.
Money-safety invariants
Engineering principle
Built audit-ready from day one. Not retrofitted before a procurement call.
RLS, virtual keys, master-key isolation, reserve+settle credit safety, and the audit trail are non-negotiable invariants in our platform, enforced by tests that block merges, not by promises on sales calls.
Customer data lives in managed Postgres with at-rest encryption, replicated within a single region. United States is the default footprint. EU residency is generally available on Enterprise; the UK, Canada, Australia, Singapore, and India are available on request, covering GDPR data-locality requirements and the residency expectations of the EU AI Act.
Default US runs on us-central1; EU on europe-west4 with Supabase Postgres co-located and subprocessors signed under EU SCCs. Need a region pinned? sales@nemorouter.ai.
Sessions are managed by Supabase Auth. Idle timeout is enforced from the dashboard, refresh tokens rotate transparently, and users can revoke active devices from their account page.
Idle timeout: 30 minutes (default). Inactive dashboard sessions surface an idle warning at 25 minutes and force re-auth at 30. Configurable per-org for enterprise.
Refresh-token rotation. Refresh tokens rotate on every use (Supabase Auth). A leaked refresh token is invalidated the moment its successor is issued, and the user is force-signed-out across all devices.
Device management. Account โ Security lists every active session by device, OS, and last-seen IP, with one-click revocation. Kill the session before an attacker reaches the dashboard.
Session vs API key. Dashboard sessions sign management calls only. Every LLM request uses a virtual API key with its own RPM/TPM/budget caps. A compromised session cannot run unbounded inference.
If you discover a security issue, please report it responsibly. We acknowledge within 48 hours, target 7 days for critical fixes, and follow coordinated disclosure.
All customer data lives in managed Postgres (Supabase) with at-rest encryption, replicated within a single region. United States is the default footprint. EU residency is generally available on Enterprise; the UK, Canada, Australia, Singapore, and India are available on request for residency-sensitive workloads. We do not move tenant data across regions without an explicit migration request.
Not yet โ and we will not say "certified" until the report is signed. NemoRouter operates SOC 2-aligned controls today: encryption, access control, audit logging, change management, and tenant isolation, enforced from day one. A formal SOC 2 Type II observation period is currently underway, with the audited report targeted for Q3 2026. The underlying infrastructure (Google Cloud Run, Supabase) is independently SOC 2 Type II certified. Enterprise customers who need assurance before the report lands can request a controls walkthrough or a completed vendor security questionnaire from security@nemorouter.ai.
Every Nemo table has Row-Level Security enabled with policies scoped by organization_id, so a query against the wrong tenant returns zero rows โ there is no "leaky path" to fix because the database refuses to return them in the first place.
Virtual keys are tenant-scoped, rate-limited, budget-capped, and observable. Revocation is immediate from the dashboard or API; the in-memory cache invalidation propagates within seconds. Keys are hashed in the database. The plaintext is shown exactly once at creation. The blast radius of a leak is the budget on that single key, not your account.
Yes. PII redaction, prompt injection detection, secret scanning, abuse blocking, and response scanning all run on every request from day one โ at zero additional cost. We do not gate safety features behind paid tiers.
Email security@nemorouter.ai with details. We acknowledge within 48 hours and aim to resolve critical issues within 7 days. We follow responsible disclosure practices and credit reporters in our changelog when permitted.
Security review ยท 30 minutes
No NDAs to start, no sales gate. Bring your auditor. They will get the same answers we give the engineering team.