SDKs and frameworks
Node, Python, LangChain and LlamaIndex. No Parezen SDK needed.
OpenAI SDK
Use the official openai package for Node (npm) or Python (pip) and change only baseURL and apiKey. Parezen speaks the OpenAI format for every provider, so Claude, Gemini and Mistral models are called through the same SDK. Apps that call the Anthropic or Google SDKs directly switch to the OpenAI SDK for the calls they route through Parezen. There is no Parezen SDK to install.
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://api.parezen.com/v1",
apiKey: process.env.PAREZEN_API_KEY, // pz_ key. Workspace and environment come from this key.
defaultHeaders: {
"X-Parezen-Route": "support-reply",
"X-Parezen-Task": "ticket_resolved",
},
});
await client.chat.completions.create({
model: "anthropic/claude-sonnet-4.5",
messages: [{ role: "user", content: "Summarise the latest customer ticket." }],
});
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.parezen.com/v1",
api_key=os.environ["PAREZEN_API_KEY"], # pz_ key. Workspace and environment come from this key.
)
client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
messages=[{"role": "user", "content": "Summarise the latest customer ticket."}],
extra_headers={
"X-Parezen-Route": "support-reply",
"X-Parezen-Task": "ticket_resolved",
},
)
Optional per-request headers
// Optional per-request headers. The client still uses PAREZEN_API_KEY.
await client.chat.completions.create(
{
model: "anthropic/claude-sonnet-4.5",
messages: [{ role: "user", content: "Summarise the latest customer ticket." }],
},
{
headers: {
"X-Parezen-Trace": "trace_example",
"X-Parezen-Cache": "off",
},
},
);
# Optional per-request headers. The client still uses PAREZEN_API_KEY.
client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
messages=[{"role": "user", "content": "Summarise the latest customer ticket."}],
extra_headers={
"X-Parezen-Trace": "trace_example",
"X-Parezen-Cache": "off",
},
)
Default samples send X-Parezen-Route and X-Parezen-Task with defaultHeaders in Node or extra_headers in Python. Project and environment come from the pz_ key, not a header. Optional per-request headers are X-Parezen-Trace and X-Parezen-Cache: off. No-SDK snippets only work for apps already on the OpenAI format.
LangChain and LlamaIndex
Both use an OpenAI-compatible client. The snippets pass the same base URL, a pz_ key, and the same headers. Framework versions move, so check the client options against the version you use.
import { ChatOpenAI } from "@langchain/openai";
const model = new ChatOpenAI({
model: "anthropic/claude-sonnet-4.5",
apiKey: process.env.PAREZEN_API_KEY,
configuration: {
baseURL: "https://api.parezen.com/v1",
defaultHeaders: {
"X-Parezen-Route": "support-reply",
"X-Parezen-Task": "ticket_resolved",
},
},
});
// Optional per-request headers. The ChatOpenAI client still uses PAREZEN_API_KEY.
await model.invoke("Summarise the latest customer ticket.", {
options: {
headers: {
"X-Parezen-Trace": "trace_example",
"X-Parezen-Cache": "off",
},
},
});
import os
from llama_index.llms.openai import OpenAI
llm = OpenAI(
model="anthropic/claude-sonnet-4.5",
api_base="https://api.parezen.com/v1",
api_key=os.environ["PAREZEN_API_KEY"],
additional_kwargs={
"extra_headers": {
"X-Parezen-Route": "support-reply",
"X-Parezen-Task": "ticket_resolved",
},
},
)
# Optional per-request headers. The client still uses PAREZEN_API_KEY.
client.chat.completions.create(
model="anthropic/claude-sonnet-4.5",
messages=[{"role": "user", "content": "Summarise the latest customer ticket."}],
extra_headers={
"X-Parezen-Trace": "trace_example",
"X-Parezen-Cache": "off",
},
)
Later
A Parezen CLI is not needed: the dashboard and the OpenAI SDK cover setup. There is no @parezen/sdk package; fail-open lives in your own code (see the fail-open guide).