Skip to main content
Anthropic has two valid CostHawk integration modes. Use an Anthropic Admin key (sk-ant-admin-...) for organization-level reporting with minimal setup.
  • Endpoint coverage:
    • /v1/organizations/usage_report/messages
    • /v1/organizations/cost_report
    • /v1/organizations/usage_report/claude_code
  • No app code changes required
  • Best for baseline visibility and reporting

Admin API Setup

Use this if your priority is fast org-level visibility.

Mode B: Proxy + Wrapped Key (Advanced controls)

Use wrapped keys when you need runtime enforcement (hard limits, attribution, policy controls).
A wrapped key only works against the CostHawk proxy. Do not send ch_sk_... directly to api.anthropic.com.
If you are not sure whether you have a wrapped key or a CostHawk access token, read Wrapped Keys first.

Proxy URL

POST https://costhawk.ai/api/proxy/anthropic
This replaces https://api.anthropic.com/v1/messages.

Python (Anthropic SDK)

import anthropic

client = anthropic.Anthropic(
    api_key="ch_sk_your_wrapped_key_here",
    base_url="https://costhawk.ai/api/proxy/anthropic",
)

message = client.messages.create(
    model="claude-sonnet-4-5-20250929",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello, Claude!"}],
)

print(message.content[0].text)

Node.js (Anthropic SDK)

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

const client = new Anthropic({
  apiKey: "ch_sk_your_wrapped_key_here",
  baseURL: "https://costhawk.ai/api/proxy/anthropic",
});

const message = await client.messages.create({
  model: "claude-sonnet-4-5-20250929",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello, Claude!" }],
});

console.log(message.content[0].text);

curl

curl -X POST https://costhawk.ai/api/proxy/anthropic \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ch_sk_your_wrapped_key_here" \
  -d '{
    "model": "claude-sonnet-4-5-20250929",
    "max_tokens": 1024,
    "messages": [{"role": "user", "content": "Hello, Claude!"}]
  }'
When calling proxy directly, always use Authorization: Bearer ch_sk_....
  1. Start with Admin API sync for immediate reporting coverage.
  2. Keep MCP enabled for assistant-native analytics workflows.
  3. Add proxy routing only for workloads that need enforcement controls.