A transparent reverse proxy that scans every request to OpenAI, Anthropic, Mistral, Google Gemini, and OpenRouter for prompt injections, PII leaks, canary exfiltration, intent analysis, and secret exposure. Agent-native. One line of code. 16ms overhead.
# Before client = OpenAI(api_key="sk-...") # After — one line changed client = OpenAI( api_key="sk-...", base_url="https://app.senthex.com/v1", default_headers={"X-Senthex-Key": "your-key"} )
Senthex sits between your application and the LLM API. Every request passes through 24 shield modules: heuristic injection detection, Presidio PII scanning, intent classification, bypass detection, data classification, budget enforcement, and more. Responses are scanned for secret leaks, canary exfiltration, toxicity, and dangerous output patterns.
SSE streaming is fully transparent for both OpenAI (data: {...}) and Anthropic (event: ...\ndata: {...}) formats. Shield analysis runs inline, chunk-by-chunk. Logging is fire-and-forget via asyncio.create_task.
Official Python SDK — one line of code to secure your LLM API calls.
from senthex import SenthexOpenAI client = SenthexOpenAI( senthex_key="snx-...", api_key="sk-...", ) # That's it. Same API as OpenAI.
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[...]
)
print(resp.senthex.shield_status)
# "pass"
print(resp.senthex.injection_score)
# 0.02
print(resp.senthex.trust_level)
# "normal"
print(resp.senthex.budget_remaining)
# 18.66
from senthex import ( InjectionBlocked, BudgetExceeded, ) try: resp = client.chat.completions.create(...) except InjectionBlocked as e: print(e.score) # 0.95 print(e.patterns) # ["DAN", "jailbreak"] except BudgetExceeded as e: print(e.limit) # 20.0
24 shields, all heuristic-based — no LLM in the detection loop. Fast enough to stay under the 16ms budget, expressive enough to catch real attacks. Every detection is configurable per project.
The first LLM firewall designed for autonomous agents, not just human developers. Agents can read, react, and configure — programmatically, without human intervention.
from senthex import SenthexClient client = SenthexClient(senthex_key="sx_...") # Agent monitors its own security posture usage = client.usage() if usage.budget_remaining_eur < 1.0: agent.reduce_activity() # React to shield blocks — machine-readable resp = client.chat(messages=messages) if resp.shield_status == "blocked": agent.handle_block(resp.block_reason) # Canary integrity — know if your prompt leaked if resp.canary_triggered: agent.alert_and_rotate_prompt() # Check trust level — adapt if flagged as bypass if resp.trust_level == "reduced": agent.reset_session()
Traditional firewalls have fixed thresholds. Attackers find the edge and stay just below. Senthex moves the edge. Every suspicious request makes the next one harder to pass.
Every detection is heuristic-based. No LLM in the loop — too slow, too recursive. Pattern matching, scoring, and NER. Configurable thresholds and actions per project.
Not all risks are solvable at the proxy layer. Here's an honest breakdown of what Senthex covers, what's partial, and what requires application-level controls.
| Risk | Status | Notes |
|---|---|---|
| LLM01 Prompt Injection | Protected | Heuristic detection + multi-turn tracking + intent classification + bypass detection |
| LLM02 Sensitive Info Disclosure | Protected | Presidio PII + secrets regex + financial context detection + data classification |
| LLM03 Supply Chain | — N/A | Model provenance — not addressable at proxy level |
| LLM04 Data Poisoning | — N/A | Training-time concern — not addressable at proxy level |
| LLM05 Improper Output Handling | Protected | XSS, SQLi, command injection, SSRF, path traversal scanner + toxicity scoring |
| LLM06 Excessive Agency | Partial | Tool call monitoring with allowlist + budget circuit breaker + rate limiting |
| LLM07 System Prompt Leakage | Protected | Canary tokens + n-gram overlap + prompt integrity hash + automatic hardening |
| LLM08 Vector/Embedding Weaknesses | — N/A | RAG pipeline concern — not addressable at proxy level |
| LLM09 Misinformation | — N/A | Output quality — not addressable at proxy level |
| LLM10 Unbounded Consumption | Protected | Redis sliding window rate limiter + budget circuit breaker + per-agent cost tracking |
Change one line. All shields apply automatically.
from openai import OpenAI client = OpenAI( api_key="sk-...", base_url="https://app.senthex.com/v1", default_headers={"X-Senthex-Key": "snx-..."} ) response = client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": "Hello"}] )
import anthropic client = anthropic.Anthropic( api_key="sk-ant-...", base_url="https://app.senthex.com", default_headers={"X-Senthex-Key": "snx-..."} ) message = client.messages.create( model="claude-opus-4-6", max_tokens=1024, messages=[{"role": "user", "content": "Hello"}] )
from openai import OpenAI client = OpenAI( api_key="...", base_url="https://app.senthex.com/v1", default_headers={ "X-Senthex-Key": "snx-...", "X-Senthex-Provider": "mistral" } ) response = client.chat.completions.create( model="mistral-large-latest", messages=[{"role": "user", "content": "Hello"}] )
from openai import OpenAI client = OpenAI( api_key="AIza...", base_url="https://app.senthex.com/v1", default_headers={ "X-Senthex-Key": "snx-...", "X-Senthex-Provider": "google" } ) response = client.chat.completions.create( model="gemini-2.0-flash", messages=[{"role": "user", "content": "Hello"}] )
from openai import OpenAI client = OpenAI( api_key="sk-or-...", base_url="https://app.senthex.com/v1", default_headers={ "X-Senthex-Key": "snx-...", "X-Senthex-Provider": "openrouter" } ) response = client.chat.completions.create( model="anthropic/claude-opus-4-6", messages=[{"role": "user", "content": "Hello"}] )
curl https://app.senthex.com/v1/chat/completions \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-..." \ -H "X-Senthex-Key: snx-..." \ -d '{ "model": "gpt-4o", "messages": [{"role": "user", "content": "Hello"}] }'
| Time | Status | Provider | Injection score | PII detected | Trust level | Latency |
|---|---|---|---|---|---|---|
| 14:32:07 | pass | openai | 0.04 | — | normal | 16ms |
| 14:31:55 | warn | anthropic | 0.71 | reduced | 22ms | |
| 14:31:12 | block | openai | 0.94 | — | blocked | 8ms |
Every request is logged with metadata only by default — timestamps, scores, PII types detected, trust level, latency. Full request/response bodies are never stored.
Currently in free beta. Request access below — no credit card required.
Senthex is in free beta. Looking for developers and teams who use LLM APIs in production to test it and provide feedback. What works, what's missing, what would make this worth paying for.
Now with 24 shields: multi-turn tracking, bypass detection with trust levels, intent classification, toxicity scoring, data classification, automatic prompt hardening, file upload scanning, and more.
We'll send you a project key within 24h. Or email directly at contact@senthex.com