Lists the forecast charges for scope defined.
POST https://management.azure.com/{scope}/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01
With optional parameters:
POST https://management.azure.com/{scope}/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01&$filter={$filter}
URI Parameters
| Name |
In |
Required |
Type |
Description |
|
scope
|
path |
True
|
string
|
The scope associated with forecast operations. This includes '/subscriptions/{subscriptionId}/' for subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope and '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' for EnrollmentAccount scope, '/providers/Microsoft.Management/managementGroups/{managementGroupId} for Management Group scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}' for billingProfile scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/billingProfiles/{billingProfileId}/invoiceSections/{invoiceSectionId}' for invoiceSection scope, and '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/customers/{customerId}' specific for partners.
|
|
api-version
|
query |
True
|
string
minLength: 1
|
The API version to use for this operation.
|
|
$filter
|
query |
|
string
|
May be used to filter forecasts by properties/usageDate (Utc time), properties/chargeType or properties/grain. The filter supports 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', 'or', or 'not'.
|
Request Body
| Name |
Required |
Type |
Description |
|
dataset
|
True
|
ForecastDataset
|
Has definition for data in this forecast.
|
|
timeframe
|
True
|
ForecastTimeframe
|
The time frame for pulling data for the forecast. If custom, then a specific time period must be provided.
|
|
type
|
True
|
ForecastType
|
The type of the forecast.
|
|
includeActualCost
|
|
boolean
|
A boolean determining if actualCost will be included.
|
|
includeFreshPartialCost
|
|
boolean
|
A boolean determining if FreshPartialCost will be included.
|
|
timePeriod
|
|
ForecastTimePeriod
|
Has time period for pulling data for the forecast.
|
Responses
| Name |
Type |
Description |
|
200 OK
|
ForecastResult
|
Azure operation completed successfully.
|
|
204 No Content
|
|
There is no content to send for this request, but the headers may be useful.
|
|
Other Status Codes
|
ErrorResponse
|
An unexpected error response.
|
Security
azure_auth
Azure Active Directory OAuth2 Flow.
Type:
oauth2
Flow:
implicit
Authorization URL:
https://login.microsoftonline.com/common/oauth2/authorize
Scopes
| Name |
Description |
|
user_impersonation
|
impersonate your user account
|
Examples
BillingAccountForecast
Sample request
POST https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01
{
"type": "Usage",
"dataset": {
"aggregation": {
"totalCost": {
"name": "Cost",
"function": "Sum"
}
},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": [
"East US",
"West Europe"
]
}
},
{
"tags": {
"name": "Environment",
"operator": "In",
"values": [
"UAT",
"Prod"
]
}
}
]
},
{
"dimensions": {
"name": "ResourceGroup",
"operator": "In",
"values": [
"API"
]
}
}
]
},
"granularity": "Daily"
},
"includeActualCost": false,
"includeFreshPartialCost": false,
"timePeriod": {
"from": "2022-08-01T00:00:00+00:00",
"to": "2022-08-31T23:59:59+00:00"
},
"timeframe": "Custom"
}
from azure.identity import DefaultAzureCredential
from azure.mgmt.costmanagement import CostManagementClient
"""
# PREREQUISITES
pip install azure-identity
pip install azure-mgmt-costmanagement
# USAGE
python billing_account_forecast.py
Before run the sample, please set the values of the client ID, tenant ID and client secret
of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID,
AZURE_CLIENT_SECRET. For more info about how to get the value, please see:
https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal
"""
def main():
client = CostManagementClient(
credential=DefaultAzureCredential(),
)
response = client.forecast.usage(
scope="providers/Microsoft.Billing/billingAccounts/12345:6789",
parameters={
"dataset": {
"aggregation": {"totalCost": {"function": "Sum", "name": "Cost"}},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": ["East US", "West Europe"],
}
},
{"tags": {"name": "Environment", "operator": "In", "values": ["UAT", "Prod"]}},
]
},
{"dimensions": {"name": "ResourceGroup", "operator": "In", "values": ["API"]}},
]
},
"granularity": "Daily",
},
"includeActualCost": False,
"includeFreshPartialCost": False,
"timePeriod": {"from": "2022-08-01T00:00:00+00:00", "to": "2022-08-31T23:59:59+00:00"},
"timeframe": "Custom",
"type": "Usage",
},
)
print(response)
# x-ms-original-file: 2025-03-01/BillingAccountForecast.json
if __name__ == "__main__":
main()
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
package armcostmanagement_test
import (
"context"
"log"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/costmanagement/armcostmanagement/v3"
)
// Generated from example definition: 2025-03-01/BillingAccountForecast.json
func ExampleForecastClient_Usage_billingAccountForecast() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
ctx := context.Background()
clientFactory, err := armcostmanagement.NewClientFactory(cred, nil)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
res, err := clientFactory.NewForecastClient().Usage(ctx, "providers/Microsoft.Billing/billingAccounts/12345:6789", armcostmanagement.ForecastDefinition{
Type: to.Ptr(armcostmanagement.ForecastTypeUsage),
Dataset: &armcostmanagement.ForecastDataset{
Aggregation: map[string]*armcostmanagement.ForecastAggregation{
"totalCost": {
Name: to.Ptr(armcostmanagement.FunctionNameCost),
Function: to.Ptr(armcostmanagement.FunctionTypeSum),
},
},
Filter: &armcostmanagement.ForecastFilter{
And: []*armcostmanagement.ForecastFilter{
{
Or: []*armcostmanagement.ForecastFilter{
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceLocation"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("East US"),
to.Ptr("West Europe"),
},
},
},
{
Tags: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("Environment"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("UAT"),
to.Ptr("Prod"),
},
},
},
},
},
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceGroup"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("API"),
},
},
},
},
},
Granularity: to.Ptr(armcostmanagement.GranularityTypeDaily),
},
IncludeActualCost: to.Ptr(false),
IncludeFreshPartialCost: to.Ptr(false),
TimePeriod: &armcostmanagement.ForecastTimePeriod{
From: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-01T00:00:00+00:00"); return t }()),
To: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-31T23:59:59+00:00"); return t }()),
},
Timeframe: to.Ptr(armcostmanagement.ForecastTimeframeCustom),
}, nil)
if err != nil {
log.Fatalf("failed to finish the request: %v", err)
}
// You could use response here. We use blank identifier for just demo purposes.
_ = res
// If the HTTP response code is 200 as defined in example definition, your response structure would look as follows. Please pay attention that all the values in the output are fake values for just demo purposes.
// res = armcostmanagement.ForecastClientUsageResponse{
// ForecastResult: armcostmanagement.ForecastResult{
// Name: to.Ptr("ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Type: to.Ptr("Microsoft.CostManagement/query"),
// ID: to.Ptr("/providers/Microsoft.Billing/billingAccounts/12345:6789/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Properties: &armcostmanagement.ForecastProperties{
// Columns: []*armcostmanagement.ForecastColumn{
// {
// Name: to.Ptr("PreTaxCost"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("UsageDate"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("CostStatus"),
// Type: to.Ptr("String"),
// },
// {
// Name: to.Ptr("Currency"),
// Type: to.Ptr("String"),
// },
// },
// NextLink: to.Ptr("https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/providers/Microsoft.CostManagement/Forecast?api-version=2021-10-01&$skiptoken=AQAAAA%3D%3D"),
// Rows: [][]any{
// []any{
// 2.10333307059661,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 218.68795741935486,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 0.14384913581657052,
// 20180401,
// "Forecast",
// "USD",
// },
// []any{
// 0.009865586851323632,
// 20180429,
// "Forecast",
// "USD",
// },
// },
// },
// },
// }
}
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
Sample response
{
"name": "ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"type": "Microsoft.CostManagement/query",
"id": "/providers/Microsoft.Billing/billingAccounts/12345:6789/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"properties": {
"columns": [
{
"name": "PreTaxCost",
"type": "Number"
},
{
"name": "UsageDate",
"type": "Number"
},
{
"name": "CostStatus",
"type": "String"
},
{
"name": "Currency",
"type": "String"
}
],
"nextLink": "https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/providers/Microsoft.CostManagement/Forecast?api-version=2021-10-01&$skiptoken=AQAAAA%3D%3D",
"rows": [
[
2.10333307059661,
20180331,
"Forecast",
"USD"
],
[
218.68795741935486,
20180331,
"Forecast",
"USD"
],
[
0.14384913581657052,
20180401,
"Forecast",
"USD"
],
[
0.009865586851323632,
20180429,
"Forecast",
"USD"
]
]
}
}
BillingProfileForecast
Sample request
POST https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01
{
"type": "Usage",
"dataset": {
"aggregation": {
"totalCost": {
"name": "Cost",
"function": "Sum"
}
},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": [
"East US",
"West Europe"
]
}
},
{
"tags": {
"name": "Environment",
"operator": "In",
"values": [
"UAT",
"Prod"
]
}
}
]
},
{
"dimensions": {
"name": "ResourceGroup",
"operator": "In",
"values": [
"API"
]
}
}
]
},
"granularity": "Daily"
},
"includeActualCost": false,
"includeFreshPartialCost": false,
"timePeriod": {
"from": "2022-08-01T00:00:00+00:00",
"to": "2022-08-31T23:59:59+00:00"
},
"timeframe": "Custom"
}
from azure.identity import DefaultAzureCredential
from azure.mgmt.costmanagement import CostManagementClient
"""
# PREREQUISITES
pip install azure-identity
pip install azure-mgmt-costmanagement
# USAGE
python billing_profile_forecast.py
Before run the sample, please set the values of the client ID, tenant ID and client secret
of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID,
AZURE_CLIENT_SECRET. For more info about how to get the value, please see:
https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal
"""
def main():
client = CostManagementClient(
credential=DefaultAzureCredential(),
)
response = client.forecast.usage(
scope="providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579",
parameters={
"dataset": {
"aggregation": {"totalCost": {"function": "Sum", "name": "Cost"}},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": ["East US", "West Europe"],
}
},
{"tags": {"name": "Environment", "operator": "In", "values": ["UAT", "Prod"]}},
]
},
{"dimensions": {"name": "ResourceGroup", "operator": "In", "values": ["API"]}},
]
},
"granularity": "Daily",
},
"includeActualCost": False,
"includeFreshPartialCost": False,
"timePeriod": {"from": "2022-08-01T00:00:00+00:00", "to": "2022-08-31T23:59:59+00:00"},
"timeframe": "Custom",
"type": "Usage",
},
)
print(response)
# x-ms-original-file: 2025-03-01/BillingProfileForecast.json
if __name__ == "__main__":
main()
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
package armcostmanagement_test
import (
"context"
"log"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/costmanagement/armcostmanagement/v3"
)
// Generated from example definition: 2025-03-01/BillingProfileForecast.json
func ExampleForecastClient_Usage_billingProfileForecast() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
ctx := context.Background()
clientFactory, err := armcostmanagement.NewClientFactory(cred, nil)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
res, err := clientFactory.NewForecastClient().Usage(ctx, "providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579", armcostmanagement.ForecastDefinition{
Type: to.Ptr(armcostmanagement.ForecastTypeUsage),
Dataset: &armcostmanagement.ForecastDataset{
Aggregation: map[string]*armcostmanagement.ForecastAggregation{
"totalCost": {
Name: to.Ptr(armcostmanagement.FunctionNameCost),
Function: to.Ptr(armcostmanagement.FunctionTypeSum),
},
},
Filter: &armcostmanagement.ForecastFilter{
And: []*armcostmanagement.ForecastFilter{
{
Or: []*armcostmanagement.ForecastFilter{
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceLocation"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("East US"),
to.Ptr("West Europe"),
},
},
},
{
Tags: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("Environment"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("UAT"),
to.Ptr("Prod"),
},
},
},
},
},
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceGroup"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("API"),
},
},
},
},
},
Granularity: to.Ptr(armcostmanagement.GranularityTypeDaily),
},
IncludeActualCost: to.Ptr(false),
IncludeFreshPartialCost: to.Ptr(false),
TimePeriod: &armcostmanagement.ForecastTimePeriod{
From: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-01T00:00:00+00:00"); return t }()),
To: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-31T23:59:59+00:00"); return t }()),
},
Timeframe: to.Ptr(armcostmanagement.ForecastTimeframeCustom),
}, nil)
if err != nil {
log.Fatalf("failed to finish the request: %v", err)
}
// You could use response here. We use blank identifier for just demo purposes.
_ = res
// If the HTTP response code is 200 as defined in example definition, your response structure would look as follows. Please pay attention that all the values in the output are fake values for just demo purposes.
// res = armcostmanagement.ForecastClientUsageResponse{
// ForecastResult: armcostmanagement.ForecastResult{
// Name: to.Ptr("ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Type: to.Ptr("Microsoft.CostManagement/query"),
// ID: to.Ptr("/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Properties: &armcostmanagement.ForecastProperties{
// Columns: []*armcostmanagement.ForecastColumn{
// {
// Name: to.Ptr("PreTaxCost"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("UsageDate"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("CostStatus"),
// Type: to.Ptr("String"),
// },
// {
// Name: to.Ptr("Currency"),
// Type: to.Ptr("String"),
// },
// },
// NextLink: to.Ptr("https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/providers/Microsoft.CostManagement/Forecast?api-version=2019-10-01&$skiptoken=AQAAAA%3D%3D"),
// Rows: [][]any{
// []any{
// 2.10333307059661,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 218.68795741935486,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 0.14384913581657052,
// 20180401,
// "Forecast",
// "USD",
// },
// []any{
// 0.009865586851323632,
// 20180429,
// "Forecast",
// "USD",
// },
// },
// },
// },
// }
}
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
Sample response
{
"name": "ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"type": "Microsoft.CostManagement/query",
"id": "/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"properties": {
"columns": [
{
"name": "PreTaxCost",
"type": "Number"
},
{
"name": "UsageDate",
"type": "Number"
},
{
"name": "CostStatus",
"type": "String"
},
{
"name": "Currency",
"type": "String"
}
],
"nextLink": "https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/providers/Microsoft.CostManagement/Forecast?api-version=2019-10-01&$skiptoken=AQAAAA%3D%3D",
"rows": [
[
2.10333307059661,
20180331,
"Forecast",
"USD"
],
[
218.68795741935486,
20180331,
"Forecast",
"USD"
],
[
0.14384913581657052,
20180401,
"Forecast",
"USD"
],
[
0.009865586851323632,
20180429,
"Forecast",
"USD"
]
]
}
}
DepartmentForecast
Sample request
POST https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/departments/123/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01
{
"type": "Usage",
"dataset": {
"aggregation": {
"totalCost": {
"name": "Cost",
"function": "Sum"
}
},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": [
"East US",
"West Europe"
]
}
},
{
"tags": {
"name": "Environment",
"operator": "In",
"values": [
"UAT",
"Prod"
]
}
}
]
},
{
"dimensions": {
"name": "ResourceGroup",
"operator": "In",
"values": [
"API"
]
}
}
]
},
"granularity": "Daily"
},
"includeActualCost": false,
"includeFreshPartialCost": false,
"timePeriod": {
"from": "2022-08-01T00:00:00+00:00",
"to": "2022-08-31T23:59:59+00:00"
},
"timeframe": "Custom"
}
from azure.identity import DefaultAzureCredential
from azure.mgmt.costmanagement import CostManagementClient
"""
# PREREQUISITES
pip install azure-identity
pip install azure-mgmt-costmanagement
# USAGE
python department_forecast.py
Before run the sample, please set the values of the client ID, tenant ID and client secret
of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID,
AZURE_CLIENT_SECRET. For more info about how to get the value, please see:
https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal
"""
def main():
client = CostManagementClient(
credential=DefaultAzureCredential(),
)
response = client.forecast.usage(
scope="providers/Microsoft.Billing/billingAccounts/12345:6789/departments/123",
parameters={
"dataset": {
"aggregation": {"totalCost": {"function": "Sum", "name": "Cost"}},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": ["East US", "West Europe"],
}
},
{"tags": {"name": "Environment", "operator": "In", "values": ["UAT", "Prod"]}},
]
},
{"dimensions": {"name": "ResourceGroup", "operator": "In", "values": ["API"]}},
]
},
"granularity": "Daily",
},
"includeActualCost": False,
"includeFreshPartialCost": False,
"timePeriod": {"from": "2022-08-01T00:00:00+00:00", "to": "2022-08-31T23:59:59+00:00"},
"timeframe": "Custom",
"type": "Usage",
},
)
print(response)
# x-ms-original-file: 2025-03-01/DepartmentForecast.json
if __name__ == "__main__":
main()
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
package armcostmanagement_test
import (
"context"
"log"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/costmanagement/armcostmanagement/v3"
)
// Generated from example definition: 2025-03-01/DepartmentForecast.json
func ExampleForecastClient_Usage_departmentForecast() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
ctx := context.Background()
clientFactory, err := armcostmanagement.NewClientFactory(cred, nil)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
res, err := clientFactory.NewForecastClient().Usage(ctx, "providers/Microsoft.Billing/billingAccounts/12345:6789/departments/123", armcostmanagement.ForecastDefinition{
Type: to.Ptr(armcostmanagement.ForecastTypeUsage),
Dataset: &armcostmanagement.ForecastDataset{
Aggregation: map[string]*armcostmanagement.ForecastAggregation{
"totalCost": {
Name: to.Ptr(armcostmanagement.FunctionNameCost),
Function: to.Ptr(armcostmanagement.FunctionTypeSum),
},
},
Filter: &armcostmanagement.ForecastFilter{
And: []*armcostmanagement.ForecastFilter{
{
Or: []*armcostmanagement.ForecastFilter{
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceLocation"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("East US"),
to.Ptr("West Europe"),
},
},
},
{
Tags: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("Environment"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("UAT"),
to.Ptr("Prod"),
},
},
},
},
},
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceGroup"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("API"),
},
},
},
},
},
Granularity: to.Ptr(armcostmanagement.GranularityTypeDaily),
},
IncludeActualCost: to.Ptr(false),
IncludeFreshPartialCost: to.Ptr(false),
TimePeriod: &armcostmanagement.ForecastTimePeriod{
From: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-01T00:00:00+00:00"); return t }()),
To: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-31T23:59:59+00:00"); return t }()),
},
Timeframe: to.Ptr(armcostmanagement.ForecastTimeframeCustom),
}, nil)
if err != nil {
log.Fatalf("failed to finish the request: %v", err)
}
// You could use response here. We use blank identifier for just demo purposes.
_ = res
// If the HTTP response code is 200 as defined in example definition, your response structure would look as follows. Please pay attention that all the values in the output are fake values for just demo purposes.
// res = armcostmanagement.ForecastClientUsageResponse{
// ForecastResult: armcostmanagement.ForecastResult{
// Name: to.Ptr("ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Type: to.Ptr("Microsoft.CostManagement/query"),
// ID: to.Ptr("/providers/Microsoft.Billing/billingAccounts/12345:6789/departments/123/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Properties: &armcostmanagement.ForecastProperties{
// Columns: []*armcostmanagement.ForecastColumn{
// {
// Name: to.Ptr("PreTaxCost"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("UsageDate"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("CostStatus"),
// Type: to.Ptr("String"),
// },
// {
// Name: to.Ptr("Currency"),
// Type: to.Ptr("String"),
// },
// },
// NextLink: to.Ptr("https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/departments/123/providers/Microsoft.CostManagement/Forecast?api-version=2021-10-01&$skiptoken=AQAAAA%3D%3D"),
// Rows: [][]any{
// []any{
// 2.10333307059661,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 218.68795741935486,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 0.14384913581657052,
// 20180401,
// "Forecast",
// "USD",
// },
// []any{
// 0.009865586851323632,
// 20180429,
// "Forecast",
// "USD",
// },
// },
// },
// },
// }
}
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
Sample response
{
"name": "ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"type": "Microsoft.CostManagement/query",
"id": "/providers/Microsoft.Billing/billingAccounts/12345:6789/departments/123/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"properties": {
"columns": [
{
"name": "PreTaxCost",
"type": "Number"
},
{
"name": "UsageDate",
"type": "Number"
},
{
"name": "CostStatus",
"type": "String"
},
{
"name": "Currency",
"type": "String"
}
],
"nextLink": "https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/departments/123/providers/Microsoft.CostManagement/Forecast?api-version=2021-10-01&$skiptoken=AQAAAA%3D%3D",
"rows": [
[
2.10333307059661,
20180331,
"Forecast",
"USD"
],
[
218.68795741935486,
20180331,
"Forecast",
"USD"
],
[
0.14384913581657052,
20180401,
"Forecast",
"USD"
],
[
0.009865586851323632,
20180429,
"Forecast",
"USD"
]
]
}
}
EnrollmentAccountForecast
Sample request
POST https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/enrollmentAccounts/456/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01
{
"type": "Usage",
"dataset": {
"aggregation": {
"totalCost": {
"name": "Cost",
"function": "Sum"
}
},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": [
"East US",
"West Europe"
]
}
},
{
"tags": {
"name": "Environment",
"operator": "In",
"values": [
"UAT",
"Prod"
]
}
}
]
},
{
"dimensions": {
"name": "ResourceGroup",
"operator": "In",
"values": [
"API"
]
}
}
]
},
"granularity": "Daily"
},
"includeActualCost": false,
"includeFreshPartialCost": false,
"timePeriod": {
"from": "2022-08-01T00:00:00+00:00",
"to": "2022-08-31T23:59:59+00:00"
},
"timeframe": "Custom"
}
from azure.identity import DefaultAzureCredential
from azure.mgmt.costmanagement import CostManagementClient
"""
# PREREQUISITES
pip install azure-identity
pip install azure-mgmt-costmanagement
# USAGE
python enrollment_account_forecast.py
Before run the sample, please set the values of the client ID, tenant ID and client secret
of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID,
AZURE_CLIENT_SECRET. For more info about how to get the value, please see:
https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal
"""
def main():
client = CostManagementClient(
credential=DefaultAzureCredential(),
)
response = client.forecast.usage(
scope="providers/Microsoft.Billing/billingAccounts/12345:6789/enrollmentAccounts/456",
parameters={
"dataset": {
"aggregation": {"totalCost": {"function": "Sum", "name": "Cost"}},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": ["East US", "West Europe"],
}
},
{"tags": {"name": "Environment", "operator": "In", "values": ["UAT", "Prod"]}},
]
},
{"dimensions": {"name": "ResourceGroup", "operator": "In", "values": ["API"]}},
]
},
"granularity": "Daily",
},
"includeActualCost": False,
"includeFreshPartialCost": False,
"timePeriod": {"from": "2022-08-01T00:00:00+00:00", "to": "2022-08-31T23:59:59+00:00"},
"timeframe": "Custom",
"type": "Usage",
},
)
print(response)
# x-ms-original-file: 2025-03-01/EnrollmentAccountForecast.json
if __name__ == "__main__":
main()
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
package armcostmanagement_test
import (
"context"
"log"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/costmanagement/armcostmanagement/v3"
)
// Generated from example definition: 2025-03-01/EnrollmentAccountForecast.json
func ExampleForecastClient_Usage_enrollmentAccountForecast() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
ctx := context.Background()
clientFactory, err := armcostmanagement.NewClientFactory(cred, nil)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
res, err := clientFactory.NewForecastClient().Usage(ctx, "providers/Microsoft.Billing/billingAccounts/12345:6789/enrollmentAccounts/456", armcostmanagement.ForecastDefinition{
Type: to.Ptr(armcostmanagement.ForecastTypeUsage),
Dataset: &armcostmanagement.ForecastDataset{
Aggregation: map[string]*armcostmanagement.ForecastAggregation{
"totalCost": {
Name: to.Ptr(armcostmanagement.FunctionNameCost),
Function: to.Ptr(armcostmanagement.FunctionTypeSum),
},
},
Filter: &armcostmanagement.ForecastFilter{
And: []*armcostmanagement.ForecastFilter{
{
Or: []*armcostmanagement.ForecastFilter{
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceLocation"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("East US"),
to.Ptr("West Europe"),
},
},
},
{
Tags: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("Environment"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("UAT"),
to.Ptr("Prod"),
},
},
},
},
},
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceGroup"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("API"),
},
},
},
},
},
Granularity: to.Ptr(armcostmanagement.GranularityTypeDaily),
},
IncludeActualCost: to.Ptr(false),
IncludeFreshPartialCost: to.Ptr(false),
TimePeriod: &armcostmanagement.ForecastTimePeriod{
From: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-01T00:00:00+00:00"); return t }()),
To: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-31T23:59:59+00:00"); return t }()),
},
Timeframe: to.Ptr(armcostmanagement.ForecastTimeframeCustom),
}, nil)
if err != nil {
log.Fatalf("failed to finish the request: %v", err)
}
// You could use response here. We use blank identifier for just demo purposes.
_ = res
// If the HTTP response code is 200 as defined in example definition, your response structure would look as follows. Please pay attention that all the values in the output are fake values for just demo purposes.
// res = armcostmanagement.ForecastClientUsageResponse{
// ForecastResult: armcostmanagement.ForecastResult{
// Name: to.Ptr("ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Type: to.Ptr("Microsoft.CostManagement/query"),
// ID: to.Ptr("/providers/Microsoft.Billing/billingAccounts/12345:6789/enrollmentAccounts/456/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Properties: &armcostmanagement.ForecastProperties{
// Columns: []*armcostmanagement.ForecastColumn{
// {
// Name: to.Ptr("PreTaxCost"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("UsageDate"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("CostStatus"),
// Type: to.Ptr("String"),
// },
// {
// Name: to.Ptr("Currency"),
// Type: to.Ptr("String"),
// },
// },
// NextLink: to.Ptr("https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/enrollmentAccounts/456/providers/Microsoft.CostManagement/Forecast?api-version=2021-10-01&$skiptoken=AQAAAA%3D%3D"),
// Rows: [][]any{
// []any{
// 2.10333307059661,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 218.68795741935486,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 0.14384913581657052,
// 20180401,
// "Forecast",
// "USD",
// },
// []any{
// 0.009865586851323632,
// 20180429,
// "Forecast",
// "USD",
// },
// },
// },
// },
// }
}
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
Sample response
{
"name": "ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"type": "Microsoft.CostManagement/query",
"id": "/providers/Microsoft.Billing/billingAccounts/12345:6789/enrollmentAccounts/456/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"properties": {
"columns": [
{
"name": "PreTaxCost",
"type": "Number"
},
{
"name": "UsageDate",
"type": "Number"
},
{
"name": "CostStatus",
"type": "String"
},
{
"name": "Currency",
"type": "String"
}
],
"nextLink": "https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/enrollmentAccounts/456/providers/Microsoft.CostManagement/Forecast?api-version=2021-10-01&$skiptoken=AQAAAA%3D%3D",
"rows": [
[
2.10333307059661,
20180331,
"Forecast",
"USD"
],
[
218.68795741935486,
20180331,
"Forecast",
"USD"
],
[
0.14384913581657052,
20180401,
"Forecast",
"USD"
],
[
0.009865586851323632,
20180429,
"Forecast",
"USD"
]
]
}
}
InvoiceSectionForecast
Sample request
POST https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/invoiceSections/9876/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01
{
"type": "Usage",
"dataset": {
"aggregation": {
"totalCost": {
"name": "Cost",
"function": "Sum"
}
},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": [
"East US",
"West Europe"
]
}
},
{
"tags": {
"name": "Environment",
"operator": "In",
"values": [
"UAT",
"Prod"
]
}
}
]
},
{
"dimensions": {
"name": "ResourceGroup",
"operator": "In",
"values": [
"API"
]
}
}
]
},
"granularity": "Daily"
},
"includeActualCost": false,
"includeFreshPartialCost": false,
"timePeriod": {
"from": "2022-08-01T00:00:00+00:00",
"to": "2022-08-31T23:59:59+00:00"
},
"timeframe": "Custom"
}
from azure.identity import DefaultAzureCredential
from azure.mgmt.costmanagement import CostManagementClient
"""
# PREREQUISITES
pip install azure-identity
pip install azure-mgmt-costmanagement
# USAGE
python invoice_section_forecast.py
Before run the sample, please set the values of the client ID, tenant ID and client secret
of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID,
AZURE_CLIENT_SECRET. For more info about how to get the value, please see:
https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal
"""
def main():
client = CostManagementClient(
credential=DefaultAzureCredential(),
)
response = client.forecast.usage(
scope="providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/invoiceSections/9876",
parameters={
"dataset": {
"aggregation": {"totalCost": {"function": "Sum", "name": "Cost"}},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": ["East US", "West Europe"],
}
},
{"tags": {"name": "Environment", "operator": "In", "values": ["UAT", "Prod"]}},
]
},
{"dimensions": {"name": "ResourceGroup", "operator": "In", "values": ["API"]}},
]
},
"granularity": "Daily",
},
"includeActualCost": False,
"includeFreshPartialCost": False,
"timePeriod": {"from": "2022-08-01T00:00:00+00:00", "to": "2022-08-31T23:59:59+00:00"},
"timeframe": "Custom",
"type": "Usage",
},
)
print(response)
# x-ms-original-file: 2025-03-01/InvoiceSectionForecast.json
if __name__ == "__main__":
main()
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
package armcostmanagement_test
import (
"context"
"log"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/costmanagement/armcostmanagement/v3"
)
// Generated from example definition: 2025-03-01/InvoiceSectionForecast.json
func ExampleForecastClient_Usage_invoiceSectionForecast() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
ctx := context.Background()
clientFactory, err := armcostmanagement.NewClientFactory(cred, nil)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
res, err := clientFactory.NewForecastClient().Usage(ctx, "providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/invoiceSections/9876", armcostmanagement.ForecastDefinition{
Type: to.Ptr(armcostmanagement.ForecastTypeUsage),
Dataset: &armcostmanagement.ForecastDataset{
Aggregation: map[string]*armcostmanagement.ForecastAggregation{
"totalCost": {
Name: to.Ptr(armcostmanagement.FunctionNameCost),
Function: to.Ptr(armcostmanagement.FunctionTypeSum),
},
},
Filter: &armcostmanagement.ForecastFilter{
And: []*armcostmanagement.ForecastFilter{
{
Or: []*armcostmanagement.ForecastFilter{
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceLocation"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("East US"),
to.Ptr("West Europe"),
},
},
},
{
Tags: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("Environment"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("UAT"),
to.Ptr("Prod"),
},
},
},
},
},
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceGroup"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("API"),
},
},
},
},
},
Granularity: to.Ptr(armcostmanagement.GranularityTypeDaily),
},
IncludeActualCost: to.Ptr(false),
IncludeFreshPartialCost: to.Ptr(false),
TimePeriod: &armcostmanagement.ForecastTimePeriod{
From: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-01T00:00:00+00:00"); return t }()),
To: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-31T23:59:59+00:00"); return t }()),
},
Timeframe: to.Ptr(armcostmanagement.ForecastTimeframeCustom),
}, nil)
if err != nil {
log.Fatalf("failed to finish the request: %v", err)
}
// You could use response here. We use blank identifier for just demo purposes.
_ = res
// If the HTTP response code is 200 as defined in example definition, your response structure would look as follows. Please pay attention that all the values in the output are fake values for just demo purposes.
// res = armcostmanagement.ForecastClientUsageResponse{
// ForecastResult: armcostmanagement.ForecastResult{
// Name: to.Ptr("ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Type: to.Ptr("Microsoft.CostManagement/query"),
// ID: to.Ptr("/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/invoiceSections/9876/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd"),
// Properties: &armcostmanagement.ForecastProperties{
// Columns: []*armcostmanagement.ForecastColumn{
// {
// Name: to.Ptr("PreTaxCost"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("UsageDate"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("CostStatus"),
// Type: to.Ptr("String"),
// },
// {
// Name: to.Ptr("Currency"),
// Type: to.Ptr("String"),
// },
// },
// NextLink: to.Ptr("https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/invoiceSections/9876/providers/Microsoft.CostManagement/Forecast?api-version=2019-10-01&$skiptoken=AQAAAA%3D%3D"),
// Rows: [][]any{
// []any{
// 2.10333307059661,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 218.68795741935486,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 0.14384913581657052,
// 20180401,
// "Forecast",
// "USD",
// },
// []any{
// 0.009865586851323632,
// 20180429,
// "Forecast",
// "USD",
// },
// },
// },
// },
// }
}
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
Sample response
{
"name": "ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"type": "Microsoft.CostManagement/query",
"id": "/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/invoiceSections/9876/providers/Microsoft.CostManagement/query/ad67fd91-c131-4bda-9ba9-7187ecb1cebd",
"properties": {
"columns": [
{
"name": "PreTaxCost",
"type": "Number"
},
{
"name": "UsageDate",
"type": "Number"
},
{
"name": "CostStatus",
"type": "String"
},
{
"name": "Currency",
"type": "String"
}
],
"nextLink": "https://management.azure.com/providers/Microsoft.Billing/billingAccounts/12345:6789/billingProfiles/13579/invoiceSections/9876/providers/Microsoft.CostManagement/Forecast?api-version=2019-10-01&$skiptoken=AQAAAA%3D%3D",
"rows": [
[
2.10333307059661,
20180331,
"Forecast",
"USD"
],
[
218.68795741935486,
20180331,
"Forecast",
"USD"
],
[
0.14384913581657052,
20180401,
"Forecast",
"USD"
],
[
0.009865586851323632,
20180429,
"Forecast",
"USD"
]
]
}
}
ResourceGroupForecast
Sample request
POST https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ScreenSharingTest-peer/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01
{
"type": "Usage",
"dataset": {
"aggregation": {
"totalCost": {
"name": "Cost",
"function": "Sum"
}
},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": [
"East US",
"West Europe"
]
}
},
{
"tags": {
"name": "Environment",
"operator": "In",
"values": [
"UAT",
"Prod"
]
}
}
]
},
{
"dimensions": {
"name": "ResourceGroup",
"operator": "In",
"values": [
"API"
]
}
}
]
},
"granularity": "Daily"
},
"includeActualCost": false,
"includeFreshPartialCost": false,
"timePeriod": {
"from": "2022-08-01T00:00:00+00:00",
"to": "2022-08-31T23:59:59+00:00"
},
"timeframe": "Custom"
}
from azure.identity import DefaultAzureCredential
from azure.mgmt.costmanagement import CostManagementClient
"""
# PREREQUISITES
pip install azure-identity
pip install azure-mgmt-costmanagement
# USAGE
python resource_group_forecast.py
Before run the sample, please set the values of the client ID, tenant ID and client secret
of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID,
AZURE_CLIENT_SECRET. For more info about how to get the value, please see:
https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal
"""
def main():
client = CostManagementClient(
credential=DefaultAzureCredential(),
)
response = client.forecast.usage(
scope="subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ScreenSharingTest-peer",
parameters={
"dataset": {
"aggregation": {"totalCost": {"function": "Sum", "name": "Cost"}},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": ["East US", "West Europe"],
}
},
{"tags": {"name": "Environment", "operator": "In", "values": ["UAT", "Prod"]}},
]
},
{"dimensions": {"name": "ResourceGroup", "operator": "In", "values": ["API"]}},
]
},
"granularity": "Daily",
},
"includeActualCost": False,
"includeFreshPartialCost": False,
"timePeriod": {"from": "2022-08-01T00:00:00+00:00", "to": "2022-08-31T23:59:59+00:00"},
"timeframe": "Custom",
"type": "Usage",
},
)
print(response)
# x-ms-original-file: 2025-03-01/ResourceGroupForecast.json
if __name__ == "__main__":
main()
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
package armcostmanagement_test
import (
"context"
"log"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/costmanagement/armcostmanagement/v3"
)
// Generated from example definition: 2025-03-01/ResourceGroupForecast.json
func ExampleForecastClient_Usage_resourceGroupForecast() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
ctx := context.Background()
clientFactory, err := armcostmanagement.NewClientFactory(cred, nil)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
res, err := clientFactory.NewForecastClient().Usage(ctx, "subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ScreenSharingTest-peer", armcostmanagement.ForecastDefinition{
Type: to.Ptr(armcostmanagement.ForecastTypeUsage),
Dataset: &armcostmanagement.ForecastDataset{
Aggregation: map[string]*armcostmanagement.ForecastAggregation{
"totalCost": {
Name: to.Ptr(armcostmanagement.FunctionNameCost),
Function: to.Ptr(armcostmanagement.FunctionTypeSum),
},
},
Filter: &armcostmanagement.ForecastFilter{
And: []*armcostmanagement.ForecastFilter{
{
Or: []*armcostmanagement.ForecastFilter{
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceLocation"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("East US"),
to.Ptr("West Europe"),
},
},
},
{
Tags: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("Environment"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("UAT"),
to.Ptr("Prod"),
},
},
},
},
},
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceGroup"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("API"),
},
},
},
},
},
Granularity: to.Ptr(armcostmanagement.GranularityTypeDaily),
},
IncludeActualCost: to.Ptr(false),
IncludeFreshPartialCost: to.Ptr(false),
TimePeriod: &armcostmanagement.ForecastTimePeriod{
From: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-01T00:00:00+00:00"); return t }()),
To: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-31T23:59:59+00:00"); return t }()),
},
Timeframe: to.Ptr(armcostmanagement.ForecastTimeframeCustom),
}, nil)
if err != nil {
log.Fatalf("failed to finish the request: %v", err)
}
// You could use response here. We use blank identifier for just demo purposes.
_ = res
// If the HTTP response code is 200 as defined in example definition, your response structure would look as follows. Please pay attention that all the values in the output are fake values for just demo purposes.
// res = armcostmanagement.ForecastClientUsageResponse{
// ForecastResult: armcostmanagement.ForecastResult{
// Name: to.Ptr("55312978-ba1b-415c-9304-cfd9c43c0481"),
// Type: to.Ptr("Microsoft.CostManagement/query"),
// ID: to.Ptr("/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ScreenSharingTest-peer/providers/Microsoft.CostManagement/query/00000000-0000-0000-0000-000000000000"),
// Properties: &armcostmanagement.ForecastProperties{
// Columns: []*armcostmanagement.ForecastColumn{
// {
// Name: to.Ptr("PreTaxCost"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("UsageDate"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("CostStatus"),
// Type: to.Ptr("String"),
// },
// {
// Name: to.Ptr("Currency"),
// Type: to.Ptr("String"),
// },
// },
// Rows: [][]any{
// []any{
// 2.10333307059661,
// 20180331,
// "Forecast",
// "USD",
// },
// },
// },
// },
// }
}
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
Sample response
{
"name": "55312978-ba1b-415c-9304-cfd9c43c0481",
"type": "Microsoft.CostManagement/query",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/ScreenSharingTest-peer/providers/Microsoft.CostManagement/query/00000000-0000-0000-0000-000000000000",
"properties": {
"columns": [
{
"name": "PreTaxCost",
"type": "Number"
},
{
"name": "UsageDate",
"type": "Number"
},
{
"name": "CostStatus",
"type": "String"
},
{
"name": "Currency",
"type": "String"
}
],
"nextLink": null,
"rows": [
[
2.10333307059661,
20180331,
"Forecast",
"USD"
]
]
}
}
SubscriptionForecast
Sample request
POST https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.CostManagement/forecast?api-version=2025-03-01
{
"type": "Usage",
"dataset": {
"aggregation": {
"totalCost": {
"name": "Cost",
"function": "Sum"
}
},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": [
"East US",
"West Europe"
]
}
},
{
"tags": {
"name": "Environment",
"operator": "In",
"values": [
"UAT",
"Prod"
]
}
}
]
},
{
"dimensions": {
"name": "ResourceGroup",
"operator": "In",
"values": [
"API"
]
}
}
]
},
"granularity": "Daily"
},
"includeActualCost": false,
"includeFreshPartialCost": false,
"timePeriod": {
"from": "2022-08-01T00:00:00+00:00",
"to": "2022-08-31T23:59:59+00:00"
},
"timeframe": "Custom"
}
from azure.identity import DefaultAzureCredential
from azure.mgmt.costmanagement import CostManagementClient
"""
# PREREQUISITES
pip install azure-identity
pip install azure-mgmt-costmanagement
# USAGE
python subscription_forecast.py
Before run the sample, please set the values of the client ID, tenant ID and client secret
of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID,
AZURE_CLIENT_SECRET. For more info about how to get the value, please see:
https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal
"""
def main():
client = CostManagementClient(
credential=DefaultAzureCredential(),
)
response = client.forecast.usage(
scope="subscriptions/00000000-0000-0000-0000-000000000000",
parameters={
"dataset": {
"aggregation": {"totalCost": {"function": "Sum", "name": "Cost"}},
"filter": {
"and": [
{
"or": [
{
"dimensions": {
"name": "ResourceLocation",
"operator": "In",
"values": ["East US", "West Europe"],
}
},
{"tags": {"name": "Environment", "operator": "In", "values": ["UAT", "Prod"]}},
]
},
{"dimensions": {"name": "ResourceGroup", "operator": "In", "values": ["API"]}},
]
},
"granularity": "Daily",
},
"includeActualCost": False,
"includeFreshPartialCost": False,
"timePeriod": {"from": "2022-08-01T00:00:00+00:00", "to": "2022-08-31T23:59:59+00:00"},
"timeframe": "Custom",
"type": "Usage",
},
)
print(response)
# x-ms-original-file: 2025-03-01/SubscriptionForecast.json
if __name__ == "__main__":
main()
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
package armcostmanagement_test
import (
"context"
"log"
"time"
"github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/costmanagement/armcostmanagement/v3"
)
// Generated from example definition: 2025-03-01/SubscriptionForecast.json
func ExampleForecastClient_Usage_subscriptionForecast() {
cred, err := azidentity.NewDefaultAzureCredential(nil)
if err != nil {
log.Fatalf("failed to obtain a credential: %v", err)
}
ctx := context.Background()
clientFactory, err := armcostmanagement.NewClientFactory(cred, nil)
if err != nil {
log.Fatalf("failed to create client: %v", err)
}
res, err := clientFactory.NewForecastClient().Usage(ctx, "subscriptions/00000000-0000-0000-0000-000000000000", armcostmanagement.ForecastDefinition{
Type: to.Ptr(armcostmanagement.ForecastTypeUsage),
Dataset: &armcostmanagement.ForecastDataset{
Aggregation: map[string]*armcostmanagement.ForecastAggregation{
"totalCost": {
Name: to.Ptr(armcostmanagement.FunctionNameCost),
Function: to.Ptr(armcostmanagement.FunctionTypeSum),
},
},
Filter: &armcostmanagement.ForecastFilter{
And: []*armcostmanagement.ForecastFilter{
{
Or: []*armcostmanagement.ForecastFilter{
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceLocation"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("East US"),
to.Ptr("West Europe"),
},
},
},
{
Tags: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("Environment"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("UAT"),
to.Ptr("Prod"),
},
},
},
},
},
{
Dimensions: &armcostmanagement.ForecastComparisonExpression{
Name: to.Ptr("ResourceGroup"),
Operator: to.Ptr(armcostmanagement.ForecastOperatorTypeIn),
Values: []*string{
to.Ptr("API"),
},
},
},
},
},
Granularity: to.Ptr(armcostmanagement.GranularityTypeDaily),
},
IncludeActualCost: to.Ptr(false),
IncludeFreshPartialCost: to.Ptr(false),
TimePeriod: &armcostmanagement.ForecastTimePeriod{
From: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-01T00:00:00+00:00"); return t }()),
To: to.Ptr(func() time.Time { t, _ := time.Parse(time.RFC3339Nano, "2022-08-31T23:59:59+00:00"); return t }()),
},
Timeframe: to.Ptr(armcostmanagement.ForecastTimeframeCustom),
}, nil)
if err != nil {
log.Fatalf("failed to finish the request: %v", err)
}
// You could use response here. We use blank identifier for just demo purposes.
_ = res
// If the HTTP response code is 200 as defined in example definition, your response structure would look as follows. Please pay attention that all the values in the output are fake values for just demo purposes.
// res = armcostmanagement.ForecastClientUsageResponse{
// ForecastResult: armcostmanagement.ForecastResult{
// Name: to.Ptr("55312978-ba1b-415c-9304-cfd9c43c0481"),
// Type: to.Ptr("Microsoft.CostManagement/query"),
// ID: to.Ptr("/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.CostManagement/query/00000000-0000-0000-0000-000000000000"),
// Properties: &armcostmanagement.ForecastProperties{
// Columns: []*armcostmanagement.ForecastColumn{
// {
// Name: to.Ptr("PreTaxCost"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("UsageDate"),
// Type: to.Ptr("Number"),
// },
// {
// Name: to.Ptr("CostStatus"),
// Type: to.Ptr("String"),
// },
// {
// Name: to.Ptr("Currency"),
// Type: to.Ptr("String"),
// },
// },
// Rows: [][]any{
// []any{
// 2.10333307059661,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 218.68795741935486,
// 20180331,
// "Forecast",
// "USD",
// },
// []any{
// 0.14384913581657052,
// 20180401,
// "Forecast",
// "USD",
// },
// []any{
// 0.009865586851323632,
// 20180429,
// "Forecast",
// "USD",
// },
// },
// },
// },
// }
}
To use the Azure SDK library in your project, see this documentation. To provide feedback on this code sample, open a GitHub issue
Sample response
{
"name": "55312978-ba1b-415c-9304-cfd9c43c0481",
"type": "Microsoft.CostManagement/query",
"id": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.CostManagement/query/00000000-0000-0000-0000-000000000000",
"properties": {
"columns": [
{
"name": "PreTaxCost",
"type": "Number"
},
{
"name": "UsageDate",
"type": "Number"
},
{
"name": "CostStatus",
"type": "String"
},
{
"name": "Currency",
"type": "String"
}
],
"nextLink": null,
"rows": [
[
2.10333307059661,
20180331,
"Forecast",
"USD"
],
[
218.68795741935486,
20180331,
"Forecast",
"USD"
],
[
0.14384913581657052,
20180401,
"Forecast",
"USD"
],
[
0.009865586851323632,
20180429,
"Forecast",
"USD"
]
]
}
}
Definitions
| Name |
Description |
|
ErrorDetails
|
The details of the error.
|
|
ErrorResponse
|
Error response indicates that the service is not able to process the incoming request. The reason is provided in the error message. \n\nSome Error responses: \n\n * 429 TooManyRequests - Request is throttled. Retry after waiting for the time specified in the "x-ms-ratelimit-microsoft.consumption-retry-after" header. \n\n * 503 ServiceUnavailable - Service is temporarily unavailable. Retry after waiting for the time specified in the "Retry-After" header.
|
|
ForecastAggregation
|
The aggregation expression to be used in the forecast.
|
|
ForecastColumn
|
Forecast column properties
|
|
ForecastComparisonExpression
|
The comparison expression to be used in the forecast.
|
|
ForecastDataset
|
The definition of data present in the forecast.
|
|
ForecastDatasetConfiguration
|
The configuration of dataset in the forecast.
|
|
ForecastDefinition
|
The definition of a forecast.
|
|
ForecastFilter
|
The filter expression to be used in the export.
|
|
ForecastOperatorType
|
The operator to use for comparison.
|
|
ForecastResult
|
Result of forecast. It contains all columns listed under groupings and aggregation.
|
|
ForecastTimeframe
|
The time frame for pulling data for the forecast.
|
|
ForecastTimePeriod
|
Has time period for pulling data for the forecast.
|
|
ForecastType
|
The type of the forecast.
|
|
FunctionName
|
The name of the column to aggregate.
|
|
FunctionType
|
The name of the aggregation function to use.
|
|
GranularityType
|
The granularity of rows in the export. Currently 'Daily' is supported for most cases.
|
ErrorDetails
Object
The details of the error.
| Name |
Type |
Description |
|
code
|
string
|
Error code.
|
|
message
|
string
|
Error message indicating why the operation failed.
|
ErrorResponse
Object
Error response indicates that the service is not able to process the incoming request. The reason is provided in the error message. \n\nSome Error responses: \n\n * 429 TooManyRequests - Request is throttled. Retry after waiting for the time specified in the "x-ms-ratelimit-microsoft.consumption-retry-after" header. \n\n * 503 ServiceUnavailable - Service is temporarily unavailable. Retry after waiting for the time specified in the "Retry-After" header.
| Name |
Type |
Description |
|
error
|
ErrorDetails
|
The details of the error.
|
ForecastAggregation
Object
The aggregation expression to be used in the forecast.
| Name |
Type |
Description |
|
function
|
FunctionType
|
The name of the aggregation function to use.
|
|
name
|
FunctionName
|
The name of the column to aggregate.
|
ForecastColumn
Object
Forecast column properties
| Name |
Type |
Description |
|
name
|
string
|
The name of column.
|
|
type
|
string
|
The type of column.
|
ForecastComparisonExpression
Object
The comparison expression to be used in the forecast.
| Name |
Type |
Description |
|
name
|
string
|
The name of the column to use in comparison.
|
|
operator
|
ForecastOperatorType
|
The operator to use for comparison.
|
|
values
|
string[]
|
Array of values to use for comparison
|
ForecastDataset
Object
The definition of data present in the forecast.
| Name |
Type |
Description |
|
aggregation
|
<string,
ForecastAggregation>
|
Dictionary of aggregation expression to use in the forecast. The key of each item in the dictionary is the alias for the aggregated column. forecast can have up to 2 aggregation clauses.
|
|
configuration
|
ForecastDatasetConfiguration
|
Has configuration information for the data in the export. The configuration will be ignored if aggregation and grouping are provided.
|
|
filter
|
ForecastFilter
|
Has filter expression to use in the forecast.
|
|
granularity
|
GranularityType
|
The granularity of rows in the forecast.
|
ForecastDatasetConfiguration
Object
The configuration of dataset in the forecast.
| Name |
Type |
Description |
|
columns
|
string[]
|
Array of column names to be included in the forecast. Any valid forecast column name is allowed. If not provided, then forecast includes all columns.
|
ForecastDefinition
Object
The definition of a forecast.
| Name |
Type |
Description |
|
dataset
|
ForecastDataset
|
Has definition for data in this forecast.
|
|
includeActualCost
|
boolean
|
A boolean determining if actualCost will be included.
|
|
includeFreshPartialCost
|
boolean
|
A boolean determining if FreshPartialCost will be included.
|
|
timePeriod
|
ForecastTimePeriod
|
Has time period for pulling data for the forecast.
|
|
timeframe
|
ForecastTimeframe
|
The time frame for pulling data for the forecast. If custom, then a specific time period must be provided.
|
|
type
|
ForecastType
|
The type of the forecast.
|
ForecastFilter
Object
The filter expression to be used in the export.
ForecastOperatorType
Enumeration
The operator to use for comparison.
ForecastResult
Object
Result of forecast. It contains all columns listed under groupings and aggregation.
| Name |
Type |
Description |
|
eTag
|
string
|
ETag of the resource.
|
|
id
|
string
|
Resource Id.
|
|
location
|
string
|
Location of the resource.
|
|
name
|
string
|
Resource name.
|
|
properties.columns
|
ForecastColumn[]
|
Array of columns
|
|
properties.nextLink
|
string
|
The link (url) to the next page of results.
|
|
properties.rows
|
Rows[]
|
Array of rows
|
|
sku
|
string
|
SKU of the resource.
|
|
tags
|
object
|
Resource tags.
|
|
type
|
string
|
Resource type.
|
ForecastTimeframe
Enumeration
The time frame for pulling data for the forecast.
ForecastTimePeriod
Object
Has time period for pulling data for the forecast.
| Name |
Type |
Description |
|
from
|
string
(date-time)
|
The start date to pull data from.
|
|
to
|
string
(date-time)
|
The end date to pull data to.
|
ForecastType
Enumeration
The type of the forecast.
| Value |
Description |
|
Usage
|
|
|
ActualCost
|
|
|
AmortizedCost
|
|
FunctionName
Enumeration
The name of the column to aggregate.
| Value |
Description |
|
PreTaxCostUSD
|
|
|
Cost
|
|
|
CostUSD
|
|
|
PreTaxCost
|
|
FunctionType
Enumeration
The name of the aggregation function to use.
GranularityType
Enumeration
The granularity of rows in the export. Currently 'Daily' is supported for most cases.
| Value |
Description |
|
Daily
|
|
|
Monthly
|
|