Ways to ingest data
If you already run a tracer, start with the Langfuse or LangSmith card. You forward data the tracer is already collecting, so there is nothing to instrument.Node.js SDK
Two-line integration. Wrap your Anthropic or OpenAI client and calado captures everything in the background.
LangChain
Python callback handler for LangChain and LangGraph with no tracer. Attach via
config={"callbacks": [...]}.Langfuse
Already on Langfuse? Point a webhook at calado. No SDK, no agent code changes.
LangSmith
Already on LangSmith? A LangSmith Automation forwards runs to calado. No SDK, no agent code changes.
Direct API
POST to
/api/ingest from any language. Use this when you’re not on Node, or when you need control the SDK doesn’t give.Serverless patterns
Next.js, Vercel Edge, AWS Lambda, Cloudflare Workers. Flush before the function freezes.
What gets captured
When you wrap your client with the SDK, every LLM call is recorded:| Field | Source |
|---|---|
| Conversation messages | Request + response bodies |
| Model | Request |
| System prompt | Request system field |
| Tool schemas | Request tools array |
| Token usage | Response |
| Stop reason | Response |
| Latency | Computed |
| Conversation ID | SDK context (optional) |
| User ID | SDK context (optional) |
| Step / sub-agent hierarchy | SDK runStep, or a tracer’s parent links (optional) |
Endpoints
| Endpoint | Purpose |
|---|---|
POST /api/ingest | Send conversations. The only ingest endpoint. |
Batch limits
| Limit | Value |
|---|---|
| Request body size | 5 MB |
| Conversations per request | 1,000 |
| Messages per conversation | 10,000 |
| Content blocks per message | 1,000 |
| Message content size | 1 MB |
Privacy
Next: pick your integration path
The Node.js SDK is the fastest way in. Start there unless you need a different language.