Skip to content

Private AI, hosted in the EU.

For security teams, lawyers, accountants and consultants.

We don't log your prompts or train on them.

api.nullrouter.dev/v1 · From €0.25 per million input tokens, excl. VAT

Client data, processed only in the EU.

What do you do?

Pentest notes, client code and incident logs are often under NDA. With NullRouter they're processed on GPU servers we own in Cyprus and never sent to a model's maker or a cloud AI service.

  • Pentest reports

    Turn your notes and tool output into clear findings, risk explanations and summaries your clients can read.

  • Code review

    Look for bugs and security flaws in code, explain code you don't know, and draft fixes.

  • Logs and alerts

    Summarize logs, sort alerts by what needs a look first, and draft incident timelines.

  • Screenshots

    Both models read images: send a screenshot of a console, an error or a web page and ask about it.

Start in your code

  1. Get an API key below.
  2. Set the base URL to https://api.nullrouter.dev/v1 in the OpenAI SDK, or in a tool that takes an OpenAI-compatible address.
  3. Use your key and a model name: glm-5.3-flash or deepseek-v4.1-flash. See the code

Check that a tool really sends to the address you set: one that ignores it sends your key and prompts to OpenAI. No code? Use a chat app.

Security testing only on systems you own or have written permission to test.

Coming soon: models without refusals

Sending other people's personal data? Email us first, and we agree a Data Processing Agreement (DPA) with you.

Built to keep your data private.

What you get with every API key.

Keep your code.

Already use OpenAI's Chat Completions API? Change three settings — the API address, your key and the model name — and most of your code stays the same.

Base URL
https://api.nullrouter.dev/v1
API key
sk-…
Model
glm-5.3-flash

Locked until it reaches us.

Your request stays encrypted from your app to our own server in Cyprus. The relay in Finland that passes it on holds no key to unlock it.

On our own GPUs.

The models run on GPU servers we own, in Cyprus (EU). Your prompts never go to the model's maker or to a cloud AI service.

Caps, not surprises.

Your prepaid credit is your limit: when it's used up, new requests stop until you top up. No subscription.

Unlocked only on our own servers.

From your app to our GPUs in five steps. Your request stays encrypted until it reaches our own server in Cyprus.

  1. Your app

    Sends the request over HTTPS (encrypted).

  2. Relay · Finland (EU)

    Passes the encrypted request on. Holds no key to unlock it.

  3. Private tunnel

    Adds a second layer of encryption on the way to Cyprus.

  4. Our gateway · Cyprus (EU)

    Unlocks the request in memory, checks your key and limits, and picks the model.

  5. Our GPU servers · Cyprus (EU)

    Run the model in memory and send the answer back.

Your prompt and the answer are processed in memory and not saved. There are exceptions; see “Do you keep my prompts?” below.

Technical details
  • TLS (HTTPS) runs from your app to our gateway in Cyprus. The private key for our certificate is on the gateway; the relay holds no certificate or key for api.nullrouter.dev.
  • The relay in Helsinki (HAProxy in TCP passthrough) reads only the server name in the TLS handshake and forwards the encrypted bytes to the gateway through a WireGuard tunnel.
  • At the gateway, Caddy ends TLS and LiteLLM checks your key, limits and budget, then routes the request by model name to vLLM on our GPU servers.
  • The GPU servers may keep prefix-cache blocks in GPU memory after a request, with no fixed time limit. A per-key salt keeps them usable only by requests with the same API key.
  • On the gateway, swap and core dumps are off and the system journal is kept in RAM. The GPU servers still use disk swap and a crash reporter, so parts of a request could reach their disks.
  • We keep per-request usage records (key hash, model, token counts, cost and timing; never content) for 90 days.
  • Our release test sends a unique string through every path, including errors, aborted streams and images, then searches the gateway's system journal, container logs, database dump, raw database files and write-ahead log, /tmp, /dev/shm and /var/log, and the GPU servers' model-server logs, journal and /tmp. It must not be found.

We test that your prompts aren't saved.

We send a unique test phrase through the live service, then search our servers' logs, databases and temporary files for it. It must not turn up anywhere. We ran this test before launch and repeat it after upgrades.

Result: not found in any of them

No response cacheNo training on your dataNot read by staff unless you askNo prompts in our database

Two open models. One API.

Each model runs on its own GPU servers. Use either one through the same API.

glm-5.3-flash

Text + images

Our newest model, for reasoning, code review and report writing. It can also read images, such as screenshots.

  • Text and images: up to two images per request, sent inside the request

€0.25 in · €1.00 out per 1M tokens

deepseek-v4.1-flash

Text + images

Fast, general-purpose model for summaries, triage and code. It can also read images, such as screenshots.

  • Text and images: one image per request, sent inside the request

€0.30 in · €1.20 out per 1M tokens

Models without refusals

Coming soon

Standard open models sometimes refuse security questions. We'll add open models with those refusals removed (often called abliterated), for authorized testing, when we add GPU servers.

Tell me when

Prices exclude VAT.

A token is a small piece of text, often part of a word. You pay for the tokens you send (in) and the tokens the model writes back (out).

When we upgrade a model under the same name, your code keeps working; its answers may change. We may also replace a model with a new one under a new name.

Use the SDK you already have.

Set the API address, your key and a model name. Keep the key in an environment variable, NULLROUTER_API_KEY, so it stays out of your code.

Streaming, tool calling and images work too, so many tools and agents built on OpenAI's Chat Completions API work with NullRouter. Check that a tool really sends to the address you set: one that ignores it sends your key and prompts to OpenAI.

import os

from openai import OpenAI

client = OpenAI(
    base_url="https://api.nullrouter.dev/v1",
    api_key=os.environ["NULLROUTER_API_KEY"],
)

response = client.chat.completions.create(
    model="glm-5.3-flash",
    messages=[
        {"role": "user", "content": "Summarize these scan results: ..."},
    ],
)
print(response.choices[0].message.content)

Pay as you go. In euros.

Pick an amount and see roughly what it buys. Buy prepaid credit and top up any time; when it runs out, new requests stop. No subscription.

€50
€5€1,000
What would you use it for?

One code review: a file of about 700 lines in, the findings out, roughly 8,000 tokens in and 1,500 out.

€50 buys about

14,000*

code reviews with glm-5.3-flash

  • or about 11,000 with deepseek-v4.1-flash

From €0.25 per million input tokens · €1.00 per million output tokens*

Prepaid: pay once, top up any time.

Get an API key

* Starting prices, excl. VAT. Rates depend on the model and may change with demand.

Straight answers.

Do you keep my prompts?

No. We process your prompts and the answers in memory and don't save them. For billing we keep usage records with no content: which key, which model, how many tokens, the cost and the timing. Records of single requests are deleted after 90 days; daily totals are kept longer. There are exceptions: to speed up repeated prompts, our GPU servers may keep a cache made from your prompt in their memory, which only your API key can use, and they may also keep processed images in memory for a while; and those servers can still write to disk (swap, crash reports and, rarely, error logs), so parts of a prompt could end up there. Reviewing that is on our roadmap.

Can I use it for offensive security work?

Yes, for authorized work: systems you own or have written permission to test. Today's two models are standard open models, so they may refuse some offensive requests. We'll add models with those refusals removed when we add GPU servers; email hello@nullrouter.dev if you want to hear when.

Do you train on my data?

No. We never use your prompts or the answers to train or improve any AI model. Our staff don't read them either, unless you ask us in writing to look into a problem.

Does the model's maker see my data?

No. We run open models on our own GPU servers in Cyprus; their makers receive no data from us. This isn't DeepSeek's app or API, even when you use deepseek-v4.1-flash.

Where are your servers?

Your request first reaches a relay server in Helsinki, Finland, rented from Hetzner, which passes it on still encrypted. It's unlocked and answered on our own servers in Cyprus. Both are in the EU.

Will it work with my existing code?

If your code uses OpenAI's Chat Completions API, yes. Set the base URL to https://api.nullrouter.dev/v1, use your NullRouter key and one of our model names; most of the rest stays the same. Embeddings, image generation, audio, file uploads and the Responses API aren't available.

Can I use it without writing code?

Yes, from a desktop chat app that lets you add an "OpenAI-compatible" provider. Enter the address https://api.nullrouter.dev/v1, your API key and a model name: glm-5.3-flash or deepseek-v4.1-flash. We take text and images, not files: an app that turns a PDF into text on your computer works; one that sends the PDF itself won't. A request can carry two images with glm-5.3-flash and one with deepseek-v4.1-flash. Chat apps usually resend a chat's earlier messages, images included, with each question: we then leave the oldest images out, so the model sees only the newest, and once a chat's images add up to about 12 MB, its requests fail. Start a new chat for each new document. Pick an app whose own documentation says it keeps your chats on your computer. Leave cloud sync, web search, plugins and online embedding models off: they can send your text to other companies. Then protect that computer like client files: disk encryption, a screen lock, backups. We don't make these apps or vouch for them. Firms with their own IT can run a chat server themselves instead: email hello@nullrouter.dev.

Can I send client files or personal data?

As text or images, yes; we don't take file uploads. If you're a business sending other people's personal data, email hello@nullrouter.dev first, and we agree a Data Processing Agreement (DPA) with you. We then process it for you as your processor, only to answer your requests: it's never used for training, and our staff don't read it unless you ask us in writing. Whether you may send a client's material to an AI service at all is for your engagement terms and professional rules to say.

What's a token?

A small piece of text, often part of a word. You pay for the tokens you send (input) and the tokens the model writes back (output).

Can I send images?

Yes, with both models: up to two images per request with glm-5.3-flash, one with deepseek-v4.1-flash, sent inside the request (PNG, JPEG, WebP or GIF). Each image can be up to 10 MB and 16 megapixels (for example 4096 x 4096), and at most 8192 pixels on a side. All the images in one request, including earlier ones a chat app resends, can total about 12 MB: scale large photos and scans down first. We don't download images from links.

What if a model is down?

Each model runs on its own GPU servers. If one goes down, requests to that model get an error until it's back; the other model keeps working, and you can switch to it if your key includes it.

Can I rely on the answers?

Not without checking them. The models can be wrong, incomplete or out of date, NullRouter has no web search and no legal or tax database, and answers are not professional advice. Check every answer, citation and figure before you use it.

How do I get access?

Buy prepaid credit below: your API key shows on the next page, usually within a minute. Prefer to talk first? Email hello@nullrouter.dev.

Can I get an invoice?

Yes. Tick "I need an invoice" on the form before you pay; Stripe's page then asks for your billing address and, for a business, its VAT number. With a valid VAT number from another EU country, no VAT is charged: your business accounts for it (reverse charge).

Ready when you are.

Can't use the checkout, or want to talk first? Contact us.

Works with the OpenAI SDKs · api.nullrouter.dev/v1

Still deciding? Talk to us.

Tell us about your team and ask us your security questions. Already a customer? Email us about your key or an invoice.

hello@nullrouter.dev