Security
Last updated: 11 October 2026 · Version 1.1
This page explains how to report a security vulnerability in Recall and how we protect the data our customers trust us with. No system is perfectly secure, so we welcome reports from anyone who finds a weakness.
Report a vulnerability
Email security@recallmem.dev. Please include:
- what you found and where: the host, endpoint or page, or the plugin or SDK and its version;
- the steps to reproduce it, and a proof of concept if you have one;
- the impact you think it has;
- how we can reach you, and whether you would like to be credited.
Do not include other people's personal data beyond what is needed to show the problem. If you came across such data, tell us what you saw and do not keep it.
What happens next
- We confirm that we received your report within five working days, investigate it, and keep you informed of our progress.
- Please keep the details confidential until the problem is fixed. We aim to fix serious problems within 90 days and agree with you when details can be published.
- If you want, we credit you once the problem is fixed. We do not currently pay rewards (no bug bounty).
Safe harbour
If you research and report in good faith and follow the rules below, we will not take legal action against you and will not report you to the police for that research. If someone else takes action against you over it, we will make clear that you acted in line with this policy.
- Test only against accounts you own, or have explicit permission to test, and use test data.
- Do not access, change, delete or keep other people's data beyond the minimum needed to show the problem. Stop as soon as you see such data, and tell us.
- Do not disrupt or degrade the service: no denial of service, no load or volume testing, no spam, and keep automated scanning slow and limited.
- No social engineering, phishing or physical attacks, and no attacks on our customers, staff or providers.
- Use a vulnerability only as far as needed to show it: no backdoors, no persistence, no moving on to other systems.
- Do not ask for payment in exchange for not publishing a vulnerability.
- Keep within the law.
Scope
In scope: recallmem.dev (the website), app.recallmem.dev (the dashboard), api.recallmem.dev (the API, MCP server and OAuth), and the source code we publish: the server, SDKs and integrations at github.com/recallmem/recall, and the plugins at github.com/recallmem/recall-plugin.
Out of scope:
- services run by our providers, such as Stripe's payment pages (pay.recallmem.dev and checkout.stripe.com), Vercel, Neon, OpenRouter, Resend and Cloudflare: please report to them directly;
- denial of service, load testing and spam;
- reports from automated scanners without a demonstrated impact;
- missing security headers, cookie flags or email settings (SPF, DKIM, DMARC) without a demonstrated attack;
- clickjacking on pages without sensitive actions, self-XSS, and cross-site request forgery on sign-out or other actions without impact;
- software versions or banners without a vulnerability;
- attacks that need physical access to a device, a compromised device or browser, or control of the victim's network;
- wrong or unexpected AI answers, and prompt injection or jailbreaks that only affect your own account. Prompt injection that reaches another account's data is in scope.
How we protect data
- Encryption. All connections to recallmem.dev, app.recallmem.dev and api.recallmem.dev use HTTPS (TLS). Our database provider encrypts stored data at rest.
- Keys and tokens. API keys are shown once and stored only as SHA-256 hashes. Sign-in links, dashboard sessions and OAuth tokens are stored as hashes too.
- Sign-in. The dashboard uses passwordless email links that work once and expire after 15 minutes. MCP clients connect with OAuth 2.1 and PKCE, short-lived access tokens and rotating refresh tokens. You can revoke keys and connections in the dashboard.
- Dashboard. Signed, HttpOnly, Secure session cookies, protection against cross-site request forgery on every form, a strict Content Security Policy, and no third-party scripts.
- Separation. Every request is scoped to one account, and automated tests check that accounts cannot read each other's data. The database provider's public data interface is locked.
- Abuse protection. Rate limits, and temporary blocks after repeated failed credentials.
- Less data. We do not store IP addresses in our database, card details stay with Stripe, the website uses no analytics or tracking, and we do not use customer content to train AI models.
- Your controls. Export your data, or delete a person, a session, a workspace or your whole account, at any time.
Where data is kept
Our database and the servers that run the API and dashboard are in Frankfurt (EU). To build memory and answer questions, text is processed by AI model providers in the United States, through OpenRouter. Some of our providers are US companies and can be subject to US law. We disclose customer data to authorities only when a law that binds us requires it, we challenge requests we consider unlawful, and we tell the customer unless the law forbids it. The data processing agreement lists our sub-processors and the safeguards for transfers.
Contact
security@recallmem.dev. Machine-readable contact details are in our security.txt.