> ## Documentation Index
> Fetch the complete documentation index at: https://docs.calado.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> How to send data to calado.

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.

<CardGroup cols={2}>
  <Card title="Node.js SDK" icon="node-js" href="/ingestion/node-sdk">
    Two-line integration. Wrap your Anthropic or OpenAI client and calado captures everything in the background.
  </Card>

  <Card title="LangChain" icon="link" href="/ingestion/langchain">
    Python callback handler for LangChain and LangGraph with no tracer. Attach via `config={"callbacks": [...]}`.
  </Card>

  <Card title="Langfuse" icon="bolt" href="/ingestion/langfuse">
    Already on Langfuse? Point a webhook at calado. No SDK, no agent code changes.
  </Card>

  <Card title="LangSmith" icon="bolt" href="/ingestion/langsmith">
    Already on LangSmith? A LangSmith Automation forwards runs to calado. No SDK, no agent code changes.
  </Card>

  <Card title="Direct API" icon="code" href="/ingestion/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.
  </Card>

  <Card title="Serverless patterns" icon="cloud" href="/ingestion/serverless">
    Next.js, Vercel Edge, AWS Lambda, Cloudflare Workers. Flush before the function freezes.
  </Card>
</CardGroup>

## 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) |

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](/ingestion/node-sdk#multi-agent-orchestrators), [Direct API](/ingestion/direct-api#steps), [Langfuse](/ingestion/langfuse#multi-agent-traces), [LangSmith](/ingestion/langsmith), and [LangChain](/ingestion/langchain).

## 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

<Warning>
  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.
</Warning>

<Card title="Next: pick your integration path" icon="arrow-right" href="/ingestion/node-sdk">
  The Node.js SDK is the fastest way in. Start there unless you need a different language.
</Card>
