One Heroku URL. OpenAI-compatible API in. Salesforce-governed inference out. Every call routes through the Einstein Trust Layer — PII masking, toxicity scoring, full audit trail — on top of 33 frontier models from Anthropic, OpenAI, Google, Amazon, and NVIDIA. Now native-Anthropic compatible — Claude Code runs on it.
The Einstein Trust Layer is the most boring and the most important thing Salesforce ships. It's the reason Fortune 500 enterprises trust Agentforce with their data: PII masking before the prompt ever leaves Salesforce, toxicity scoring on the response, full audit trail in Setup, and zero LLM-vendor data retention.
Until now, all that goodness was locked inside Salesforce — only Apex, Prompt Builder, and Agentforce could use it. This proxy unlocks it for everything else.
PII masking, toxicity scoring, audit trail in Salesforce Setup. Every call. No flag to flip.
Drop-in replacement. Change your baseUrl, you're done. Streaming + non-streaming both work.
Claude Opus 4.7, GPT-5.5, Gemini 3.1 Pro, Nova Pro, Nemotron — all behind the same alias system.
Inference burns Flex Credits or Einstein Requests in your org — not your personal LLM bill. Audit it, allocate it, expense it.
Send tools=[...] in the request body — the proxy synthesizes OpenAI-style tool calls on top of Salesforce's Models API. Multi-call, parallel, round-trip ready.
Same URL now speaks POST /v1/messages — the Anthropic Messages API. Claude Code runs on it. One ANTHROPIC_BASE_URL env var and your IDE bills Salesforce.
Sends an OpenAI Chat Completions request to the proxy URL.
Translates to Salesforce Models API shape, attaches a JWT from your Connected App, forwards to api.salesforce.com.
Masks PII, sends the sanitized prompt to the underlying LLM (Bedrock, OpenAI, Vertex), scores the response, writes audit log.
Proxy converts back to chat.completion shape. Your client doesn't know it just talked to Salesforce.
from openai import OpenAI
client = OpenAI(
base_url="https://bugs-sf-proxy-449fd4c8e295.herokuapp.com/v1",
api_key="not-required", # proxy uses your SF Connected App creds
)
resp = client.chat.completions.create(
model="claude-opus-4-7", # or gpt-5.5, gemini-3.1-pro, nova-pro, …
messages=[{"role": "user", "content": "What\'s the weather in Montreal?"}],
tools=[{ # 🆕 v15 — tool calling synthesized on top of SF
"type": "function",
"function": {
"name": "get_weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
},
}],
)
print(resp.choices[0].message.tool_calls)
# → [ChatCompletionMessageToolCall(function=Function(name=\'get_weather\', arguments=\'{"city":"Montreal"}\'), …)]
# → All synthesized + Trust-audited. ✅
Every model below is exposed under a friendly alias and tested live through the proxy as of May 6, 2026. Pick whatever fits the job.
claude-opus-4-7 · beta · defaultclaude-opus-4-6 · betaclaude-opus-4-5claude-sonnet-4-6claude-sonnet-4-5claude-sonnet-4claude-haiku-4-5claude-3-7-sonnetgpt-5.5 · betagpt-5.4 · gpt-5.4-minigpt-5.2 · gpt-5.1gpt-5 · gpt-5-minigpt-4.1 · gpt-4.1-minigpt-4o · gpt-4o-minio3 · o4-minigemini-3.1-pro · beta · 1M ctxgemini-3.1-flash-lite · betagemini-3-flashgemini-2.5-progemini-2.5-flashgemini-2.5-flash-litegemini-2.0-flashgemini-2.0-flash-litenova-pro · 300K ctxnova-litenemotron-nano-3 · betaBrowse the catalog live: /models · raw JSON: GET /v1/models
This is literally what powers Bugs. OpenClaw points baseUrl at the proxy. Every tool call, every reply, governed by Trust Layer. A robot dog. Running on Salesforce. Yes really.
Set ANTHROPIC_BASE_URL to the proxy. Anthropic-native /v1/messages shipped in v20 — streaming, tool use, multi-turn, all routed through Trust Layer. Cursor + Aider + any Anthropic SDK client work the same way. Recipe ↓
Anything that speaks OpenAI Chat Completions works. Internal scripts, FastAPI apps, Heroku microservices — all governed by your enterprise Salesforce policies for free.
Stop letting every team rack up rogue OpenAI bills. Point everyone at one proxy URL. Get usage attribution, cost control, and a single audit trail across every AI app in the company.
If you can't ship PII to OpenAI directly but you have a compliant Salesforce org, you can now use frontier LLMs from any custom app under the same compliance posture.
Same prompt, swap the model alias. Compare Claude Opus 4.7 vs GPT-5.5 vs Gemini 3.1 Pro on identical inputs without juggling 5 different SDKs and API keys.
The proxy now exposes POST /v1/messages — the Anthropic Messages API — alongside the existing OpenAI endpoint. Same JWT auth, same Trust Layer, same audit log. Set two env vars and Claude Code is now another Salesforce-governed AI client.
Anthropic payload comes in, gets translated to OpenAI shape, runs through the existing Trust Layer pipeline, response gets translated back to Anthropic shape. Streaming SSE included.
Write/Read/Edit/Bash tools, multi-turn tool round trips, streaming responses, model fallbacks (claude-sonnet-4-6 → claude-opus-4-7). Verified end-to-end with claude-cli 2.1.114.
If your devs use Claude Code with personal API keys, you have zero visibility. Point them at the proxy — every code-gen call is now logged, masked, and billed under your Salesforce contract.
# Point Claude Code at the proxy
export ANTHROPIC_BASE_URL="https://bugs-sf-proxy-449fd4c8e295.herokuapp.com"
export ANTHROPIC_AUTH_TOKEN="any-string" # proxy uses your SF Connected App creds, not this
# Run it normally
claude --print --add-dir ./my-project "refactor the auth module"
# Bills Salesforce. Logged in Trust Layer Audit. Done.
curl -X POST https://bugs-sf-proxy-449fd4c8e295.herokuapp.com/v1/messages \
-H "Content-Type: application/json" \
-d '{
"model": "claude-opus-4-7",
"max_tokens": 200,
"messages": [{"role":"user","content":"hello"}],
"tools": [{"name":"weather","input_schema":{"type":"object"}}]
}'
# Returns native Anthropic message shape: type:"message", content blocks, stop_reason
Claude Code defaults to claude-sonnet-4-6. Salesforce Models API doesn't host Sonnet directly, so the proxy transparently maps that to claude-opus-4-7 — same family, no client change. Pin a different model anytime with ANTHROPIC_MODEL=claude-opus-4-6.
The full setup guide is on the proxy itself. ~30 minutes from zero to "every AI app in my company is now governed by Salesforce."
You'll create a Connected App, deploy a tiny FastAPI service to Heroku (or anywhere), wire env vars, point your AI clients at it. That's it.
SF_CLIENT_ID, SF_CLIENT_SECRET, SF_TOKEN_URL.baseUrl at the proxy. Include tools=[...] if you want function calling — the proxy handles the rest.