SUB&SUB · Privacy

Privacy Policy

Last updated: 2026-05-13 · Effective: 2026-05-13

This Privacy Policy explains what personal data SUB&SUB collects when you use the Service, what we deliberately don't collect, who we share data with, and how you can exercise your rights.

At a glance

Short version We store the minimum needed to run a paid API relay: your email, sign-in method, hashed API keys, and your transaction history. We do not store the prompts you send or the model responses you receive. Your prompts are forwarded directly to an upstream AI provider (currently OpenAI), whose own privacy policy then applies to that content. We use Stripe for payments and never see your card details. We don't run analytics trackers or sell data.

1. Who we are

The Service at www.subnsub.com and api.subnsub.com ("SUB&SUB", "we", "us") is the data controller for the personal data described in this Policy. To contact us about privacy, write to [email protected].

2. What we collect

2.1 Account information

When you create an account we store:

FieldSourceWhy we need it
emailYou, at signupLogin identifier; receipts; security and account notices.
password_hashYou, at signupA PBKDF2-SHA256 hash of your password — we cannot recover the plaintext. Null if you signed in with Google only.
google_subGoogle OAuthStable Google user identifier, so a re-login finds your existing account.
nameGoogle OAuth, or youDisplay name in the console.
avatar_urlGoogle OAuthProfile picture shown in the console.
created_atSystemAccount creation timestamp.
email_verified_atSystemTimestamp at which the email was verified (via Google, or via the verification email link).

2.2 API key metadata

For each API key you create we store its display name, a SHA-256 hash of the secret, the visible prefix (e.g. sk-cf-fJk2…), the creation timestamp, the last-used timestamp (touched on every authenticated request), and the revocation timestamp if you revoke it. The plaintext key itself is shown to you only once at creation and is never stored.

2.3 Billing & transactions

For each top-up and each request we record a transaction row: type (topup / settle / refund), amount in microdollars and cents, payment method (stripe for top-ups, usage for per-request debits), an external reference (Stripe Checkout Session ID like cs_…, or a per-request UUID req:<uuid>), and a timestamp. For each Stripe webhook we record the event ID, type, credited user, credited amount, and timestamp — so a webhook retry cannot double-credit your balance.

2.4 Per-request usage metering

When you call /v1/*, we record on our infrastructure: which API key was used, which model was requested, the token counts (prompt_tokens and completion_tokens) reported by the upstream provider, the resulting debit, and a timestamp. We need this to bill you accurately and to detect abuse. We do not retain the content of your prompt or the content of the model's response on SUB&SUB systems — they pass through the relay and are not written to our database.

2.5 Authentication artifacts

Short-lived items live in Cloudflare KV (a key-value store): email verification tokens (≤24h), password-reset tokens (≤1h when applicable), Google OAuth state and nonce values (~10 min), and session tokens that back your login cookie. The session cookie is named cf-session, is set as HttpOnly; Secure; SameSite=Lax, and has a lifetime of around 30 days from creation.

2.6 Server-side logs

Cloudflare, our infrastructure provider, records request-level metadata at the network edge — including your IP address, request path, user-agent, response status, and timing — for a limited period for security, abuse detection, and operational diagnostics. Our application code also writes occasional error log lines (e.g. failed key lookups, upstream errors) to Cloudflare's runtime logs.

2.7 Email content we send you

We send transactional email — verification links, password resets (when applicable), and account or billing notices — from [email protected]. Outbound mail is delivered via Cloudflare's email service.

3. What we don't collect

4. How we use data

We use the data described above to:

We do not use your data to train AI models, and we do not allow the data we hold about you to be used by third parties to train AI models on our behalf.

5. Who we share data with

We share personal data only with the providers we genuinely need to deliver the Service, and only the minimum needed. They process data on our behalf or as independent controllers, as noted.

RecipientWhat they receiveWhy
Cloudflare (Pages, Workers, D1, KV, Email) All Service traffic and the data stored in D1/KV; outbound email metadata. Hosts and runs the Service. Cloudflare Privacy Policy.
Upstream AI providers (currently OpenAI — ChatGPT & Codex) Each /v1/* request body you send: prompts, messages, parameters. Plus the upstream account identity we use to authenticate. Fulfils your API request. The upstream provider's own privacy policy applies to that content — for OpenAI, see OpenAI Privacy Policy and Usage Policies.
Stripe Email, top-up amount, currency, your IP at checkout time, your card / Link / Alipay / WeChat Pay credentials (handled by Stripe, never by us). Processes payments and returns a webhook so we can credit your balance. Stripe Privacy Policy.
Google (only if you sign in with Google) OAuth handshake; we receive Google's claim about your email, name, sub, and picture. Lets you sign in without a password. Google Privacy Policy.
Law enforcement / authorities Only what we are legally required to produce. Compliance with valid legal process.

We do not sell personal data, and we do not "share" personal data for cross-context behavioural advertising as those terms are defined under the California Consumer Privacy Act.

If you are in the EU, UK, or another jurisdiction where the GDPR or an equivalent regime applies, our legal bases for processing your personal data are:

7. International transfers

SUB&SUB's infrastructure runs on Cloudflare's global edge network and Stripe's global payments network, both of which operate from multiple countries. Upstream AI providers we forward requests to (currently OpenAI) are primarily based in the United States. As a result, your personal data may be transferred to and processed in countries other than the one you live in.

Where transfers are made out of the EU/UK to a country without an adequacy decision, our sub-processors rely on appropriate safeguards (such as the EU Standard Contractual Clauses and the UK International Data Transfer Addendum) published in their own public terms.

8. Retention

DataHow long we keep it
Account record (email, name, hashes, etc.)While your account is active, then up to 24 months after closure, or longer if law requires.
Transactions & Stripe event ledger7 years after the transaction, to meet typical tax and accounting requirements.
API keys (hashed)While the key exists; revoked keys are kept for up to 12 months for audit, then purged.
Email verification / password reset / OAuth state in KVAuto-expires within 10 minutes – 24 hours depending on the token type.
Session tokens (KV)Auto-expire 30 days after creation, or sooner on sign-out.
Cloudflare edge access logsRetained by Cloudflare for its own short period (typically days), per Cloudflare's privacy practices.

When you ask us to delete your account, we delete or anonymise account fields on a reasonable schedule; we may retain pseudonymised transaction records for the tax/accounting period above.

9. Your rights

Subject to your local law, you have the right to:

To exercise any of these rights, write to [email protected] from the email address on your account. We will respond within 30 days (extendable by 60 days for complex requests, in which case we will tell you). We will verify your identity before acting on requests that would disclose or change account data.

California residents: you may also designate an authorised agent. We will not discriminate against you for exercising any privacy right.

10. Security

We design the Service to keep blast radius small:

No system is perfectly secure. If you believe you've found a vulnerability, please email [email protected] with the subject line "Security report". Please do not publicly disclose until we've had a reasonable chance to fix the issue.

11. Cookies & local storage

We use a small number of first-party cookies and a few localStorage entries — all functional, none used for tracking or analytics. No third-party cookies are set by us.

NameWherePurposeLifetime
cf-sessionCookie (HttpOnly, Secure, SameSite=Lax)Identifies your logged-in session. Strictly necessary to operate the console.~30 days
lang_prefCookie (Secure, SameSite=Lax; HttpOnly when set by the edge)Records your standing display-language preference (set by the IP-based first-visit redirect, by the language picker, or implicitly by viewing a localized page). On later visits to the bare root URL / we redirect you to /<lang>/ matching this value, so the locale stays sticky as you navigate (including round-trips through sister sites such as tools.subnsub.com). Opt out by setting lang_pref=en from your browser, or by picking English in the language picker.~1 year
cf-modelocalStorageRemembers your light / auto / dark choice across visits.Until you clear it
cf-animlocalStorageRemembers whether you have animations forced on, off, or following your OS reduce-motion preference.Until you clear it
cf-themecachelocalStorageA cached snapshot of the resolved CSS variables for your current mode, replayed before first paint to prevent a colour flash on page load. Recomputed on every theme change.Until you clear it

All of these are strictly necessary or functional and do not require a consent banner under EU rules. Language selection works as follows: every explicit page URL is authoritative for its own language (e.g. /zh-CN/ is always Chinese, /de/ is always German). For the bare root URL /, the first time you visit without a lang_pref cookie, the edge may redirect you to a locale matching the country of your IP address (as reported by Cloudflare's cf-ipcountry header) and write lang_pref recording the chosen language. On subsequent visits to /, we redirect to /<lang>/ if lang_pref names a language other than English; if it is en, you stay on English. Setting lang_pref=en in your browser, or picking English in the language picker, opts out of the localized redirect.

Third parties involved in payment or sign-in (Stripe Checkout, Google sign-in) may set their own cookies on their domains during those flows; their cookies are governed by their own policies.

12. Children

The Service is not directed to children under 18 (or the age of majority in your jurisdiction). We do not knowingly collect personal data from children under 13. If you believe a child has provided us with personal data, contact [email protected] and we will delete it.

13. Changes to this Policy

We may update this Policy from time to time. The updated version will be posted at www.subnsub.com/privacy with a new "Last updated" date. For material changes, we will give you reasonable notice — by a banner on the Service, by email, or both — before they take effect. Your continued use of the Service after the effective date constitutes acceptance.

14. Contact

For any privacy question or to exercise a right described above, please write to:

[email protected]