The binding legal text is the privacy policy and the DPA. This page is the operational version: what happens, where, and on what schedule.
How long things are kept
| What | Kept for | |---|---| | Your account and conversations | Until you delete the account | | Chat attachments | 30 days | | Public scan payloads | 30 days | | Public scan accounting shell | 62 days | | Audit log | 180 days | | Shopify webhook payloads | 7 days | | Stripe webhook payloads | 90 days | | Web Vitals raw samples | 14 days | | Pixel captures | 30 days | | Unconfirmed status subscriptions | 7 days | | Billing records | 10 years |
Two of these deserve their reason.
The scan shell outlives the payload because the public scanner's spend ceiling sums a calendar month, and a month has to stay countable after it ends. The captures and the submitter's hashed IP go at 30 days; what remains is accounting.
Billing records are a legal obligation, not a product decision — French commercial law, article L123-22.
Every duration here is enforced by a cron, and a guard fails the build if a published figure stops matching the code that applies it. Before that guard, the policy published three retention periods and all three were wrong.
Chat attachments, stated plainly
A file you attach in the chat is stored on Vercel Blob at a public URL with no expiry of its own. The 30-day purge bounds how long that exposure lasts; it does not make the object confidential in the meantime. Treat a chat attachment as something you handed out a link to.
Exporting
Organizations and stores can be exported from their settings. The export covers what the organization holds, not another tenant's data, by construction.
Deleting your account
/account → delete. This removes the account, its conversations and its
memory facts. Billing records survive, because the law requires it.
Shopify's three mandatory webhooks
Shopify requires every app to implement three erasure endpoints. All three are implemented, and how each one behaves is worth knowing because "returns 200" and "the data is gone" are different claims.
customers/redact — a barrier is raised before the 200 is
returned, and the gdpr-erasure cron drains the actual erasure:
vectors, customer links, attribution, archived payloads in the audit
log.
shop/redact — recorded as a compliance request that the same cron
drains: credentials, vector namespaces, raw archived payloads, free text
on orders.
customers/data_request — entirely manual. A human marks it
handled; nothing automates it. Past 30 days an unhandled request logs an
error rather than sitting silently, because an obligation nobody can see
is an obligation nobody meets.
A completion timestamp is the proof of completion. A row without one is an unmet obligation, and it is visible as such.
Sub-processors
The full list is published and derived from the code, not typed by
hand: /legal/subprocessors. It once listed 7
of roughly 30.
Models and training
Prompts, conversations and store data reach a model through the Vercel AI Gateway to Anthropic, OpenAI or Google. We do not train models on your content and do not license it to anyone; providers process it to return a response under commercial terms that exclude training on API traffic.