RedRouter

Blog

RedRouter vs OpenRouter: when to use each for security work

Railway tracks diverge across an empty switching yard in Denver, overlaid with red pixel blocks and the title An OpenRouter alternative for security work
Cover based on a photo by National Park Service / Historic American Engineering Record; Library of Congress, HAER COLO,16-DENV,55-1, Public domain (National Park Service)

If you already pay OpenRouter per token, keep it. It has far more models, and the stock versions of the models RedRouter builds on cost less there. RedRouter is a narrow addition: four open-weight models modified to reduce refusals, one key, prepaid credit. Switching a request over means changing base_url and the model ID.

Facts about OpenRouter below come from its public models API, read on October 27, 2026. Prices change often, so check both sites before you decide.

Side by side

OpenRouterRedRouter
Models463 listed in its models API4, listed below
Stock GLM 5.3, Qwen 3.8 27B, DeepSeek V4.1 FlashYesNo, only modified versions
Modified low-refusal versions of those modelsNot found in its models APIYes, all four
API formatsChat Completions, Anthropic Messages and Responses (docs)OpenAI-compatible Chat Completions and Anthropic Messages
Model fallbackOptional models list tried in order; provider fallback on by default (allow_fallbacks) (docs)None. Each request stays on the model you named
BillingPrepaid credit by card, AliPay or USDC, with a fee on credit purchases (FAQ)Prepaid credit by card or USDC, or a monthly plan
Request content retentionPrompt logging is opt-in; a zdr flag routes only to zero-retention endpoints (docs)Encrypted, up to 30 days by default; none with Zero Data Retention (+20%)

OpenRouter rows read from its documentation on October 27, 2026.

Prices for the same base models

OpenRouter list prices, USD per million tokens, from its models API on October 27, 2026:

OpenRouter modelInputOutputContext
z-ai/glm-5.3-flash$0.0345$0.08231,048,576
z-ai/glm-5.3$0.0699$1.401,048,576
qwen/qwen3.8-27b$0.20$2.501,000,000
deepseek/deepseek-v4.1-flash-1017$0.15$0.601,048,576

RedRouter's current prices for its modified versions:

ModelIDInput / 1MCached input / 1MOutput / 1M
GLM 5.3 Flash RRglm-5.3-flash-rr$0.20$0.08$0.80
GLM 5.3 RR (experimental)glm-5.3-rr$1.40$0.35$2.50
Qwen 3.8 27B RRqwen3.8-27b-rr$0.55$0.08$2.40
DeepSeek V4.1 Flash RRdeepseek-v4.1-flash-rr$1.15$0.115$2.30
DeepSeek V4.1 Flash (1017)deepseek-v4.1-flash-1017$0.15$0.005$0.57
DeepSeek V4.1 Flash (0910)deepseek-v4.1-flash-0910$0.04$0.008$0.15
GLM 5.3 Flashglm-5.3-flash$0.06$0.035$0.23
GLM 5.3glm-5.3$0.08$0.08$1.60
Qwen 3.8 27Bqwen3.8-27b$0.04$0.005$0.35

The stock models are cheaper on OpenRouter, in some cases by several times. RedRouter's price covers a different checkpoint, not the same model.

Who should not switch

RedRouter is for authorized security work: pentesters, red teams, and the people building security tools and agents, who hit refusals from mainstream models on tasks they are allowed to do. If that is not you, OpenRouter's stock models are cheaper and broader.

Using both

Diagram: one application with two OpenAI SDK clients; OpenRouter handles most requests and RedRouter handles requests that need a modified low-refusal model
Keep OpenRouter as the default and send only some requests to RedRouter. Image: RedRouter, Original

Keep OpenRouter as your default and call RedRouter only for the requests that need a modified model. With the OpenAI SDK that is two clients:

import os
from openai import OpenAI

openrouter = OpenAI(base_url="https://openrouter.ai/api/v1", api_key=os.environ["OPENROUTER_API_KEY"])
redrouter = OpenAI(base_url="https://redrouter.org/v1", api_key=os.environ["REDROUTER_API_KEY"])

response = redrouter.chat.completions.create(
    model="glm-5.3-flash-rr",
    max_tokens=4096,
    messages=[{"role": "user", "content": "Summarize the findings in this scan report: 22/tcp open ssh OpenSSH 8.2p1; 80/tcp open http nginx 1.18.0; 8080/tcp open http-proxy Jenkins 2.346"}],
)
print(response.choices[0].message.content)

RedRouter rejects request fields it does not support with a 400, instead of ignoring them. If code written for OpenRouter sends OpenRouter-specific fields such as provider or models, remove them for RedRouter requests.

Run on October 27, 2026. the RedRouter call returned a scan summary (trimmed):

# Scan Report Summary

**Open Ports: 3**

| Port | Service | Product | Version |
|------|---------|---------|---------|
| 22 | SSH | OpenSSH | 8.2p1 |
| 80 | HTTP | nginx | 1.18.0 |
| 8080 | HTTP Proxy | Jenkins | 2.346 |

## Key Observations

- **SSH (22)** — OpenSSH 8.2p1 is running, typical for Ubuntu 20.04 LTS. This version is relatively old (April 2020) and has some known CVEs; consider updating.
- **HTTP (80)** — nginx 1.18.0 serves web traffic. This is also a 2020-era release and is past end of mainline support.

[Response trimmed here.]

Constructing the OpenRouter client needs OPENROUTER_API_KEY set, but it makes no request until you call it.

Moving a workload over

  1. Create a RedRouter key and add credit (quickstart).
  2. Change base_url to https://redrouter.org/v1 and the API key.
  3. Change the model ID to one of the four above.
  4. Remove OpenRouter-only request fields.

RedRouter's terms apply to every request, including the ban on testing systems you do not own or are not authorized to test.