Browse documentation
Trust

Data & privacy

What is kept and for how long, how to export or erase it, and how the three mandatory Shopify erasure webhooks are actually drained.

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_requestentirely 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.

Built on these docs?

Drop into the forum if something's unclear or wrong. Docs improve faster when readers flag the gaps.

Open the forum