Privacy
Data handling
Where your chat history lives, what the gateway and database keep, how media links expire, what metadata we strip, and which third parties are involved.
On this page
In short: your conversations live in your browser. Our gateway forwards requests without writing their content anywhere. Our database holds counters, not content.
At a glance#
| Data | Where it lives | How long |
|---|---|---|
| Chat history | Your browser (IndexedDB), encrypted | Until you delete it or clear site data |
| Prompts and responses | Nowhere on our side. They pass through the gateway in memory. | Only for as long as the request takes |
| Generated images and videos | Our media store, behind an unguessable link | About 20 minutes |
| Session | A signed token in your browser that holds only your wallet address | 24 hours |
| Credit counters | Our database, one row per wallet | Ongoing |
| IP address, user-agent | Not stored | — |
Chat history#
Your chat history is stored only in your browser, in IndexedDB, and it is encrypted. The encryption key is derived from a signature made by your wallet, and it never leaves your browser. Tacita has no copy of your history and no way to read it.
What that means in practice:
- No sync. History on one browser or device doesn't appear on another.
- Clearing site data deletes it. Browsers can also evict stored data when space runs low. If a conversation matters, keep a copy somewhere else.
- Use a regular wallet. A regular wallet (EOA) normally produces the same signature for the same message, so it rebuilds the same key. Smart-contract wallets may not, and then old history won't decrypt in a new session. Coinbase Wallet is supported in its regular-account mode for this reason.
- Your device is the boundary. Anyone with your unlocked browser and your wallet can open your history.
In TEE mode, each chat session also generates its own encryption key pair. The private key is kept in memory only and never stored.
Sign-in and sessions#
You sign in with Sign-In with Ethereum (SIWE, EIP-4361). There's no email, no phone and no password. The gateway gives you a session token that's valid for 24 hours and contains only your wallet address. It can't be refreshed; when it expires, you sign in again. The one-time sign-in nonce is kept for 5 minutes.
What the gateway does with a request#
- It checks your session and looks up your tier, which sets your Bonus balance.
- It sets aside enough credits to cover the request.
- It sends the request under Tacita's own identity, never yours. It passes on none of your headers, so your IP address, user-agent and any identifiers stay behind.
- It streams the answer back to you unchanged and without buffering.
- It charges your actual usage against your counter.
At no point is the request or response body written to a log or a database. Error responses name only the error class, never request data.
What our database contains#
This is the complete list.
| Table | What's in it | What isn't |
|---|---|---|
| Wallets | Your wallet address, your Main balance, today's Bonus usage and which UTC day it belongs to, and the UTC day you were last active (the day, not the time) | Anything about what you asked, which models you used, or when exactly |
| Balance samples | One row per wallet per hour: the wallet address, the token's contract address, the token balance at the top of that hour, and the hour. This is public chain data. | Any content, and anything about your requests |
| Deposits | The hash and credited amount of each top-up, so a transaction is never credited twice | Your wallet address. The transaction itself is public on Robinhood Chain anyway. |
| Daily totals | Global per-day sums: Bonus and Main balance spent, our own running costs, deposits and request count | Any per-wallet data |
| Settings | Global values such as the fuse multiplier | — |
| Video settlements | A random job ID and a coarse hour, to stop a video being refunded twice | Your wallet, your prompt |
How the samples are used. Your tier is the lowest of your hourly balance samples over the last 24 hours, plus your current balance. The gateway reads each sample from the chain at the top of the hour and stores it, so it doesn't have to read it again. If the chain can't be read, the stored samples are also the fallback. See Tiers.
Short-lived records#
Some records exist only for minutes or hours and then expire automatically.
| Record | Contents | Expires after |
|---|---|---|
| Sign-in nonce | A random value | 5 minutes |
| Tier cache | Your wallet's tier and token balances, which are public chain data | 30 minutes |
| Rate-limit counters | Request counts per wallet, for one limit that's the same for everyone: 120 requests per minute. For sign-in, a keyed hash of your IP that is never stored. | 60-second windows |
| Media | The generated image or video, or a pointer to the generating provider's copy | About 20 minutes |
| Video job | Your wallet (so only you can check the job), the model, the job ID and the credit hold. No prompt. | 3 hours |
Images and video#
Temporary links. Generated media comes back as a temporary link containing a random 128-bit ID that can't be guessed. Links expire after about 20 minutes, then return "not found". Responses are marked no-store, so browsers and proxies don't cache them. To keep a file, download it or store it in your local history before the link expires.
Metadata on generated images. Before we hand an image to you, we strip:
- location data (the GPS block);
- device and camera fields, such as make, model, serial numbers, lens, owner and maker notes.
The image isn't re-encoded, so quality is unchanged. We deliberately keep C2PA content credentials and AI-provenance labels that mark the image as AI-generated. Transparency rules such as Article 50 of the EU AI Act require them.
Video files are delivered as they were generated. We don't rewrite them.
Your own images. Photos you attach in chat, or give to an image-to-video model, are forwarded to the model provider as they are. Strip location data from personal photos before you attach them.
Provider copies. The provider that generates media can keep its own copy for a while. On our current route, finished media files are kept for about 3 hours, and the requests of asynchronous jobs, such as video, are stored as operational data.
Moderation#
Image and video prompts are checked before generation. Chat is not.
- A blocklist runs inside the gateway with no network call.
- A classifier model, hosted by a model provider, answers only "allow" or "block".
What gets blocked is sexual content involving minors and sexual imagery of real, identifiable people. Nothing about the prompt or the verdict is stored. If the classifier is unavailable, image and video generation stops (it fails closed) rather than running unchecked.
No analytics, no trackers#
The Tacita site runs no analytics and no trackers. It makes no third-party requests until you connect a wallet.
Once you connect, your browser reads chain data, such as your balance and network status, from the Robinhood Chain RPC. That RPC operator can see your IP address and which addresses are queried. Your wallet software may have its own telemetry, which is outside our control.
Third parties in the path#
| Party | Role | What it can see |
|---|---|---|
| Cloudflare | Hosts our site and gateway | Your IP address and connection metadata. In Anonymous mode, the gateway processes your prompt in memory on its platform. |
| Model providers (Anonymous mode) | Run Anonymous-mode models, such as those from Anthropic, OpenAI and Google | Your prompt and the response, which they may log. Never your identity. |
| The TEE model provider | Relays TEE requests to the enclave | Ciphertext, model, timing, sizes and token counts |
| Phala, NEAR AI | Operate the confidential-compute enclaves | Nothing inside a genuine enclave |
| Robinhood Chain RPC | Chain reads by your browser and our gateway | Your IP (browser reads) and public addresses |
See Privacy modes for the per-mode breakdown.