Skip to main content
Ingestion is how calado receives conversations from your app. You have several paths. Wrap your LLM client with the Node.js SDK (easiest for JS/TS). Attach the LangChain callback handler for Python LangChain or LangGraph agents. If you already run a tracer, forward its data with the Langfuse or LangSmith adapter, with no changes to your agent. POST directly to the Direct API from any language. Or follow the Serverless patterns for runtimes that freeze between invocations.

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:
FieldSource
Conversation messagesRequest + response bodies
ModelRequest
System promptRequest system field
Tool schemasRequest tools array
Token usageResponse
Stop reasonResponse
LatencyComputed
Conversation IDSDK context (optional)
User IDSDK context (optional)
Step / sub-agent hierarchySDK runStep, or a tracer’s parent links (optional)
If your app runs an orchestrator that dispatches sub-agents, calado captures each sub-agent boundary as a step and renders the run as a tree, attributing behavior to the right sub-agent. Each path documents how: Node.js SDK, Direct API, Langfuse, LangSmith, and LangChain.

Endpoints

EndpointPurpose
POST /api/ingestSend conversations. The only ingest endpoint.

Batch limits

LimitValue
Request body size5 MB
Conversations per request1,000
Messages per conversation10,000
Content blocks per message1,000
Message content size1 MB

Privacy

calado stores the full content of every LLM request and response. If your messages contain user PII, secrets, or regulated data, you are responsible for redacting them before they reach calado.The SDK does not perform redaction. Strip or hash sensitive data in your app before calling the wrapped client.

Next: pick your integration path

The Node.js SDK is the fastest way in. Start there unless you need a different language.