Skip to main content
Guardrails run at the Gateway layer โ€” provider-agnostic, between your app and any upstream LLM.

Supported Endpoints

Embeddings have no model-generated output to evaluate, so only input_guardrails apply. See Guardrails for Embeddings.

Endpoints That Donโ€™t Support Guardrails

Guardrails are only evaluated on LLM inference endpoints where Portkey can extract a text input and/or text output. The following Inference API endpoints do not run guardrails:
  • Assistants API (all endpoints): /v1/assistants/*, /v1/threads/*
  • Audio (all endpoints): /v1/audio/*
  • Images (all endpoints): /v1/images/*
  • Files (all endpoints): /v1/files/*
  • Batch (all endpoints): /v1/batches/*
  • Fine-tuning (all endpoints): /v1/fine_tuning/*
  • Moderations: /v1/moderations
  • Models: /v1/models
  • Prompt rendering (no model call): /v1/prompts/{promptId}/render
  • Response retrieval (no model call): GET /v1/responses/* (guardrails apply only to POST /v1/responses)

Sync vs. Async

Use async to observe and log without blocking. Use sync when the guardrail result must gate the request.
With async=false, Portkey returns 246 (failed, but allowed) or 446 (failed, denied) instead of the standard provider status codes. See Guardrail behavior on the gateway.

Streaming

With input guardrails on a streaming request: if the check passes, the stream proceeds normally. If it fails with deny=true, the stream is blocked with 446 before any tokens are sent. To receive hook_results inside streaming chunks, set:
hook_results appear in the first chunk for /chat/completions, or as a separate hook_results event for /messages.
For Anthropic /messages streaming, hook_results arenโ€™t accessible via the Anthropic SDK. Use cURL or raw HTTP requests.
See Streaming Hook Results for SDK examples.

What Gets Evaluated

Text

Input guardrails evaluate the last message in the request. Output guardrails evaluate the generated text in the response.

Images

Guardrails are text-only. Image inputs (base64 or URLs in multimodal messages) are not evaluated. Only the text portions of a message are passed to checks.

Tool Calls

Tool call arguments (JSON) are treated as text โ€” checks like Regex Match, Contains, and LLM-based detectors (e.g., Prompt Injection) all process this content.

Quick Reference


Guardrails Overview

Create guardrails, configure actions, attach to requests

Guardrails for Embeddings

Guardrails on embedding workflows

List of Guardrail Checks

All built-in and partner checks

Raw Guardrails in JSON

Define guardrails directly in code
Last modified on April 8, 2026