FAQ¶
The basics¶
What does Privyx do, in one sentence?¶
It sits between your tool and an AI provider, replaces the sensitive values it detects in each request with placeholders, and puts the original values back into the reply.
How is that different from redacting?¶
Redaction is one-way: once ann@example.com is [REDACTED], the answer can
only say [REDACTED]. Privyx keeps the mapping, so the model works with
<PRIVYX_EMAIL_1> and you read ann@example.com in the answer, and a tool
the model calls receives the real address. One-way redaction is available
too, as the redact operator.
Does my data go through a Privyx server?¶
No. There is no Privyx service. The proxy is a program you run, on your own machine or your own server, and it talks only to the upstream you configure. It sends no telemetry.
Do I need an account or an API key for Privyx?¶
No. You need whatever your provider requires. Privyx relays your client's key to the provider, or holds a provider key for you if you prefer.
What does it cost?¶
Nothing. Privyx is open source under the MIT license.
Compatibility¶
Which providers work?¶
Any provider that speaks one of three formats: OpenAI Chat Completions, OpenAI Responses, or Anthropic Messages. That covers OpenAI and Anthropic and the many services compatible with them. Gemini works through its OpenAI-compatible endpoint; its native API is not masked yet. See Integrations.
Which clients work?¶
Any client that lets you set its base URL: the official SDKs, frameworks
built on them, curl, and coding tools. privyx run sets it up by itself for
Claude Code, Codex, and aider.
Does streaming work? Tool calls? Reasoning?¶
Yes. A streamed reply is restored as it arrives, tool-call arguments are restored before your code sees them, and reasoning text is restored like the answer. See An app on the OpenAI or Anthropic SDK.
Does Claude Code keep working with my subscription login?¶
Yes. In its default mode Privyx relays whatever credential the tool sends, an API key or a login token alike.
Can one proxy serve OpenAI and Anthropic at once?¶
One proxy forwards to one upstream. Run two, on different ports. A provider that serves both formats on one host, as some routers do, needs only one.
Privacy¶
What is masked without any configuration?¶
Email addresses, phone numbers, credit card numbers, IP addresses, US social security numbers, and secrets: API keys, tokens, JWTs, private keys, passwords in URLs, and values assigned to secret-looking names. The list is in Detection.
Why was a name not masked?¶
A name has no shape a pattern could recognize. Add it to a word list, or add a detector that understands language. Your own names and terms walks through it.
What does the provider still see?¶
Everything that was not detected, the kind of each masked value (the token
says EMAIL), and when two values are the same. See
What the provider still learns.
Where are the original values kept?¶
In a session, inside the vault. By default the vault is the proxy's memory
and each request's session is dropped when the request ends. With a
persistent vault (SQLite or Redis) they are stored in plain text unless you
use the encrypt operator. See
Sessions and vault.
Does Privyx log my prompts?¶
No. Its log never contains request or reply text at the default level, and
the audit trail records entity types and counts only. The one exception is a
debug log file you switch on yourself: log_file at log_level: debug can
hold original values.
Does Privyx make me GDPR or HIPAA compliant?¶
Not by itself. It is a technical measure that reduces what a provider receives. Compliance also depends on contracts, on what your detectors actually catch, and on everything around the proxy.
What does it not protect against?¶
Values no detector finds, API paths it does not mask, prompt injection, and anyone who can reach an unprotected proxy. Limitations has the full list.
Quality and speed¶
Do answers get worse?¶
It depends on the task. The token tells the model what kind of value it
stands for, and the model can refer to it, repeat it, and pass it to a tool.
What it cannot do is reason about the value itself: it cannot tell you the
domain of a masked email address or add two masked numbers. If that matters, mask less
with the strict policy, or use the
faker operator, which shows the model a realistic
stand-in.
How much latency does it add?¶
The built-in detection is pattern matching, measured in milliseconds. Every
request records its own cost: transform_ms on the proxy.request audit
event is the time spent masking, and the rest of duration_ms is mostly the
provider.
For orientation, make bench on the machine this page was written on took
about 2 ms to mask a 5 KB text, and about 140 ms for a 400 KB request seen
for the first time, 7 ms once its text was in the detection cache. Run it
yourself for numbers that mean something on your hardware. The presidio
and llm detectors cost more; the llm detector adds a model call.
Does it break prompt caching?¶
No. Privyx masks a conversation the same way on every turn, so the part of
the request that did not change is byte-identical to the turn before and the
provider's cache still applies. With an anchor, which
privyx run sets up, that also holds across restarts.
Is every turn of a long conversation scanned again?¶
No. Detection results are cached by text, so only new text is scanned.
Running it¶
Do I need a config file?¶
No. Without one, Privyx runs on built-in defaults plus PRIVYX_* environment
variables. A file is needed for word lists, patterns, and a few other
settings; see Configuration.
Can I use it without the proxy?¶
Yes. privyx mask and privyx unmask work on text, files, and JSON
(tutorial), and the engine can run inside your
own Python program (Python library).
How do I change the word list without restarting by hand?¶
Start the proxy with --reload. It restarts itself when the config file
changes.
Is it safe to expose the proxy on a network?¶
Not as it is: it has no authentication. See Deployment.
Is it production-ready?¶
It is in its 0.1.x series. The masking and restoring paths are covered by
unit, integration, and property tests and by an end-to-end leak check with a
real coding agent; see Testing. Defaults can
still change between releases, and the changelog says when they do.
The project¶
How do I report a bug or a leak?¶
A bug: open an issue. A case where a detected value reaches the provider, or anything else security-related: report it privately.
How can I contribute?¶
See CONTRIBUTING.md. Detectors, operators, and vaults can also be added without changing Privyx, as plugins.