Last updated May 30, 2026
Ejector sits in a sensitive spot: it reads your code and, for managed-proxy users, holds the credentials that let agents act as your app. We designed the system so that even we can't casually read those secrets, and so a leaked API key can never unlock anyone else's. This page is the honest, technical account of how.
The system is split so that each part has the least access it needs to do its job:
WORKER_SECRET, never directly by agents.Agents only ever talk to the public proxy at ejector.dev. The worker and database are internal and aren't exposed to them.
Server-side credentials you add for the managed proxy are the most sensitive data we hold, and they get the strongest handling:
Your Ejector API keys are shown once, at creation, and then stored only as a hash — we can't recover the original. When an agent presents a key, the proxy resolves the right credentials through a SECURITY DEFINERdatabase routine keyed on that hash. The practical effect: a key can only ever unlock the credentials that belong to it, and a leaked key can never reach another customer's data. Underneath, row-level securityin Postgres enforces that every query is scoped to its owner — isolation isn't left to application code.
We don't keep it. When you connect a repo, the worker pulls a temporary snapshot, runs the analysis, and deletes the snapshot — we retain only the generated spec. There's no long-lived checkout of your code on our infrastructure. Private repos are read with a scoped, encrypted token you can revoke at any time.
Generating an API from a live site's network traffic is gated behind domain-ownership verification: you prove control of the domain via a DNS TXT record or a well-known file before capture is allowed. This is a deliberate guardrail — it stops Ejector from being pointed at apps you don't control.
If you capture an authenticated app by supplying a login, those credentials are used in memory only, for that one capture run, to drive the headless browser. They're never written to disk or stored in our database.
We build on managed providers (Supabase, Vercel, Railway, Stripe) that maintain their own security programs and certifications, and we keep our own footprint minimal: the analysis worker is secret-gated and not publicly callable for analysis, internal service keys are scoped, and components only hold the access they need.
We welcome reports from security researchers. If you believe you've found a vulnerability, email security@ejector.devwith steps to reproduce. Please give us a reasonable window to fix it before disclosing, and avoid accessing other users' data or degrading the service while testing — we won't pursue good-faith research that respects those bounds.