curl --request POST \
--url https://api.gcore.com/cloud/v1/cost_report/totals \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"projects": [
16,
17,
18,
19,
20
],
"regions": [
18,
76
],
"response_format": "json",
"schema_filter": {
"field": "flavor",
"type": "instance",
"values": [
"g1-standard-1-2"
]
},
"tags": {
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": true,
"value": "22.04"
},
{
"key": "os_version",
"strict": true,
"value": "23.04"
}
]
},
"time_from": "2024-08-01T00:00:00",
"time_to": "2024-09-01T00:00:00",
"types": [
"egress_traffic",
"instance"
]
}
'import requests
url = "https://api.gcore.com/cloud/v1/cost_report/totals"
payload = {
"projects": [16, 17, 18, 19, 20],
"regions": [18, 76],
"response_format": "json",
"schema_filter": {
"field": "flavor",
"type": "instance",
"values": ["g1-standard-1-2"]
},
"tags": {
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": True,
"value": "22.04"
},
{
"key": "os_version",
"strict": True,
"value": "23.04"
}
]
},
"time_from": "2024-08-01T00:00:00",
"time_to": "2024-09-01T00:00:00",
"types": ["egress_traffic", "instance"]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
projects: [16, 17, 18, 19, 20],
regions: [18, 76],
response_format: 'json',
schema_filter: {field: 'flavor', type: 'instance', values: ['g1-standard-1-2']},
tags: {
condition_type: 'OR',
conditions: [
{key: 'os_version', strict: true, value: '22.04'},
{key: 'os_version', strict: true, value: '23.04'}
]
},
time_from: '2024-08-01T00:00:00',
time_to: '2024-09-01T00:00:00',
types: ['egress_traffic', 'instance']
})
};
fetch('https://api.gcore.com/cloud/v1/cost_report/totals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gcore.com/cloud/v1/cost_report/totals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'projects' => [
16,
17,
18,
19,
20
],
'regions' => [
18,
76
],
'response_format' => 'json',
'schema_filter' => [
'field' => 'flavor',
'type' => 'instance',
'values' => [
'g1-standard-1-2'
]
],
'tags' => [
'condition_type' => 'OR',
'conditions' => [
[
'key' => 'os_version',
'strict' => true,
'value' => '22.04'
],
[
'key' => 'os_version',
'strict' => true,
'value' => '23.04'
]
]
],
'time_from' => '2024-08-01T00:00:00',
'time_to' => '2024-09-01T00:00:00',
'types' => [
'egress_traffic',
'instance'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gcore.com/cloud/v1/cost_report/totals"
payload := strings.NewReader("{\n \"projects\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"regions\": [\n 18,\n 76\n ],\n \"response_format\": \"json\",\n \"schema_filter\": {\n \"field\": \"flavor\",\n \"type\": \"instance\",\n \"values\": [\n \"g1-standard-1-2\"\n ]\n },\n \"tags\": {\n \"condition_type\": \"OR\",\n \"conditions\": [\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"22.04\"\n },\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"23.04\"\n }\n ]\n },\n \"time_from\": \"2024-08-01T00:00:00\",\n \"time_to\": \"2024-09-01T00:00:00\",\n \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gcore.com/cloud/v1/cost_report/totals")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"projects\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"regions\": [\n 18,\n 76\n ],\n \"response_format\": \"json\",\n \"schema_filter\": {\n \"field\": \"flavor\",\n \"type\": \"instance\",\n \"values\": [\n \"g1-standard-1-2\"\n ]\n },\n \"tags\": {\n \"condition_type\": \"OR\",\n \"conditions\": [\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"22.04\"\n },\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"23.04\"\n }\n ]\n },\n \"time_from\": \"2024-08-01T00:00:00\",\n \"time_to\": \"2024-09-01T00:00:00\",\n \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gcore.com/cloud/v1/cost_report/totals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"projects\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"regions\": [\n 18,\n 76\n ],\n \"response_format\": \"json\",\n \"schema_filter\": {\n \"field\": \"flavor\",\n \"type\": \"instance\",\n \"values\": [\n \"g1-standard-1-2\"\n ]\n },\n \"tags\": {\n \"condition_type\": \"OR\",\n \"conditions\": [\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"22.04\"\n },\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"23.04\"\n }\n ]\n },\n \"time_from\": \"2024-08-01T00:00:00\",\n \"time_to\": \"2024-09-01T00:00:00\",\n \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"count": 1,
"price_status": "error",
"results": [
{
"billing_feature_name": "AI Infrastructure: bm3-ai-1xlarge-h100-80-8 (2 x Intel Xeon 8480+, 2TB RAM, 8x3.84 TB NVMe, 8x Nvidia H100, IB 3.2 Tbit/s, 2x100Gbit/s Ethernet) Luxembourg-2 - PAYG",
"billing_metric_name": "bm3-ai-1xlarge-h100-80-8_min",
"billing_value": 1000,
"billing_value_unit": "minutes",
"cost": 1000,
"currency": "EUR",
"err": null,
"flavor": "bm3-ai-1xlarge-h100-80-8",
"region": 76,
"region_id": 76,
"type": "ai_cluster"
}
]
}Get cost report totals (pay-as-you-go only)
Deprecated Use /v2/cost_report/breakdown instead.
The v2 report is different from this report:
- This report returns one row for each billing metric and region for the full period. The v2 report
returns one row for each day and one
group_byvalue. - The v2 report moves
billing_value,billing_value_unit,costandcurrencytousage.value,usage.unit,usage.costandusage.currency. Theerrfield iserror. - The v2
flavorfield also contains thevolume_type,file_share_typeandinstance_typevalues. - The v2 report has no
billing_metric_nameandbilling_feature_namefields. - The v2 request uses
region_idsandproject_ids. It has noschema_filterandroundingfields.
Get cost report totals (aggregated costs) for a given period. Requested period should not exceed 31 days.
Note: This report assumes there are no active commit features in the billing plan.
If there are active commit features (pre-paid resources) in your plan, use /v1/reservation_cost_report/totals,
as the results from this report will not be accurate.
Data from the past hour may not reflect the full set of statistics. For the most complete and accurate results, we recommend accessing the data at least one hour after the relevant time period. Updates are generally available within a 24-hour window, though timing can vary. Scheduled maintenance or other exceptions may occasionally cause delays beyond 24 hours.
curl --request POST \
--url https://api.gcore.com/cloud/v1/cost_report/totals \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"projects": [
16,
17,
18,
19,
20
],
"regions": [
18,
76
],
"response_format": "json",
"schema_filter": {
"field": "flavor",
"type": "instance",
"values": [
"g1-standard-1-2"
]
},
"tags": {
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": true,
"value": "22.04"
},
{
"key": "os_version",
"strict": true,
"value": "23.04"
}
]
},
"time_from": "2024-08-01T00:00:00",
"time_to": "2024-09-01T00:00:00",
"types": [
"egress_traffic",
"instance"
]
}
'import requests
url = "https://api.gcore.com/cloud/v1/cost_report/totals"
payload = {
"projects": [16, 17, 18, 19, 20],
"regions": [18, 76],
"response_format": "json",
"schema_filter": {
"field": "flavor",
"type": "instance",
"values": ["g1-standard-1-2"]
},
"tags": {
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": True,
"value": "22.04"
},
{
"key": "os_version",
"strict": True,
"value": "23.04"
}
]
},
"time_from": "2024-08-01T00:00:00",
"time_to": "2024-09-01T00:00:00",
"types": ["egress_traffic", "instance"]
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
projects: [16, 17, 18, 19, 20],
regions: [18, 76],
response_format: 'json',
schema_filter: {field: 'flavor', type: 'instance', values: ['g1-standard-1-2']},
tags: {
condition_type: 'OR',
conditions: [
{key: 'os_version', strict: true, value: '22.04'},
{key: 'os_version', strict: true, value: '23.04'}
]
},
time_from: '2024-08-01T00:00:00',
time_to: '2024-09-01T00:00:00',
types: ['egress_traffic', 'instance']
})
};
fetch('https://api.gcore.com/cloud/v1/cost_report/totals', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gcore.com/cloud/v1/cost_report/totals",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'projects' => [
16,
17,
18,
19,
20
],
'regions' => [
18,
76
],
'response_format' => 'json',
'schema_filter' => [
'field' => 'flavor',
'type' => 'instance',
'values' => [
'g1-standard-1-2'
]
],
'tags' => [
'condition_type' => 'OR',
'conditions' => [
[
'key' => 'os_version',
'strict' => true,
'value' => '22.04'
],
[
'key' => 'os_version',
'strict' => true,
'value' => '23.04'
]
]
],
'time_from' => '2024-08-01T00:00:00',
'time_to' => '2024-09-01T00:00:00',
'types' => [
'egress_traffic',
'instance'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gcore.com/cloud/v1/cost_report/totals"
payload := strings.NewReader("{\n \"projects\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"regions\": [\n 18,\n 76\n ],\n \"response_format\": \"json\",\n \"schema_filter\": {\n \"field\": \"flavor\",\n \"type\": \"instance\",\n \"values\": [\n \"g1-standard-1-2\"\n ]\n },\n \"tags\": {\n \"condition_type\": \"OR\",\n \"conditions\": [\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"22.04\"\n },\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"23.04\"\n }\n ]\n },\n \"time_from\": \"2024-08-01T00:00:00\",\n \"time_to\": \"2024-09-01T00:00:00\",\n \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gcore.com/cloud/v1/cost_report/totals")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"projects\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"regions\": [\n 18,\n 76\n ],\n \"response_format\": \"json\",\n \"schema_filter\": {\n \"field\": \"flavor\",\n \"type\": \"instance\",\n \"values\": [\n \"g1-standard-1-2\"\n ]\n },\n \"tags\": {\n \"condition_type\": \"OR\",\n \"conditions\": [\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"22.04\"\n },\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"23.04\"\n }\n ]\n },\n \"time_from\": \"2024-08-01T00:00:00\",\n \"time_to\": \"2024-09-01T00:00:00\",\n \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gcore.com/cloud/v1/cost_report/totals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"projects\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"regions\": [\n 18,\n 76\n ],\n \"response_format\": \"json\",\n \"schema_filter\": {\n \"field\": \"flavor\",\n \"type\": \"instance\",\n \"values\": [\n \"g1-standard-1-2\"\n ]\n },\n \"tags\": {\n \"condition_type\": \"OR\",\n \"conditions\": [\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"22.04\"\n },\n {\n \"key\": \"os_version\",\n \"strict\": true,\n \"value\": \"23.04\"\n }\n ]\n },\n \"time_from\": \"2024-08-01T00:00:00\",\n \"time_to\": \"2024-09-01T00:00:00\",\n \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"count": 1,
"price_status": "error",
"results": [
{
"billing_feature_name": "AI Infrastructure: bm3-ai-1xlarge-h100-80-8 (2 x Intel Xeon 8480+, 2TB RAM, 8x3.84 TB NVMe, 8x Nvidia H100, IB 3.2 Tbit/s, 2x100Gbit/s Ethernet) Luxembourg-2 - PAYG",
"billing_metric_name": "bm3-ai-1xlarge-h100-80-8_min",
"billing_value": 1000,
"billing_value_unit": "minutes",
"cost": 1000,
"currency": "EUR",
"err": null,
"flavor": "bm3-ai-1xlarge-h100-80-8",
"region": 76,
"region_id": 76,
"type": "ai_cluster"
}
]
}Authorizations
API key for authentication. Make sure to include the word apikey, followed by a single space and then your token.
Example: apikey 1234_abcdef
Body
The start date of the report period (ISO 8601). The report starts from the beginning of this day in UTC.
"2023-01-01T00:00:00Z"
The end date of the report period (ISO 8601). The report ends just before the beginning of this day in UTC.
"2023-02-01T00:00:00Z"
Expenses for the last specified day are taken into account. As the default, False.
false
List of project IDs
[16, 17, 18, 19, 20]
List of region IDs.
[1, 2, 3]
Format of the response (csv or json).
csv_totals, json "csv_totals"
"json"
Round cost values to 5 decimal places. When false, returns full precision.
Extended filter for field filtering.
- SchemaFilterSnapshotSerializer
- SchemaFilterInstanceSerializer
- SchemaFilterAiClusterSerializer
- SchemaFilterAiVirtualClusterSerializer
- SchemaFilterBasicVmSerializer
- SchemaFilterBaremetalSerializer
- SchemaFilterVolumeSerializer
- SchemaFilterFileShareSerializer
- SchemaFilterImageSerializer
- SchemaFilterFloatingIpSerializer
- SchemaFilterEgressTrafficSerializer
- SchemaFilterLoadBalancerSerializer
- SchemaFilterExternalIpSerializer
- SchemaFilterBackupSerializer
- SchemaFilterLogIndexSerializer
- SchemaFilterFunctionsSerializer
- SchemaFilterFunctionsCallsSerializer
- SchemaFilterFunctionsTrafficSerializer
- SchemaFilterContainersSerializer
- SchemaFilterInferenceSerializer
- SchemaFilterDBAASPostgreSQLVolumeSerializer
- SchemaFilterDBAASPostgreSQLPublicNetworkSerializer
- SchemaFilterDBAASPostgreSQLCPUSerializer
- SchemaFilterDBAASPostgreSQLMemorySerializer
- SchemaFilterDBAASPostgreSQLPoolerSerializer
Show child attributes
Show child attributes
{
"field": "flavor",
"type": "instance",
"values": ["g1-standard-1-2"]
}
Filter by tags
Show child attributes
Show child attributes
{
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": true,
"value": "22.04"
},
{
"key": "os_version",
"strict": true,
"value": "23.04"
}
]
}
List of resource types to be filtered in the report.
Resource types for prebilling report
ai_cluster, ai_virtual_cluster, backup, baremetal, basic_vm, containers, dbaas_postgresql_connection_pooler, dbaas_postgresql_cpu, dbaas_postgresql_memory, dbaas_postgresql_public_network, dbaas_postgresql_volume, egress_traffic, external_ip, file_share, floatingip, functions, functions_calls, functions_traffic, image, inference, inference_public_models, instance, load_balancer, log_index, snapshot, volume ["egress_traffic", "instance"]
Response
OK
Count of returned totals
x >= 01
Price status for the UI, type: string
error, hide, show - TotalAiClusterWithCostSerializer
- TotalAiVirtualClusterWithCostSerializer
- TotalBaremetalWithCostSerializer
- TotalBasicVmWithCostSerializer
- TotalBackupWithCostSerializer
- TotalContainerWithCostSerializer
- TotalEgressTrafficWithCostSerializer
- TotalExternalIpWithCostSerializer
- TotalFileShareWithCostSerializer
- TotalFloatingIpWithCostSerializer
- TotalFunctionsWithCostSerializer
- TotalFunctionCallsWithCostSerializer
- TotalFunctionEgressTrafficWithCostSerializer
- TotalImagesWithCostSerializer
- TotalInferenceWithCostSerializer
- TotalInstanceWithCostSerializer
- TotalLoadBalancerWithCostSerializer
- TotalLogIndexWithCostSerializer
- TotalSnapshotWithCostSerializer
- TotalVolumeWithCostSerializer
- TotalDBAASPostgreSQLPoolerWithCostSerializer
- TotalDBAASPostgreSQLMemoryWithCostSerializer
- TotalDBAASPostgreSQLPublicNetworkWithCostSerializer
- TotalDBAASPostgreSQLCPUWithCostSerializer
- TotalDBAASPostgreSQLVolumeWithCostSerializer
Show child attributes
Show child attributes
Was this page helpful?