LLM Gateway Guardrails: What to Enforce and How
What "guardrails" mean at the gateway layer
LLM gateway guardrails are the enforcement rules a proxy applies to every request and response between your application and a model provider — rate limits, spend caps, content filters, PII redaction, prompt injection checks, and audit logging. Instead of scattering this logic across every service that calls an LLM, you put it in one place: the gateway sits between your code and the provider's API, and every call passes through the same checks.
If you're searching for this term, you probably already have an LLM integration running and you're hitting one of two problems: either something went wrong (a runaway loop burned through your budget, a user extracted sensitive data, an output leaked something it shouldn't have) or you're building the integration now and want to avoid that outcome. This article covers the categories of guardrails worth implementing, where to put them, and what a minimal setup actually looks like.
The core categories of guardrails
Rate and volume limits
The most basic guardrail is stopping any single key, user, or workflow from making unbounded requests. This protects you from bugs (an agent stuck in a retry loop), abuse (a leaked API key), and cost surprises. At minimum you want:
- Requests per minute, per API key
- Tokens per day or per billing period
- Concurrent request caps for streaming endpoints
These are cheap to implement and catch the majority of real incidents, which tend to be operational mistakes rather than adversarial attacks.
Spend caps and budget alerts
Token-based pricing means cost scales with usage in ways that are hard to predict from request counts alone. A single long-context call with a large system prompt can cost as much as a hundred small ones. Guardrails here mean:
- Hard caps per key or per project (reject requests once a threshold is hit)
- Soft alerts before the cap (notify, don't block)
- Per-model cost tracking, since input/output token pricing differs by model
If you're managing this yourself, you need usage metadata returned on every response so you can attribute cost accurately. SubToAPI returns usage data with each call, which makes it possible to build spend dashboards without instrumenting every call site — see /docs/messages for the response format.
Content filtering — input and output
This is the guardrail people usually mean when they say "guardrails" in a safety context. It splits into two directions:
Input filtering catches things like prompt injection attempts, jailbreak patterns, or disallowed topics before the request reaches the model. This matters most when user-supplied text is embedded in a prompt — for example, content pulled from a webpage or a document that an agent is processing.
Output filtering checks what the model returns before it reaches the user or gets executed. This is critical when the model's output triggers an action (a tool call, a database write, a shell command) rather than just being displayed as text.
A gateway is a natural place to run these checks because you can apply them consistently regardless of which internal service made the call, rather than relying on every team to remember to add filtering logic.
PII detection and redaction
If your application handles user data — support tickets, medical notes, financial records — you often need to ensure PII doesn't end up in logs, in provider training data policies you haven't reviewed, or in outputs sent to the wrong recipient. Guardrails here typically:
- Scan inbound prompts for patterns (emails, SSNs, card numbers) and redact or reject
- Scan outbound responses for the same before returning them
- Log what was redacted for compliance review, without logging the raw sensitive value
Model and parameter restrictions
Not every team or key should be able to call every model or set every parameter. Guardrails at this level restrict:
- Which models a given API key can access
- Maximum
max_tokensper request (prevents accidentally expensive calls) - Whether streaming or tool use is permitted for a given caller
This is less about safety and more about cost control and blast-radius reduction — a junior service account shouldn't have the same latitude as your production backend.
Audit logging
Every guardrail above depends on having a record of what happened. At minimum, log:
- Request and response metadata (not necessarily full content, if that's sensitive)
- Which guardrail triggered, if any, and what action was taken
- Latency and token counts per call
This is what lets you actually answer "what happened" after an incident, rather than guessing.
Where to enforce guardrails: gateway vs. application code
You have two real options: build guardrail logic into every service that calls the model, or centralize it in a gateway that all traffic passes through.
Application-level enforcement is more flexible per use case but scales poorly — you end up reimplementing rate limiting, redaction, and logging in every service, and they drift out of sync over time.
Gateway-level enforcement means every call — regardless of which internal team or service made it — passes through the same checks. This is the more maintainable pattern once you have more than one service calling an LLM, and it's the reason API gateways exist as a category for this problem in the first place.
A minimal example
Here's what a guarded request looks like from the application's perspective — the guardrail logic (rate limiting, key scoping, usage tracking) lives entirely on the gateway side and is invisible to the caller:
curl https://api.subtoapi.app/v1/messages \
-H "Authorization: Bearer $SUBTOAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-4-5",
"max_tokens": 512,
"messages": [
{"role": "user", "content": "Summarize this support ticket."}
]
}'
The application code doesn't need to know about rate limits or spend caps — it just gets a response or a clear error if a limit is hit. That separation is the whole point of guardrails living at the gateway layer rather than in application logic.
SubToAPI handles the operational guardrails — per-key rate limits, usage metadata on every response, team seat management so you can scope access by role — as part of turning your existing Claude access into an HTTPS API. It doesn't do content moderation or PII scanning; those remain your application's responsibility, typically as a layer you run before or after the gateway call. See /docs/quickstart to get set up and /pricing for plan details.
questions
Do I need custom guardrail code, or can a gateway handle everything? A gateway can handle operational guardrails — rate limits, spend caps, key scoping, audit logs — out of the box. Content-specific guardrails like PII redaction or jailbreak detection usually require logic tailored to your domain, run either inside the gateway as middleware or as a separate step in your application.
What's the difference between guardrails and content moderation? Content moderation is one category of guardrail focused specifically on unsafe or policy-violating content. Guardrails is the broader term covering cost limits, rate limits, access scoping, and logging in addition to content checks.
Should guardrails run on input, output, or both? Both, for anything user-facing. Input checks stop bad prompts before they cost you a model call; output checks catch cases where the model itself produces something problematic, which input filtering alone can't prevent.