Security & trust
How Clarify encrypts your payment keys, tokens and connector credentials at rest, and why the dashboard never shows them again.

Every sensitive value you give Clarify — a payment key, an access token, a webhook secret, your own bot token, a connector's credentials — is encrypted before it is stored. It is never written to our database in plain text, and once saved it is never handed back to your browser. This page explains what that protects and why the dashboard behaves the way it does.

Encrypted at rest

Clarify encrypts secrets with AES-256-GCM — the same class of strong, industry-standard encryption used to protect banking and government data. Each value is encrypted with a fresh random initialisation vector and carries a tamper-evident authentication tag, so a stored secret can't be silently altered.

The encryption key is operated by Clarify and rotated on our side. You don't set it, manage it or ever see it — it isn't part of your setup.

"At rest" means the value is encrypted the moment it's saved and stays encrypted in storage. It's only ever decrypted in memory, on our servers, at the exact moment it's needed to talk to a provider.

What is encrypted

Anything that could be used to act on your behalf is encrypted:

SecretWhere it comes from
Bot tokenYour own bot, when you run White Label
PayPal client ID & secretYour PayPal app credentials
Tebex project ID, private key & webhook secretYour Tebex store
Patreon access & refresh tokensMinted when you connect Patreon
GitHub tokenYour GitHub connection
Webhook signing secretYour Webhooks module
Connector credentialsAPI keys, bearer tokens, username + password, or OAuth secrets for your Data connectors
Stripe stores no key.Stripe uses Stripe Connect — you authorise your Stripe account and Clarify only keeps a reference to the connected account, never a secret key.

The dashboard never gets the value back

Once a secret is stored, Clarify redacts it on the way out. When the dashboard loads a settings page, it receives only a "stored" indicator — never the actual value. There is no way to read a saved secret back out through the dashboard.

That's why every secret field behaves the same way when you edit it:

A saved secret shows as stored with an empty field. Leave the field blank to keep the existing value — only type something if you want to replace it.
Secret fields (payment keys, tokens, webhook secrets, bot token, connector credentials)
password
Shown as stored once set; the value is never displayed again. Leave blank on save to keep the current value, or enter a new value to replace it. Clearing and replacing is the only way to change a stored secret.

OAuth tokens never touch your browser

When you connect a provider that uses OAuth — such as Patreon, the GitHub app, or an OAuth-based data connector — you click Connect and authorise on the provider's own site. The provider then sends the result to Clarify's servers, not to your browser.

The token is exchanged and encrypted entirely server-side. Your browser only ever sees "connected". At no point does an access or refresh token pass through the page you're looking at.

Each connect link is signed and short-lived, so it can't be reused or replayed. See Access control for how logins and permissions are protected.

A safety net that refuses plaintext

Encryption is only useful if it can't be skipped by mistake. Clarify runs a fail-closed check before anything is written to storage: if a secret somehow reached that point still unencrypted, the save is rejected outright rather than stored in the clear.

In plain terms — there is no path where one of your secrets is saved without being encrypted first. If encryption didn't happen, the write simply fails.

In short

Encrypted at rest

AES-256-GCM on every stored secret, with a key you never have to manage.

Never returned

Saved values are redacted — the dashboard shows "stored", never the secret.

Server-side tokens

OAuth tokens are exchanged and encrypted on our servers, never in your browser.

Fail-closed

A guard rejects any write that isn't encrypted — no silent plaintext.

Ready to connect a provider? Start from the Integrations overview — every connection you make is protected exactly as described here.