Get monthly cost attribution by tag across multi-org and single root-org accounts.
Cost Attribution data for a given month becomes available no later than the 19th of the following month.
This API endpoint is paginated. To make sure you receive all records, check if the value of next_record_id is
set in the response. If it is, make another request and pass next_record_id as a parameter.
Pseudo code example:
response := GetMonthlyCostAttribution(start_month, end_month)
cursor := response.metadata.pagination.next_record_id
WHILE cursor != null BEGIN
sleep(5 seconds) # Avoid running into rate limit
response := GetMonthlyCostAttribution(start_month, end_month, next_record_id=cursor)
cursor := response.metadata.pagination.next_record_id
END
This endpoint is only accessible for parent-level organizations. This endpoint is not available in the Government (US1-FED) site.
This endpoint requires
all
of the following permissions:
usage_read
billing_read
OAuth apps require the usage_read, billing_read authorization scope to access this endpoint.
Arguments
Query Strings
Name
Type
Description
start_month [required]
string
Datetime in ISO-8601 format, UTC, precise to month: [YYYY-MM] for cost beginning in this month.
end_month
string
Datetime in ISO-8601 format, UTC, precise to month: [YYYY-MM] for cost ending this month.
fields [required]
string
Comma-separated list specifying cost types (e.g., <billing_dimension>_on_demand_cost, <billing_dimension>_committed_cost, <billing_dimension>_total_cost) and the
proportions (<billing_dimension>_percentage_in_org, <billing_dimension>_percentage_in_account). Use * to retrieve all fields.
Example: infra_host_on_demand_cost,infra_host_percentage_in_account
To obtain the complete list of active billing dimensions that can be used to replace
<billing_dimension> in the field names, make a request to the Get active billing dimensions API.
sort_direction
enum
The direction to sort by: [desc, asc]. Allowed enum values: desc, asc
sort_name
string
The billing dimension to sort by. Always sorted by total cost. Example: infra_host.
tag_breakdown_keys
string
Comma separated list of tag keys used to group cost. If no value is provided the cost will not be broken down by tags.
To see which tags are available, look for the value of tag_config_source in the API response.
next_record_id
string
List following results with a next_record_id provided in the previous query.
include_descendants
boolean
Include child org cost in the response. Defaults to true.
Response containing the monthly cost attribution by tag(s).
Expand All
Field
Type
Description
data
[object]
Response containing cost attribution.
attributes
object
Cost Attribution by Tag for a given organization.
month
date-time
Datetime in ISO-8601 format, UTC, precise to hour: [YYYY-MM-DDThh].
org_name
string
The name of the organization.
public_id
string
The organization public ID.
tag_config_source
string
The source of the cost attribution tag configuration and the selected tags in the format <source_org_name>:::<selected tag 1>///<selected tag 2>///<selected tag 3>.
tags
object
Tag keys and values.
A null value here means that the requested tag breakdown cannot be applied because it does not match the tags
configured for usage attribution.
In this scenario the API returns the total cost, not broken down by tags.
<any-key>
[string]
A list of values that are associated with each tag key.
An empty list means the resource use wasn't tagged with the respective tag.
Multiple values means the respective tag was applied multiple times on the resource.
An <empty> value means the resource was tagged with the respective tag but did not have a value.
updated_at
string
Shows the most recent hour in the current months for all organizations for which all costs were calculated.
values
object
Fields in Cost Attribution by tag(s). Example: infra_host_on_demand_cost, infra_host_committed_cost, infra_host_total_cost, infra_host_percentage_in_org, infra_host_percentage_in_account.
id
string
Unique ID of the response.
type
enum
Type of cost attribution data.
Allowed enum values: cost_by_tag
default: cost_by_tag
meta
object
The object containing document metadata.
aggregates
[object]
An array of available aggregates.
agg_type
string
The aggregate type.
field
string
The field.
value
double
The value for a given field.
pagination
object
The metadata for the current pagination.
next_record_id
string
The cursor to use to get the next results, if any. To make the next request, use the same parameters with the addition of the next_record_id.
// Get Monthly Cost Attribution returns "OK" response
usechrono::{DateTime,Utc};usedatadog_api_client::datadog;usedatadog_api_client::datadogV2::api_usage_metering::GetMonthlyCostAttributionOptionalParams;usedatadog_api_client::datadogV2::api_usage_metering::UsageMeteringAPI;#[tokio::main]asyncfnmain(){letconfiguration=datadog::Configuration::new();letapi=UsageMeteringAPI::with_config(configuration);letresp=api.get_monthly_cost_attribution(DateTime::parse_from_rfc3339("2021-11-06T11:11:11+00:00").expect("Failed to parse datetime").with_timezone(&Utc),"infra_host_total_cost".to_string(),GetMonthlyCostAttributionOptionalParams::default().end_month(DateTime::parse_from_rfc3339("2021-11-08T11:11:11+00:00").expect("Failed to parse datetime").with_timezone(&Utc),),).await;ifletOk(value)=resp{println!("{:#?}",value);}else{println!("{:#?}",resp.unwrap_err());}}
DD_SITE="datadoghq.comus3.datadoghq.comus5.datadoghq.comdatadoghq.euap1.datadoghq.comap2.datadoghq.comddog-gov.comus2.ddog-gov.com"DD_API_KEY="<DD_API_KEY>"DD_APP_KEY="<DD_APP_KEY>"cargo run
/**
* Get Monthly Cost Attribution returns "OK" response
*/import{client,v2}from"@datadog/datadog-api-client";constconfiguration=client.createConfiguration();constapiInstance=newv2.UsageMeteringApi(configuration);constparams: v2.UsageMeteringApiGetMonthlyCostAttributionRequest={startMonth: newDate(newDate().getTime()+-5*86400*1000),endMonth: newDate(newDate().getTime()+-3*86400*1000),fields:"infra_host_total_cost",};apiInstance.getMonthlyCostAttribution(params).then((data: v2.MonthlyCostAttributionResponse)=>{console.log("API called successfully. Returned data: "+JSON.stringify(data));}).catch((error: any)=>console.error(error));