Supported Providers
NoPII works with 9 LLM providers out of the box. All OpenAI-compatible providers route through the same /chat/completions endpoint. Anthropic uses its own /v1/messages endpoint.
Providers
| Provider | Endpoint | Example Models |
|---|---|---|
| OpenAI | /chat/completions | GPT-4o, GPT-4o-mini, o1, o3, etc. |
| Anthropic | /v1/messages | Claude 4 Sonnet, Claude 4 Opus, Claude 4 Haiku, etc. |
| xAI (Grok) | /chat/completions | Grok-2, Grok-3, etc. |
| DeepSeek | /chat/completions | DeepSeek-V3, DeepSeek-R1, etc. |
| Mistral | /chat/completions | Mistral Large, Medium, Small, etc. |
| Google Gemini | /chat/completions | Gemini 2.5 Pro, Flash, etc. |
| Groq | /chat/completions | Llama, Mixtral, Gemma, etc. |
| Together AI | /chat/completions | Llama, Qwen, DeepSeek, etc. |
| Fireworks AI | /chat/completions | Llama, Mixtral, Qwen, etc. |
How provider routing works
NoPII determines which provider to use based on the API key in your request. When you register a key in the admin console, you select the provider. NoPII then:
- 1Reads the API key from your request header
- 2Identifies your account and provider from the registered key
- 3Sanitizes the request (detects and tokenizes PII)
- 4Forwards the sanitized request to the provider's API with your original key
Your API key is never stored - it's passed through to your provider on every request.
OpenAI-compatible providers
Eight of the nine supported providers use the OpenAI-compatible chat completions format. The integration is identical regardless of provider - just change your base URL and use your provider's API key:
xAI (Grok)
from openai import OpenAI
client = OpenAI(
base_url="https://api.nopii.co",
api_key="xai-your-key", # xAI key registered in NoPII
)
response = client.chat.completions.create(
model="grok-3-latest",
messages=[{"role": "user", "content": "Summarize the case for John Smith"}]
)DeepSeek
client = OpenAI(
base_url="https://api.nopii.co",
api_key="sk-your-deepseek-key",
)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[{"role": "user", "content": "Analyze the records for Jane Doe"}]
)Groq
client = OpenAI(
base_url="https://api.nopii.co",
api_key="gsk_your-groq-key",
)
response = client.chat.completions.create(
model="llama-3.3-70b-versatile",
messages=[{"role": "user", "content": "Review patient records for ID 123-45-6789"}]
)Anthropic
Anthropic uses its own Messages API format. NoPII provides a dedicated /v1/messages endpoint for Anthropic requests:
from anthropic import Anthropic
client = Anthropic(
base_url="https://api.nopii.co",
api_key="sk-ant-your-key",
)
message = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
messages=[{"role": "user", "content": "Draft a letter for Jane Doe at 123 Main St"}]
)Using multiple providers
You can register API keys from multiple providers under the same account. Each key is independently mapped, so you can use different providers for different use cases while maintaining a unified PII protection layer and audit trail.
from openai import OpenAI
from anthropic import Anthropic
# Both point to NoPII - PII protection is consistent across providers
openai_client = OpenAI(base_url="https://api.nopii.co", api_key="sk-openai-key")
anthropic_client = Anthropic(base_url="https://api.nopii.co", api_key="sk-ant-key")
# Same PII protection, same audit log
openai_response = openai_client.chat.completions.create(model="gpt-4o", messages=[...])
anthropic_response = anthropic_client.messages.create(model="claude-sonnet-4-20250514", ...)Related
- Quick Start - Get integrated in under 5 minutes
- API Reference - Full endpoint documentation