API de Análise de Uso e Custo
Consulte o uso de tokens e o custo da sua organização do Claude Console ou do Claude Enterprise por modelo, workspace, chave de API, ator e muito mais.
A API de Análise de Uso e Custo informa o uso histórico de tokens e o custo da sua organização, detalhados pelas dimensões que você escolher, como modelo, workspace, chave de API ou o usuário ou conta de serviço por trás de cada solicitação. Para organizações do Claude Console, esses dados são semelhantes aos que as páginas Usage e Cost do Claude Console mostram.
A API tem dois endpoints:
GET /v1/organizations/analytics/usageinforma contagens de tokens e contagens de solicitações.GET /v1/organizations/analytics/costinforma o custo em USD.
A API de Análise de Uso e Custo está em beta. Envie o cabeçalho anthropic-beta: analytics-usage-cost-2026-08-24 e um cabeçalho anthropic-version em cada solicitação. O SDK e a CLI ant enviam ambos os cabeçalhos para você e buscam as páginas restantes à medida que você lê os resultados, então limit define apenas o tamanho da página.
Use esta API para:
- Atribuir gastos: Detalhe o custo e o uso de tokens por workspace, chave de API, modelo, nível de serviço ou pela identidade que fez cada solicitação.
- Encontrar os maiores consumidores: Classifique os resultados por tokens, solicitações ou custo para responder a perguntas como “quais chaves de API gastam mais este mês?”
- Criar séries temporais: Divida os resultados em buckets diários, por hora ou por minuto para dashboards e relatórios financeiros.
- Integrar uma única vez: Os mesmos endpoints, parâmetros e campos de resposta atendem organizações do Claude Console e do Claude Enterprise.
Início rápido
Obtenha o uso diário de tokens da primeira semana de setembro, uma linha para cada modelo e dia:
client = anthropic.Anthropic()
rows = client.beta.organization.analytics.usage.list(
starting_at="2026-09-01T00:00:00Z",
ending_at="2026-09-08T00:00:00Z",
time_bucket_width="1d",
group_by=["model"],
limit=10,
)
for row in rows:
print(f"{row.starting_at} {row.group.model}: {row.usage.total_tokens}")A resposta tem uma linha para cada modelo e dia que tem uso, com o maior total_tokens primeiro. Este exemplo mostra uma única linha:
{
"data": [
{
"starting_at": "2026-09-03T00:00:00Z",
"ending_at": "2026-09-04T00:00:00Z",
"group": {
"product": null,
"model": "claude-sonnet-5",
"context_window": null,
"inference_geo": null,
"speed": null,
"slack_channel_id": null,
"claude_tag_category": null,
"claude_tag_user_id": null,
"rbac_group_id": null,
"workspace_id": null,
"service_tier": null,
"user_profile_id": null,
"agent_id": null,
"environment_id": null,
"deployment_id": null,
"session_id": null,
"actor": null,
"actor_type": null,
"api_key_id": null
},
"usage": {
"uncached_input_tokens": 1284500,
"cache_creation": {
"ephemeral_1h_input_tokens": 0,
"ephemeral_5m_input_tokens": 215300
},
"cache_read_input_tokens": 3200000,
"output_tokens": 891000,
"total_tokens": 5590800,
"server_tool_use": {
"web_search_requests": 12
},
"requests": 4210
}
}
],
"has_more": true,
"next_page": "page_V2mQ4dkt9HcbX3pLr...",
"data_refreshed_at": "2026-09-18T16:02:11Z"
}Como os resultados são estruturados
- Toda linha tem três partes:
starting_ateending_atindicam o período que a linha abrange,groupcontém todas as dimensões eusage(oucostno endpoint de custo) contém as métricas. - Dimensões são nulas a menos que agrupadas: Uma dimensão em
groupénulla menos que você a liste emgroup_by[]. Uma dimensão agrupada também énullem linhas que não têm valor para ela, comomodelno uso de execução de código.group_by[]aceita até cinco dimensões. - Uma linha para cada combinação: Cada linha é uma combinação das dimensões agrupadas, e toda combinação que tem uso ou custo aparece exatamente uma vez nas páginas de uma consulta. Sem
group_by[]e semtime_bucket_width, a resposta é uma única linha que totaliza todo o intervalo. - Time buckets são opcionais: Defina
time_bucket_widthcomo1m,1hou1dpara dividir cada combinação por bucket UTC; ostarting_ate oending_atde cada linha passam a ser os limites do seu bucket. Buckets sem uso ou custo não produzem linhas. - Classificadas por padrão: As linhas são ordenadas pela métrica de
order_byem todo o intervalo, da maior para a menor por padrão (order=ascinverte a ordem). Para construir uma série temporal, definatime_bucket_widtheorder_by=time. As linhas então retornam um time bucket após o outro, com o time bucket mais recente primeiro por padrão (order=asccoloca o mais antigo primeiro), com as maiores linhas primeiro dentro de cada time bucket. Preencha os time buckets vazios com zeros. - Filtros funcionam junto com o agrupamento: A maioria das dimensões pelas quais você pode agrupar tem um filtro de lista correspondente em notação de colchetes, como
models[]=claude-opus-5-5. Repita o parâmetro para passar vários valores, até 100. Vários valores para o mesmo filtro são combinados com OR, e filtros diferentes são combinados com AND. Filtros egroup_by[]são independentes; você pode filtrar por qualquer dimensão agrupando ou não por ela, ou o inverso.
Dimensões como model e actor se aplicam a todas as organizações. Algumas, como api_key_id, se aplicam apenas a organizações do Claude Console, e outras, como slack_channel_id, se aplicam apenas a organizações do Claude Enterprise. Uma dimensão que não se aplica à sua organização é null em todas as linhas e seu filtro não corresponde a nada; a exceção é rbac_group_id, que retorna um erro quando equipes não estão disponíveis para sua organização. A referência da API para uso e custo lista todas as dimensões, filtros e valores.
Atores
A dimensão actor indica a quem uma solicitação é atribuída: um usuário, uma conta de serviço, uma identidade de nuvem federada (um principal da AWS ou do Google Cloud, para organizações que acessam o Claude por meio de sua plataforma de nuvem) ou, quando nenhum desses está por trás da solicitação, a própria chave de API. Quando você agrupa por actor, o actor de cada linha é um objeto cujo type indica de que tipo ele é. O uso que não pode ser atribuído a nenhuma identidade tem actor: null.
Chaves pessoais e chaves de conta de serviço atuam como o usuário ou a conta de serviço aos quais estão vinculadas, então suas solicitações mostram essa identidade como o actor e a chave em api_key_id. Chaves de workspace legadas não estão vinculadas a uma identidade, então a chave aparece tanto como o actor quanto como o api_key_id. A exceção é a chave que o Claude Code cria quando um membro faz login com sua conta do Claude Console: ela fica no workspace do Claude Code, e seu uso é atribuído a esse membro. Solicitações feitas sem uma chave de API, como a partir do Claude Console ou com um token de Workload Identity Federation, têm api_key_id: null; o actor de uma carga de trabalho federada é sua conta de serviço. Para incluir o uso sem chave de API em um filtro api_key_ids[], adicione uma entrada vazia: api_key_ids[]=.
Os filtros api_key_ids[] e actor_ids[] respondem a perguntas diferentes. api_key_ids[]=apikey_... corresponde a todas as solicitações que a chave autenticou, independentemente de a quem sejam atribuídas. actor_ids[]=apikey_... corresponde apenas às solicitações atribuídas à própria chave.
Endpoint de uso
GET /v1/organizations/analytics/usage retorna contagens de tokens por tipo. order_by aceita total_tokens (o padrão), output_tokens, uncached_input_tokens, requests ou time.
Por exemplo, para ver uma semana de uso de um workspace e uma chave de API, detalhado por nível de serviço (uma linha para cada nível, abrangendo a semana inteira):
client = anthropic.Anthropic()
rows = client.beta.organization.analytics.usage.list(
starting_at="2026-09-01T00:00:00Z",
ending_at="2026-09-08T00:00:00Z",
workspace_ids=["wrkspc_01JwQvzr7rXLA5AGx3HKfFUJ"],
api_key_ids=["apikey_01Rj2N8SVvo6BePZj99NhmiT"],
group_by=["service_tier"],
)
for row in rows:
print(f"{row.group.service_tier}: {row.usage.total_tokens}")Para consultar IDs de chaves de API e de workspaces, use os endpoints List API Keys e List Workspaces ou o Claude Console.
Para descobrir quais usuários, contas de serviço e chaves de API fizeram mais solicitações em um mês:
client = anthropic.Anthropic()
rows = client.beta.organization.analytics.usage.list(
starting_at="2026-09-01T00:00:00Z",
ending_at="2026-10-01T00:00:00Z",
group_by=["actor"],
order_by="requests",
limit=25,
)
for row in rows:
print(f"{row.group.actor}: {row.usage.requests}")Endpoint de custo
GET /v1/organizations/analytics/cost aceita os mesmos filtros, dimensões e time buckets que o endpoint /usage. O objeto cost de cada linha contém amount (o custo após descontos e antes da aplicação de quaisquer créditos), list_amount (o custo a preços de tabela), currency (sempre "USD") e requests. Os valores são strings decimais em centavos com seis casas decimais: "41280.000000" equivale a $412,80 USD. order_by aceita amount (o padrão), list_amount ou time.
Duas dimensões extras existem apenas neste endpoint e não contam para o limite de cinco dimensões: group_by[]=cost_type divide cada linha em uma linha para cada tipo de custo, e group_by[]=token_type divide o custo de tokens em uma linha para cada tipo de token. limit também não se aplica a essas duas dimensões, então uma página pode conter mais de limit linhas. Por exemplo, custo por modelo, tipo de custo e tipo de token para um mês:
client = anthropic.Anthropic()
rows = client.beta.organization.analytics.cost.list(
starting_at="2026-09-01T00:00:00Z",
ending_at="2026-10-01T00:00:00Z",
group_by=["model", "cost_type", "token_type"],
)
for row in rows:
print(
f"{row.group.model} {row.group.cost_type} {row.group.token_type}: {row.cost.amount}"
)Para cada modelo, a resposta tem cinco linhas tokens (uma para cada tipo de token) mais uma linha para cada um de web_search, code_execution e session_usage. Uma dessas linhas:
{
"starting_at": "2026-09-01T00:00:00Z",
"ending_at": "2026-10-01T00:00:00Z",
"group": {
"model": "claude-opus-5",
...,
"cost_type": "tokens",
"token_type": "cache_read_input_tokens"
},
"cost": {
"currency": "USD",
"amount": "41280.000000",
"list_amount": "51600.000000",
"requests": null
}
}O objeto group contém todas as dimensões e está abreviado aqui. Com group_by[]=cost_type ou token_type especificado, requests é null em todas as linhas.
Intervalos de datas e time buckets
- Os timestamps seguem o RFC 3339 com um deslocamento UTC, por exemplo
2026-09-01T00:00:00Z.starting_até inclusivo eending_até exclusivo. starting_atdeve ser em ou após 1º de janeiro de 2026 e dentro dos últimos 365 dias. Uma solicitação pode abranger no máximo 31 dias;ending_attem como padrão 31 dias apósstarting_atou o horário atual, o que ocorrer primeiro.ending_até obrigatório sempre quetime_bucket_widthestiver definido, e comtime_bucket_width=1muma solicitação pode abranger no máximo 24 horas.- Ambas as extremidades do intervalo são arredondadas para baixo até um limite de bucket UTC, ou até a hora quando
time_bucket_widthnão está definido. Por exemplo, comtime_bucket_width=1h, umstarting_atde2026-09-01T10:43:00Zé tratado como2026-09-01T10:00:00Ze umending_atde2026-09-01T15:43:00Zcomo2026-09-01T15:00:00Z, então a resposta cobre das 10:00 às 15:00 UTC.
Atualização dos dados
Toda resposta inclui um timestamp data_refreshed_at, e o uso posterior a esse momento está ausente ou parcial. Quando ainda não há dados disponíveis para nenhuma parte do intervalo solicitado, data_refreshed_at é null e data fica vazio. Os dados normalmente são atualizados em até 4 horas após o uso subjacente e podem levar até 24 horas. Os valores podem ser revisados à medida que eventos atrasados chegam e a reconciliação é executada, até cerca de 7 dias após o fim do mês civil. Por exemplo, os valores de 1º de outubro podem mudar até cerca de 7 de novembro. Para obter resultados estáveis em chamadas repetidas, defina ending_at em ou antes de um data_refreshed_at que você já tenha visto; para totais finais, consulte apenas meses que terminaram há pelo menos 7 dias. Todas as páginas de uma consulta paginada leem o mesmo snapshot de dados, então data_refreshed_at é idêntico em todas as páginas.
Migrar da API de Uso e Custo
Esta seção é para organizações do Claude Console que chamam a API de Uso e Custo legada (/v1/organizations/usage_report/messages e /v1/organizations/cost_report). Sua chave de Admin API, o cabeçalho anthropic-version, starting_at e ending_at, os valores de largura de bucket (1m, 1h, 1d), a notação de colchetes, os nomes dos campos de paginação e os nomes dos campos de tokens e custo permanecem os mesmos. O que muda:
| API de Uso e Custo | API de Análise de Uso e Custo |
|---|---|
| Sem cabeçalho beta | anthropic-beta: analytics-usage-cost-2026-08-24 em cada solicitação |
| Os dados normalmente aparecem em até 5 minutos | Os dados normalmente são atualizados em até 4 horas e podem levar até 24 horas (consulte Atualização dos dados) |
data é uma lista de time buckets, do mais antigo para o mais recente, incluindo os vazios, cada um com uma lista results cujas entradas contêm dimensões e métricas lado a lado | data é uma lista de linhas classificadas por order_by, cada uma com seus próprios starting_at e ending_at, dimensões em group e métricas em usage ou cost. Combinações sem uso ou custo não têm linha. |
bucket_width, padrão 1d | time_bucket_width, sem padrão. Passe time_bucket_width=1d para manter linhas diárias; omita-o para totais de todo o intervalo. O endpoint de custo também aceita todos os filtros e buckets 1m e 1h. |
limit conta time buckets por página | limit conta linhas por página (de 1 a 1.000, padrão 20), então o número de páginas depende de quantas combinações têm dados |
| Qualquer intervalo de datas, paginado para frente por bucket | starting_at em ou após 1º de janeiro de 2026 e dentro dos últimos 365 dias, no máximo 31 dias por solicitação, ending_at obrigatório com time_bucket_width e no máximo 24 horas com buckets 1m (consulte Intervalos de datas e time buckets). Divida intervalos mais longos em várias solicitações. |
account_ids[], service_account_ids[], group_by[]=account_id, group_by[]=service_account_id | actor_ids[] com os mesmos IDs com prefixo, e group_by[]=actor ou actor_type; leia actor.user_id ou actor.service_account_id. Consulte Atores. |
context_window[] | context_windows[] |
group_by[]=description no relatório de custo, com uma string description | Sem description. Em vez disso, agrupe pelas dimensões estruturadas: qualquer uma de model, cost_type, token_type, context_window, service_tier, inference_geo e speed, todas as quais cabem em uma única solicitação. |
| Uma chave de API ou ID de workspace desconhecido retorna um erro | Não corresponde a nada, incluindo um nome de models[] digitado incorretamente. Cada lista aceita até 100 valores. |
workspace_id: null para o workspace padrão | O workspace_id real do workspace padrão (consulte Como o workspace padrão é representado?) |
inference_geo: "not_available" e service_tier: "standard" em uso sem geografia de inferência ou nível | null para ambos. inference_geos[]=not_available ainda corresponde às linhas sem geografia de inferência. |
O service_tier de custo é standard ou batch; amount como "123.45" | O nível real; amount com seis casas decimais, como "123.450000", mais list_amount. |
| Execução de código não aparece no relatório de uso; sem contagem de solicitações | A execução de código aparece como linhas de uso com model: null; adiciona requests em ambos os endpoints e total_tokens nas linhas de uso |
Para reproduzir o relatório diário legado, solicite time_bucket_width=1d com o mesmo group_by[], percorra as páginas com limit=1000 e, em seguida, agrupe as linhas por starting_at e preencha os dias ausentes com zeros. Adicione order_by=time&order=asc para obter os dias em ordem. Uso diário por modelo durante 1 semana, antes:
curl --globoff "https://api.anthropic.com/v1/organizations/usage_report/messages?\
starting_at=2026-09-01T00:00:00Z&\
ending_at=2026-09-08T00:00:00Z&\
group_by[]=model&\
bucket_width=1d" \
-H "anthropic-version: 2023-06-01" \
-H "x-api-key: $ANTHROPIC_API_KEY"e depois:
client = anthropic.Anthropic()
rows = client.beta.organization.analytics.usage.list(
starting_at="2026-09-01T00:00:00Z",
ending_at="2026-09-08T00:00:00Z",
time_bucket_width="1d",
group_by=["model"],
limit=1000,
)
for row in rows:
print(f"{row.starting_at} {row.group.model}: {row.usage.total_tokens}")Custo diário por workspace, modelo, nível de serviço, janela de contexto e geografia de inferência, dividido por tipo de custo e tipo de token:
client = anthropic.Anthropic()
rows = client.beta.organization.analytics.cost.list(
starting_at="2026-09-01T00:00:00Z",
ending_at="2026-09-08T00:00:00Z",
time_bucket_width="1d",
group_by=[
"workspace_id",
"model",
"service_tier",
"context_window",
"inference_geo",
"cost_type",
"token_type",
],
limit=1000,
)
for row in rows:
group = row.group
print(
f"{row.starting_at} {group.workspace_id} {group.model} {group.service_tier} "
f"{group.context_window} {group.inference_geo} {group.cost_type} {group.token_type}: "
f"{row.cost.amount}"
)Migrar dos relatórios de uso e custo do Claude Enterprise
Esta seção é para organizações do Claude Enterprise que chamam os endpoints de relatório da Claude Enterprise Analytics API usage_report, cost_report, user_usage_report e user_cost_report em /v1/organizations/analytics/. Esses endpoints são legados e continuam sendo suportados. Migre para /analytics/usage e /analytics/cost quando quiser qualquer um dos seguintes:
- Todos os grupos em cada time bucket, em vez dos 100 principais grupos em cada bucket
- Agrupamento por
actorouactor_typejunto com outras dimensões, tanto em uso quanto em custo - Linhas classificadas por uma métrica de sua escolha em todo o intervalo, ou ordenadas por time bucket
- Uma única integração que também atende organizações do Claude Console
Sua chave, a data mais antiga, o período retroativo de 365 dias e o intervalo de 31 dias, os nomes e valores de filtros e dimensões (exceto user_ids[] e o valor de produto do Claude Tag), os campos actor de usuário, os campos de métricas e valores, data_refreshed_at, as regras de cursor e o limite de taxa no nível da organização permanecem os mesmos. O único cabeçalho novo é o cabeçalho beta analytics-usage-cost-2026-08-24. O que muda:
| Relatórios do Claude Enterprise | API de Análise de Uso e Custo |
|---|---|
usage_report e cost_report retornam time buckets, do mais antigo para o mais recente, incluindo os vazios, cada um contendo no máximo seus 100 principais grupos; bucket_width tem padrão 1d e limit conta buckets | Linhas abrangendo todas as combinações com dados, classificadas por order_by, cada uma com seus próprios starting_at e ending_at, dimensões em group e métricas em usage ou cost. time_bucket_width é opcional e limit conta linhas. |
O parâmetro de time bucket é bucket_width | É time_bucket_width, com os mesmos valores |
Em usage_report e cost_report, ending_at é opcional com bucket_width e buckets 1m podem abranger até 31 dias | ending_at obrigatório com time_bucket_width; buckets 1m abrangem no máximo 24 horas por solicitação |
user_usage_report e user_cost_report retornam uma linha por usuário | group_by[]=actor&actor_types[]=user_actor. Sem o filtro, você também obtém linhas para identidades que não são usuários e uma linha actor: null para uso não atribuído. |
O uso do Claude Tag tem product: "claude-tag" | product: "claude_tag"; products[] aceita qualquer uma das grafias |
Um nome de models[] não reconhecido retorna um erro 400 | Não corresponde a nada |
user_ids[] | actor_ids[] com os mesmos IDs com prefixo user_... |
exclude_deleted_users nos relatórios por usuário | Requer group_by[]=actor; sem ele, a solicitação retorna um erro 400. Remove apenas as linhas cujo actor é um usuário com deleted: true; as linhas de outras identidades e as linhas com actor: null permanecem. |
Custo por usuário em um mês, antes:
client = anthropic.Anthropic()
rows = client.beta.organization.analytics.user_cost_report.list(
starting_at="2026-09-01T00:00:00Z",
ending_at="2026-10-01T00:00:00Z",
limit=100,
)
for row in rows:
print(f"{row.actor.user_id}: {row.amount}")e depois, adicionando um detalhamento por produto:
client = anthropic.Anthropic()
rows = client.beta.organization.analytics.cost.list(
starting_at="2026-09-01T00:00:00Z",
ending_at="2026-10-01T00:00:00Z",
actor_types=["user_actor"],
group_by=["actor", "product"],
limit=100,
)
for row in rows:
actor = row.group.actor
if actor is not None and actor.type == "user_actor":
print(f"{actor.user_id} {row.group.product}: {row.cost.amount}")Perguntas frequentes
Como o workspace padrão é representado?
O workspace padrão de uma organização do Claude Console tem seu próprio ID wrkspc_, como qualquer outro workspace. As linhas do workspace padrão têm esse ID em workspace_id, e você pode filtrar por ele com workspace_ids[]. List Workspaces omite o workspace padrão, a menos que você passe include_default=true. Para verificar se um workspace_id desconhecido é o workspace padrão, passe-o para Get Workspace: o workspace padrão retorna "name": "Default".
Como obtenho o custo por usuário do Claude Code?
Chame o endpoint de custo com products[]=claude_code&group_by[]=actor. Organizações do Claude Console também podem usar a Claude Code Analytics API, que informa a atividade do Claude Code por usuário e o custo estimado.
Veja também
- API de Uso e Custo (legado)
- APIs de Analytics: de qual API de Analytics e de qual tipo de chave sua organização precisa
- Claude Code Analytics API
- Referência da Admin API
- Preços
Was this page helpful?