Security

How Jnvoy protects the text and keys you send it, which services are involved, and what we have not done yet.

Last updated 5 November 2026

The short version

Jnvoy reads your text only to redact it, keeps a record that describes each request without containing it, and keeps each customer's records apart. It is a young product, so this page also says what is missing.

Question
Answer
Status
Is traffic to Jnvoy encrypted?
The hosted service is served over HTTPS.
HTTPS
Are API keys stored in plain text?
No. Customer keys are stored as a SHA-256 hash. A key is shown once, when it is created.
Hashed
Can one customer see another's records?
No. Audit records, the response cache, usage counts and settings are kept apart per customer, and an automated test checks it.
Separated
Can the text stay on our own servers?
Yes. Jnvoy can be self-hosted in your own cloud, and the optional second check can run on a model you host.
Available
Is Jnvoy independently certified?
No. There is no SOC 2 or ISO 27001 report for Jnvoy and no independent penetration test yet.
Not yet

How it is protected

Keys and access

  • API keys are compared in constant time, are never written to logs or responses, and each key is rate limited.
  • Repeated wrong keys from one address are blocked for a while.
  • Operator routes, such as creating customers and reading the whole deployment, need an operator key that customer keys cannot use.
  • Customers use their own model provider key. It is sent in a header, used for that one request, and never stored, logged or cached. Jnvoy's own provider keys are never used for a customer.
  • A customer key can be replaced on request. The old key stops working straight away.

Customer separation

  • Each customer has their own audit records, response cache, monthly usage count and settings. A customer can read only their own.
  • Monthly plan limits are enforced for every customer, so one customer's traffic cannot use up another's allowance.

What is kept

  • Original text is never saved. The audit record holds counts of what was found, by type. The privacy page lists every place data lives.
  • The database accepts connections only from the Jnvoy service inside its private network. It is closed to the public internet.

Availability and recovery

  • The database is backed up continuously and can be restored to any moment in the last 3 days.
  • The health page is checked every 5 minutes from outside, and an alert is sent if it fails or reports the database as unwell.
  • If the database restarts, Jnvoy replaces its dead connections by itself. This is tested by cutting every connection.
  • There is a written runbook for deploys, key changes, restores and incidents.

The code

  • The source is published on GitHub under the Business Source License, so you can read the code and check any statement here against it.
  • More than 1,000 automated tests run before every change is published.

Where your text goes

The original text reaches Jnvoy, because Jnvoy has to read it to redact it. On the hosted service it travels there through Cloudflare, which Render uses at the edge of its network and which can read the traffic on the way in (see Services we use). It does not travel past Jnvoy. Only the redacted text goes to the model provider the customer chose (and, in a self-hosted deployment, to the optional second check), and the database holds counts, never text.

Data flow through Jnvoy The application sends the original prompt to the Jnvoy service. Jnvoy replaces sensitive values and sends only the redacted prompt to the model provider, and optionally to a second check. The reply comes back, is scanned, has real values restored and returns to the application. The database receives counts only. ORIGINAL TEXT EXISTS REDACTED TEXT ONLY Your application Sends the prompt over HTTPS with its API key. Receives the reply with real values restored. JNVOY SERVICE, HOSTED ON RENDER Find and replace Sensitive values become tokens such as [PERSON_1]. Originals are held in memory for this request only. Checked against the customer's own settings. Scan the reply Flags keys, card numbers and injection text, then puts the real values back before it returns. Database, Frankfurt (private network only) Counts of what was found, by type. Account details and a hash of the key. Never the original text. Second check Optional. Off on the hosted service. Self-hosted setups can switch it on and run it on their own model. Model provider The one the customer picks, for example Anthropic or OpenAI. Writes the reply. 1 2 optional 3 4 5
  1. Your application sends the prompt to Jnvoy over HTTPS. On the hosted service the request passes through Cloudflare on the way, which can read it. The original text travels no further than Jnvoy.
  2. Jnvoy replaces sensitive values with tokens and sends the redacted prompt to the model provider the customer chose. If a self-hosted deployment has the second check on, the redacted text also goes to the model it runs on.
  3. The model provider writes a reply that uses the tokens, and sends it back.
  4. Jnvoy scans the reply, puts the real values back, and returns it to your application.
  5. Jnvoy writes counts of what it found to the database. It never writes the text.
Original values exist in the application and in Jnvoy's memory while a request is processed. Everything Jnvoy sends on to another service is redacted.

Services we use

These are the services involved in running Jnvoy. Render and Cloudflare can see request text as it arrives, original values included. The model provider sees only the redacted form. The others never see request text. If the text must not pass through any outside service on the way in, self-host.

Service
What it is used for
Sees your text?
Render
Hosts the Jnvoy service and its database (the database runs in Frankfurt). Request text is processed in the service's memory and is not written to the database or the logs.
In memory
Cloudflare
Render's network provider, used for protection against attacks. Web traffic to the hosted service passes through it, and it ends the encrypted connection to read and pass on each request, so it can read request text in transit. Jnvoy does not control this.
In transit
The model provider you choose
Answers the prompt, for example Anthropic or OpenAI. Its own terms apply to what it receives.
Redacted only
UptimeRobot
Requests the health page every 5 minutes to alert us if the service is down. The health page holds no customer data.
No
GitHub
Holds the source code. No customer data is stored there.
No
Google (Gmail)
Holds the email we exchange with customers, such as a request for a key. It never receives request text.
No

Render publishes its own SOC 2 Type 2 and ISO 27001 certifications on its security page. They cover Render's platform. They do not make Jnvoy certified.

What we have not done yet

These are the gaps a careful buyer should know about before sending real data.

  • No certification. Jnvoy has no SOC 2 or ISO 27001 report of its own.
  • No independent penetration test. The tests are ours. We plan an independent test once there are paying customers.
  • One instance, one region. The service runs as a single instance with no automatic failover. A deploy or a crash can mean a short outage. Uptime is not guaranteed on the free and production plans, and is agreed in writing on Enterprise.
  • Detection misses some of what it should find. Every number, including the lower result on a set kept unseen, is on the accuracy page, and the limits are on the privacy page.
  • Data processing agreement. Ask for one before you send real data.

The threat model lists each way Jnvoy can go wrong that we could think of, what stops it today, the test that shows it, and what is left. It also lists what has no control yet, including that one person runs everything. It has not been reviewed by anyone outside the company.

This page describes how the software behaves today. It is not a contract or legal advice. If a statement here is wrong, tell us and we will fix the page.

Report a problem

If you find a security problem, write to j.nagaraj2109@gmail.com with the subject "Jnvoy security". We will acknowledge within two working days, and we will tell affected customers without undue delay if their data is involved. Please do not test against other customers' data. The rules for researchers are in SECURITY.md, and the same contact details are in our security.txt.

Jnvoy is operated by JNVOY LIMITED, a private company limited by shares, registered in England and Wales under company number 17536574.