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

ProviderEndpointExample Models
OpenAI/chat/completionsGPT-4o, GPT-4o-mini, o1, o3, etc.
Anthropic/v1/messagesClaude 4 Sonnet, Claude 4 Opus, Claude 4 Haiku, etc.
xAI (Grok)/chat/completionsGrok-2, Grok-3, etc.
DeepSeek/chat/completionsDeepSeek-V3, DeepSeek-R1, etc.
Mistral/chat/completionsMistral Large, Medium, Small, etc.
Google Gemini/chat/completionsGemini 2.5 Pro, Flash, etc.
Groq/chat/completionsLlama, Mixtral, Gemma, etc.
Together AI/chat/completionsLlama, Qwen, DeepSeek, etc.
Fireworks AI/chat/completionsLlama, 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:

  1. 1Reads the API key from your request header
  2. 2Identifies your account and provider from the registered key
  3. 3Sanitizes the request (detects and tokenizes PII)
  4. 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)

python
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

python
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

python
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:

python
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.

python
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