Skip to content
GitHubOpen source
Product
Docs
Solutions
IndustriesAll industries
CompareCompare all AI data-leak tools
Benchmarks
GitHubApache-2.0

Supported providers and hosts

In proxy mode, Shadow terminates TLS only for these hosts. Every other host is tunnelled without decryption. * matches any run of characters; matching is case-insensitive and exact otherwise (openai.azure.com.evil.com does not match *.openai.azure.com).

ProviderHost pattern
OpenAIapi.openai.com
Anthropicapi.anthropic.com
OpenRouteropenrouter.ai
Google Gemini APIgenerativelanguage.googleapis.com
Google Vertex AIaiplatform.googleapis.com, *-aiplatform.googleapis.com
Mistralapi.mistral.ai
Groqapi.groq.com
Together AIapi.together.xyz, api.together.ai
DeepSeekapi.deepseek.com
xAIapi.x.ai
Azure OpenAI*.openai.azure.com
Azure AI services*.services.ai.azure.com, *.cognitiveservices.azure.com
AWS Bedrock runtimebedrock-runtime.*.amazonaws.com
Cohereapi.cohere.com, api.cohere.ai
Perplexityapi.perplexity.ai
Fireworks AIapi.fireworks.ai
Cerebrasapi.cerebras.ai
Voyage AIapi.voyageai.com

Add hosts with [proxy] extra_hosts and exclude hosts with bypass_hosts. shadow hosts shows the effective list. The PAC file at /proxy.pac is generated from the same list.

RouteUpstream
openaihttps://api.openai.com
anthropichttps://api.anthropic.com
openrouterhttps://openrouter.ai/api
geminihttps://generativelanguage.googleapis.com
googlehttps://generativelanguage.googleapis.com
mistralhttps://api.mistral.ai
groqhttps://api.groq.com/openai
togetherhttps://api.together.xyz
deepseekhttps://api.deepseek.com
xaihttps://api.x.ai
coherehttps://api.cohere.com
perplexityhttps://api.perplexity.ai
fireworkshttps://api.fireworks.ai/inference
cerebrashttps://api.cerebras.ai

Azure OpenAI, Bedrock, Vertex AI and self-hosted endpoints have per-account URLs, so add them under [proxy.routes]. See Gateway mode.

Request bodies in any JSON shape are masked. These formats get additional handling:

FormatRequestStreaming restore with split-fake reassemblyIdentifier scrubbing
OpenAI Chat Completions✓✓ (content and tool-call arguments)user, safety_identifier
OpenAI Responses✓✓user, safety_identifier
Anthropic Messages✓✓ (text, thinking and tool-input JSON deltas)metadata.user_id
Google Gemini generateContent / streamGenerateContent✓✓
Cohere Chat✓✓
Ollama-style NDJSON streams✓✓
Other OpenAI-compatible APIs (Groq, Mistral, Together, DeepSeek, xAI, OpenRouter, Fireworks, Cerebras, Perplexity)✓✓ (OpenAI format)user

Compressed (gzip, deflate) request bodies are decoded before masking. File uploads are masked for OpenAI, Anthropic and Gemini payload shapes.

Why
WebSocket and Realtime APIsNot parsed; traffic is passed through
gRPCNot parsed
AWS SigV4-signed requests (Bedrock with IAM)Modifying the body breaks the signature. Forwarded unmasked with a warning. Bedrock API keys (bearer) are masked normally
Apps with certificate pinningThey reject the local CA in proxy mode. Use gateway mode