# Claude Pipeline Tracking With TelemHQ

Source HTML: https://telemhq.com/docs/claude

Use TelemHQ to monitor Anthropic Claude jobs by sending a ping after each Messages API run, batch job, enrichment job, report, or background worker. Include model, input tokens, output tokens, latency, cost, item counts, and quality checks in the payload.

Using Claude Code instead of the Anthropic API? Follow the separate Claude Code hooks guide: https://telemhq.com/docs/claude-code

## Recommended Payload Fields

- `provider`: `anthropic`
- `model`: Claude model name
- `status`: `success` or `failed`
- `duration_ms`: request or job duration
- `input_tokens`: input token count
- `output_tokens`: output token count
- `total_tokens`: total token count
- `cost_usd`: estimated run cost
- `items_processed`: number of records, documents, or tasks processed
- `items_failed`: number of failed records, documents, or tasks
- `eval_score`: quality or evaluation score

## Environment

```bash
export ANTHROPIC_API_KEY="YOUR_ANTHROPIC_API_KEY"
export TELEMHQ_PING_URL="https://telemhq.com/ping/YOUR_TRACKING_TOKEN"
```

## Node.js Example

```bash
npm install @anthropic-ai/sdk
```

```js
import Anthropic from "@anthropic-ai/sdk";

const anthropic = new Anthropic();
const startedAt = Date.now();

const message = await anthropic.messages.create({
  model: "claude-3-5-haiku-latest",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Summarize today's support tickets." }]
});

const durationMs = Date.now() - startedAt;
const inputTokens = message.usage?.input_tokens ?? 0;
const outputTokens = message.usage?.output_tokens ?? 0;

await fetch(process.env.TELEMHQ_PING_URL, {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    provider: "anthropic",
    model: message.model,
    status: "success",
    duration_ms: durationMs,
    input_tokens: inputTokens,
    output_tokens: outputTokens,
    total_tokens: inputTokens + outputTokens,
    items_processed: 1,
    items_failed: 0
  })
});
```

## Python Example

```bash
pip install anthropic requests
```

```python
import os
import time
import requests
from anthropic import Anthropic

client = Anthropic()
started_at = time.time()

message = client.messages.create(
    model="claude-3-5-haiku-latest",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Summarize today's support tickets."}],
)

duration_ms = round((time.time() - started_at) * 1000)
input_tokens = message.usage.input_tokens or 0
output_tokens = message.usage.output_tokens or 0

requests.post(
    os.environ["TELEMHQ_PING_URL"],
    json={
        "provider": "anthropic",
        "model": message.model,
        "status": "success",
        "duration_ms": duration_ms,
        "input_tokens": input_tokens,
        "output_tokens": output_tokens,
        "total_tokens": input_tokens + output_tokens,
        "items_processed": 1,
        "items_failed": 0,
    },
    timeout=15,
)
```

## Useful Assertions

- `status = success`
- `total_tokens > 0`
- `items_failed = 0`
- `cost_usd <= 5`
- `eval_score >= 0.8`

## Related Guides

- Sending pings: https://telemhq.com/docs/integration
- OpenAI pipeline tracking: https://telemhq.com/docs/openai
- Codex usage tracking: https://telemhq.com/docs/codex
- Claude Code usage tracking: https://telemhq.com/docs/claude-code
