← Back to home

Security & Trust

We built the controls we'd want as customers ourselves. This page is updated as we ship; everything listed below is live in production today unless explicitly marked as roadmap.

Shipped today

Encryption at rest + in transit

All traffic is served over HTTPS. OAuth access and refresh tokens and stored LLM provider credentials are encrypted at rest with Fernet (symmetric AES-128-CBC + HMAC-SHA256), decrypted only at the moment of use. Provider profile payloads returned by OAuth are retained unencrypted and are purged on account deletion.

9-role brand-scoped RBAC

Writes are gated by permission checks against a 9-role hierarchy (root → super_admin → agency_admin / org_admin → agency_member → brand_admin → brand_member → creator → viewer). Brand-scoped writes require an explicit grant; the engine refuses cross-tenant operations even when the caller holds the role. Endpoints that act only on the caller's own records are scoped by ownership rather than by the role engine.

Append-only audit log

Governance and tenant-modifying actions are recorded to an append-only audit log carrying the actor, their role at the time of the action, tenant scope, before/after JSON, IP, user agent and request ID. A Postgres trigger rejects UPDATE and DELETE on the table, so history cannot be rewritten after the fact.

Sole-owner protection

Governance actions that could orphan a tenant (deleting the last owner, demoting a sole admin, downgrading the final owner-tier role) are blocked at the API layer with an explicit error code so the operator can choose a successor first.

No-train AI policy

Customer content is never used to train AI models. Our LLM sub-processors (Anthropic, OpenAI, Google Gemini) each contractually exclude API traffic from training corpora. With a BYO key, the request is billed to your own provider account under your own terms — but it is still composed and sent from our servers using your key, so treat it as processed by us, not as a private channel.

Sudo-elevated governance

Transfer, lock, archive, and other high-blast-radius governance operations require a fresh password re-authentication (sudo mode) on top of the standard permission check. Sudo tickets are single-use, bound to the specific request they authorize, and expire within two hours.

Tenant isolation

Tenant-scoped reads and writes are filtered either by a centralized tenant_filter primitive or by an explicit brand-access guard at the endpoint. No raw SQL bypasses the ORM to reach tenant tables. Job-status lookups, memory-vault reads, and credit-account reads are all enforced.

HIBP password screening

Passwords set through registration, reset and change are checked against the Have I Been Pwned breached-password corpus using the k-anonymity API. We never send the password itself — only a SHA-1 hash prefix. Breached passwords are rejected.

On the roadmap

We'll update this with status changes; customers in the Enterprise tier receive monthly Trust Center updates including evidence packs.

ItemTargetStatus
SOC 2Not startedNo auditor or compliance platform is engaged yet. We will start when a customer contract requires it. Until then the controls above are what we can show — ask and we will walk you through them.
SSO / SAMLPlanned — no dateOIDC + SAML 2.0 for Okta, Azure AD and Google Workspace, for the Agency tier.
MFA (TOTP)Planned — no dateRequired for owner-tier roles; opt-in for everyone else.
Data Processing AgreementOn requestWe sign a customer DPA on request — contact us below.

Reporting a security issue

Found something? We want to know. Email contact@kclub.me with the subject line “Security report” and a short description plus reproduction steps. We acknowledge within one business day and update you weekly until resolution. Responsible-disclosure researchers are credited in our public changelog (with permission).

For requests under the GDPR, CCPA, or any data-protection statute (export, deletion, do-not-sell), see Settings → Account & Security in-product, or email the same address.