Skip to main content
Zespan instruments your agents and LLM calls by wrapping your existing clients. Once initialized, every agent run, tool call, and model interaction is automatically captured and sent to your project’s dashboard. This guide walks through the setup using Node.js and OpenAI, with a Python alternative included.
1

Create your account and project

Go to app.zespan.com and sign up for a free account. After verifying your email, you’ll be taken through the onboarding wizard:
  1. Create an organization — your billing workspace.
  2. Create a project — an isolated container for agent events. Name it after the application you’re instrumenting (e.g. my-support-agent-production).
  3. Copy your API key — shown once after project creation. It starts with zsp_ followed by 64 hex characters.
Your API key is shown in full only once. If you lose it, rotate it from Settings → API Keys — the old key remains valid for 24 hours during rollover.
2

Install the SDK

npm install @zespan/sdk openai
3

Initialize and wrap your client

Add the following at the entry point of your application — before any agent or LLM calls are made.
import { zespan } from "@zespan/sdk";
import OpenAI from "openai";

zespan.init({
  apiKey: process.env.ZESPAN_API_KEY!,
  environment: "production",
});

const openai = zespan.wrapOpenAI(new OpenAI());
zespan.init() initializes the global SDK client. wrapOpenAI() patches the OpenAI client so all calls — and every agent step that goes through it — are automatically traced. Your existing code is unchanged.
Replace zsp_your_key_here with the API key from the dashboard. The SDK logs a warning if the key format is invalid.
4

Run your agent or make an LLM call

Use your client exactly as you would normally. The SDK captures everything — model name, input and output tokens, cost, latency, tool calls, streaming TTFT, and finish reason.
import { zespan, withAgent } from "@zespan/sdk";
import OpenAI from "openai";

zespan.init({ apiKey: process.env.ZESPAN_API_KEY!, environment: "production" });
const openai = zespan.wrapOpenAI(new OpenAI());

// Wrap as an agent to see the full agent trace
await withAgent(
  {
    name: "SupportAgent",
    role: "specialist",
    tools: [{ name: "lookup_order", description: "Look up an order by ID" }],
  },
  async (agent) => {
    agent.logPlan(["Understand request", "Look up order", "Draft response"]);

    const order = await agent.traceTool(
      "lookup_order",
      { id: "ORD-123" },
      () => Promise.resolve({ status: "delivered", total: 49.99 })
    );

    const response = await openai.chat.completions.create({
      model: "gpt-4o",
      messages: [
        { role: "system", content: "You are a helpful support agent." },
        { role: "user", content: `Order ${order}: help me with my refund.` },
      ],
    });

    console.log(response.choices[0].message.content);
  }
);
5

View your trace in the dashboard

Open app.zespan.com and navigate to your project. Within a few seconds you should see your trace in the Traces view. Click any row to open the flame graph — each bar is a span (agent scope, tool call, LLM call) with full cost and latency breakdown.
If no trace appears after 15 seconds, check that your API key is correct and that your process did not exit before the SDK flushed. Call await zespan.getClient().flush() (TypeScript) or zespan.flush() (Python) at the end of your script to force an immediate flush. See the Serverless guide if running in Lambda or Vercel.

SDK initialization options

OptionTypeDefaultDescription
apiKeystringRequiredYour project API key. Must start with zsp_.
environmentstring"production"Tags every event with an environment label.
storePromptsbooleantrueStore prompt and completion text. PII redaction applied before transmission. Set to false to disable.
sampleRatenumber1.0Fraction of calls to trace (0.0–1.0).
redactKeysstring[]Common PII keysTag/metadata keys whose values are redacted before sending.
debugbooleanfalseLog SDK activity to the console.
batchSizenumber50Events to collect before flushing.
flushIntervalnumber2000Milliseconds between automatic flushes.
baseURLstringhttps://api.zespan.comOverride for self-hosted deployments.

Tracing other frameworks

https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/claude.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=cb0f043b399d34635dc564583c1c53e7

Anthropic

zespan.wrapAnthropic(new Anthropic())
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/gemini.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=afee856e9774ce9d180b04fa0b8056a0

Google Gemini

zespan.wrapGoogle(new GoogleGenerativeAI(key))
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/bedrock.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=2f4f077d0718a57549a7fc4af516148f

AWS Bedrock

zespan.wrapBedrock(new BedrockRuntimeClient())
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/mistral.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=44eef65716e18d95a486a6f7b0c86028

Mistral

zespan.wrapMistral(new Mistral())
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/groq.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=f6fcfdb3cd832c9837ce6ccfeda435a6

Groq

zespan.wrapGroq(new Groq())
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/openrouter.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=277236916df80aa1dc6aa9066af56126

OpenRouter

zespan.wrapOpenAI(new OpenAI({ baseURL: "..." }))
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/litellm.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=4205b8e9f285701f19d7189bf6407b4d

LiteLLM

Drop-in proxy — point your SDK at the LiteLLM base URL.
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/langchain.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=c3bbfb54e280e12ac72809c31d88cab7

LangChain

Full chain, agent executor, and retriever tracing via callback handler.
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/google-adk.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=c5b8104c65f437edcec1412ccd47069a

Google ADK

Multi-agent tracing with instrumentADK, wrapADKRunner, or wrapADKAgent.
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/crewai.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=2da96512448ba9e2688c28c1d01283a7

CrewAI

Crew and task tracing via the Zespan CrewAI integration.
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/autogen.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=e309e035e88d2a232e2d612019dc4212

AutoGen

Multi-agent conversation and tool tracing for AutoGen / AG2.
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/llamaindex.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=522df86f3e6759e63829c8f3d403481e

LlamaIndex

Query engine, retriever, and agent tracing via callback handler.
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/vercel.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=7b3d2a61b7e83b7611afdb890886002e

Vercel AI SDK

generateText, streamText, and generateObject traced automatically.
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/haystack.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=c8cac150fddc9229bac6bf70794d7d92

Haystack

Pipeline component and retriever tracing for Haystack 2.x.
https://mintcdn.com/zespancom/OVq7q4R1vLkWzInd/logos/microsoft.svg?fit=max&auto=format&n=OVq7q4R1vLkWzInd&q=85&s=9524fa9ca09151c8c97357f69342cb74

Semantic Kernel

Kernel function and planner tracing for Microsoft Semantic Kernel.