Skip to main content
POST
/
cost-insights
/
filters
Get available filters
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

Authorization
string
header
required

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

application/json
fields
enum<string>[]

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.

Available options:
costLayers,
clouds,
services,
resourceFamilies,
regions,
instanceTypes,
usageTypes,
billingPeriods,
costTypes,
accounts,
integrations,
resourceTags,
costCategories
filters
object

Filter container supporting both inclusion and exclusion criteria. Use inclusions to narrow results to matching data and exclusions to remove matching data from results.

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.

success
enum<boolean>
required

Always true when the HTTP status is 2xx.

Available options:
true
data
object
required

Available filter values. Each field contains an array of valid values. The enriched field provides cost and availability metadata for cross-filterable fields.