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

# Claude (Anthropic)

> Track costs for Claude 3.5, Claude 3, and all Anthropic models

This guide covers how to send Anthropic usage data to Fenra.

## Messages API

<CodeGroup>
  ```javascript Node.js theme={null}
  import Anthropic from '@anthropic-ai/sdk';

  const anthropic = new Anthropic();

  async function chat(messages) {
    const response = await anthropic.messages.create({
      model: 'claude-3-5-sonnet-20241022',
      max_tokens: 1024,
      messages
    });

    // Send to Fenra
    await fetch('https://ingest.fenra.io/usage/transactions', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'X-Api-Key': process.env.FENRA_API_KEY
      },
      body: JSON.stringify({
        provider: 'anthropic',
        model: response.model,
        usage: [{
          type: 'tokens',
          metrics: {
            input_tokens: response.usage.input_tokens,
            output_tokens: response.usage.output_tokens,
            total_tokens: response.usage.input_tokens + response.usage.output_tokens
          }
        }],
        context: {
          billable_customer_id: process.env.BILLABLE_CUSTOMER_ID
        }
      })
    });

    return response;
  }
  ```

  ```python Python theme={null}
  import anthropic
  import requests
  import os

  client = anthropic.Anthropic()

  def chat(messages):
      response = client.messages.create(
          model="claude-3-5-sonnet-20241022",
          max_tokens=1024,
          messages=messages
      )

      # Send to Fenra
      requests.post(
          'https://ingest.fenra.io/usage/transactions',
          headers={
              'Content-Type': 'application/json',
              'X-Api-Key': os.getenv('FENRA_API_KEY')
          },
          json={
              'provider': 'anthropic',
              'model': response.model,
              'usage': [{
                  'type': 'tokens',
                  'metrics': {
                      'input_tokens': response.usage.input_tokens,
                      'output_tokens': response.usage.output_tokens,
                      'total_tokens': response.usage.input_tokens + response.usage.output_tokens
                  }
              }],
              'context': {
                  'billable_customer_id': os.getenv('BILLABLE_CUSTOMER_ID')
              }
          }
      )

      return response
  ```
</CodeGroup>

## Prompt Caching

When using prompt caching, include the cache tokens:

```javascript theme={null}
usage: [{
  type: 'tokens',
  metrics: {
    input_tokens: response.usage.input_tokens,
    output_tokens: response.usage.output_tokens,
    total_tokens: response.usage.input_tokens + response.usage.output_tokens,
    cache_read_input_tokens: response.usage.cache_read_input_tokens || 0,
    cache_creation_input_tokens: response.usage.cache_creation_input_tokens || 0
  }
}]
```

## Extended Thinking

When using extended thinking, include thinking tokens:

```javascript theme={null}
usage: [{
  type: 'tokens',
  metrics: {
    input_tokens: response.usage.input_tokens,
    output_tokens: response.usage.output_tokens,
    total_tokens: response.usage.input_tokens + response.usage.output_tokens,
    thinking_tokens: response.usage.thinking_tokens || 0
  }
}]
```

## Streaming

When streaming, wait for the final message to get usage data:

```javascript theme={null}
const stream = await anthropic.messages.stream({
  model: 'claude-3-5-sonnet-20241022',
  max_tokens: 1024,
  messages
});

const response = await stream.finalMessage();
// Now send to Fenra with response.usage
```

## Supported Models

Fenra supports all Anthropic Claude models. Common models include:

| Model                        | Type            |
| ---------------------------- | --------------- |
| `claude-3-5-sonnet-20241022` | Latest Sonnet   |
| `claude-3-5-haiku-20241022`  | Latest Haiku    |
| `claude-3-opus-20240229`     | Opus            |
| `claude-3-sonnet-20240229`   | Sonnet (legacy) |
| `claude-3-haiku-20240307`    | Haiku (legacy)  |

## Model Tiers

For batch processing, specify the tier:

```javascript theme={null}
{
  provider: 'anthropic',
  model: 'claude-3-5-sonnet-20241022',
  model_tier: 'batch',  // 50% discount
  usage: [...]
}
```

## Server-Side Tools

When using server-side tools like web search or code execution, track tool invocations:

```javascript theme={null}
const response = await anthropic.messages.create({
  model: 'claude-3-5-sonnet-20241022',
  max_tokens: 1024,
  messages,
  tools: [{ type: 'web_search' }]
});

// Extract tool usage from response
const serverToolUse = response.usage.server_tool_use || {};
const webSearchRequests = serverToolUse.web_search_requests || 0;
const codeExecutionHours = serverToolUse.code_execution_hours || 0;

await fetch('https://ingest.fenra.io/usage/transactions', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'X-Api-Key': process.env.FENRA_API_KEY
  },
  body: JSON.stringify({
    provider: 'anthropic',
    model: response.model,
    usage: [
      {
        type: 'tokens',
        metrics: {
          input_tokens: response.usage.input_tokens,
          output_tokens: response.usage.output_tokens,
          total_tokens: response.usage.input_tokens + response.usage.output_tokens
        }
      },
      {
        type: 'requests',
        metrics: {
          count: webSearchRequests,
          request_type: 'web_search'
        }
      }
    ],
    context: {
      billable_customer_id: process.env.BILLABLE_CUSTOMER_ID
    }
  })
});
```

## Next Steps

* [Set up alerts](/guides/alerts) to monitor Claude spending
* [Compare with OpenAI](/product-overview/cost-explorer/breakdown) to analyze provider costs
