curl --request POST \
--url https://api.gcore.com/cloud/v2/cost_report/breakdown \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"time_from": "2023-01-01T00:00:00Z",
"time_to": "2023-02-01T00:00:00Z",
"enable_last_day": false,
"group_by": "region",
"project_ids": [
16,
17,
18,
19,
20
],
"region_ids": [
0,
76
],
"response_format": "csv_records",
"tags": {
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": true,
"value": "22.04"
},
{
"key": "os_version",
"strict": true,
"value": "23.04"
}
]
},
"types": [
"egress_traffic",
"instance"
]
}
'import requests
url = "https://api.gcore.com/cloud/v2/cost_report/breakdown"
payload = {
"time_from": "2023-01-01T00:00:00Z",
"time_to": "2023-02-01T00:00:00Z",
"enable_last_day": False,
"group_by": "region",
"project_ids": [16, 17, 18, 19, 20],
"region_ids": [0, 76],
"response_format": "csv_records",
"tags": {
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": True,
"value": "22.04"
},
{
"key": "os_version",
"strict": True,
"value": "23.04"
}
]
},
"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({
time_from: '2023-01-01T00:00:00Z',
time_to: '2023-02-01T00:00:00Z',
enable_last_day: false,
group_by: 'region',
project_ids: [16, 17, 18, 19, 20],
region_ids: [0, 76],
response_format: 'csv_records',
tags: {
condition_type: 'OR',
conditions: [
{key: 'os_version', strict: true, value: '22.04'},
{key: 'os_version', strict: true, value: '23.04'}
]
},
types: ['egress_traffic', 'instance']
})
};
fetch('https://api.gcore.com/cloud/v2/cost_report/breakdown', 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/v2/cost_report/breakdown",
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([
'time_from' => '2023-01-01T00:00:00Z',
'time_to' => '2023-02-01T00:00:00Z',
'enable_last_day' => false,
'group_by' => 'region',
'project_ids' => [
16,
17,
18,
19,
20
],
'region_ids' => [
0,
76
],
'response_format' => 'csv_records',
'tags' => [
'condition_type' => 'OR',
'conditions' => [
[
'key' => 'os_version',
'strict' => true,
'value' => '22.04'
],
[
'key' => 'os_version',
'strict' => true,
'value' => '23.04'
]
]
],
'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/v2/cost_report/breakdown"
payload := strings.NewReader("{\n \"time_from\": \"2023-01-01T00:00:00Z\",\n \"time_to\": \"2023-02-01T00:00:00Z\",\n \"enable_last_day\": false,\n \"group_by\": \"region\",\n \"project_ids\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"region_ids\": [\n 0,\n 76\n ],\n \"response_format\": \"csv_records\",\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 \"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/v2/cost_report/breakdown")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"time_from\": \"2023-01-01T00:00:00Z\",\n \"time_to\": \"2023-02-01T00:00:00Z\",\n \"enable_last_day\": false,\n \"group_by\": \"region\",\n \"project_ids\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"region_ids\": [\n 0,\n 76\n ],\n \"response_format\": \"csv_records\",\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 \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gcore.com/cloud/v2/cost_report/breakdown")
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 \"time_from\": \"2023-01-01T00:00:00Z\",\n \"time_to\": \"2023-02-01T00:00:00Z\",\n \"enable_last_day\": false,\n \"group_by\": \"region\",\n \"project_ids\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"region_ids\": [\n 0,\n 76\n ],\n \"response_format\": \"csv_records\",\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 \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"count": 7,
"price_status": "error",
"results": [
{
"date": "2026-07-17",
"error": null,
"flavor": "bm2-infrastructure-medium",
"project_id": 101,
"region_id": 76,
"type": "baremetal",
"usage": {
"cost": 163.190753,
"currency": "EUR",
"unit": "minutes",
"value": 6688
}
}
]
}Get daily cost breakdown (pay-as-you-go only)
Get daily costs for a given period, summed down to one dimension: region (default), project, resource type or flavor. Requested period should not exceed 31 days. Costs and usages are returned at full precision.
The response can have more than one row for one day and one group_by value (for example, one region
on one day). Usage with a different unit (usage.unit, for example minutes or bytes) is in a
different row. Usage without a price (error is not null) is also in a different row.
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/v2/cost_report/breakdown \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"time_from": "2023-01-01T00:00:00Z",
"time_to": "2023-02-01T00:00:00Z",
"enable_last_day": false,
"group_by": "region",
"project_ids": [
16,
17,
18,
19,
20
],
"region_ids": [
0,
76
],
"response_format": "csv_records",
"tags": {
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": true,
"value": "22.04"
},
{
"key": "os_version",
"strict": true,
"value": "23.04"
}
]
},
"types": [
"egress_traffic",
"instance"
]
}
'import requests
url = "https://api.gcore.com/cloud/v2/cost_report/breakdown"
payload = {
"time_from": "2023-01-01T00:00:00Z",
"time_to": "2023-02-01T00:00:00Z",
"enable_last_day": False,
"group_by": "region",
"project_ids": [16, 17, 18, 19, 20],
"region_ids": [0, 76],
"response_format": "csv_records",
"tags": {
"condition_type": "OR",
"conditions": [
{
"key": "os_version",
"strict": True,
"value": "22.04"
},
{
"key": "os_version",
"strict": True,
"value": "23.04"
}
]
},
"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({
time_from: '2023-01-01T00:00:00Z',
time_to: '2023-02-01T00:00:00Z',
enable_last_day: false,
group_by: 'region',
project_ids: [16, 17, 18, 19, 20],
region_ids: [0, 76],
response_format: 'csv_records',
tags: {
condition_type: 'OR',
conditions: [
{key: 'os_version', strict: true, value: '22.04'},
{key: 'os_version', strict: true, value: '23.04'}
]
},
types: ['egress_traffic', 'instance']
})
};
fetch('https://api.gcore.com/cloud/v2/cost_report/breakdown', 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/v2/cost_report/breakdown",
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([
'time_from' => '2023-01-01T00:00:00Z',
'time_to' => '2023-02-01T00:00:00Z',
'enable_last_day' => false,
'group_by' => 'region',
'project_ids' => [
16,
17,
18,
19,
20
],
'region_ids' => [
0,
76
],
'response_format' => 'csv_records',
'tags' => [
'condition_type' => 'OR',
'conditions' => [
[
'key' => 'os_version',
'strict' => true,
'value' => '22.04'
],
[
'key' => 'os_version',
'strict' => true,
'value' => '23.04'
]
]
],
'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/v2/cost_report/breakdown"
payload := strings.NewReader("{\n \"time_from\": \"2023-01-01T00:00:00Z\",\n \"time_to\": \"2023-02-01T00:00:00Z\",\n \"enable_last_day\": false,\n \"group_by\": \"region\",\n \"project_ids\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"region_ids\": [\n 0,\n 76\n ],\n \"response_format\": \"csv_records\",\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 \"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/v2/cost_report/breakdown")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"time_from\": \"2023-01-01T00:00:00Z\",\n \"time_to\": \"2023-02-01T00:00:00Z\",\n \"enable_last_day\": false,\n \"group_by\": \"region\",\n \"project_ids\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"region_ids\": [\n 0,\n 76\n ],\n \"response_format\": \"csv_records\",\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 \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gcore.com/cloud/v2/cost_report/breakdown")
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 \"time_from\": \"2023-01-01T00:00:00Z\",\n \"time_to\": \"2023-02-01T00:00:00Z\",\n \"enable_last_day\": false,\n \"group_by\": \"region\",\n \"project_ids\": [\n 16,\n 17,\n 18,\n 19,\n 20\n ],\n \"region_ids\": [\n 0,\n 76\n ],\n \"response_format\": \"csv_records\",\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 \"types\": [\n \"egress_traffic\",\n \"instance\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"count": 7,
"price_status": "error",
"results": [
{
"date": "2026-07-17",
"error": null,
"flavor": "bm2-infrastructure-medium",
"project_id": 101,
"region_id": 76,
"type": "baremetal",
"usage": {
"cost": 163.190753,
"currency": "EUR",
"unit": "minutes",
"value": 6688
}
}
]
}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
Dimension the daily rows are summed down to. Only one grouping per request.
flavor, project, region, type "region"
List of project IDs. Omit for all accessible projects.
1[16, 17, 18, 19, 20]
List of region IDs. Omit for all regions and global usage; an empty list is rejected. Use 0 for global usage that has no region.
1[0, 76]
Format of the response: json (default) or csv_records.
csv_records, json "csv_records"
"json"
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. Omit for all types.
1Resource 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
Daily cost breakdown
Count of returned rows
x >= 07
'show' when the client may see prices, 'hide' for trial clients, clients with no product status, and clients of a reseller that does not expose prices. This report never returns 'error'.
error, hide, show Show child attributes
Show child attributes
Was this page helpful?