Migrate · Portkey
Same primitives, less ceremony.
Virtual keys, routes, configs, guardrails, observability — all here, all reachable through the OpenAI SDK without Portkey-specific headers.
Portkey
import Portkey from "portkey-ai";
const portkey = new Portkey({
apiKey: process.env.PORTKEY_API_KEY,
virtualKey: "vk-anthropic-prod",
config: "pc-router-v3",
});
await portkey.chat.completions.create({
model: "claude-3-5-sonnet",
messages: [{ role: "user", content: "Hi" }],
});llmcloud.ai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.llmcloud.ai/v1",
apiKey: process.env.LLMCLOUD_API_KEY, // scoped virtual key
});
await client.chat.completions.create({
model: "auto:quality", // or "anthropic/claude-4.5-sonnet"
messages: [{ role: "user", content: "Hi" }],
});Concept map
| Portkey | llmcloud.ai |
|---|---|
| Virtual key | Virtual key (scoped API key) |
| Config (routes, retries, cache) | Per-key policy + auto:* + route.fallback |
| Guardrails | PII / injection / content rules at the router |
| Traces + logs | Analytics dashboard + OTel + log webhooks |
| Prompts library | Prompt registry (Q1 2026, join waitlist) |
| Custom providers | OpenAI-compatible upstreams, BYOK, or Self-host |
Do I need custom SDK headers?+
No. Standard OpenAI headers plus the Bearer token — that's it. Policies live on the key or in the request body under route.
Can I import my Portkey configs?+
During private beta we run a config-import CLI for teams migrating with >10 configs. Talk to us.