NewThe Command Center: every team's AI spend, forecasts, alerts and key health on one screen.See how it works

Security overview

Boilerplate holds admin keys to your AI providers, so it was built by security engineers to the standard we'd want from a vendor. This page is written for the person approving us.

Read-only connectorsAES-256-GCM encrypted keys0 prompts or completions read

At a glance

  • Read-only by design

    We call usage, cost and directory endpoints only. We never see prompts, completions or files, and we can't change anything at your providers.

  • Keys encrypted and bound

    Every key is encrypted with AES-256-GCM and bound to its workspace and provider, so a copied ciphertext is useless anywhere else.

  • Rotation built in

    Key age is tracked against your policy. New keys are tested before they replace old ones, and every rotation is logged.

  • Your identity provider

    People sign in with Microsoft Entra ID. Your MFA and Conditional Access apply, and only your tenant can join your workspace.

  • Least privilege inside

    Admins change settings; Viewers can only look. Roles are enforced on the server for every page and action.

  • Everything audited

    Connections, key rotations, budgets, mappings, members and knowledge access all land in an audit log.

Data we read and store

We keep the minimum needed to attribute spend: daily aggregates, not activity.

We read
Usage and cost reports, API key and project names, workspace names, directory groups and members (name, work email), and knowledge space names. The exact endpoints per connector are listed on Integrations & data access.
We store
Daily totals per key, model and day (tokens, requests, cost), key and project names, your teams and people, budgets, alerts and the audit log.
We never read
Prompts, completions, uploaded files, conversation history or model settings.
Deleting data
Disconnecting a provider deletes its synced usage. Revoking the key at the provider stops all access immediately. Workspaces are deleted on request.

Keys and encryption

At rest
AES-256-GCM with a fresh random IV per secret. Each ciphertext is bound to its workspace and provider as authenticated data, so it fails to decrypt if moved.
In the app
Keys are never sent back to the browser. Only the last four characters are shown. Provider error messages are scrubbed of key fragments before they're stored or displayed.
Validation
Keys are tested against the provider before they're saved. Regular (non-admin) keys are rejected without a network call.
Rotation
Choose a policy of 30 to 365 days. You get a heads-up 14 days before a key reaches its rotation age and an alert once it's overdue. Rotation tests the new key first; the old one keeps working until the new one is proven.
Failing keys
If a key is revoked or expires, the connector is marked Failing and an alert is raised on the next sync.
Master key
Our encryption key can be rotated with no downtime: the previous key is kept for reads while every secret is re-encrypted, then retired.

Sign-in and access

Protocol
OpenID Connect authorization code flow with PKCE, state and nonce. ID tokens are verified for signature, issuer, audience and expiry.
Who can join
Workspaces are linked to one Microsoft tenant. Users are identified by tenant and immutable object ID, never by email, and personal Microsoft accounts are rejected. Invites can only be claimed from the linked tenant.
Roles
Admin and Viewer. Every page and every action checks the role on the server. A workspace always keeps at least one Admin.
Sessions
Server-side sessions with a random token; only its SHA-256 hash is stored. Sessions end after 12 hours idle or 7 days at most. Cookies are HttpOnly, Secure and SameSite. Signing out, or being removed, revokes the session.
Brute force
Sign-in attempts are throttled per network address, stored only as keyed hashes.

Application security

Browser
A Content Security Policy that only loads our own scripts, styles and images; HSTS; framing blocked; no third-party scripts or trackers in the app. Fonts are self-hosted.
Requests
State-changing requests must come from our own origin. Server actions re-check the session and role every time.
Outbound calls
Connectors only call fixed vendor hosts over HTTPS, never follow redirects with credentials, and only paginate on the same host.
Inputs
Numbers are range-checked, text is length-limited, and links from third parties are restricted to http(s).
Fail closed
A production deployment refuses to start without its secrets configured; it never falls back to development defaults.
Testing
Every change runs unit tests and an automated attack suite (session handling, CSRF, cross-workspace access, injection, sign-in edge cases) in CI.

Knowledge for agents

When you connect Confluence or GitBook so agents can use company context, you stay in control.

Default
Every space starts disabled. Nothing is shared until an Admin turns a space on.
Scope
Each space can be limited to specific teams.
Kill switch
One organization-wide switch cuts every agent off from all company content instantly.
Record
Every change to knowledge access is in the audit log.

Operations and compliance

Hosting
We share the hosting provider, region and subprocessor list during procurement.
Compliance
We don't have a SOC 2 report yet. We'll complete your security questionnaire and walk your team through these controls.
Incident response
We can revoke every session at once and rotate our encryption key without downtime. We notify affected customers promptly.

Report a vulnerability

Email Justin.Tackling@boilerplate.fyi with details and steps to reproduce. We'll acknowledge within two business days and keep you updated. Please don't access data that isn't yours or disrupt the service while testing.

Doing a security review?

We'll walk your team through the architecture and answer your questionnaire.