
Tried aggregating by model using Amazon Bedrock product attributes in Cost Explorer
This page has been translated by machine translation. View original
Introduction
On October 8, 2026, Cost Explorer added support for Amazon Bedrock product attributes.
By using attributes such as provider and model for group by and filters, you can retrieve all Bedrock costs together without specifying SERVICE, even though Bedrock costs are displayed under different service names depending on the model. This article presents the results of verifying attribute values, their relationship with SERVICE filters, how costs with empty attributes are handled, and the available time range, using both the console and AWS CLI.
Previous Challenges with Checking Bedrock Costs
When viewing Bedrock costs in Cost Explorer, the basic approach was to filter by the SERVICE dimension. However, since Bedrock service names are separated by model, it was not possible to capture the full picture with SERVICE alone. First, let's review that situation.
Service Names Are Separated by Model
Anthropic and OpenAI models are displayed in Cost Explorer under different service names for each model. For example, Claude Sonnet 5.5 is displayed under the service name Claude Sonnet 5.5 (Amazon Bedrock Edition). Since the verification account was being used to evaluate new models, the number of service names kept growing each time a new model was tested. The table below lists the service names per model confirmed each month.
| Month of Use | Service Names per Model |
|---|---|
| August | Claude Opus 5, OpenAI GPT-5.6 Luna, OpenAI GPT-5.6 Sol, OpenAI GPT-5.6 Terra |
| September | Claude Fable 5, Claude Fable 5.1, Claude Opus 5.5, Claude Sonnet 5.5, OpenAI GPT-6 Astra, OpenAI GPT-6.1 Sol |
| October | Claude Sonnet 5, Claude Haiku 5.5 |
If you are listing service names in a SERVICE filter, you need to update the filter every time you add a model.
Searching for "bedrock" in the Service filter on the console returns 32 results, which can all be selected at once with Select all. This includes services that are not model costs, such as Bedrock AgentCore.

Filtering by Amazon Bedrock Alone Excludes Claude and GPT
I filtered SERVICE to Amazon Bedrock only and grouped by SERVICE and the model attribute.
aws ce get-cost-and-usage --region us-east-1 --time-period Start=2026-09-01,End=2026-10-09 --granularity MONTHLY --metrics UnblendedCost \
--filter '{"Dimensions":{"Key":"SERVICE","Values":["Amazon Bedrock"]}}' \
--group-by Type=DIMENSION,Key=SERVICE Type=PRODUCT_ATTRIBUTE,Key=model \
| jq -r '[.ResultsByTime[].Groups[].Keys | @tsv] | unique[]'
Amazon Bedrock model$
Amazon Bedrock model$Grok 4.7
Amazon Bedrock model$Nova 2.0 Lite
Amazon Bedrock model$Nova Lite
Amazon Bedrock model$xai.grok-4.6
Only Grok and Nova are displayed; Claude and GPT are not included.
Product Attributes
At this time, the only supported service is Amazon Bedrock. The AWS CLI version used in this article is 2.37.11.
The attribute keys are four: provider, model, inferenceType, and feature, and can be retrieved with the following command.
aws ce get-dimension-values --region us-east-1 --time-period Start=2026-09-01,End=2026-10-09 --dimension PRODUCT_ATTRIBUTE --context COST_AND_USAGE \
| jq -r '.DimensionValues[].Value'
feature
inferenceType
model
provider
The values for each key are retrieved by specifying the key name in --dimension-key. Values include empty strings. An empty string represents costs that do not have that attribute.
provider
The providers of models with usage history were displayed.
aws ce get-dimension-values --region us-east-1 --time-period Start=2026-09-01,End=2026-10-09 --dimension PRODUCT_ATTRIBUTE --dimension-key provider --context COST_AND_USAGE \
| jq -r '.DimensionValues[].Value | if . == "" then "(empty string)" else . end'
(empty string)
Anthropic
OpenAI
xAI
model
The model names with usage history were displayed.
aws ce get-dimension-values --region us-east-1 --time-period Start=2026-09-01,End=2026-10-09 --dimension PRODUCT_ATTRIBUTE --dimension-key model --context COST_AND_USAGE \
| jq -r '.DimensionValues[].Value | if . == "" then "(empty string)" else . end'
(empty string)
Banana
Claude Fable 5
Claude Fable 5.1
Claude Haiku 5.5
Claude Opus 5.5
Claude Sonnet 5
Grok 4.7
Nova 2.0 Lite
Nova Lite
OpenAI GPT-6 Astra
OpenAI GPT-6.1 Sol
xai.grok-4.6
inferenceType
The billing elements with usage history (input/output tokens, prompt cache reads/writes) were displayed.
aws ce get-dimension-values --region us-east-1 --time-period Start=2026-09-01,End=2026-10-09 --dimension PRODUCT_ATTRIBUTE --dimension-key inferenceType --context COST_AND_USAGE \
| jq -r '.DimensionValues[].Value | if . == "" then "(empty string)" else . end'
(empty string)
Input tokens
Input tokens global
Output tokens
Output tokens global
Prompt cache read input tokens
Prompt cache write input tokens
feature
The features with usage history were displayed.
aws ce get-dimension-values --region us-east-1 --time-period Start=2026-09-01,End=2026-10-09 --dimension PRODUCT_ATTRIBUTE --dimension-key feature --context COST_AND_USAGE \
| jq -r '.DimensionValues[].Value | if . == "" then "(empty string)" else . end'
(empty string)
On-demand Inference
Whether a SERVICE Filter Is Required
Whether a SERVICE filter is required when using attributes differs by API — it is either optional or mandatory.
- GetCostAndUsage, GetCostAndUsageWithResources: optional
- GetDimensionValues: required when including ProductAttributes in the filter (regardless of the Dimension being retrieved); otherwise optional
- GetTags, GetCostCategories: required when including ProductAttributes in the filter
Correspondence with SERVICE Names
The following is a partial excerpt of the correspondence between SERVICE names and model/provider.
| Service | Model | Provider |
|---|---|---|
| Amazon Bedrock | Grok 4.7 | xAI |
| Amazon Bedrock | xai.grok-4.6 | (empty string) |
| Amazon Bedrock | Nova Lite | (empty string) |
| Claude Sonnet 5.5 (Amazon Bedrock Edition) | Banana | Anthropic |
| OpenAI GPT-6 Astra (Amazon Bedrock Edition) | OpenAI GPT-6 Astra | OpenAI |
- Grouped by provider: Even if the service names differ, Claude is grouped under Anthropic, GPT under OpenAI, and Grok 4.7 under xAI.
- Model is almost the same as the service name: For Claude and GPT, the part of the service name with "(Amazon Bedrock Edition)" removed is used directly as the model. There is one case where the service name and model do not match: the model for Claude Sonnet 5.5 (Amazon Bedrock Edition) contains "Banana".
- Some models have an empty provider: Nova and xai.grok-4.6 have an empty provider.
Aggregating via CLI Without Specifying SERVICE
When you want to include all costs that are split across multiple service names, omit SERVICE.
Group by provider
I grouped by provider only, without specifying SERVICE.
aws ce get-cost-and-usage --region us-east-1 --time-period Start=2026-09-01,End=2026-10-10 --granularity MONTHLY --metrics UnblendedCost \
--group-by Type=PRODUCT_ATTRIBUTE,Key=provider \
| jq -r '[.ResultsByTime[].Groups[].Keys[0]] | unique[]'
provider$
provider$Anthropic
provider$OpenAI
provider$xAI
Even without filtering by SERVICE, just grouping by attribute displayed only Bedrock costs.
Filtering with ProductAttributes
I specified the three provider values in a ProductAttributes filter and grouped by SERVICE.
aws ce get-cost-and-usage --region us-east-1 --time-period Start=2026-09-01,End=2026-10-10 --granularity MONTHLY --metrics UnblendedCost \
--filter '{"ProductAttributes":{"Key":"provider","Values":["Anthropic","OpenAI","xAI"]}}' --group-by Type=DIMENSION,Key=SERVICE \
| jq -r '[.ResultsByTime[].Groups[].Keys[0]] | unique[]'
Amazon Bedrock
Claude Fable 5 (Amazon Bedrock Edition)
Claude Fable 5.1 (Amazon Bedrock Edition)
Claude Haiku 5.5 (Amazon Bedrock Edition)
Claude Opus 5.5 (Amazon Bedrock Edition)
Claude Sonnet 5 (Amazon Bedrock Edition)
Claude Sonnet 5.5 (Amazon Bedrock Edition)
OpenAI GPT-6 Astra (Amazon Bedrock Edition)
OpenAI GPT-6.1 Sol (Amazon Bedrock Edition)
With a single filter, I was able to retrieve Claude and GPT (which have separate service names) along with Grok 4.7 (whose service name is Amazon Bedrock) all at once.
Using the Console
I selected Product attribute → Model for Group by and ran it without any filters. Even without using the Service filter, models from Claude, GPT, Grok, and Nova are listed side by side. Costs without attributes are consolidated in the "No product attribute: Model" row.

When you want to see only the costs for models with a provider set, such as Anthropic or OpenAI, filter by Model provider. The screen below shows the result of specifying Anthropic, OpenAI, and xAI as Model provider values in the filter while keeping Group by set to Model. Models with an empty provider — xai.grok-4.6 and Nova — are excluded by this filter.

Attributes other than Model provider can also be used as filters. The Inference type filter has an Includes/Excludes toggle. The selectable values are the six retrieved via CLI (excluding empty strings) plus "No product attribute: Inference type".

Retrieving Costs with Empty Attributes
Costs with empty attributes can be retrieved by specifying ABSENT in the MatchOptions of the ProductAttributes filter. In this case, Values is omitted. I retrieved costs where model is empty, grouped by SERVICE.
aws ce get-cost-and-usage --region us-east-1 --time-period Start=2026-09-01,End=2026-10-10 --granularity MONTHLY --metrics UnblendedCost UsageQuantity \
--filter '{"ProductAttributes":{"Key":"model","MatchOptions":["ABSENT"]}}' \
--group-by Type=DIMENSION,Key=SERVICE \
| jq -r '[.ResultsByTime[].Groups[].Keys[0]] | unique[]'
Amazon Bedrock
Amazon Bedrock AgentCore
I was able to retrieve via CLI the same costs as the "No product attribute: Model" row that appears when Group by is set to Model in the console.
Available Time Range
Attribute data is available for periods from 2026-09-01 (UTC) onward. If you specify a period earlier than that and use attributes, the API returns an error.
aws ce get-dimension-values --region us-east-1 --time-period Start=2026-08-31,End=2026-09-01 --dimension PRODUCT_ATTRIBUTE --context COST_AND_USAGE
aws: [ERROR]: An error occurred (DataUnavailableException) when calling the GetDimensionValues operation: Product attribute information is not available before 2026-09-01
In the console, if you specify a time range that includes a date before 2026-09-01, a warning is displayed stating that product attribute selections and the Service filter will be cleared.

Summary
I tried out Amazon Bedrock product attributes in Cost Explorer. Simply grouping by provider or model aggregates only Bedrock costs without specifying SERVICE, and even when service names are separated by model — as with Claude and GPT — they are grouped together by provider. There is no longer a need to add service names to the SERVICE filter every time you start using a new model.
On the other hand, some models such as Nova and xai.grok-4.6 have an empty provider and will be excluded when filtering by Model provider. Costs with empty values can be retrieved using ABSENT in MatchOptions. Note that attribute data is limited to periods from 2026-09-01 (UTC) onward; including earlier periods will result in errors or warnings.
To view detailed Bedrock usage, you can also analyze CUR 2.0 with Athena, but if you don't need the granularity of CUR 2.0, give the updated Cost Explorer a try.
