Returns a GROUP BY ROLLUP tree of current vs previous cost per node for exactly one cost or usage series. Requires an enabled comparison period, a non-hourly aggBy, and at least one groupBy axis on that series. Pre-condition failures return 400 INVALID_QUERY with today’s message in reason. There is no Hour entitlement gate — hourly is rejected for every organization.
Send Authorization: Bearer <credential> using either a Clerk session JWT or a Clerk API key (ak_*). API keys may identify a user (user_*) or organization (org_*) principal and are generated in the Clerk Dashboard under API keys.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Costory Documentation","colors":{"primary":"#1D3C93","light":"#305DD9","dark":"#1D3C93"},"logo":{"light":"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16","dark":"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16","href":"https://costory.io"},"favicon":"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026auto=format\u0026n=stODLWETeKeyz7ed\u0026q=85\u0026s=334ff5307103e4ffc0473bb6e1b9b56c","appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"https://costory.io","label":"Website"}],"primary":{"type":"button","label":"Start a free trial","href":"https://app.costory.io/welcome-demo?utm_source=get-started"}},"integrations":{"posthog":{"apiKey":"phc_jgU0iQbU4Arfu5ouKpn9YhzkTWv3P5VfW2n7sJsKR0P","apiHost":"https://user.costory.io","sessionRecording":true}},"contextual":{"options":["copy","view","chatgpt","claude","aistudio"],"display":"header"},"metadata":{"timestamp":true},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"costory","hasAudioNarration":false,"actualSubdomain":"costory","customDomains":["docs.costory.io"],"gitSource":{"type":"github","owner":"costory-io","repo":"mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"feedback":{"thumbs":true},"entitlements":{},"buildId":"6af2033088844f4e905da51d","clientVersion":"0.0.4111","searchFilterCounts":[{"language":"default","tag":"API Reference","count":124},{"language":"default","tag":"Documentation","count":70},{"language":"default","tag":"Setup","count":44},{"language":"default","tag":"Alerts V2","count":26},{"language":"default","tag":"Dashboards","count":23},{"language":"default","tag":"Billing Data","count":22},{"language":"default","tag":"Use Cases","count":17},{"language":"default","tag":"Reports","count":16},{"language":"default","tag":"Metrics Correlation","count":13},{"language":"default","tag":"Events","count":11}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/query-costs/run-a-cost-change-diff-tree","slug":"/api-reference/query-costs/run-a-cost-change-diff-tree","pageMetadata":{"title":"Run a cost-change diff tree","description":"Returns a `GROUP BY ROLLUP` tree of current vs previous cost per node for exactly one `cost` or `usage` series. Requires an enabled comparison period, a non-hourly `aggBy`, and at least one `groupBy` axis on that series. Pre-condition failures return `400 INVALID_QUERY` with today's message in `reason`. There is no Hour entitlement gate — hourly is rejected for every organization.","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /queries/diff-tree","href":"/api-reference/query-costs/run-a-cost-change-diff-tree","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Returns a \", _jsx(_components.code, {\n children: \"GROUP BY ROLLUP\"\n }), \" tree of current vs previous cost per node for exactly one \", _jsx(_components.code, {\n children: \"cost\"\n }), \" or \", _jsx(_components.code, {\n children: \"usage\"\n }), \" series. Requires an enabled comparison period, a non-hourly \", _jsx(_components.code, {\n children: \"aggBy\"\n }), \", and at least one \", _jsx(_components.code, {\n children: \"groupBy\"\n }), \" axis on that series. Pre-condition failures return \", _jsx(_components.code, {\n children: \"400 INVALID_QUERY\"\n }), \" with today’s message in \", _jsx(_components.code, {\n children: \"reason\"\n }), \". There is no Hour entitlement gate — hourly is rejected for every organization.\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Run a cost-change diff tree","description":"Returns a `GROUP BY ROLLUP` tree of current vs previous cost per node for exactly one `cost` or `usage` series. Requires an enabled comparison period, a non-hourly `aggBy`, and at least one `groupBy` axis on that series. Pre-condition failures return `400 INVALID_QUERY` with today's message in `reason`. There is no Hour entitlement gate — hourly is rejected for every organization.","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /queries/diff-tree","href":"/api-reference/query-costs/run-a-cost-change-diff-tree","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"runQueryDiffTree","summary":"Run a cost-change diff tree","description":"Returns a `GROUP BY ROLLUP` tree of current vs previous cost per node for exactly one `cost` or `usage` series. Requires an enabled comparison period, a non-hourly `aggBy`, and at least one `groupBy` axis on that series. Pre-condition failures return `400 INVALID_QUERY` with today's message in `reason`. There is no Hour entitlement gate — hourly is rejected for every organization.","tags":["Query Costs"],"security":["45455694-5fff-4258-9b38-6b22fb671d2f"],"requestBody":"b5466891-d75b-46b2-8bcb-26f95038f4b9","responses":{"200":"f3d9a0e3-5f55-48fb-a339-2a9fb5526a05","400":"cd738e8f-dc5a-4c8c-863a-58e0bb54f9f5","401":"220fa922-ce93-4a66-9a1e-38710c36892c","403":"5c163baa-1a00-4d89-99dd-665d83dfb35e","404":"624157df-72d2-4c38-99e2-5b102cc55309","500":"960317ca-b3b8-4b26-abbd-53cf87473f55"},"method":"post","type":"path","servers":["cd9d6d3a-8758-4ae6-beb1-6dc3f3c2c6de"],"path":"/queries/diff-tree","baseUrlOptions":[""],"title":"Run a cost-change diff tree","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"queries":{"type":"array","items":{"oneOf":[{"type":"object","required":["type","name"],"properties":{"type":{"type":"string","enum":["cost"],"description":"Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.0.type","typeLabel":"enum\u003cstring>"},"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.0.name","typeLabel":"string"},"groupBy":{"oneOf":[{"type":"string","uniqueKey":"queries.items.[INDEX].oneOf.0.groupBy.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"queries.items.[INDEX].oneOf.0.groupBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"uniqueKey":"queries.items.[INDEX].oneOf.0.groupBy.oneOf.1","typeLabel":"string[]"},{"type":"string","enum":[null],"uniqueKey":"queries.items.[INDEX].oneOf.0.groupBy.oneOf.2","typeLabel":"enum\u003cstring>"},{"type":"null","enum":[null],"uniqueKey":"queries.items.[INDEX].oneOf.0.groupBy.oneOf.3","typeLabel":"null"}],"uniqueKey":"queries.items.[INDEX].oneOf.0.groupBy","typeLabel":"string | string[] | enum\u003cstring> | null"},"rollingAggregation":{"type":"object","properties":{"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.0.rollingAggregation.aggregator","typeLabel":"enum\u003cstring>"},"window":{"type":"object","properties":{"preset":{"type":"string","enum":["MONTH","WEEK"],"uniqueKey":"queries.items.[INDEX].oneOf.0.rollingAggregation.window.preset","typeLabel":"enum\u003cstring>"},"relativeDays":{"type":"integer","minimum":1,"uniqueKey":"queries.items.[INDEX].oneOf.0.rollingAggregation.window.relativeDays","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.0.rollingAggregation.window","typeLabel":"object"}},"required":["aggregator","window"],"uniqueKey":"queries.items.[INDEX].oneOf.0.rollingAggregation","typeLabel":"object"},"alias":{"type":"string","minLength":1,"maxLength":50,"description":"Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.","uniqueKey":"queries.items.[INDEX].oneOf.0.alias","typeLabel":"string"},"filterCel":{"oneOf":[{"type":"string","description":"Optional scope filter as CEL (Common Expression Language). Examples: cos_service_name in [\"AmazonEC2\"]; cos_provider in [\"AWS\"] \u0026\u0026 cos_environment in [\"prod\"]. Label dimensions use the cos_ prefix; native provider fields omit it. Unlabelled/untagged resources have null values; use == null to match them (e.g. cos_environment == null) and != null to exclude them. Omit or pass empty string for no filter.","uniqueKey":"queries.items.[INDEX].oneOf.0.filterCel.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional scope filter as CEL (Common Expression Language). Examples: cos_service_name in [\"AmazonEC2\"]; cos_provider in [\"AWS\"] \u0026\u0026 cos_environment in [\"prod\"]. Label dimensions use the cos_ prefix; native provider fields omit it. Unlabelled/untagged resources have null values; use == null to match them (e.g. cos_environment == null) and != null to exclude them. Omit or pass empty string for no filter.","uniqueKey":"queries.items.[INDEX].oneOf.0.filterCel.oneOf.1","typeLabel":"null"}],"uniqueKey":"queries.items.[INDEX].oneOf.0.filterCel","typeLabel":"string | null"},"metricId":{"type":"string","enum":["cost","effective_cost","list_cost","contracted_cost","unblended_cost","net_unblended_cost","amortized_cost","net_amortized_cost"],"default":"cost","description":"Cost column to query (e.g. \"cost\", \"effective_cost\", \"amortized_cost\"). Defaults to \"cost\".","uniqueKey":"queries.items.[INDEX].oneOf.0.metricId","typeLabel":"enum\u003cstring>"},"currency":{"type":"string","enum":["USD","EUR","GBP","CNY","KRW"],"default":"USD","description":"Currency for cost values (USD, EUR, GBP). Defaults to \"USD\".","uniqueKey":"queries.items.[INDEX].oneOf.0.currency","typeLabel":"enum\u003cstring>"},"chartType":{"type":"string","enum":["BAR","LINE","AREA","WATERFALL","TABLE"],"description":"Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.","uniqueKey":"queries.items.[INDEX].oneOf.0.chartType","typeLabel":"enum\u003cstring>"},"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"description":"Aggregation over the bucket. Defaults to SUM.","uniqueKey":"queries.items.[INDEX].oneOf.0.aggregator","typeLabel":"enum\u003cstring>"},"reducer":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"uniqueKey":"queries.items.[INDEX].oneOf.0.reducer","typeLabel":"enum\u003cstring>"},"shiftAmount":{"type":"integer","uniqueKey":"queries.items.[INDEX].oneOf.0.shiftAmount","typeLabel":"integer"},"shiftUnit":{"type":"string","enum":["DAY","WEEK","MONTH"],"uniqueKey":"queries.items.[INDEX].oneOf.0.shiftUnit","typeLabel":"enum\u003cstring>"},"excludeGroupByValue":{"type":"object","properties":{"source":{"type":"object","properties":{"type":{"type":"string","enum":["indexation"],"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.0.excludeGroupByValue.source.type","typeLabel":"enum\u003cstring>"}},"required":["type"],"additionalProperties":false,"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.0.excludeGroupByValue.source","typeLabel":"object"}},"required":["source"],"additionalProperties":false,"description":"Exclude group-by values already present in the billing-stats indexation catalog before the query window. HTTP API only; not available on MCP query.","uniqueKey":"queries.items.[INDEX].oneOf.0.excludeGroupByValue","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"queries.items.[INDEX].oneOf.0","typeLabel":"object"},{"type":"object","required":["type","metricId","name"],"properties":{"type":{"type":"string","enum":["metric"],"description":"Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.1.type","typeLabel":"enum\u003cstring>"},"metricId":{"type":"string","description":"Saved Costory metric id from list_metrics metrics[].id. This is the query identity — not list_metrics `datasourceId` (that filter only returns groupBy dimensions for telemetry).","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.1.metricId","typeLabel":"string"},"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.1.name","typeLabel":"string"},"groupBy":{"oneOf":[{"type":"string","uniqueKey":"queries.items.[INDEX].oneOf.1.groupBy.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"queries.items.[INDEX].oneOf.1.groupBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"uniqueKey":"queries.items.[INDEX].oneOf.1.groupBy.oneOf.1","typeLabel":"string[]"},{"type":"string","enum":[null],"uniqueKey":"queries.items.[INDEX].oneOf.1.groupBy.oneOf.2","typeLabel":"enum\u003cstring>"},{"type":"null","enum":[null],"uniqueKey":"queries.items.[INDEX].oneOf.1.groupBy.oneOf.3","typeLabel":"null"}],"uniqueKey":"queries.items.[INDEX].oneOf.1.groupBy","typeLabel":"string | string[] | enum\u003cstring> | null"},"alias":{"type":"string","minLength":1,"maxLength":50,"description":"Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.","uniqueKey":"queries.items.[INDEX].oneOf.1.alias","typeLabel":"string"},"chartType":{"type":"string","enum":["BAR","LINE","AREA","WATERFALL","TABLE"],"description":"Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.","uniqueKey":"queries.items.[INDEX].oneOf.1.chartType","typeLabel":"enum\u003cstring>"},"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"description":"Aggregation over the bucket. Defaults to SUM.","uniqueKey":"queries.items.[INDEX].oneOf.1.aggregator","typeLabel":"enum\u003cstring>"},"reducer":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"uniqueKey":"queries.items.[INDEX].oneOf.1.reducer","typeLabel":"enum\u003cstring>"},"shiftAmount":{"type":"integer","uniqueKey":"queries.items.[INDEX].oneOf.1.shiftAmount","typeLabel":"integer"},"shiftUnit":{"type":"string","enum":["DAY","WEEK","MONTH"],"uniqueKey":"queries.items.[INDEX].oneOf.1.shiftUnit","typeLabel":"enum\u003cstring>"},"rollingAggregation":{"type":"object","properties":{"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.1.rollingAggregation.aggregator","typeLabel":"enum\u003cstring>"},"window":{"type":"object","properties":{"preset":{"type":"string","enum":["MONTH","WEEK"],"uniqueKey":"queries.items.[INDEX].oneOf.1.rollingAggregation.window.preset","typeLabel":"enum\u003cstring>"},"relativeDays":{"type":"integer","minimum":1,"uniqueKey":"queries.items.[INDEX].oneOf.1.rollingAggregation.window.relativeDays","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.1.rollingAggregation.window","typeLabel":"object"}},"required":["aggregator","window"],"uniqueKey":"queries.items.[INDEX].oneOf.1.rollingAggregation","typeLabel":"object"},"rawMetric":{"type":"string","uniqueKey":"queries.items.[INDEX].oneOf.1.rawMetric","typeLabel":"string"},"unitOverride":{"type":"string","uniqueKey":"queries.items.[INDEX].oneOf.1.unitOverride","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"queries.items.[INDEX].oneOf.1","typeLabel":"object"},{"type":"object","required":["type","metricId","name"],"properties":{"type":{"type":"string","enum":["usage"],"description":"Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.2.type","typeLabel":"enum\u003cstring>"},"metricId":{"type":"string","description":"Usage metric id (from suggest_usage_metrics). Either a billing consumed_unit (e.g. \"hours\") or an enrichment metric column published by an integration — those start with `query_` (e.g. query_compute_ms, query_bytes_billed) and are only available to orgs with that integration. Distinct from cost metricId and from list_metrics datasourceId.","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.2.metricId","typeLabel":"string"},"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.2.name","typeLabel":"string"},"groupBy":{"oneOf":[{"type":"string","uniqueKey":"queries.items.[INDEX].oneOf.2.groupBy.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"queries.items.[INDEX].oneOf.2.groupBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"uniqueKey":"queries.items.[INDEX].oneOf.2.groupBy.oneOf.1","typeLabel":"string[]"},{"type":"string","enum":[null],"uniqueKey":"queries.items.[INDEX].oneOf.2.groupBy.oneOf.2","typeLabel":"enum\u003cstring>"},{"type":"null","enum":[null],"uniqueKey":"queries.items.[INDEX].oneOf.2.groupBy.oneOf.3","typeLabel":"null"}],"uniqueKey":"queries.items.[INDEX].oneOf.2.groupBy","typeLabel":"string | string[] | enum\u003cstring> | null"},"alias":{"type":"string","minLength":1,"maxLength":50,"description":"Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.","uniqueKey":"queries.items.[INDEX].oneOf.2.alias","typeLabel":"string"},"filterCel":{"oneOf":[{"type":"string","description":"Optional scope filter as CEL (Common Expression Language). Examples: cos_service_name in [\"AmazonEC2\"]; cos_provider in [\"AWS\"] \u0026\u0026 cos_environment in [\"prod\"]. Label dimensions use the cos_ prefix; native provider fields omit it. Unlabelled/untagged resources have null values; use == null to match them (e.g. cos_environment == null) and != null to exclude them. Omit or pass empty string for no filter.","uniqueKey":"queries.items.[INDEX].oneOf.2.filterCel.oneOf.0","typeLabel":"string"},{"type":"null","description":"Optional scope filter as CEL (Common Expression Language). Examples: cos_service_name in [\"AmazonEC2\"]; cos_provider in [\"AWS\"] \u0026\u0026 cos_environment in [\"prod\"]. Label dimensions use the cos_ prefix; native provider fields omit it. Unlabelled/untagged resources have null values; use == null to match them (e.g. cos_environment == null) and != null to exclude them. Omit or pass empty string for no filter.","uniqueKey":"queries.items.[INDEX].oneOf.2.filterCel.oneOf.1","typeLabel":"null"}],"uniqueKey":"queries.items.[INDEX].oneOf.2.filterCel","typeLabel":"string | null"},"chartType":{"type":"string","enum":["BAR","LINE","AREA","WATERFALL","TABLE"],"description":"Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.","uniqueKey":"queries.items.[INDEX].oneOf.2.chartType","typeLabel":"enum\u003cstring>"},"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"description":"Aggregation over the bucket. Defaults to SUM.","uniqueKey":"queries.items.[INDEX].oneOf.2.aggregator","typeLabel":"enum\u003cstring>"},"reducer":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"uniqueKey":"queries.items.[INDEX].oneOf.2.reducer","typeLabel":"enum\u003cstring>"},"shiftAmount":{"type":"integer","uniqueKey":"queries.items.[INDEX].oneOf.2.shiftAmount","typeLabel":"integer"},"shiftUnit":{"type":"string","enum":["DAY","WEEK","MONTH"],"uniqueKey":"queries.items.[INDEX].oneOf.2.shiftUnit","typeLabel":"enum\u003cstring>"},"rollingAggregation":{"type":"object","properties":{"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.2.rollingAggregation.aggregator","typeLabel":"enum\u003cstring>"},"window":{"type":"object","properties":{"preset":{"type":"string","enum":["MONTH","WEEK"],"uniqueKey":"queries.items.[INDEX].oneOf.2.rollingAggregation.window.preset","typeLabel":"enum\u003cstring>"},"relativeDays":{"type":"integer","minimum":1,"uniqueKey":"queries.items.[INDEX].oneOf.2.rollingAggregation.window.relativeDays","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.2.rollingAggregation.window","typeLabel":"object"}},"required":["aggregator","window"],"uniqueKey":"queries.items.[INDEX].oneOf.2.rollingAggregation","typeLabel":"object"},"excludeGroupByValue":{"type":"object","properties":{"source":{"type":"object","properties":{"type":{"type":"string","enum":["indexation"],"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.2.excludeGroupByValue.source.type","typeLabel":"enum\u003cstring>"}},"required":["type"],"additionalProperties":false,"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.2.excludeGroupByValue.source","typeLabel":"object"}},"required":["source"],"additionalProperties":false,"description":"Exclude group-by values already present in the billing-stats indexation catalog before the query window. HTTP API only; not available on MCP query.","uniqueKey":"queries.items.[INDEX].oneOf.2.excludeGroupByValue","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"queries.items.[INDEX].oneOf.2","typeLabel":"object"},{"type":"object","required":["type","formula","name"],"properties":{"type":{"type":"string","enum":["formula"],"description":"Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.3.type","typeLabel":"enum\u003cstring>"},"formula":{"type":"string","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.3.formula","typeLabel":"string"},"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.3.name","typeLabel":"string"},"unitOverride":{"type":"string","description":"Optional unit override. Omit to infer from formula inputs. Currency codes (EUR, USD, GBP, CNY, KRW) format as money and follow the widget/dashboard currency; any other string (e.g. \"slot-h/TiB\", \"%\") is displayed as-is.","uniqueKey":"queries.items.[INDEX].oneOf.3.unitOverride","typeLabel":"string"},"alias":{"type":"string","minLength":1,"maxLength":50,"description":"Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.","uniqueKey":"queries.items.[INDEX].oneOf.3.alias","typeLabel":"string"},"chartType":{"type":"string","enum":["BAR","LINE","AREA","WATERFALL","TABLE"],"description":"Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.","uniqueKey":"queries.items.[INDEX].oneOf.3.chartType","typeLabel":"enum\u003cstring>"},"shiftAmount":{"type":"integer","uniqueKey":"queries.items.[INDEX].oneOf.3.shiftAmount","typeLabel":"integer"},"shiftUnit":{"type":"string","enum":["DAY","WEEK","MONTH"],"uniqueKey":"queries.items.[INDEX].oneOf.3.shiftUnit","typeLabel":"enum\u003cstring>"},"rollingAggregation":{"type":"object","properties":{"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.3.rollingAggregation.aggregator","typeLabel":"enum\u003cstring>"},"window":{"type":"object","properties":{"preset":{"type":"string","enum":["MONTH","WEEK"],"uniqueKey":"queries.items.[INDEX].oneOf.3.rollingAggregation.window.preset","typeLabel":"enum\u003cstring>"},"relativeDays":{"type":"integer","minimum":1,"uniqueKey":"queries.items.[INDEX].oneOf.3.rollingAggregation.window.relativeDays","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.3.rollingAggregation.window","typeLabel":"object"}},"required":["aggregator","window"],"uniqueKey":"queries.items.[INDEX].oneOf.3.rollingAggregation","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"queries.items.[INDEX].oneOf.3","typeLabel":"object"},{"type":"object","required":["type","budgetId","name"],"properties":{"type":{"type":"string","enum":["budget"],"description":"Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.4.type","typeLabel":"enum\u003cstring>"},"budgetId":{"type":"string","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.4.budgetId","typeLabel":"string"},"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.4.name","typeLabel":"string"},"virtualDimensionValue":{"type":"string","uniqueKey":"queries.items.[INDEX].oneOf.4.virtualDimensionValue","typeLabel":"string"},"rollingAggregation":{"type":"object","properties":{"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.4.rollingAggregation.aggregator","typeLabel":"enum\u003cstring>"},"window":{"type":"object","properties":{"preset":{"type":"string","enum":["MONTH","WEEK"],"uniqueKey":"queries.items.[INDEX].oneOf.4.rollingAggregation.window.preset","typeLabel":"enum\u003cstring>"},"relativeDays":{"type":"integer","minimum":1,"uniqueKey":"queries.items.[INDEX].oneOf.4.rollingAggregation.window.relativeDays","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.4.rollingAggregation.window","typeLabel":"object"}},"required":["aggregator","window"],"uniqueKey":"queries.items.[INDEX].oneOf.4.rollingAggregation","typeLabel":"object"},"alias":{"type":"string","minLength":1,"maxLength":50,"description":"Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.","uniqueKey":"queries.items.[INDEX].oneOf.4.alias","typeLabel":"string"},"chartType":{"type":"string","enum":["BAR","LINE","AREA","WATERFALL","TABLE"],"description":"Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.","uniqueKey":"queries.items.[INDEX].oneOf.4.chartType","typeLabel":"enum\u003cstring>"},"groupBy":{"oneOf":[{"type":"string","description":"Split by budget line. Must be this budget's virtual dimension bqName from get. Omit for the total. Sibling cost/usage/metric groupBy must be that same field so formulas match per line.","uniqueKey":"queries.items.[INDEX].oneOf.4.groupBy.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"queries.items.[INDEX].oneOf.4.groupBy.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Split by budget line. Must be this budget's virtual dimension bqName from get. Omit for the total. Sibling cost/usage/metric groupBy must be that same field so formulas match per line.","uniqueKey":"queries.items.[INDEX].oneOf.4.groupBy.oneOf.1","typeLabel":"string[]"},{"type":"string","description":"Split by budget line. Must be this budget's virtual dimension bqName from get. Omit for the total. Sibling cost/usage/metric groupBy must be that same field so formulas match per line.","enum":[null],"uniqueKey":"queries.items.[INDEX].oneOf.4.groupBy.oneOf.2","typeLabel":"enum\u003cstring>"},{"type":"null","description":"Split by budget line. Must be this budget's virtual dimension bqName from get. Omit for the total. Sibling cost/usage/metric groupBy must be that same field so formulas match per line.","enum":[null],"uniqueKey":"queries.items.[INDEX].oneOf.4.groupBy.oneOf.3","typeLabel":"null"}],"uniqueKey":"queries.items.[INDEX].oneOf.4.groupBy","typeLabel":"string | string[] | enum\u003cstring> | null"}},"additionalProperties":false,"uniqueKey":"queries.items.[INDEX].oneOf.4","typeLabel":"object"},{"type":"object","required":["type","integrationId","name"],"properties":{"type":{"type":"string","enum":["externalMetric"],"description":"Required series discriminator — always set explicitly, never omit. One of: \"cost\" | \"metric\" | \"usage\" | \"formula\" | \"budget\" | \"externalMetric\".","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.5.type","typeLabel":"enum\u003cstring>"},"integrationId":{"type":"string","minLength":1,"description":"External metric integration ID from list_metrics(includeExternal: true).","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.5.integrationId","typeLabel":"string"},"name":{"type":"string","pattern":"^[A-Za-z_][A-Za-z0-9_]*$","description":"Required series identifier referenced by formulas (e.g. \"a\", \"b\", \"a__r6\"). Prefer short identifiers; put human labels in alias — never spaces or descriptive phrases in name.","isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.5.name","typeLabel":"string"},"metricName":{"type":"string","default":"","uniqueKey":"queries.items.[INDEX].oneOf.5.metricName","typeLabel":"string"},"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"uniqueKey":"queries.items.[INDEX].oneOf.5.aggregator","typeLabel":"enum\u003cstring>"},"groupByFields":{"type":"array","items":{"type":"string","minLength":1,"uniqueKey":"queries.items.[INDEX].oneOf.5.groupByFields.items.[INDEX]","typeLabel":"string"},"maxItems":7,"default":[],"uniqueKey":"queries.items.[INDEX].oneOf.5.groupByFields","typeLabel":"string[]"},"conditions":{"type":"string","uniqueKey":"queries.items.[INDEX].oneOf.5.conditions","typeLabel":"string"},"query":{"type":"string","minLength":1,"uniqueKey":"queries.items.[INDEX].oneOf.5.query","typeLabel":"string"},"dateColumn":{"type":"string","minLength":1,"uniqueKey":"queries.items.[INDEX].oneOf.5.dateColumn","typeLabel":"string"},"metricColumn":{"type":"string","minLength":1,"uniqueKey":"queries.items.[INDEX].oneOf.5.metricColumn","typeLabel":"string"},"gapFillingMethod":{"type":"string","enum":["ZERO","FORWARD_FILL","LINEAR_INTERPOLATION","SPREAD"],"uniqueKey":"queries.items.[INDEX].oneOf.5.gapFillingMethod","typeLabel":"enum\u003cstring>"},"rollingAggregation":{"type":"object","properties":{"aggregator":{"type":"string","enum":["SUM","AVG","MAX","MIN"],"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.5.rollingAggregation.aggregator","typeLabel":"enum\u003cstring>"},"window":{"type":"object","properties":{"preset":{"type":"string","enum":["MONTH","WEEK"],"uniqueKey":"queries.items.[INDEX].oneOf.5.rollingAggregation.window.preset","typeLabel":"enum\u003cstring>"},"relativeDays":{"type":"integer","minimum":1,"uniqueKey":"queries.items.[INDEX].oneOf.5.rollingAggregation.window.relativeDays","typeLabel":"integer"}},"isRequired":true,"uniqueKey":"queries.items.[INDEX].oneOf.5.rollingAggregation.window","typeLabel":"object"}},"required":["aggregator","window"],"uniqueKey":"queries.items.[INDEX].oneOf.5.rollingAggregation","typeLabel":"object"},"provider":{"type":"string","enum":["tsuga","bigquery","datadog","cloudwatch","s3","amplitude","snowflake","cloudmonitoring","push"],"default":"tsuga","description":"External metric provider. Defaults to \"tsuga\" when omitted for backward compatibility with existing Tsuga MCP clients.","uniqueKey":"queries.items.[INDEX].oneOf.5.provider","typeLabel":"enum\u003cstring>"},"alias":{"type":"string","minLength":1,"maxLength":50,"description":"Optional human-readable label (e.g. \"Cost by environment\", \"AWS spend\"). Prefer short identifiers in name; put descriptive text here.","uniqueKey":"queries.items.[INDEX].oneOf.5.alias","typeLabel":"string"},"chartType":{"type":"string","enum":["BAR","LINE","AREA","WATERFALL","TABLE"],"description":"Explorer chart for this series: BAR, LINE, AREA, WATERFALL, or TABLE. Omit to use LINE.","uniqueKey":"queries.items.[INDEX].oneOf.5.chartType","typeLabel":"enum\u003cstring>"},"unitOverride":{"type":"string","uniqueKey":"queries.items.[INDEX].oneOf.5.unitOverride","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"queries.items.[INDEX].oneOf.5","typeLabel":"object"}],"uniqueKey":"queries.items.[INDEX]","typeLabel":"object"},"minItems":1,"maxItems":26,"isRequired":true,"uniqueKey":"queries","typeLabel":"object[]"},"datePreset":{"type":"string","enum":["TRAILING_90_DAYS","TRAILING_30_DAYS","TRAILING_45_DAYS","TRAILING_7_DAYS","TRAILING_3_DAYS","TRAILING_1_DAYS","TRAILING_14_WEEKS","MTD","QTD","YTD","CURRENT_MONTH","CURRENT_QUARTER","CURRENT_YEAR","LAST_WEEK","LAST_MONTH","LAST_6_MONTHS","LAST_12_MONTHS","LAST_4_YEARS","LAST_3_MONTHS","LAST_INVOICE_MONTH"],"uniqueKey":"datePreset","typeLabel":"enum\u003cstring>"},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","uniqueKey":"from","typeLabel":"string"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","uniqueKey":"to","typeLabel":"string"},"aggBy":{"type":"string","enum":["Hour","Day","Week","Month","Period"],"default":"Month","uniqueKey":"aggBy","typeLabel":"enum\u003cstring>"},"forecastDays":{"type":"integer","minimum":0,"uniqueKey":"forecastDays","typeLabel":"integer"},"forecast":{"type":"boolean","uniqueKey":"forecast","typeLabel":"boolean"},"compare":{"type":"object","properties":{"enabled":{"type":"boolean","default":true,"uniqueKey":"compare.enabled","typeLabel":"boolean"},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","uniqueKey":"compare.from","typeLabel":"string"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","uniqueKey":"compare.to","typeLabel":"string"},"chartType":{"type":"string","enum":["WATERFALL","TABLE","KPI_BREAKDOWN"],"default":"WATERFALL","uniqueKey":"compare.chartType","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"compare","typeLabel":"object"},"analyze":{"type":"object","properties":{"changePoint":{"oneOf":[{"type":"boolean","uniqueKey":"analyze.changePoint.oneOf.0","typeLabel":"boolean"},{"type":"object","properties":{"ignoreWeekends":{"type":"boolean","description":"Drop Saturday/Sunday before detection. Maps to Billy `no_weekends`.","uniqueKey":"analyze.changePoint.oneOf.1.ignoreWeekends","typeLabel":"boolean"}},"additionalProperties":false,"uniqueKey":"analyze.changePoint.oneOf.1","typeLabel":"object"}],"uniqueKey":"analyze.changePoint","typeLabel":"boolean | object"}},"additionalProperties":false,"uniqueKey":"analyze","typeLabel":"object"},"limit":{"type":"integer","minimum":1,"maximum":1000,"uniqueKey":"limit","typeLabel":"integer"},"scopeId":{"oneOf":[{"type":"string","uniqueKey":"scopeId.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"scopeId.oneOf.1","typeLabel":"null"}],"uniqueKey":"scopeId","typeLabel":"string | null"},"displayOptions":{"type":"object","properties":{"sort":{"type":"object","properties":{"by":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"displayOptions.sort.by","typeLabel":"string"},"direction":{"type":"string","enum":["ASC","DESC"],"default":"DESC","uniqueKey":"displayOptions.sort.direction","typeLabel":"enum\u003cstring>"}},"required":["by"],"uniqueKey":"displayOptions.sort","typeLabel":"object"},"hideEmptyRows":{"type":"boolean","uniqueKey":"displayOptions.hideEmptyRows","typeLabel":"boolean"},"topN":{"type":"integer","minimum":1,"maximum":100,"uniqueKey":"displayOptions.topN","typeLabel":"integer"},"showTotal":{"type":"boolean","uniqueKey":"displayOptions.showTotal","typeLabel":"boolean"},"precision":{"type":"integer","minimum":0,"maximum":6,"uniqueKey":"displayOptions.precision","typeLabel":"integer"},"pivot":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"string","enum":["groupBy","query","time"],"uniqueKey":"displayOptions.pivot.rows.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"isRequired":true,"uniqueKey":"displayOptions.pivot.rows","typeLabel":"enum\u003cstring>[]"},"columns":{"type":"array","items":{"type":"string","enum":["groupBy","query","time"],"uniqueKey":"displayOptions.pivot.columns.items.[INDEX]","typeLabel":"enum\u003cstring>"},"minItems":1,"isRequired":true,"uniqueKey":"displayOptions.pivot.columns","typeLabel":"enum\u003cstring>[]"}},"required":["rows","columns"],"additionalProperties":false,"uniqueKey":"displayOptions.pivot","typeLabel":"object"}},"additionalProperties":false,"uniqueKey":"displayOptions","typeLabel":"object"}},"required":["queries"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"queries":[{"type":"cost","name":"\u003cstring>","groupBy":"\u003cstring>","alias":"\u003cstring>","filterCel":"\u003cstring>","metricId":"cost","currency":"USD","shiftAmount":123}],"from":"\u003cstring>","to":"\u003cstring>","aggBy":"Month","forecastDays":1,"forecast":true,"compare":{"enabled":true,"from":"\u003cstring>","to":"\u003cstring>","chartType":"WATERFALL"},"analyze":{"changePoint":true},"limit":500,"scopeId":"\u003cstring>","displayOptions":{"hideEmptyRows":true,"topN":50,"showTotal":true,"precision":3}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"f3d9a0e3-5f55-48fb-a339-2a9fb5526a05":{"description":"Diff-tree rollup rows","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"dimensions":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","isRequired":true,"uniqueKey":"items.[INDEX].dimensions.items.[INDEX].key","typeLabel":"string"},"value":{"type":"string","isRequired":true,"uniqueKey":"items.[INDEX].dimensions.items.[INDEX].value","typeLabel":"string"}},"required":["key","value"],"additionalProperties":false,"uniqueKey":"items.[INDEX].dimensions.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"items.[INDEX].dimensions","typeLabel":"object[]"},"cost":{"type":"number","isRequired":true,"uniqueKey":"items.[INDEX].cost","typeLabel":"number"},"previous_cost":{"type":"number","isRequired":true,"uniqueKey":"items.[INDEX].previous_cost","typeLabel":"number"},"diff":{"type":"number","isRequired":true,"uniqueKey":"items.[INDEX].diff","typeLabel":"number"}},"required":["dimensions","cost","previous_cost","diff"],"additionalProperties":false,"uniqueKey":"items.[INDEX]","typeLabel":"object"},"uniqueKey":"","typeLabel":"object[]"},"examples":{"Example":{"title":"Example","value":[{"dimensions":[{"key":"\u003cstring>","value":"\u003cstring>"}],"cost":123,"previous_cost":123,"diff":123}]}},"exampleType":"generated"}},"exampleType":"generated"},"cd738e8f-dc5a-4c8c-863a-58e0bb54f9f5":{"description":"Invalid query (strict CEL contract, formula refs, period, group-by, or other request rules)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["INVALID_QUERY"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","uniqueKey":"reason","typeLabel":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"array","items":{"oneOf":[{"type":"string","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.0","typeLabel":"string"},{"type":"number","uniqueKey":"details.items.[INDEX].path.items.[INDEX].oneOf.1","typeLabel":"number"}],"uniqueKey":"details.items.[INDEX].path.items.[INDEX]","typeLabel":"string | number"},"isRequired":true,"uniqueKey":"details.items.[INDEX].path","typeLabel":"(string | number)[]"},"message":{"type":"string","isRequired":true,"uniqueKey":"details.items.[INDEX].message","typeLabel":"string"},"code":{"type":"string","isRequired":true,"uniqueKey":"details.items.[INDEX].code","typeLabel":"string"}},"required":["path","message","code"],"additionalProperties":false,"uniqueKey":"details.items.[INDEX]","typeLabel":"object"},"uniqueKey":"details","typeLabel":"object[]"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"INVALID_QUERY","reason":"\u003cstring>","details":[{"path":["\u003cstring>"],"message":"\u003cstring>","code":"\u003cstring>"}]}}},"exampleType":"generated"}},"exampleType":"generated"},"220fa922-ce93-4a66-9a1e-38710c36892c":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","description":"Unauthorized error message","isRequired":true,"uniqueKey":"error","typeLabel":"string"}},"required":["error"],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"5c163baa-1a00-4d89-99dd-665d83dfb35e":{"description":"The external-metric provider denied access","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["EXTERNAL_METRIC_UNAUTHORIZED"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","isRequired":true,"uniqueKey":"reason","typeLabel":"string"}},"required":["error","reason"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"EXTERNAL_METRIC_UNAUTHORIZED","reason":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"624157df-72d2-4c38-99e2-5b102cc55309":{"description":"Scope, external-metric integration, or provider metric absent or not visible to this organization","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["error"],"properties":{"error":{"type":"string","enum":["NOT_FOUND"],"isRequired":true,"uniqueKey":"oneOf.0.error","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","uniqueKey":"oneOf.0.reason","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["error"],"properties":{"error":{"type":"string","enum":["EXTERNAL_METRIC_INTEGRATION_NOT_FOUND"],"isRequired":true,"uniqueKey":"oneOf.1.error","typeLabel":"enum\u003cstring>"}},"additionalProperties":false,"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","required":["error","reason"],"properties":{"error":{"type":"string","enum":["EXTERNAL_METRIC_NOT_FOUND"],"isRequired":true,"uniqueKey":"oneOf.2.error","typeLabel":"enum\u003cstring>"},"reason":{"type":"string","isRequired":true,"uniqueKey":"oneOf.2.reason","typeLabel":"string"}},"additionalProperties":false,"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"NOT_FOUND","reason":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"960317ca-b3b8-4b26-abbd-53cf87473f55":{"description":"Unexpected server error","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","enum":["INTERNAL_SERVER_ERROR"],"isRequired":true,"uniqueKey":"error","typeLabel":"enum\u003cstring>"}},"required":["error"],"additionalProperties":false,"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"INTERNAL_SERVER_ERROR"}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"45455694-5fff-4258-9b38-6b22fb671d2f":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT or Clerk ak_* API key","description":"Send `Authorization: Bearer \u003ccredential>` using either a Clerk session JWT or a Clerk API key (`ak_*`). API keys may identify a user (`user_*`) or organization (`org_*`) principal and are generated in the Clerk Dashboard under API keys.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"cd9d6d3a-8758-4ae6-beb1-6dc3f3c2c6de":{"url":"","description":"Production server"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"JWT or Clerk ak_* API key","description":"Send `Authorization: Bearer \u003ccredential>` using either a Clerk session JWT or a Clerk API key (`ak_*`). API keys may identify a user (`user_*`) or organization (`org_*`) principal and are generated in the Clerk Dashboard under API keys.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Send `Authorization: Bearer \u003ccredential>` using either a Clerk session JWT or a Clerk API key (`ak_*`). API keys may identify a user (`user_*`) or organization (`org_*`) principal and are generated in the Clerk Dashboard under API keys.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"https://app-api.costory.io/docs/openapi.json"},"subdomain":"costory","siteName":"Costory Documentation","title":"Run a cost-change diff tree - Costory Documentation","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"originalFileLocation":"api-reference/query-costs/run-a-cost-change-diff-tree.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Returns a GROUP BY ROLLUP tree of current vs previous cost per node for exactly one cost or usage series. Requires an enabled comparison period, a non-hourly aggBy, and at least one groupBy axis on that series. Pre-condition failures return 400 INVALID_QUERY with today\u0026#x27;s message in reason. There is no Hour entitlement gate — hourly is rejected for every organization.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Costory Documentation\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/svg+xml\" sizes=\"180x180\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"32x32\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"icon\" type=\"image/svg+xml\" sizes=\"16x16\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/svg+xml\" href=\"https://mintcdn.com/costory/stODLWETeKeyz7ed/favicon-new.svg?fit=max\u0026amp;auto=format\u0026amp;n=stODLWETeKeyz7ed\u0026amp;q=85\u0026amp;s=334ff5307103e4ffc0473bb6e1b9b56c\">\u003cmeta data-mint-head property=\"og:title\" content=\"Run a cost-change diff tree - Costory Documentation\">\u003cmeta data-mint-head property=\"og:description\" content=\"Returns a GROUP BY ROLLUP tree of current vs previous cost per node for exactly one cost or usage series. Requires an enabled comparison period, a non-hourly aggBy, and at least one groupBy axis on that series. Pre-condition failures return 400 INVALID_QUERY with today\u0026#x27;s message in reason. There is no Hour entitlement gate — hourly is rejected for every organization.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Costory Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://costory.mintlify.site/_mintlify/api/og/v2?division=Query+Costs\u0026amp;title=Run+a+cost-change+diff+tree\u0026amp;description=Returns+a+%60GROUP+BY+ROLLUP%60+tree+of+current+vs+previous+cost+per+node+for+exactly+one+%60cost%60+or+%60usage%60+series.+Requires+an+enabled+comparison+period%2C+a+non-hou\u0026amp;theme=1281d3dcbd6f73a9ab3b217e\u0026amp;signature=b85c27fe7ca0d33f21d6aead66127d12e39817f246ff821ef2c5210655ab1ecf\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Run a cost-change diff tree - Costory Documentation\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Returns a GROUP BY ROLLUP tree of current vs previous cost per node for exactly one cost or usage series. Requires an enabled comparison period, a non-hourly aggBy, and at least one groupBy axis on that series. Pre-condition failures return 400 INVALID_QUERY with today\u0026#x27;s message in reason. There is no Hour entitlement gate — hourly is rejected for every organization.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://costory.mintlify.site/_mintlify/api/og/v2?division=Query+Costs\u0026amp;title=Run+a+cost-change+diff+tree\u0026amp;description=Returns+a+%60GROUP+BY+ROLLUP%60+tree+of+current+vs+previous+cost+per+node+for+exactly+one+%60cost%60+or+%60usage%60+series.+Requires+an+enabled+comparison+period%2C+a+non-hou\u0026amp;theme=1281d3dcbd6f73a9ab3b217e\u0026amp;signature=b85c27fe7ca0d33f21d6aead66127d12e39817f246ff821ef2c5210655ab1ecf\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"https://mintlify.s3.us-west-1.amazonaws.com/costory/_generated/favicon/browserconfig.xml?v=3\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Costory Documentation\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1D3C93\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/query-costs/run-a-cost-change-diff-tree.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.costory.io/#organization\",\"name\":\"Costory Documentation\",\"url\":\"https://docs.costory.io\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/costory/jdghijjvsrOsYiTC/logo/light.png?fit=max\u0026auto=format\u0026n=jdghijjvsrOsYiTC\u0026q=85\u0026s=dee63acdba91bf952855557cc5c5ec16\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.costory.io#website\",\"name\":\"Costory Documentation\",\"url\":\"https://docs.costory.io\",\"publisher\":{\"@id\":\"https://docs.costory.io/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree#webpage\",\"url\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree\",\"name\":\"Run a cost-change diff tree\",\"description\":\"Returns a GROUP BY ROLLUP tree of current vs previous cost per node for exactly one cost or usage series. Requires an enabled comparison period, a non-hourly aggBy, and at least one groupBy axis on that series. Pre-condition failures return 400 INVALID_QUERY with today's message in reason. There is no Hour entitlement gate — hourly is rejected for every organization.\",\"isPartOf\":{\"@id\":\"https://docs.costory.io#website\"},\"breadcrumb\":{\"@id\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Query Costs\",\"item\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-query\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Run a cost-change diff tree\",\"item\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree#apireference\",\"headline\":\"Run a cost-change diff tree\",\"name\":\"Run a cost-change diff tree\",\"description\":\"Returns a GROUP BY ROLLUP tree of current vs previous cost per node for exactly one cost or usage series. Requires an enabled comparison period, a non-hourly aggBy, and at least one groupBy axis on that series. Pre-condition failures return 400 INVALID_QUERY with today's message in reason. There is no Hour entitlement gate — hourly is rejected for every organization.\",\"url\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree\",\"mainEntityOfPage\":{\"@id\":\"https://docs.costory.io/api-reference/query-costs/run-a-cost-change-diff-tree#webpage\"},\"publisher\":{\"@id\":\"https://docs.costory.io/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.costory.io#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Costory Documentation\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Costory Documentation\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/query-costs/run-a-cost-change-diff-tree.md","siteName":"Costory Documentation","nav":{"global":null,"tabs":[{"tab":"Documentation","icon":"book","pages":[{"title":"Documentation","href":"/get-started/welcome"}]},{"tab":"Use Cases","icon":"lightbulb","pages":[{"title":"Use Cases","href":"/use-cases/overview"}]},{"tab":"API Reference","icon":"code","groups":[{"group":"Getting started","pages":[{"title":"API overview","sidebarTitle":"Overview","href":"/api-reference/overview"}]},{"group":"Query Costs API","pages":[{"title":"Query Costs API","sidebarTitle":"Overview","href":"/api-reference/queries/overview"},{"title":"Run a cost query","openapi":"POST /queries/run","href":"/api-reference/queries/run-a-cost-query"},{"title":"Run a cost-change diff tree","openapi":"POST /queries/diff-tree","href":"/api-reference/queries/run-a-cost-change-diff-tree"},{"title":"List queryable dimensions","openapi":"GET /queries/dimensions","href":"/api-reference/queries/list-queryable-dimensions"},{"title":"List business metrics","openapi":"GET /queries/metrics","href":"/api-reference/queries/list-business-metrics"},{"title":"List usage metrics","openapi":"GET /queries/usage-metrics","href":"/api-reference/queries/list-usage-metrics"}]},{"group":"Reports API","pages":[{"title":"Reports API","sidebarTitle":"Overview","href":"/api-reference/reports/overview"},{"title":"Create a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /reports","href":"/api-reference/reports/create-a-report"},{"title":"List reports","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /reports","href":"/api-reference/reports/list-reports"},{"title":"Get a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /reports/{id}","href":"/api-reference/reports/get-a-report"},{"title":"Update a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /reports/{id}","href":"/api-reference/reports/update-a-report"},{"title":"Duplicate a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /reports/{id}/duplicate","href":"/api-reference/reports/duplicate-a-report"},{"title":"Archive a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /reports/{id}","href":"/api-reference/reports/archive-a-report"},{"title":"Run a report now","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /reports/{reportId}/executions","href":"/api-reference/reports/run-a-report-now"}]},{"group":"Report Previews","pages":[{"title":"Send a test report","openapi":"POST /report-previews/deliveries","href":"/api-reference/reports/send-a-test-report"},{"title":"Preview a report widget","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /report-previews/widgets","href":"/api-reference/reports/preview-a-report-widget"}]},{"group":"Enrichments API","pages":[{"title":"Enrichments API","sidebarTitle":"Overview","href":"/api-reference/enrichments/overview"},{"title":"List live enrichments","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /enrichments","href":"/api-reference/enrichments/list-live-enrichments"},{"title":"Get one live enrichment document","openapi":"GET /enrichments/{name}","href":"/api-reference/enrichments/get-an-enrichment"},{"title":"Store an enrichment document as a draft","openapi":"PUT /enrichments/{name}","href":"/api-reference/enrichments/store-an-enrichment-draft"},{"title":"Draft the removal of an enrichment","openapi":"DELETE /enrichments/{name}","href":"/api-reference/enrichments/draft-an-enrichment-removal"},{"title":"Get pending enrichment drafts","openapi":"GET /enrichments/draft","href":"/api-reference/enrichments/get-enrichment-drafts"},{"title":"Discard pending enrichment drafts","openapi":"DELETE /enrichments/draft","href":"/api-reference/enrichments/discard-enrichment-drafts"},{"title":"Publish pending enrichment drafts","openapi":"POST /enrichments/draft/publish","href":"/api-reference/enrichments/publish-enrichment-drafts"},{"title":"List columns needed to trace a row","openapi":"GET /enrichments/trace-inputs","href":"/api-reference/enrichments/list-enrichment-trace-inputs"},{"title":"Trace one row through the enrichments","openapi":"POST /enrichments/explain","href":"/api-reference/enrichments/trace-an-enrichment-row"}]},{"group":"Alerts V2","pages":[{"title":"List cost and budget alerts","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2","href":"/api-reference/alerts-v2/list-cost-and-budget-alerts"},{"title":"List alert templates","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/templates","href":"/api-reference/alerts-v2/list-alert-templates"},{"title":"Get an alert template","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/templates/{templateId}","href":"/api-reference/alerts-v2/get-an-alert-template"},{"title":"List budgets eligible for alerts","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/budgets-with-alert-status","href":"/api-reference/alerts-v2/list-budgets-eligible-for-alerts"},{"title":"Snooze an alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/{alertId}/snooze","href":"/api-reference/alerts-v2/snooze-an-alert"},{"title":"Unsnooze an alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/{alertId}/unsnooze","href":"/api-reference/alerts-v2/unsnooze-an-alert"},{"title":"Archive an alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/{alertId}/archive","href":"/api-reference/alerts-v2/archive-an-alert"},{"title":"Restore an alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/{alertId}/restore","href":"/api-reference/alerts-v2/restore-an-alert"},{"title":"Delete an archived alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /alerts-v2/{alertId}","href":"/api-reference/alerts-v2/delete-an-archived-alert"},{"title":"List cost alerts","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/costAlerts","href":"/api-reference/alerts-v2/list-cost-alerts"},{"title":"Create a cost alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/costAlerts","href":"/api-reference/alerts-v2/create-a-cost-alert"},{"title":"Get cost alert destination options","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/costAlerts/configurationFormData","href":"/api-reference/alerts-v2/get-cost-alert-destination-options"},{"title":"Duplicate a cost alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/costAlerts/{id}/duplicate","href":"/api-reference/alerts-v2/duplicate-a-cost-alert"},{"title":"Get cost alert editor data","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/costAlerts/{id}/edit","href":"/api-reference/alerts-v2/get-cost-alert-editor-data"},{"title":"Send a cost alert test notification","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/costAlerts/test","href":"/api-reference/alerts-v2/send-a-cost-alert-test-notification"},{"title":"Bulk update cost alert metadata","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /alerts-v2/costAlerts/bulk/metadata","href":"/api-reference/alerts-v2/bulk-update-cost-alert-metadata"},{"title":"Bulk archive cost alerts","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/costAlerts/bulk/archive","href":"/api-reference/alerts-v2/bulk-archive-cost-alerts"},{"title":"Bulk restore cost alerts","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/costAlerts/bulk/restore","href":"/api-reference/alerts-v2/bulk-restore-cost-alerts"},{"title":"Update cost alert metadata","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /alerts-v2/costAlerts/{id}/metadata","href":"/api-reference/alerts-v2/update-cost-alert-metadata"},{"title":"Update a cost alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json put /alerts-v2/costAlerts/{id}","href":"/api-reference/alerts-v2/update-a-cost-alert"},{"title":"Get cost alert widget data","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/costAlerts/{id}/widgetData","href":"/api-reference/alerts-v2/get-cost-alert-widget-data"},{"title":"Get cost alert firing history","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/costAlerts/{id}/history","href":"/api-reference/alerts-v2/get-cost-alert-firing-history"},{"title":"Create a budget alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/budgetAlerts","href":"/api-reference/alerts-v2/create-a-budget-alert"},{"title":"Get budget alert destination options","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /alerts-v2/budgetAlerts/configurationFormData","href":"/api-reference/alerts-v2/get-budget-alert-destination-options"},{"title":"Update a budget alert","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json put /alerts-v2/budgetAlerts/{budgetAlertId}","href":"/api-reference/alerts-v2/update-a-budget-alert"},{"title":"Send a budget alert test notification","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /alerts-v2/budgetAlerts/sendTest","href":"/api-reference/alerts-v2/send-a-budget-alert-test-notification"}]},{"group":"Dimensions","pages":[{"title":"List queryable dimensions","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dimensions","href":"/api-reference/dimensions/list-queryable-dimensions"},{"title":"Search dimension values","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dimensions/search","href":"/api-reference/dimensions/search-dimension-values"},{"title":"List label keys that could become dimensions","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dimensions/candidates","href":"/api-reference/dimensions/list-label-keys-that-could-become-dimensions"},{"title":"Get published label transformations","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dimensions/labels","href":"/api-reference/dimensions/get-published-label-transformations"},{"title":"Publish pending dimension changes","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /dimensions/publish","href":"/api-reference/dimensions/publish-pending-dimension-changes"},{"title":"Restrict label dimensions to org admins","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /dimensions/settings","href":"/api-reference/dimensions/restrict-label-dimensions-to-org-admins"}]},{"group":"Metrics","pages":[{"title":"List usage metrics","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /usage-metrics","href":"/api-reference/metrics/list-usage-metrics"}]},{"group":"Enrichments","pages":[{"title":"List live enrichments","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /enrichments","href":"/api-reference/enrichments/list-live-enrichments"},{"title":"Get pending enrichment drafts","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /enrichments/draft","href":"/api-reference/enrichments/get-pending-enrichment-drafts"},{"title":"Discard pending enrichment drafts","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /enrichments/draft","href":"/api-reference/enrichments/discard-pending-enrichment-drafts"},{"title":"Publish pending enrichment drafts","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /enrichments/draft/publish","href":"/api-reference/enrichments/publish-pending-enrichment-drafts"},{"title":"List columns needed to trace a row","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /enrichments/trace-inputs","href":"/api-reference/enrichments/list-columns-needed-to-trace-a-row"},{"title":"Trace one row through the enrichments","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /enrichments/explain","href":"/api-reference/enrichments/trace-one-row-through-the-enrichments"},{"title":"Get one live enrichment document","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /enrichments/{name}","href":"/api-reference/enrichments/get-one-live-enrichment-document"},{"title":"Store an enrichment document as a draft","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json put /enrichments/{name}","href":"/api-reference/enrichments/store-an-enrichment-document-as-a-draft"},{"title":"Draft the removal of an enrichment","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /enrichments/{name}","href":"/api-reference/enrichments/draft-the-removal-of-an-enrichment"}]},{"group":"Dashboards","pages":[{"title":"List dashboards","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dashboard-v2/list","href":"/api-reference/dashboards/list-dashboards"},{"title":"List recently updated dashboards","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dashboard-v2/recent","href":"/api-reference/dashboards/list-recently-updated-dashboards"},{"title":"List popular dashboards by view count","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dashboard-v2/popular","href":"/api-reference/dashboards/list-popular-dashboards-by-view-count"},{"title":"Get a dashboard","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dashboard-v2/{id}/full","href":"/api-reference/dashboards/get-a-dashboard"},{"title":"List saved dashboard versions","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dashboard-v2/{id}/versions","href":"/api-reference/dashboards/list-saved-dashboard-versions"},{"title":"Get a dashboard version hydrate payload","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dashboard-v2/{id}/versions/{versionId}","href":"/api-reference/dashboards/get-a-dashboard-version-hydrate-payload"},{"title":"Rename a saved dashboard version","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /dashboard-v2/{id}/versions/{versionId}","href":"/api-reference/dashboards/rename-a-saved-dashboard-version"},{"title":"Copy an old dashboard version into a new dashboard","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /dashboard-v2/{id}/versions/{versionId}/copy","href":"/api-reference/dashboards/copy-an-old-dashboard-version-into-a-new-dashboard"},{"title":"Create a dashboard","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /dashboard-v2","href":"/api-reference/dashboards/create-a-dashboard"},{"title":"Publish a dashboard","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json put /dashboard-v2/{id}","href":"/api-reference/dashboards/publish-a-dashboard"},{"title":"Delete a dashboard","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /dashboard-v2/{id}","href":"/api-reference/dashboards/delete-a-dashboard"},{"title":"Update dashboard metadata","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /dashboard-v2/{id}/metadata","href":"/api-reference/dashboards/update-dashboard-metadata"},{"title":"Bulk update dashboard metadata","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /dashboard-v2/bulk/metadata","href":"/api-reference/dashboards/bulk-update-dashboard-metadata"},{"title":"Bulk delete dashboards","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /dashboard-v2/bulk","href":"/api-reference/dashboards/bulk-delete-dashboards"},{"title":"List dashboard templates","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dashboard-v2/templates","href":"/api-reference/dashboards/list-dashboard-templates"},{"title":"Clone a dashboard template","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /dashboard-v2/templates/{templateId}/clone","href":"/api-reference/dashboards/clone-a-dashboard-template"},{"title":"Duplicate a dashboard","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /dashboard-v2/{id}/duplicate","href":"/api-reference/dashboards/duplicate-a-dashboard"},{"title":"Publish a dashboard as a Costory template","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /dashboard-v2/{id}/create-template","href":"/api-reference/dashboards/publish-a-dashboard-as-a-costory-template"},{"title":"Create a dashboard with an AI-generated title","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /dashboard-v2/create-from-intent","href":"/api-reference/dashboards/create-a-dashboard-with-an-ai-generated-title"},{"title":"Resolve a legacy id to a DashboardV2 id","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /dashboard-v2/legacy-redirect","href":"/api-reference/dashboards/resolve-a-legacy-id-to-a-dashboardv2-id"}]},{"group":"Reports","pages":[{"title":"List reports","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /reports","href":"/api-reference/reports/list-reports"},{"title":"Create a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /reports","href":"/api-reference/reports/create-a-report"},{"title":"Get a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /reports/{id}","href":"/api-reference/reports/get-a-report"},{"title":"Archive a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /reports/{id}","href":"/api-reference/reports/archive-a-report"},{"title":"Update a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /reports/{id}","href":"/api-reference/reports/update-a-report"},{"title":"Bulk update report metadata","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /reports/bulk/metadata","href":"/api-reference/reports/bulk-update-report-metadata"},{"title":"Bulk archive reports","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /reports/bulk","href":"/api-reference/reports/bulk-archive-reports"},{"title":"Update report metadata","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /reports/{id}/metadata","href":"/api-reference/reports/update-report-metadata"},{"title":"Duplicate a report","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /reports/{id}/duplicate","href":"/api-reference/reports/duplicate-a-report"},{"title":"Run a report now","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /reports/{reportId}/executions","href":"/api-reference/reports/run-a-report-now"},{"title":"Get a report execution","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /report-executions/{executionId}","href":"/api-reference/reports/get-a-report-execution"},{"title":"Retry a failed report execution","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /report-executions/{executionId}/retry","href":"/api-reference/reports/retry-a-failed-report-execution"},{"title":"Transfer a rendered execution to new destinations","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /report-executions/{executionId}/transfers","href":"/api-reference/reports/transfer-a-rendered-execution-to-new-destinations"},{"title":"Send a test report delivery","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /report-previews/deliveries","href":"/api-reference/reports/send-a-test-report-delivery"},{"title":"Preview a report widget","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /report-previews/widgets","href":"/api-reference/reports/preview-a-report-widget"},{"title":"Preview digest summary markdown","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /report-previews/digest-summary","href":"/api-reference/reports/preview-digest-summary-markdown"}]},{"group":"Query Costs","pages":[{"title":"Run a cost query","description":"Executes a CEL query and returns either a time series (`kind: series`) or a period-over-period comparison (`kind: comparison`) when `compare.enabled` is true. Organization comes from the authenticated principal (Clerk session JWT or `ak_*` API key). When `datePreset` is sent alongside `from`/`to`, the preset wins. An omitted `limit` is server-chosen (currently between 10 and 200 depending on the chart shape), not a flat default of 100. Optional `analyze.changePoint` (`true` or `{ ignoreWeekends }`) runs change-point detection once per query after a successful series result; Billy failures attach `analyze.changePoint[].status: failed` without failing the query. Incompatible with comparison. Optional `forecast: true` (Current Month / Current Quarter / Current Year, Day/Week/Month/Period) appends Billy forecast days onto the series: response `splitDate`, per-point `yhatLower`/`yhatUpper` on Day grain, or `forecastSkipReason: not_enough_history` when there are fewer than 21 training days. YTD/MTD + `forecast: true` is ignored. Billy failures degrade to observed-only without failing the query.","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /queries/run","href":"/api-reference/query-costs/run-a-cost-query"},{"title":"Run a cost-change diff tree","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /queries/diff-tree","href":"/api-reference/query-costs/run-a-cost-change-diff-tree"},{"title":"List queryable dimensions","description":"Group-by axes and their values accepted by `groupBy` on cost/usage/metric series. Strict public shape — no react-querybuilder filter-widget fields.","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /queries/dimensions","href":"/api-reference/query-costs/list-queryable-dimensions"},{"title":"List usage metrics","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /queries/usage-metrics","href":"/api-reference/query-costs/list-usage-metrics"},{"title":"List business metrics","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /queries/metrics","href":"/api-reference/query-costs/list-business-metrics"}]},{"group":"Events","pages":[{"title":"Create a new event","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /public/events","href":"/api-reference/events/create-a-new-event"},{"title":"Get event tags","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /events/tags","href":"/api-reference/events/get-event-tags"},{"title":"Get an event by ID","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /events/{id}","href":"/api-reference/events/get-an-event-by-id"},{"title":"Update an event","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json put /events/{id}","href":"/api-reference/events/update-an-event"},{"title":"Delete an event","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /events/{id}","href":"/api-reference/events/delete-an-event"},{"title":"Aggregate events","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /events/aggregate","href":"/api-reference/events/aggregate-events"},{"title":"Create a new event","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /events","href":"/api-reference/events/create-a-new-event-1"}]},{"group":"Admin","pages":[{"title":"Get service account details","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /terraform","href":"/api-reference/admin/get-service-account-details"}]},{"group":"Admin Billing Datasources","pages":[{"title":"Create a billing datasource","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /terraform/billingDatasources","href":"/api-reference/admin-billing-datasources/create-a-billing-datasource"},{"title":"Get a billing datasource","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /terraform/billingDatasources/{id}","href":"/api-reference/admin-billing-datasources/get-a-billing-datasource"},{"title":"Archive a billing datasource","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /terraform/billingDatasources/{id}","href":"/api-reference/admin-billing-datasources/archive-a-billing-datasource"},{"title":"Validate billing datasource configuration","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /terraform/billingDatasources/validate","href":"/api-reference/admin-billing-datasources/validate-billing-datasource-configuration"}]},{"group":"Admin Teams","pages":[{"title":"List teams in the organization via Admin API","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /terraform/teams","href":"/api-reference/admin-teams/list-teams-in-the-organization-via-admin-api"},{"title":"Create a team via Admin API","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /terraform/teams","href":"/api-reference/admin-teams/create-a-team-via-admin-api"},{"title":"Get a team via Admin API","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /terraform/teams/{id}","href":"/api-reference/admin-teams/get-a-team-via-admin-api"},{"title":"Archive a team via Admin API","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /terraform/teams/{id}","href":"/api-reference/admin-teams/archive-a-team-via-admin-api"},{"title":"Update a team via Admin API","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json patch /terraform/teams/{id}","href":"/api-reference/admin-teams/update-a-team-via-admin-api"},{"title":"Add a member to a team via Admin API","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /terraform/teams/{id}/members","href":"/api-reference/admin-teams/add-a-member-to-a-team-via-admin-api"},{"title":"Remove a member from a team via Admin API","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json delete /terraform/teams/{id}/members/{userId}","href":"/api-reference/admin-teams/remove-a-member-from-a-team-via-admin-api"},{"title":"Sync all members of a team via Admin API","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /terraform/teams/{id}/SYNC","href":"/api-reference/admin-teams/sync-all-members-of-a-team-via-admin-api"}]},{"group":"Custom Metrics","pages":[{"title":"Push custom metric points","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json post /integrations/{id}/metrics/points","href":"/api-reference/custom-metrics/push-custom-metric-points"}]},{"group":"Access","pages":[{"title":"Get object access grants","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json get /access/{resourceKind}/{resourceId}","href":"/api-reference/access/get-object-access-grants"},{"title":"Replace object access grants","deprecated":null,"version":null,"openapi":"https://app-api.costory.io/docs/openapi.json put /access/{resourceKind}/{resourceId}/grants","href":"/api-reference/access/replace-object-access-grants"}]}]},{"tab":"Changelog","icon":"clock-rotate-left","pages":[{"title":"Changelog","href":"/changelog"}]},{"tab":"FinOps Memes","icon":"face-laugh-squint","pages":[{"title":"FinOps Memes","href":"/docs/finops-memes"}]}]},"basePath":"","title":"Run a cost-change diff tree - Costory Documentation","buildId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","deploymentId":"dpl_DqYu5MPb49gWBBbUGgpHQUmCHY3P","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-CybtLBIt.js","utils-BMLj2fvV.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-B6In562Y.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-Dr8Mfhp9.js","snippetPresets-2rmQvMVl.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-WMqJYdZj.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CJ-MlPHu.js","shallow-dY3TMRCk.js","getApiPlaygroundDisplay-v-1B2bKm.js","CodeSnippet-BDhiTB7U.js","CodeSnippets-D9hnzQcS.js","Page-C4GwDT3_.js","getPastedJson-Th2V45jI.js","icon-BQXch1W9.js","MethodPill-BCqUneP3.js","DuplicateIcon-Q_-bhurZ.js","createIcon-DUjLHRqp.js","DynamicMarkdown-B-f2cqXQ.js","SectionHeading-Da5NsV4v.js","axios-vUo_bRtp.js","Markdown-D13FWkIM.js","clsx-D3Isdib3.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-C-XZBk9h.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink--qIqmmVG.js"]}