curl --request POST \
--url https://api.cloudcapital.co/v1/cost-insights/filters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fields": [
"accounts",
"services"
],
"filters": {
"inclusions": {
"dateRange": {
"start": "2026-01-01",
"end": "2026-03-31"
}
}
}
}
'import requests
url = "https://api.cloudcapital.co/v1/cost-insights/filters"
payload = {
"fields": ["accounts", "services"],
"filters": { "inclusions": { "dateRange": {
"start": "2026-01-01",
"end": "2026-03-31"
} } }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fields: ['accounts', 'services'],
filters: {inclusions: {dateRange: {start: '2026-01-01', end: '2026-03-31'}}}
})
};
fetch('https://api.cloudcapital.co/v1/cost-insights/filters', 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.cloudcapital.co/v1/cost-insights/filters",
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([
'fields' => [
'accounts',
'services'
],
'filters' => [
'inclusions' => [
'dateRange' => [
'start' => '2026-01-01',
'end' => '2026-03-31'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.cloudcapital.co/v1/cost-insights/filters"
payload := strings.NewReader("{\n \"fields\": [\n \"accounts\",\n \"services\"\n ],\n \"filters\": {\n \"inclusions\": {\n \"dateRange\": {\n \"start\": \"2026-01-01\",\n \"end\": \"2026-03-31\"\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.cloudcapital.co/v1/cost-insights/filters")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fields\": [\n \"accounts\",\n \"services\"\n ],\n \"filters\": {\n \"inclusions\": {\n \"dateRange\": {\n \"start\": \"2026-01-01\",\n \"end\": \"2026-03-31\"\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudcapital.co/v1/cost-insights/filters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fields\": [\n \"accounts\",\n \"services\"\n ],\n \"filters\": {\n \"inclusions\": {\n \"dateRange\": {\n \"start\": \"2026-01-01\",\n \"end\": \"2026-03-31\"\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"costLayers": [
"<string>"
],
"clouds": [
"<string>"
],
"services": [
"<string>"
],
"resourceFamilies": [
"<string>"
],
"regions": [
"<string>"
],
"instanceTypes": [
"<string>"
],
"usageTypes": [
"<string>"
],
"billingPeriods": [
"<string>"
],
"costTypes": [
"<string>"
],
"accounts": [
"<string>"
],
"accountIdToName": {},
"integrations": [
"<string>"
],
"resourceTags": [
"<string>"
],
"tagValues": {},
"costCategories": [
"<string>"
],
"enriched": {}
}
}{
"success": false,
"error": {
"message": "Invalid request. Please see message details.. Invalid input: expected object, received undefined (at groupBy)"
}
}{
"message": "Unauthorized"
}{
"success": false,
"error": {
"message": "Rate limit exceeded. Please retry after the specified time."
}
}Get available filters
Retrieve available filter values with cross-filtering support. Returns the set of valid filter options based on the current filter selection, allowing progressive refinement of queries.
When filters are provided, each requested field’s options are computed with all other active filters applied (cross-filtering).
curl --request POST \
--url https://api.cloudcapital.co/v1/cost-insights/filters \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"fields": [
"accounts",
"services"
],
"filters": {
"inclusions": {
"dateRange": {
"start": "2026-01-01",
"end": "2026-03-31"
}
}
}
}
'import requests
url = "https://api.cloudcapital.co/v1/cost-insights/filters"
payload = {
"fields": ["accounts", "services"],
"filters": { "inclusions": { "dateRange": {
"start": "2026-01-01",
"end": "2026-03-31"
} } }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
fields: ['accounts', 'services'],
filters: {inclusions: {dateRange: {start: '2026-01-01', end: '2026-03-31'}}}
})
};
fetch('https://api.cloudcapital.co/v1/cost-insights/filters', 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.cloudcapital.co/v1/cost-insights/filters",
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([
'fields' => [
'accounts',
'services'
],
'filters' => [
'inclusions' => [
'dateRange' => [
'start' => '2026-01-01',
'end' => '2026-03-31'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"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.cloudcapital.co/v1/cost-insights/filters"
payload := strings.NewReader("{\n \"fields\": [\n \"accounts\",\n \"services\"\n ],\n \"filters\": {\n \"inclusions\": {\n \"dateRange\": {\n \"start\": \"2026-01-01\",\n \"end\": \"2026-03-31\"\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.cloudcapital.co/v1/cost-insights/filters")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"fields\": [\n \"accounts\",\n \"services\"\n ],\n \"filters\": {\n \"inclusions\": {\n \"dateRange\": {\n \"start\": \"2026-01-01\",\n \"end\": \"2026-03-31\"\n }\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cloudcapital.co/v1/cost-insights/filters")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"fields\": [\n \"accounts\",\n \"services\"\n ],\n \"filters\": {\n \"inclusions\": {\n \"dateRange\": {\n \"start\": \"2026-01-01\",\n \"end\": \"2026-03-31\"\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"costLayers": [
"<string>"
],
"clouds": [
"<string>"
],
"services": [
"<string>"
],
"resourceFamilies": [
"<string>"
],
"regions": [
"<string>"
],
"instanceTypes": [
"<string>"
],
"usageTypes": [
"<string>"
],
"billingPeriods": [
"<string>"
],
"costTypes": [
"<string>"
],
"accounts": [
"<string>"
],
"accountIdToName": {},
"integrations": [
"<string>"
],
"resourceTags": [
"<string>"
],
"tagValues": {},
"costCategories": [
"<string>"
],
"enriched": {}
}
}{
"success": false,
"error": {
"message": "Invalid request. Please see message details.. Invalid input: expected object, received undefined (at groupBy)"
}
}{
"message": "Unauthorized"
}{
"success": false,
"error": {
"message": "Rate limit exceeded. Please retry after the specified time."
}
}Authorizations
API key authentication. Generate an API key from your
Cloud Capital dashboard under Settings > API keys.
Include it in the Authorization header as a Bearer token.
Body
Specific filter fields to return. When omitted, all available filter fields are returned.
Filter field names for the filters endpoint. Pass these in the
fields array to request specific filter option sets.
costLayers, clouds, services, resourceFamilies, regions, instanceTypes, usageTypes, billingPeriods, costTypes, accounts, integrations, resourceTags, costCategories Filter container supporting both inclusion and exclusion criteria.
Use inclusions to narrow results to matching data and exclusions
to remove matching data from results.
Show child attributes
Show child attributes
Response
Filter values retrieved successfully
Successful HTTP responses wrap the endpoint-specific body in data.
Each operation's 200 response schema is this object merged (allOf)
with a data property referencing the payload schema for that endpoint.

