1.1.0npm · @doitintl/doit-mcp-server · latest release
Observed 2026-09-04T23:14:58.305Z using mcpSecurity-inventory. Protocol 2025-06-18.
| Tool | Category | Risk |
|---|---|---|
accept_budget_suggestionAI-generated budget recommendations you can accept (link to a budget you created) or dismiss. Marks the suggestion as accepted and links it to an existing budget. Create the budget first via
`POST /analytics/v1/budgets`, then pass its `id` as `budgetId`. The budget must belong to your account.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"budgetId": {
"type": "string",
"description": "ID of the budget (created via POST /analytics/v1/budgets) to link this suggestion to."
},
"editedBeforeAccept": {
"type": "boolean",
"description": "Whether the customer edited the suggested values before accepting."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id",
"budgetId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
add_ticket_tagsCreate and manage support tickets with DoiT. Adds one or more tags to an existing support request. The operation is
surgical — only the tags listed in the request are added; existing tags
on the ticket are preserved. Re-adding a tag that is already present is
a successful no-op.
All submitted tags are normalized (trim + lowercase) before storage. For
customers, the system additionally applies a `customer_tag/` namespace
prefix to prevent collisions with internal DoiT process tags. The
response echoes the actual stored strings so callers can verify the
transform.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "number"
},
"tags": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"description": "List of tags to add or remove. Customer-submitted tags are auto-prefixed with `customer_tag/`."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"ticketId",
"tags"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
ask_ava_syncAsk DoiT AVA, the cloud cost and infrastructure expert, a question about the user's DoiT account, cloud spending, anomalies, or optimization opportunities. AVA has access to the customer's billing data, usage patterns, and DoiT-specific features. Use this for DoiT or cloud-specific questions only — not for general-purpose AI queries. Note: AVA can take a long time to respond for complex questions. If it does not respond in time, a clear error is returned with guidance to retry or simplify the question.Input schema{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The question to ask AVA about the user's DoiT account, cloud costs, or infrastructure."
},
"conversationId": {
"type": "string",
"description": "ID of a prior non-ephemeral conversation to continue. Requires ephemeral to be set to false — cannot be used with ephemeral: true (the default)."
},
"ephemeral": {
"type": "boolean",
"default": true,
"description": "When true (default), the conversation is not persisted and no conversationId or answerId is returned. Set to false to receive conversationId and answerId in the response, which are needed for follow-up questions or submitting feedback."
}
},
"required": [
"question"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
assign_objects_to_labelUse this when the user wants to assign or unassign cloud resources to a label. Ask the user to confirm the assignments before executing. Do NOT use this for creating labels (use create_label) or viewing assignments (use get_label_assignments).Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the label to assign or unassign objects to."
},
"add": {
"type": "array",
"items": {
"type": "object",
"properties": {
"objectId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the object."
},
"objectType": {
"type": "string",
"enum": [
"alert",
"allocation",
"budget",
"metric",
"report",
"annotation"
],
"description": "The type of the object. Accepted values: alert, allocation, budget, metric, report, annotation."
}
},
"required": [
"objectId",
"objectType"
],
"additionalProperties": false
},
"description": "Array of objects to assign to the label. Each object must have objectId and objectType."
},
"remove": {
"type": "array",
"items": {
"$ref": "#/properties/add/items"
},
"description": "Array of objects to unassign from the label. Each object must have objectId and objectType."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
async_run_inlineManage Cloud Analytics reports and get reports data in JSON format. Submits an async report execution job using an inline configuration. Returns 202 immediately with a Location header pointing to the operation status endpoint. Requires the Idempotency-Key header to ensure at-most-once submission. Duplicate requests with the same config for the same customer return the existing in-flight operation. Use ?dryRun=true to validate the config without creating an operation.Input schema{
"type": "object",
"properties": {
"dryRun": {
"type": "boolean"
},
"Idempotency-Key": {
"type": "string"
},
"config": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"basic",
"custom",
"extended"
],
"description": "Type of metric to use."
},
"value": {
"type": "string",
"description": "For basic metrics, the value can be one of: [\"cost\", \"usage\", \"savings\"]\nIf using custom metrics, the value must refer to an existing custom metric ID."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "Deprecated: Use 'metrics' instead."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"basic",
"custom",
"extended"
],
"description": "Type of metric to use."
},
"value": {
"type": "string",
"description": "For basic metrics, the value can be one of: [\"cost\", \"usage\", \"savings\"]\nIf using custom metrics, the value must refer to an existing custom metric ID."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "Metric selector used in reports and filters."
},
"description": "The list of metrics to apply to the report. Custom metric can be used only once. Maximum number of metrics is 4."
},
"metricFilter": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"basic",
"custom",
"extended"
],
"description": "Type of metric to use."
},
"value": {
"type": "string",
"description": "For basic metrics, the value can be one of: [\"cost\", \"usage\", \"savings\"]\nIf using custom metrics, the value must refer to an existing custom metric ID."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "Metric selector used in reports and filters."
},
"operator": {
"type": "string",
"enum": [
"gt",
"lt",
"lte",
"gte",
"b",
"nb",
"e",
"ne"
],
"description": "Comparison operator for filtering metric values. Uses short names (`gt`, `gte`, …).\n`limitByChange.operator` uses SQL-style symbols (`>`, `>=`, …) instead."
},
"values": {
"type": "array",
"items": {
"type": "number"
}
},
"operand": {
"type": "string",
"enum": [
"single_value",
"series_total"
],
"description": "Whether the threshold applies to each value (default) or the series total.\nSame field as the DoiT Console metric filter `operand` (`OperandSingleValue` /\n`OperandSeriesTotal`). On input, omitted defaults to `single_value`. GET responses\necho the effective value (`single_value` or `series_total`)."
}
},
"required": [
"metric",
"operator",
"values"
],
"additionalProperties": false,
"description": "Metric filter to limit report rows by metric value."
},
"limitAggregation": {
"type": "string",
"enum": [
"none",
"top",
"all"
],
"description": "Controls how rows excluded by limits are rendered. Applies when any limit type is active\n(`metricFilter`, `limitByChange`, or a `group` entry with a `limit`). A report may configure\nat most two of those three limit types — not all three. When `displayValues` is not\n`actuals_only`, this field must be `none` (or omitted, which defaults to `none`)."
},
"limitByChange": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"basic",
"custom",
"extended"
],
"description": "Type of metric to use."
},
"value": {
"type": "string",
"description": "For basic metrics, the value can be one of: [\"cost\", \"usage\", \"savings\"]\nIf using custom metrics, the value must refer to an existing custom metric ID."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "Metric selector used in reports and filters."
},
"changeType": {
"type": "string",
"enum": [
"percentage",
"absolute"
]
},
"operator": {
"type": "string",
"enum": [
">",
">=",
"<",
"<=",
"between",
"not_between"
],
"description": "Comparison operator for period-over-period deltas."
},
"values": {
"type": "array",
"items": {
"type": "number"
},
"description": "Threshold value(s). Unary operators use one entry; `between` and `not_between`\nrequire two ordered entries."
},
"includeIncompleteData": {
"type": "boolean",
"description": "When true, keeps rows whose deltas could not be evaluated."
}
},
"required": [
"metric",
"changeType",
"operator",
"values",
"includeIncompleteData"
],
"additionalProperties": false,
"description": "Limit by change filter. A report may configure at most two of\n`metricFilter`, `limitByChange`, and top/bottom `group` limits — not all three."
},
"aggregation": {
"type": "string",
"enum": [
"total",
"percent_total",
"percent_col",
"percent_row",
"total_over_total",
"count"
],
"description": "How to aggregate data values in the report."
},
"advancedAnalysis": {
"type": "object",
"properties": {
"forecast": {
"type": "boolean"
},
"notTrending": {
"type": "boolean"
},
"trendingDown": {
"type": "boolean"
},
"trendingUp": {
"type": "boolean"
}
},
"additionalProperties": false,
"description": "Advanced analysis options. Each can be set independently."
},
"forecastSettings": {
"anyOf": [
{
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"totals",
"grouping"
],
"description": "Forecast granularity mode."
},
"historicalTimeIntervals": {
"type": "number",
"description": "How many past timeInterval periods of data the model learns from.\nAllowed ranges by timeInterval: hour 2-1000, day 2-500, week 2-100, month 2-36, quarter 2-12, year 2-6."
},
"futureTimeIntervals": {
"type": "number",
"description": "How many future timeInterval periods of predicted costs to project.\nAllowed ranges by timeInterval: hour 1-1000, day 1-100, week 1-52, month 1-12, quarter 1-4, year 1-3."
},
"historicalCustomDateRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start timestamp in RFC3339 format."
},
"to": {
"type": "string",
"description": "End timestamp in RFC3339 format."
}
},
"additionalProperties": false,
"description": "Past date range of billed data the model learns from. Takes precedence over historicalTimeIntervals."
},
"futureCustomDateRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start timestamp in RFC3339 format."
},
"to": {
"type": "string",
"description": "End timestamp in RFC3339 format."
}
},
"additionalProperties": false,
"description": "Date range for how far ahead to project predicted costs. Takes precedence over futureTimeIntervals.\nThe range must resolve to a futureTimeIntervals count within the allowed min/max for the report timeInterval."
}
},
"additionalProperties": false,
"description": "Forecast configuration. On PATCH, omit to preserve existing settings; send null to clear/disable forecasting."
},
{
"type": "null"
}
],
"description": "Forecast configuration. On PATCH, omit to preserve existing settings; send null to clear/disable forecasting."
},
"timeInterval": {
"type": "string",
"enum": [
"hour",
"day",
"dayCumSum",
"week",
"isoweek",
"month",
"quarter",
"year",
"week_day"
],
"description": "Time interval for grouping data in the report."
},
"dimensions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The identifier of the dimension."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension filter type. Always pair `type` with `id` on scope filters. Discover valid `id` + `type` pairs for your account with `GET /analytics/v1/dimensions`. `allocation_rule` replaces `attribution`; `allocation` replaces `attribution_group`."
}
},
"additionalProperties": false,
"description": "Definition of a report dimension."
},
"description": "See [Dimensions](https://help.doit.com/docs/cloud-analytics/reports/editing-your-cloud-report#dimensions)."
},
"timeRange": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"minimum": 0,
"maximum": 5000,
"description": "Number of time units to include in the time range."
},
"includeCurrent": {
"type": "boolean",
"description": "Whether to include the current time period."
},
"mode": {
"type": "string",
"enum": [
"last",
"current",
"custom"
],
"description": "Time range mode (last N periods, current period, or custom)."
},
"unit": {
"type": "string",
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"description": "Time unit for the time range."
}
},
"additionalProperties": false,
"description": "Specify a predefined or custom time range for the report.\nFor example, to specify a custom time range of \"last 2 days\", set the mode to `last`, the amount to `2`, and the unit to `day`. If `includeCurrent` is `true`, the range will be yesterday and today; otherwise, the range will be yesterday and the day before yesterday.\nIf \"custom\" type is specified, you need to provide a custom time range in the `customTimeRange` field."
},
"secondaryTimeRange": {
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "Number of periods to shift back."
},
"includeCurrent": {
"type": "boolean",
"description": "Whether to align to complete previous periods (full year/quarter/month) vs shifting dates by amount.\n When `true`, selects complete periods (e.g., full previous year Jan 1-Dec 31, not up to today).\n When `false`, shifts dates by amount, which may result in partial periods extending to today."
},
"unit": {
"type": "string",
"enum": [
"day",
"month",
"quarter",
"year"
],
"description": "Time interval unit for shifting."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date."
},
"to": {
"type": "string",
"description": "End date."
}
},
"additionalProperties": false,
"description": "Custom date range for the secondary time range."
}
},
"additionalProperties": false,
"description": "Secondary time range for comparative reports."
},
"includePromotionalCredits": {
"type": "boolean",
"description": "Whether to include [promotional credits](https://help.doit.com/docs/cloud-analytics/reports/editing-your-cloud-report#promotional-credits).\nIf set to **true**, the report must use time interval `month`, `quarter`, or `year`."
},
"includeSubtotals": {
"type": "boolean",
"description": "Whether to include subgroup totals in the report. This option has no impact when reading a report via API."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dimension key to filter on. Must pair with `type` and match a dimension returned by `GET /analytics/v1/dimensions` (for example, `service_description` with `type: fixed`). For `allocation_rule`, use `allocation_rule`. For `allocation`, use the allocation group ID. See `DimensionsTypes` for how each `type` uses `id`."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension filter type. Always pair `type` with `id` on scope filters. Discover valid `id` + `type` pairs for your account with `GET /analytics/v1/dimensions`. `allocation_rule` replaces `attribution`; `allocation` replaces `attribution_group`."
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of values to include or exclude. Must match exact strings from your billing or DataHub data for the dimension (for example, `Amazon Simple Storage Service` for AWS S3 on `service_description`). For `allocation_rule`, use allocation rule IDs."
},
"mode": {
"type": "string",
"enum": [
"is",
"starts_with",
"ends_with",
"contains",
"regexp"
],
"description": "Controls how the dimension’s `values` are matched when the alert query runs. If mode is omitted, behavior defaults to is."
},
"inverse": {
"type": "boolean",
"description": "Set to `true` to exclude the set values. If inverse is omitted, behavior defaults to `false`."
},
"caseInsensitive": {
"type": "boolean",
"description": "If true, string matching is case-insensitive. Effective only for starts_with, ends_with, and contains modes; ignored otherwise."
},
"includeNull": {
"type": "boolean",
"description": "Include rows where the dimension is null. If includeNull is omitted, behavior defaults to `false`."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false,
"description": "To include or exclude certain values.\nWhen using allocation rules as a filter, both the type and the ID must be \"allocation_rule\", and the values array contains the allocation rule IDs.\nWhen using allocations as a filter, the type must be \"allocation\" and the ID is the actual allocation group ID."
},
"description": "The filters to apply to the report."
},
"group": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dimension ID."
},
"limit": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"basic",
"custom",
"extended"
],
"description": "Type of metric to use."
},
"value": {
"type": "string",
"description": "For basic metrics, the value can be one of: [\"cost\", \"usage\", \"savings\"]\nIf using custom metrics, the value must refer to an existing custom metric ID."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "Metric selector used in reports and filters."
},
"sort": {
"type": "string",
"enum": [
"a_to_z",
"asc",
"desc"
],
"description": "Sort order for ranking results."
},
"value": {
"type": "number",
"description": "The number of items to show"
}
},
"required": [
"metric"
],
"additionalProperties": false,
"description": "To limit the number of results based on ranking. See [Limit by top/bottom](https://help.doit.com/docs/cloud-analytics/reports/editing-your-cloud-report#limit-by-topbottom)."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension filter type. Always pair `type` with `id` on scope filters. Discover valid `id` + `type` pairs for your account with `GET /analytics/v1/dimensions`. `allocation_rule` replaces `attribution`; `allocation` replaces `attribution_group`."
}
},
"additionalProperties": false,
"description": "The dimension that defines a row in the report."
},
"description": "The rows that appear in the tabular format of the report. See [Group by](https://help.doit.com/docs/cloud-analytics/reports/editing-your-cloud-report#group-by)."
},
"layout": {
"type": "string",
"enum": [
"column_chart",
"stacked_column_chart",
"bar_chart",
"stacked_bar_chart",
"line_chart",
"spline_chart",
"area_chart",
"area_spline_chart",
"stacked_area_chart",
"treemap_chart",
"table",
"table_heatmap",
"table_row_heatmap",
"table_col_heatmap",
"csv_export",
"sheets_export"
],
"description": "Type of visualization or output format."
},
"displayValues": {
"type": "string",
"enum": [
"actuals_only",
"absolute_change",
"percentage_change",
"absolute_and_percentage"
],
"description": "See [View data as (Comparative report)](https://help.doit.com/docs/cloud-analytics/reports/editing-your-cloud-report#view-as)."
},
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code for monetary values."
},
"sortGroups": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "This option has no impact when reading reports via API."
},
"sortDimensions": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "This option has no impact when reading reports via API."
},
"dataSource": {
"type": "string",
"enum": [
"billing",
"bqlens",
"billing-datahub",
"kubernetes-utilization"
],
"description": "Data source of the report."
},
"splits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the field to split."
},
"includeOrigin": {
"type": "boolean",
"description": "Indicate whether to include the origin."
},
"mode": {
"type": "string",
"enum": [
"even",
"custom",
"proportional"
]
},
"origin": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the origin."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label",
"unallocated"
],
"description": "Type of the origin."
}
},
"additionalProperties": false,
"description": "Origin info for cost splitting."
},
"targets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the target."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label"
],
"description": "Type of the target.\nIf split type is \"attribution_group\", then target type must be \"attribution\".\nOtherwise split types and target types must be the same."
},
"value": {
"type": "number",
"description": "Percent of the target, represented in float format. E.g. 30% is 0.3. Required only if the Split Mode is custom."
}
},
"additionalProperties": false,
"description": "Target and value of a split definition."
},
"description": "Targets for the split."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label"
],
"description": "Type of the split."
}
},
"additionalProperties": false,
"description": "Specification of how to split costs."
},
"description": "The splits to use in the report."
},
"displaySettings": {
"type": "object",
"properties": {
"themeId": {
"type": "string",
"description": "Identifier of the theme applied to the report. The reserved\nsentinel `\"default\"` is returned on GET when no theme is stored\nand clears the stored value on PATCH. Omit the field on PATCH\nto leave the stored value unchanged."
},
"dataLabelFontSize": {
"type": "string",
"enum": [
"auto",
"small",
"medium",
"large"
],
"description": "Font size used for data labels on charts."
},
"axisLabelFontSize": {
"type": "string",
"enum": [
"auto",
"small",
"medium",
"large"
],
"description": "Font size used for axis labels on charts."
},
"numberScale": {
"type": "string",
"enum": [
"auto",
"thousands",
"millions",
"billions",
"raw"
],
"description": "Scale applied to numeric values when rendering the report."
},
"decimalPrecision": {
"type": "number",
"minimum": 0,
"maximum": 8,
"description": "Number of decimal places shown for numeric values."
}
},
"additionalProperties": false,
"description": "Display settings for the report."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "The start timestamp of the time range in RFC3339 format."
},
"to": {
"type": "string",
"description": "The end timestamp of the time range in RFC3339 format."
}
},
"additionalProperties": false,
"description": "Required when the time range is set to \"custom\"."
},
"count": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The field identifier to count distinct values of."
},
"type": {
"type": "string",
"enum": [
"fixed",
"label",
"tag",
"project_label",
"system_label"
],
"description": "The metadata field type."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false,
"description": "The field to count distinct values of. Only applicable when aggregation is set to \"count\"."
}
},
"additionalProperties": false,
"description": "Report configuration."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"Idempotency-Key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
async_run_report_by_idManage Cloud Analytics reports and get reports data in JSON format. Submits an async execution job for a saved report identified by ID. Returns 202 immediately with a Location header pointing to the operation status endpoint. Requires the Idempotency-Key header. Use ?dryRun=true to validate without creating an operation.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"dryRun": {
"type": "boolean"
},
"timeRange": {
"type": "string",
"pattern": "^P(\\d+Y)?(\\d+M)?(\\d+D)?$"
},
"startDate": {
"type": "string"
},
"endDate": {
"type": "string"
},
"Idempotency-Key": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id",
"Idempotency-Key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
ava_feedbackInteract with Ava, DoiT's AI-powered cloud assistant. Submit feedback on an Ava answer to help improve response quality.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string",
"description": "The conversation ID the feedback relates to."
},
"answerId": {
"type": "string",
"description": "The specific answer ID within the conversation."
},
"feedback": {
"type": "object",
"properties": {
"positive": {
"type": "boolean",
"description": "Whether the feedback is positive or negative."
},
"text": {
"type": "string",
"description": "Optional text providing additional feedback details."
}
},
"required": [
"positive"
],
"additionalProperties": false
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"conversationId",
"answerId",
"feedback"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
build_cloud_flowUse this when the user wants to build a brand-new CloudFlow automation from scratch using natural language. Streams real-time progress while the AI builds the flow, then returns the newly created flow's ID, the builder's answer, and the build steps that ran. Use refine_cloudflow to change an existing flow; use this only to create a new one. Generated codeNode code is frequently broken in ways that pass validation and fail silently at run time. Always export_cloudflow_flow and test-run the result, and check the per-node output, before reporting success.Input schema{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "Natural language description of the CloudFlow to build from scratch."
},
"conversationId": {
"type": "string",
"description": "Optional conversation ID to continue an existing build session."
}
},
"required": [
"question"
]
}Annotations{
"readOnlyHint": false,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
cancel_async_operationManage Cloud Analytics reports and get reports data in JSON format. Cancels a pending or running async report operation. Already-terminal operations (succeeded, failed, canceled) are returned as-is without any state change (idempotent). Returns 404 if the operationId does not exist or belongs to a different tenant. Use ?dryRun=true to validate the request without modifying any state.Input schema{
"type": "object",
"properties": {
"operationId": {
"type": "string"
},
"dryRun": {
"type": "boolean"
},
"Idempotency-Key": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"operationId",
"Idempotency-Key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
cancel_inviteManage users who have access to the DoiT platform. Marks the invite as `Cancelled` and invalidates the invite token so any outstanding email
links stop working. The invite document is retained (soft cancel) — the user row remains
visible in `GET /iam/v1/users` with `inviteStatus: Cancelled`. Use `DELETE /iam/v1/users/{id}`
to fully remove the record.
Returns `404` if no invite exists for the given ID, and `409` if the invite is already cancelled.
Requires `usersManager` permission.
Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"dryRun": {
"type": "boolean"
},
"Idempotency-Key": {
"type": "string",
"maxLength": 255
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id",
"Idempotency-Key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
compare_spendUse this when the user wants to compare spend between two time periods (e.g. 'Compare my costs this quarter vs last quarter', 'How did January compare to February?'). Period 1 is a rolling lookback; period 2 is an explicit date range. For more than two periods or advanced comparative analysis, use run_query instead.Input schema{
"type": "object",
"properties": {
"period1Months": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"default": 3,
"description": "How many months to look back for period 1 (default 3). Includes the current month."
},
"period2": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date in RFC3339 format (e.g. '2025-01-01T00:00:00Z')."
},
"to": {
"type": "string",
"description": "End date in RFC3339 format (e.g. '2025-03-31T23:59:59Z')."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "The comparison period as an explicit date range."
},
"cloud": {
"type": "string",
"description": "Filter to a specific cloud provider. Accepts aliases like \"aws\", \"gcp\", \"azure\"."
},
"groupBy": {
"type": "string",
"enum": [
"service",
"project",
"cloud"
],
"default": "service",
"description": "Dimension to group by (default \"service\")."
}
},
"required": [
"period2"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
confirm_actionFinalizes a pending write action (e.g. creating, updating, or deleting a resource) that was previously staged by another tool. Only call this after the user has explicitly confirmed the action summary returned by the previous tool call. If the user declined, do not call this tool — the token will expire automatically. Pass the token exactly as it was returned.Input schema{
"type": "object",
"properties": {
"token": {
"type": "string",
"minLength": 1,
"description": "The approval token returned by a previous write/mutating tool call. Exactly as received, no quoting changes."
}
},
"required": [
"token"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
cost_breakdownUse this when the user wants a simple cost breakdown by service, project, or cloud provider (e.g. 'What are my top services by cost?', 'Which projects cost the most?'). Returns the top-N items ranked by cost descending. For complex multi-filter or multi-metric queries, use run_query instead.Input schema{
"type": "object",
"properties": {
"groupBy": {
"type": "string",
"enum": [
"service",
"project",
"cloud"
],
"description": "Dimension to group costs by. \"service\" = cloud service, \"project\" = project/account/subscription, \"cloud\" = cloud provider."
},
"cloud": {
"type": "string",
"description": "Filter to a specific cloud provider. Accepts aliases like \"aws\", \"gcp\", \"azure\"."
},
"months": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"default": 1,
"description": "How many months to look back (default 1). The current in-progress month is always included."
},
"topN": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10,
"description": "Number of top results to return (default 10, max 25)."
}
},
"required": [
"groupBy"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
cost_trendUse this when the user wants to see monthly spend over time (e.g. 'Show me my cost trend', 'How has my spend changed over the last 6 months?'). Returns monthly cost data points, optionally broken down by service/project/cloud. For daily granularity or custom time intervals, use run_query instead.Input schema{
"type": "object",
"properties": {
"months": {
"type": "integer",
"minimum": 1,
"maximum": 36,
"default": 6,
"description": "How many months of history to include (default 6)."
},
"cloud": {
"type": "string",
"description": "Filter to a specific cloud provider. Accepts aliases like \"aws\", \"gcp\", \"azure\"."
},
"groupBy": {
"type": "string",
"enum": [
"service",
"project",
"cloud"
],
"description": "Optional breakdown dimension. If omitted the trend is a single total line."
},
"topN": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 5,
"description": "When groupBy is set, limit to top-N groups by cost (default 5)."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
create_account_roleManage cloud provider connections and check feature availability for connected accounts. Creates or updates a CloudConnect document for an AWS account.
Unlike the CloudFormation variant, this endpoint does not update Firestore channel documents
or require a CloudFormation stack ID.Input schema{
"type": "object",
"properties": {
"accountID": {
"type": "string",
"description": "The AWS account ID."
},
"roleArn": {
"type": "string",
"description": "The ARN of the IAM role created for DoiT access."
},
"s3Bucket": {
"type": "string",
"description": "S3 bucket name for CloudTrail real-time anomaly detection. Required together with s3BucketRegion."
},
"s3BucketRegion": {
"type": "string",
"description": "AWS region of the S3 bucket. Required together with s3Bucket."
},
"enabledFeatures": {
"type": "array",
"items": {
"type": "string"
},
"description": "Declares which supported AWS features the caller intends to enable. Values must match feature names configured in awsFeaturePermissions on app/cloud-connect. The value is persisted and returned in account responses. When \"real-time-data\" is included, s3Bucket and s3BucketRegion are required; when it is not included, s3Bucket and s3BucketRegion are not allowed."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"accountID",
"roleArn",
"enabledFeatures"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_alertUse this when the user wants to set up a new cost alert with thresholds and notification settings. Ask the user to confirm the alert parameters before executing. Do NOT use this for creating budgets (use create_budget) or viewing existing alerts (use list_alerts).Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Alert name (required, non-empty)."
},
"config": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"type": "string",
"minLength": 1,
"description": "Metric type identifier (e.g., 'basic', 'custom', 'extended')."
},
"value": {
"type": "string",
"minLength": 1,
"description": "Metric value identifier (e.g., 'cost', 'usage', 'savings')."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "The metric to evaluate (required). Object with 'type' and 'value' fields."
},
"timeInterval": {
"type": "string",
"enum": [
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"description": "The time interval to evaluate the condition (required). Accepted values: hour, day, week, month, quarter, year."
},
"value": {
"type": "number",
"description": "The alert threshold value (required)."
},
"condition": {
"type": "string",
"description": "Condition type (e.g., 'value', 'forecasted', 'percentage')."
},
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code. Accepted values: USD, ILS, EUR, AUD, CAD, GBP, DKK, NOK, SEK, BRL, SGD, MXN, CHF, MYR, TWD, EGP, ZAR, JPY, IDR, AED, THB, COP."
},
"operator": {
"type": "string",
"enum": [
"gt",
"lt"
],
"description": "Comparison operator. Accepted values: gt, lt."
},
"evaluateForEach": {
"type": "string",
"description": "Add a dimension to break down the evaluation of the condition."
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The field to filter on."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "The dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"is",
"starts_with",
"ends_with",
"contains",
"regexp"
],
"description": "Filter mode. Accepted values: is, starts_with, ends_with, contains, regexp."
},
"inverse": {
"type": "boolean",
"description": "Set to true to exclude the values."
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to filter on."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"description": "Filters that define the scope of the alert."
},
"dataSource": {
"type": "string",
"description": "The data source for the alert (e.g., 'billing')."
}
},
"required": [
"metric",
"timeInterval",
"value"
],
"additionalProperties": false,
"description": "Parameters that define when and how the alert is evaluated (required)."
},
"recipients": {
"type": "array",
"items": {
"type": "string",
"format": "email"
},
"description": "List of email addresses to notify when the alert is triggered."
}
},
"required": [
"name",
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_allocationUse this when the user wants to create a new cost allocation rule. Ask the user to confirm the allocation parameters before executing. Do NOT use this for viewing existing allocations (use list_allocations) or labels (use create_label).Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Human-readable name of the allocation"
},
"description": {
"type": "string",
"description": "Description of the allocation's purpose"
},
"rule": {
"type": "object",
"properties": {
"components": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Key of an existing dimension, label, or tag key"
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label"
],
"description": "The type of the component"
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to match against"
},
"inverse_selection": {
"type": "boolean",
"description": "If true, exclude matching values instead of including them"
},
"include_null": {
"type": "boolean",
"description": "If true, include resources with no value for this dimension"
},
"mode": {
"type": "string",
"enum": [
"is",
"contains",
"starts_with",
"ends_with"
],
"description": "The matching mode for values"
}
},
"required": [
"key",
"type",
"values",
"mode"
]
},
"description": "Array of allocation components that define this rule"
},
"formula": {
"type": "string",
"description": "Logical formula combining components (e.g., 'A AND B')"
}
},
"description": "A single allocation rule that defines one grouping. Provide this for a single-rule allocation. Mutually exclusive with 'rules'"
},
"rules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"components": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Key of an existing dimension, label, or tag key"
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label"
],
"description": "The type of the component"
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to match against"
},
"inverse_selection": {
"type": "boolean",
"description": "If true, exclude matching values instead of including them"
},
"include_null": {
"type": "boolean",
"description": "If true, include resources with no value for this dimension"
},
"mode": {
"type": "string",
"enum": [
"is",
"contains",
"starts_with",
"ends_with"
],
"description": "The matching mode for values"
}
},
"required": [
"key",
"type",
"values",
"mode"
]
},
"description": "Array of allocation components that define this rule"
},
"formula": {
"type": "string",
"description": "Logical formula combining components (e.g., 'A AND B')"
},
"name": {
"type": "string",
"description": "Name of the rule"
},
"description": {
"type": "string",
"description": "Description of the rule"
},
"action": {
"type": "string",
"enum": [
"create",
"update",
"select"
],
"description": "Required action for this rule (e.g., 'create', 'update', 'select')"
},
"id": {
"type": "string",
"description": "Rule ID (for existing rules), required for 'update' and 'select' actions"
}
}
},
"description": "Ordered list of allocation rules for a group allocation. Must include at least two rules. Mutually exclusive with 'rule'"
},
"unallocatedCosts": {
"type": [
"string",
"null"
],
"description": "Custom label for values that do not fit into any allocation rule (required when using 'rules' for group allocations)"
}
},
"required": [
"name",
"description"
]
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_annotationUse this when the user wants to add a new annotation to mark a specific date or event in cost data. Ask the user to confirm the annotation details before executing. Do NOT use this for creating labels (use create_label) or alerts (use create_alert).Input schema{
"type": "object",
"properties": {
"content": {
"type": "string",
"minLength": 1,
"description": "The content of the annotation (required, non-empty)."
},
"timestamp": {
"type": "string",
"minLength": 1,
"format": "date-time",
"description": "The date associated with the annotation in ISO 8601 date-time format (required)."
},
"reports": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of report IDs to associate with the annotation."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of label IDs to associate with the annotation. Labels must already exist."
}
},
"required": [
"content",
"timestamp"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_assetManage cloud resources or services in your cloud environment. Creates a new asset.Input schema{
"type": "object",
"properties": {
"type": {
"type": "string"
},
"mode": {
"type": "string"
},
"accountName": {
"type": "string"
},
"rootEmail": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_budgetUse this when the user wants to create a new cloud budget with spending limits and alert thresholds. Requires budget name, currency, type, and start period. Ask the user to confirm the budget parameters before executing. Do NOT use this for viewing existing budgets (use list_budgets or get_budget) or creating alerts (use create_alert).Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Budget name (required, non-empty)."
},
"amount": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Budget period amount. Required if usePrevSpend is false."
},
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code (required). Accepted values: USD, ILS, EUR, AUD, CAD, GBP, DKK, NOK, SEK, BRL, SGD, MXN, CHF, MYR, TWD, EGP, ZAR, JPY, IDR, AED, THB, COP."
},
"type": {
"type": "string",
"enum": [
"fixed",
"recurring"
],
"description": "Budget type (required). Accepted values: fixed, recurring."
},
"timeInterval": {
"type": "string",
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"description": "Recurring budget interval. Required for recurring budgets. Accepted values: day, week, month, quarter, year."
},
"startPeriod": {
"type": "integer",
"description": "Budget start date as a UNIX timestamp in milliseconds (required)."
},
"endPeriod": {
"type": "integer",
"description": "Fixed budget end date as a UNIX timestamp in milliseconds. Required if type is fixed, must not be set for recurring."
},
"description": {
"type": "string",
"description": "Budget description."
},
"usePrevSpend": {
"type": "boolean",
"description": "Use the last period's spend as the target amount for recurring budgets. Defaults to false."
},
"growthPerPeriod": {
"type": "number",
"minimum": 0,
"description": "Periodical growth percentage in recurring budgets. Must be >= 0. Defaults to 0."
},
"metric": {
"type": "string",
"enum": [
"cost",
"amortized_cost"
],
"description": "Budget metric. Accepted values: cost, amortized_cost. Defaults to cost."
},
"public": {
"type": "string",
"enum": [
"owner",
"editor",
"viewer"
],
"description": "Public sharing access level. Accepted values: owner, editor, viewer."
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The field to filter on."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "The dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"is",
"starts_with",
"ends_with",
"contains",
"regexp"
],
"description": "Filter mode. Accepted values: is, starts_with, ends_with, contains, regexp."
},
"inverse": {
"type": "boolean",
"description": "Set to true to exclude the values."
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to filter on."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"minItems": 1,
"description": "Filters that define the scope of the budget. Exactly one of scope or scopes must be provided."
},
"scope": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of allocations that define the budget scope (deprecated). Exactly one of scope or scopes must be provided."
},
"collaborators": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Email address of the collaborator."
},
"role": {
"type": "string",
"enum": [
"owner",
"editor",
"viewer"
],
"description": "Role of the collaborator. Accepted values: owner, editor, viewer."
}
},
"required": [
"email",
"role"
],
"additionalProperties": false
},
"minItems": 1,
"description": "List of permitted users to view/edit the budget. If provided, must include at least one collaborator with role 'owner'."
},
"alerts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"percentage": {
"type": "number",
"description": "Alert threshold as a percentage of the budget amount."
}
},
"required": [
"percentage"
],
"additionalProperties": false
},
"maxItems": 3,
"description": "List of up to three alert thresholds defined as a percentage of the amount."
},
"recipients": {
"type": "array",
"items": {
"type": "string",
"format": "email"
},
"description": "List of email addresses to notify when reaching an alert threshold."
},
"recipientsSlackChannels": {
"type": "array",
"items": {
"type": "object",
"properties": {
"customerId": {
"type": "string",
"description": "Customer ID for the Slack channel."
},
"id": {
"type": "string",
"minLength": 1,
"description": "Slack channel ID (required)."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Slack channel name (required)."
},
"shared": {
"type": "boolean",
"description": "Whether the channel is shared."
},
"type": {
"type": "string",
"description": "Slack channel type."
},
"workspace": {
"type": "string",
"description": "Slack workspace identifier."
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
},
"description": "List of Slack channels to notify when reaching an alert threshold."
},
"seasonalAmounts": {
"type": "array",
"items": {
"type": "number"
},
"description": "List of seasonal amounts for recurring budgets with different amounts per period."
}
},
"required": [
"name",
"currency",
"type",
"startPeriod"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_cloudflow_connectionUse this when the user wants to create a new CloudFlow cloud provider connection (a GCP or AWS account connected for automation). Exactly one of gcpConfig or awsConfig must be supplied. Ask the user to confirm the connection details before executing. Do NOT use this to update an existing connection (use update_cloudflow_connection) or to trigger a flow (use trigger_cloud_flow).Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Human-readable connection name (required, non-empty)."
},
"description": {
"type": "string",
"description": "Optional description of the connection."
},
"gcpConfig": {
"type": "object",
"properties": {
"organizationId": {
"type": "string",
"description": "The GCP organization ID."
},
"folderId": {
"type": "string",
"description": "The GCP folder ID."
},
"projectId": {
"type": "string",
"description": "The GCP project ID."
},
"level": {
"type": "string",
"enum": [
"organization",
"folder",
"project"
],
"description": "The scope level of the GCP connection."
},
"serviceAccountName": {
"type": "string",
"description": "The service account used for the connection."
},
"predefinedRoles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Predefined GCP roles to grant."
},
"customRole": {
"type": "object",
"properties": {
"roleId": {
"type": "string",
"description": "The ID of the custom role."
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The list of permissions granted by the custom role."
}
},
"additionalProperties": false,
"description": "A custom role definition."
},
"infraManagerProject": {
"type": "string",
"description": "The Infrastructure Manager project."
},
"infraManagerLocation": {
"type": "string",
"description": "The Infrastructure Manager location."
},
"infraManagerServiceAccount": {
"type": "string",
"description": "The Infrastructure Manager service account."
}
},
"additionalProperties": false,
"description": "GCP configuration. Exactly one of gcpConfig or awsConfig must be supplied."
},
"awsConfig": {
"type": "object",
"properties": {
"context": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accountId": {
"type": "string",
"description": "The AWS account ID."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The AWS regions in scope for this account."
}
},
"additionalProperties": false
},
"description": "Per-account AWS context (account ID and regions)."
},
"roleName": {
"type": "string",
"description": "The AWS role name to assume."
},
"permissions": {
"type": "object",
"additionalProperties": {},
"description": "The permissions map for the AWS connection."
},
"managementAccount": {
"type": "string",
"description": "The AWS management (payer) account ID."
},
"organizationRootId": {
"type": "string",
"description": "The AWS organization root ID."
},
"scopeTargetedOrganizationalUnitIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Organizational unit IDs to include in scope."
},
"scopeExplicitAccountIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Account IDs explicitly included in scope."
},
"scopeExcludedAccountIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Account IDs excluded from scope."
},
"scopeManagementAccountExplicitInScope": {
"type": "boolean",
"description": "Whether the management account is explicitly in scope."
}
},
"additionalProperties": false,
"description": "AWS configuration. Exactly one of gcpConfig or awsConfig must be supplied."
},
"collaborators": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "The collaborator's email address."
},
"role": {
"type": "string",
"enum": [
"owner",
"editor",
"user"
],
"description": "The collaborator's role on the connection."
}
},
"additionalProperties": false
},
"description": "List of collaborators and their roles on the connection."
},
"enabled": {
"type": "boolean",
"description": "Whether the connection is enabled. Defaults to true."
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_custom_themeCreates a new custom color theme. Requires Cloud Analytics Admin permission.Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"description": "The display name of the custom theme."
},
"primaryColor": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
"description": "A color in hex notation. Accepts `#RGB`, `#RRGGBB`, or `#RRGGBBAA`."
},
"colors": {
"type": "object",
"properties": {
"light": {
"type": "array",
"items": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
"description": "A color in hex notation. Accepts `#RGB`, `#RRGGBB`, or `#RRGGBBAA`."
},
"description": "Colors used when the report is displayed in light mode."
},
"dark": {
"type": "array",
"items": {
"type": "string",
"pattern": "^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$",
"description": "A color in hex notation. Accepts `#RGB`, `#RRGGBB`, or `#RRGGBBAA`."
},
"description": "Colors used when the report is displayed in dark mode."
}
},
"required": [
"light",
"dark"
],
"additionalProperties": false,
"description": "Palettes for light and dark display modes. Each palette must contain between 1 and 32 hex colors."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"name",
"primaryColor",
"colors"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_datahub_datasetUse this when the user wants to create a new DataHub dataset. Ask the user to confirm the dataset name and description before executing. Do NOT use this for viewing datasets (use list_datahub_datasets) or sending events (use send_datahub_events).Input schema{
"type": "object",
"properties": {
"name": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1,
"pattern": "^[a-zA-Z0-9_-]+( [a-zA-Z0-9_-]+)*$"
}
],
"description": "The name of the dataset (required). Allowed characters: alphanumeric (0-9,a-z,A-Z), underscore (_), dash (-), and spaces between words."
},
"description": {
"type": "string",
"description": "An optional description for the dataset."
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_folderUse this when the user wants to create a new Cloud Analytics folder to organize reports and allocations. Ask the user to confirm the folder details before executing. Do NOT use this for creating reports (use create_report) or labels (use create_label).Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The name of the folder (required, non-empty)."
},
"description": {
"type": "string",
"description": "An optional description for the folder."
},
"parentFolderId": {
"type": "string",
"description": "The ID of the parent folder. Omit or set to \"root\" to create at the top level."
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_geographic_access_custom_regionManage country-based access to tenants in your customer hierarchy. Creates a custom region owned by the authenticated tenant. The tenant must be a customer-hierarchy root. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"X-Tenant-Id": {
"type": "string"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"countryCodes": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
}
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"name",
"countryCodes"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_labelUse this when the user wants to create a new resource label. Ask the user to confirm the label details before executing. Do NOT use this for viewing existing labels (use list_labels) or annotations (use create_annotation).Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The name of the label (required, non-empty)."
},
"color": {
"type": "string",
"enum": [
"blue",
"skyBlue",
"teal",
"mint",
"lime",
"softYellow",
"apricot",
"lavender",
"purple",
"rosePink",
"slateGrey"
],
"description": "The color of the label (required). Accepted values: blue, skyBlue, teal, mint, lime, softYellow, apricot, lavender, purple, rosePink, slateGrey."
}
},
"required": [
"name",
"color"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_reportUse this when the user wants to save a new Cloud Analytics report with a specific configuration. Ask the user to confirm the report parameters before executing. Do NOT use this for one-time queries without saving (use run_query).Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "The name of the report (required, non-empty)."
},
"description": {
"type": "string",
"description": "A brief description of the report."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Optional list of label IDs to assign to the report."
},
"config": {
"type": "object",
"properties": {
"dataSource": {
"type": "string",
"enum": [
"billing",
"bqlens",
"billing-datahub",
"kubernetes-utilization"
],
"description": "Data source for the report. Accepted values: billing, bqlens, billing-datahub, kubernetes-utilization."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"basic",
"custom",
"extended"
],
"description": "Metric type. Accepted values: basic, custom, extended."
},
"value": {
"type": "string",
"description": "For basic metrics: 'cost', 'usage', or 'savings'. For extended metrics: e.g. 'amortized_cost'. For custom metrics: the custom metric ID."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
},
"maxItems": 4,
"description": "List of metrics to apply (max 4). Preferred over the deprecated 'metric' field."
},
"metric": {
"$ref": "#/properties/config/properties/metrics/items",
"description": "Deprecated: use 'metrics' instead."
},
"metricFilter": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"$ref": "#/properties/config/properties/metrics/items/properties/type"
},
"value": {
"$ref": "#/properties/config/properties/metrics/items/properties/value"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "The metric to filter on."
},
"operator": {
"type": "string",
"enum": [
"gt",
"lt",
"lte",
"gte",
"b",
"nb",
"e",
"ne"
],
"description": "Comparison operator. Accepted values: gt, lt, lte, gte, b, nb, e, ne. gt (>), lt (<), lte (<=), gte (>=), b (between), nb (not between), e (equals), ne (not equals)."
},
"values": {
"type": "array",
"items": {
"type": "number"
},
"description": "Values to compare against."
}
},
"required": [
"metric",
"operator",
"values"
],
"additionalProperties": false,
"description": "Filter to limit report rows by metric value."
},
"aggregation": {
"type": "string",
"enum": [
"total",
"percent_total",
"percent_col",
"percent_row"
],
"description": "How to aggregate data values. Accepted values: total, percent_total, percent_col, percent_row."
},
"advancedAnalysis": {
"type": "object",
"properties": {
"forecast": {
"type": "boolean",
"description": "Include a cost forecast."
},
"notTrending": {
"type": "boolean",
"description": "Highlight rows that are not trending."
},
"trendingDown": {
"type": "boolean",
"description": "Highlight rows trending down."
},
"trendingUp": {
"type": "boolean",
"description": "Highlight rows trending up."
}
},
"additionalProperties": false,
"description": "Advanced analysis options."
},
"timeInterval": {
"type": "string",
"enum": [
"hour",
"day",
"dayCumSum",
"week",
"isoweek",
"month",
"quarter",
"year",
"week_day"
],
"description": "Time interval for grouping data. Accepted values: hour, day, dayCumSum, week, isoweek, month, quarter, year, week_day."
},
"dimensions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dimension identifier. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Dimensions to break down data by (columns in table view)."
},
"timeRange": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"last",
"current",
"custom"
],
"description": "Time range mode. Accepted values: last, current, custom. Use 'custom' with customTimeRange for specific dates."
},
"amount": {
"type": "integer",
"minimum": 0,
"maximum": 5000,
"description": "Number of time units (0–5000). Required when mode is 'last'."
},
"unit": {
"type": "string",
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"description": "Time unit. Accepted values: day, week, month, quarter, year. Required when mode is 'last'."
},
"includeCurrent": {
"type": "boolean",
"description": "Whether to include the current (in-progress) period."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date in RFC3339 format."
},
"to": {
"type": "string",
"description": "End date in RFC3339 format."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom date range. Required when mode is 'custom'."
}
},
"required": [
"mode"
],
"additionalProperties": false,
"description": "Time range for the report. Preferred over customTimeRange."
},
"secondaryTimeRange": {
"type": "object",
"properties": {
"amount": {
"type": "integer",
"minimum": 0,
"description": "Number of periods to shift back (non-negative)."
},
"unit": {
"type": "string",
"enum": [
"day",
"month",
"quarter",
"year"
],
"description": "Time unit for shifting. Accepted values: day, month, quarter, year."
},
"includeCurrent": {
"type": "boolean",
"description": "When true, selects complete previous periods (e.g. full previous year). When false, shifts dates by amount."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date in RFC3339 format."
},
"to": {
"type": "string",
"description": "End date in RFC3339 format."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom date range for the secondary time range."
}
},
"additionalProperties": false,
"description": "Secondary time range for comparative reports."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start timestamp in RFC3339 format. Example: '2024-03-10T23:00:00Z'."
},
"to": {
"type": "string",
"description": "End timestamp in RFC3339 format. Example: '2024-03-12T23:00:00Z'."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom time range. Only use when timeRange mode is 'custom'."
},
"includePromotionalCredits": {
"type": "boolean",
"description": "Include promotional credits. Requires timeInterval of 'month', 'quarter', or 'year'."
},
"includeSubtotals": {
"type": "boolean",
"description": "Include subgroup totals. No effect when reading via API. Defaults to false."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The field to filter on. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type of the filter field. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"is",
"starts_with",
"ends_with",
"contains",
"regexp"
],
"description": "Filter match mode. Accepted values: is, starts_with, ends_with, contains, regexp."
},
"inverse": {
"type": "boolean",
"description": "Set to true to exclude the matched values (negation)."
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to filter on."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"description": "Filters to apply to the report."
},
"group": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dimension ID for the group-by row. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"limit": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"$ref": "#/properties/config/properties/metrics/items/properties/type"
},
"value": {
"$ref": "#/properties/config/properties/metrics/items/properties/value"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "Metric used for ranking."
},
"sort": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for the limit ranking. Accepted values: asc, desc, a_to_z."
},
"value": {
"type": "integer",
"description": "Number of items to show."
}
},
"required": [
"metric",
"sort",
"value"
],
"additionalProperties": false,
"description": "Limit to top/bottom N results."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Dimensions that define rows in the report (group-by)."
},
"layout": {
"type": "string",
"enum": [
"column_chart",
"stacked_column_chart",
"bar_chart",
"stacked_bar_chart",
"line_chart",
"spline_chart",
"area_chart",
"area_spline_chart",
"stacked_area_chart",
"treemap_chart",
"table",
"table_heatmap",
"table_row_heatmap",
"table_col_heatmap",
"csv_export",
"sheets_export"
],
"description": "Report layout / visualization type. Accepted values: column_chart, stacked_column_chart, bar_chart, stacked_bar_chart, line_chart, spline_chart, area_chart, area_spline_chart, stacked_area_chart, treemap_chart, table, table_heatmap, table_row_heatmap, table_col_heatmap, csv_export, sheets_export."
},
"displayValues": {
"type": "string",
"enum": [
"actuals_only",
"absolute_change",
"percentage_change",
"absolute_and_percentage"
],
"description": "How to display values in comparative reports. Accepted values: actuals_only, absolute_change, percentage_change, absolute_and_percentage."
},
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code for monetary values. Accepted values: USD, ILS, EUR, AUD, CAD, GBP, DKK, NOK, SEK, BRL, SGD, MXN, CHF, MYR, TWD, EGP, ZAR, JPY, IDR, AED, THB, COP."
},
"sortGroups": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for groups. Accepted values: asc, desc, a_to_z. Defaults to 'asc'. No effect when reading via API."
},
"sortDimensions": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for dimensions. Accepted values: asc, desc, a_to_z. Defaults to 'desc'. No effect when reading via API."
},
"splits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the field to split."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Type of the split. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"even",
"custom",
"proportional"
],
"description": "Split mode. Accepted values: even, custom, proportional."
},
"includeOrigin": {
"type": "boolean",
"description": "Whether to include the origin in the split results."
},
"origin": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Origin ID."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label",
"unallocated"
],
"description": "Origin type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, gke, gke_label, unallocated."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false,
"description": "Origin info for cost splitting."
},
"targets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Target ID."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Target type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label. Must match the split type unless split type is 'attribution_group', in which case target type must be 'attribution'."
},
"value": {
"type": "number",
"description": "Percent as float (e.g. 0.3 for 30%). Required only when split mode is 'custom'."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Targets for the split."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"description": "Cost splits to apply to the report."
}
},
"additionalProperties": false,
"description": "Configuration for the report. Use the dimension tool to look up valid dimension IDs."
}
},
"required": [
"name",
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_ticketUse this when the user wants to create a new support ticket. Ask the user to confirm the ticket details before executing. Do NOT use this for viewing existing tickets (use list_tickets) or cloud incidents (use get_cloud_incidents).Input schema{
"type": "object",
"properties": {
"ticket": {
"type": "object",
"properties": {
"body": {
"type": "string",
"description": "The body of the ticket (can include html formatting)"
},
"created": {
"type": "string",
"description": "Ticket create time"
},
"platform": {
"type": "string",
"description": "Platform of the ticket",
"enum": [
"cloud_management_platform",
"google_cloud_platform",
"google_g_suite",
"amazon_web_services",
"microsoft_azure",
"microsoft_office_365",
"perfectscale"
]
},
"product": {
"type": "string",
"description": "Ticket product details"
},
"severity": {
"type": "string",
"description": "Ticket severity",
"enum": [
"low",
"normal",
"high",
"urgent"
]
},
"subject": {
"type": "string",
"description": "The subject of the ticket."
}
},
"required": [
"body",
"created",
"platform",
"product",
"severity",
"subject"
]
}
},
"required": [
"ticket"
]
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
create_ticket_commentAdds a comment to an existing support ticket. For customers, comments are always public. For DoiT employees, comments can be marked as private (internal notes) by setting the private field to true.Input schema{
"type": "object",
"properties": {
"ticketId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1,
"pattern": "^\\d+$"
}
],
"description": "The numeric ID of the support ticket to add a comment to."
},
"body": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The text content of the comment (required, must be non-empty)."
},
"private": {
"type": "boolean",
"description": "If true, creates a private internal note. Only honored for DoiT employees; ignored for customers."
}
},
"required": [
"ticketId",
"body"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
datahub_events_csv_fileIngest third-party cost, usage, and metric-based data for analysis. Sends a batch of events to DataHub using a CSV file, either uncompressed or compressed in ZIP or GZ format. It may take up to 15 minutes for the data to become available in the DoiT console.Input schema{
"type": "object",
"properties": {
"provider": {
"type": "string",
"description": "The identifier of the data provider. Allowed characters: alphanumeric (0-9,a-z,A-Z), underscore (_), space, dash (-)."
},
"file": {
"type": "string",
"description": "The CSV file to upload, either uncompressed or compressed in ZIP or GZ format. The maximum file size is 30 MB. (base64-encoded file content)"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_account_roleManage cloud provider connections and check feature availability for connected accounts. Deletes a CloudConnect document for an AWS account.Input schema{
"type": "object",
"properties": {
"accountID": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"accountID"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_alertNotifications triggered when cloud costs exceed defined thresholds or meet specific conditions. Deletes the alert specified by the Id.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_allocationDefine how costs are distributed across your organization. Deletes the allocation specified by the Id.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_annotationCustom notes added to cost data to provide contextual information. Deletes the annotation specified by the Id.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_ava_conversationInteract with Ava, DoiT's AI-powered cloud assistant. Deletes an Ava conversation by its ID.Input schema{
"type": "object",
"properties": {
"conversationId": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"conversationId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_budgetTrack actual cloud spend against planned spend. Deletes the specified budget.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_cloudflow_connectionManage cloud provider connections used in CloudFlow workflows (AWS and GCP). Deletes a connection. Returns 409 if the connection is referenced by one or more flows.Input schema{
"type": "object",
"properties": {
"connectionId": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"connectionId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_custom_themeDeletes the custom theme specified by the Id. Requires Cloud Analytics Admin permission.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_customer_geographic_access_scopeManage country-based access to tenants in your customer hierarchy. Clears the geographic scope for a target customer, leaving it unassigned. The authenticated tenant must be the hierarchy root, and the target must be that root customer or one of its child customers. Repeating the request is idempotent. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"targetCustomerId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"targetCustomerId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_datahub_datasetIngest third-party cost, usage, and metric-based data for analysis. Deletes a specific DataHub dataset.Input schema{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_datahub_datasetsIngest third-party cost, usage, and metric-based data for analysis. Deletes one or more DataHub datasets and all their associated data.Input schema{
"type": "object",
"properties": {
"datasets": {
"type": "array",
"items": {
"type": "string"
},
"description": "List of dataset names to delete."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"datasets"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_datahub_events_by_filterIngest third-party cost, usage, and metric-based data for analysis. Deletes specific events using filters. Note that the two filters, `eventIds` and `time ranges`, are mutually exclusive.Input schema{
"type": "object",
"properties": {
"dataset": {
"type": "string",
"description": "The dataset (provider) of the events to be deleted."
},
"eventIds": {
"type": "array",
"items": {
"type": "string",
"description": "Id of the event to be deleted."
}
},
"startTime": {
"type": "string",
"description": "The start timestamp of the time range in RFC3339 format."
},
"endTime": {
"type": "string",
"description": "The end timestamp of the time range in RFC3339 format."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"dataset"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_folderOrganize Cloud Analytics resources (reports, allocations) into folders. Deletes the specified folder. All nested folders will be deleted. Any reports or allocations contained in the folder are moved to the root.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_geographic_access_custom_regionManage country-based access to tenants in your customer hierarchy. Deletes a custom region owned by the authenticated tenant. Assigned regions cannot be deleted. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"customRegionId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"customRegionId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_insight_resultManage cloud insights representing recommendations and findings for cloud resources. Permanently deletes a single insight and all its associated resource results.
Only insights created via the public API can be deleted.
Input schema{
"type": "object",
"properties": {
"sourceID": {
"type": "string",
"enum": [
"public-api"
]
},
"insightKey": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"sourceID",
"insightKey"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_insight_resultsManage cloud insights representing recommendations and findings for cloud resources. Deletes all insights matching the specified key from the batch source.
This removes the insight and all its associated resource results.
For single-insight deletion, use `DELETE /source/{sourceID}/insight/{insightKey}` instead.
Input schema{
"type": "object",
"properties": {
"insightKey": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"insightKey"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_labelCreate and manage labels to organize and categorize your cloud resources. Deletes the label specified by the Id.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_reportManage Cloud Analytics reports and get reports data in JSON format. Deletes the specified Cloud Analytics report.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_userManage users who have access to the DoiT platform. Deletes a user.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
delete_user_geographic_access_scopeManage country-based access to tenants in your customer hierarchy. Clears the geographic scope assigned to a user who belongs to the target customer, leaving it unassigned. The authenticated tenant must be the hierarchy root, and the target must be that root customer or one of its child customers. Repeating the request is idempotent. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"targetCustomerId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"targetCustomerId",
"userId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
dismiss_budget_suggestionAI-generated budget recommendations you can accept (link to a budget you created) or dismiss. Marks the suggestion as dismissed so it no longer appears in the pending list.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"reason": {
"type": "string",
"enum": [
"not_relevant",
"wrong_amount",
"covered_elsewhere",
"other"
]
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
export_cloud_diagram_jsonCloud Diagrams visualize your cloud infrastructure and resource relationships. Exports the full content of a diagram layer as a structured JSON document,
including all components and export metadata.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
export_cloudflow_flowManage CloudFlow. Serializes the flow — plus every flow it references through subflow nodes — into a
tenant-neutral, credential-free JSON bundle that can be imported into any tenant with
the import operation. Tenant-scoped references (connections, Datastore tables, global
variables) are declared as named requirements and rebound at import time; policy and
Slack-channel references cannot travel and are recorded as unsupported references.
The bundle never contains credentials, tenant identifiers, schedules, or execution state. codeNode contract: upstream data comes only from `nodes["<node name>"]` (a dict of lists); the code body must end in a top-level `return`; `schema` is required. Code that defines an uncalled function, reads a bare `input`, or assigns `output` completes with `{message: null}` — no error, no result.Input schema{
"type": "object",
"properties": {
"flowId": {
"type": "string"
},
"includeVariableValues": {
"type": "boolean"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"flowId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
find_cloud_diagramsUse this when the user wants to find architecture diagrams or cloud infrastructure diagrams. Returns matching diagram files. Do NOT use this for cost analysis (use run_query) or incidents (use get_cloud_incidents).Input schema{
"type": "object",
"properties": {
"resources": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "Resource IDs to find diagrams for."
}
},
"required": [
"resources"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_active_themeUse this when the user wants to know which color theme is currently active for their account (the theme applied to Cloud Analytics reports). Returns the active theme id; the reserved sentinel "default" means no custom or preset theme is selected and the built-in default is in use. Do NOT use this to list all themes (use list_themes) or to fetch a specific theme by id (use get_theme).Input schema{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_alertUse this when the user wants to view the details of a specific cost alert. Accepts either the alert ID or a partial name (case-insensitive). Do NOT use this for listing all alerts (use list_alerts) or anomalies (use get_anomalies).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the alert to retrieve."
},
"name": {
"type": "string",
"description": "Partial name match (case-insensitive). Used to find the alert when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_allocationUse this when the user wants to view details of a specific cost allocation. Accepts either the allocation ID or a partial name (case-insensitive). Do NOT use this for listing all allocations (use list_allocations) or running queries (use run_query).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the allocation to retrieve."
},
"name": {
"type": "string",
"description": "Partial name match (case-insensitive). Used to find the allocation when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_annotationUse this when the user wants to view details of a specific annotation. Accepts either the annotation ID or a partial content match (case-insensitive). Do NOT use this for listing all annotations (use list_annotations) or labels (use list_labels).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the annotation to retrieve."
},
"content": {
"type": "string",
"description": "Partial content match (case-insensitive). Used to find the annotation when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_anomaliesUse this when the user wants to check for unexpected cost spikes, billing anomalies, or unusual spending patterns. Returns recent anomalies with severity and impact. Do NOT use this for optimization recommendations or savings opportunities (use list_optimization_recommendations), regular cost analysis (use run_query), or viewing alerts (use list_alerts).Input schema{
"type": "object",
"properties": {
"pageToken": {
"type": "string",
"description": "Token for pagination. Use this to get the next page of results."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_anomalyUse this when the user wants to view details of a specific cost anomaly by its ID. Returns full anomaly data including affected resources and cost impact. Do NOT use this for listing all anomalies (use get_anomalies).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "anomaly ID"
}
},
"required": [
"id"
]
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_assetUse this when the user wants to view details of a specific cloud asset. Accepts either the asset ID or a partial name (case-insensitive). Do NOT use this for listing all assets (use list_assets) or cost analysis (use run_query).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the asset to retrieve."
},
"name": {
"type": "string",
"description": "Partial name match (case-insensitive). Used to find the asset when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_async_operationManage Cloud Analytics reports and get reports data in JSON format. Returns the current status of an async report operation. Non-terminal operations (pending, running) include a Retry-After header suggesting when to poll again. This endpoint does not return result data — once status is "succeeded", fetch the result from the operation's results endpoint. When status is "failed", the error field contains an RFC 9457-shaped error. Returns 404 if the operationId does not exist, belongs to a different tenant, or has expired.Input schema{
"type": "object",
"properties": {
"operationId": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"operationId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_async_operation_resultsManage Cloud Analytics reports and get reports data in JSON format. Returns the result of a succeeded async report operation, including report metadata (id, reportName, owner, type, createTime, updateTime, urlUI) when the operation was started against a saved report — the same shape as the sync GetReportResponse, instead of requiring a second call to GET /analytics/v1/reports/{id}/config for it. Returns 404 if the operationId does not exist, has expired, or belongs to a different tenant. Returns 425 Too Early if the operation has not yet reached a terminal state — poll the operation status endpoint, which returns its own Retry-After guidance, until it succeeds. Returns 422 if the operation terminated as failed or canceled. The poll status endpoint response does not include result data inline — this is the only endpoint that returns it.Input schema{
"type": "object",
"properties": {
"operationId": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"operationId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_aws_accountUse this when the user wants the CloudConnect details of a specific connected AWS account, such as its IAM role ARN, billing S3 bucket, and which DoiT features are enabled or supported. Requires the 12-digit AWS account ID. Do NOT use this for Google Cloud or Azure accounts.Input schema{
"type": "object",
"properties": {
"accountID": {
"type": "string",
"minLength": 1,
"description": "The AWS account ID to retrieve (e.g. \"123456789012\")."
}
},
"required": [
"accountID"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_aws_member_accountEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns a single member AWS account with the same list-item fields as List member accounts, plus the Overview time series. Use this when you need a single members Console Overview in one call (identity and onboarding status, 30-day ESR and savings, YTD/lifetime totals, monthly potential savings, and the data behind Cost Summary and Commitment Coverage charts) without fetching every member account.
Fields that drive the Overview tab in the DoiT console:
- `stats30d`: last 30 days ESR and realized savings per SP type (ESR and Savings cards).
- `monthlyStats`: last 6 calendar months of ESR, on-demand cost, and cost with savings per SP type (Cost Summary chart, and month-over-month card trends).
- `dailyCoverage`: last 30 days of commitment coverage breakdown per SP type (Commitment Coverage chart).
- `savingsTotals`: year-to-date and lifetime realized savings per SP type (shown under the Savings card). Lifetime is bounded by the parent organization's PerfectScale for Commitments onboarding start.
- `monthlyPotentialSavings`: estimated monthly additional savings per SP type from the latest purchase projection.Input schema{
"type": "object",
"properties": {
"managementAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"memberAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"managementAccountId",
"memberAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_aws_organizationEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns a single AWS organization with the same list-item fields as List AWS Organizations, plus the Overview time series. Use this when you need a single organization's Console Overview in one call (identity and onboarding status, 30-day ESR and savings, YTD/lifetime totals, monthly potential savings, and the data behind Cost Summary and Commitment Coverage charts) without fetching every organization.
Fields that drive the Overview tab in the DoiT console:
- `stats30d`: last 30 days ESR and realized savings per SP type (ESR and Savings cards).
- `monthlyStats`: last 6 calendar months of ESR, on-demand cost, and cost with savings per SP type (Cost Summary chart, and month-over-month card trends).
- `dailyCoverage`: last 30 days of commitment coverage breakdown per SP type (Commitment Coverage chart).
- `savingsTotals`: year-to-date and lifetime realized savings per SP type (shown under the Savings card). Lifetime is bounded by PerfectScale for Commitments onboarding start.
- `monthlyPotentialSavings`: estimated monthly additional savings per SP type from the latest purchase projection.Input schema{
"type": "object",
"properties": {
"managementAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"managementAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_aws_recommendationEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns the recommendation for one commitment type (`serviceId`) on the AWS organization, including analysis metrics and time-bucketed eligible spend. Use `granularity` to choose the eligible-spend bucket size (defaults to `day`).Input schema{
"type": "object",
"properties": {
"managementAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"serviceId": {
"type": "string",
"enum": [
"compute",
"database"
]
},
"granularity": {
"type": "string",
"enum": [
"hour",
"day",
"week",
"month"
]
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"managementAccountId",
"serviceId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_billing_explainer_per_payerExplain month-over-month changes in invoiced cloud costs. Returns the invoiced cost changes for each payer in the authenticated tenant.Input schema{
"type": "object",
"properties": {
"invoiceMonth": {
"type": "string",
"pattern": "^\\d{4}-(0[1-9]|1[0-2])$"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"invoiceMonth"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_billing_transfer_program_management_accounts_statusManage AWS billing-transfer mappings between distributors and resellers and between resellers and end customers, and list program management accounts. Lightweight polling surface for the onboarding wizard: returns each of the caller's PMAs
with only its IAM status/diff and timestamps — no tenant fan-out, no handshake
aggregation, no pagination. Distributor-only.
Input schema{
"type": "object",
"properties": {
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_budgetUse this when the user wants to view the details and current utilization of a specific budget. Accepts either the budget ID or a partial name (case-insensitive). Do NOT use this for listing all budgets (use list_budgets) or cost analysis (use run_query).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The ID of the budget to retrieve."
},
"name": {
"type": "string",
"description": "Partial name match (case-insensitive). Used to find the budget when ID is unknown."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_connect_supported_featuresUse this when the user wants to know which DoiT CloudConnect features a connected cloud account supports and whether the account currently has the required permissions for each feature. Accepts an AWS account ID or Azure tenant ID. Returns the list of supported features with their permission status.Input schema{
"type": "object",
"properties": {
"accountID": {
"type": "string",
"minLength": 1,
"description": "The cloud provider account ID (AWS account ID or Azure tenant ID) to check supported features for."
}
},
"required": [
"accountID"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_diagram_componentsUse this when the user wants to discover all cloud infrastructure diagrams and their layers (statussheets), or to look up layer IDs needed for other diagram endpoints. Returns all diagrams with their connected layers and optionally their component data. This is the primary discovery endpoint — use it before calling endpoints that require a layer ID. Optionally filter by diagram IDs (scheme_ids) or layer IDs (layer_ids), and set include_components=true to get full component lists. Do NOT use this for cost analysis (use run_query) or diagram search (use search_cloud_diagrams).Input schema{
"type": "object",
"properties": {
"scheme_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to specific diagram IDs. Omit to return all diagrams."
},
"layer_ids": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter to specific layer (statussheet) IDs. Omit to return all layers."
},
"include_components": {
"type": "boolean",
"description": "Include component data (nodes, elements, groups, links, etc.) in the response. Defaults to false for lighter responses. Enable when you need component IDs for other diagram endpoints."
},
"skip_empty": {
"type": "boolean",
"description": "Exclude layers that have no components. Defaults to false."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_diagram_cost_snapshotUse this when the user wants a cost snapshot for a specific cloud infrastructure diagram layer over a time period — total spend, period-over-period trend percentage, the top resources and services by cost, and a cost trend over time. Requires the diagram layer ID and a startDate/endDate (YYYY-MM-DD). Do NOT use this for account-wide cost analysis (use run_query) or budgets (use list_budgets).Input schema{
"type": "object",
"properties": {
"layerId": {
"type": "string",
"minLength": 1,
"description": "The diagram layer (statussheet) ID to get a cost snapshot for."
},
"startDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Start of the period (calendar date, YYYY-MM-DD, e.g. 2026-04-01)."
},
"endDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "End of the period (calendar date, YYYY-MM-DD, e.g. 2026-04-30)."
},
"interval": {
"type": "string",
"enum": [
"day",
"week",
"month"
],
"description": "Bucket granularity for the cost trend. Possible values: day, week, month (defaults to day)."
}
},
"required": [
"layerId",
"startDate",
"endDate"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_diagram_layer_snapshotCloud Diagrams visualize your cloud infrastructure and resource relationships. Returns a single snapshot of the specified diagram layer identified by its ID.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"snapshot_id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id",
"snapshot_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_diagram_resource_relationshipsUse this when the user wants to understand how a specific resource in a cloud infrastructure diagram is connected to other resources — its upstream/downstream edges and group membership. Returns the anchor resource plus related resources with their relation type and hop distance. Requires the diagram layer ID and the resource ID. Do NOT use this for cost analysis (use get_cloud_diagram_cost_snapshot or run_query).Input schema{
"type": "object",
"properties": {
"layerId": {
"type": "string",
"minLength": 1,
"description": "The diagram layer (statussheet) ID that contains the resource."
},
"resourceId": {
"type": "string",
"minLength": 1,
"description": "The ID of the resource (node, element, or group) to map relationships for."
},
"direction": {
"type": "string",
"enum": [
"downstream",
"upstream",
"both"
],
"description": "Relationship direction to traverse. Possible values: downstream, upstream, both (defaults to both)."
},
"depth": {
"type": "string",
"enum": [
"direct",
"transitive"
],
"description": "How far to traverse. Possible values: direct, transitive (defaults to direct)."
},
"kind": {
"type": "string",
"enum": [
"edges",
"group_members",
"both"
],
"description": "Which relationship kinds to include. Possible values: edges, group_members, both (defaults to edges)."
}
},
"required": [
"layerId",
"resourceId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_diagrams_statsUse this when the user wants activity statistics for their cloud infrastructure diagrams over a time period — node create/update/delete change counts grouped by cloud service, plus each diagram's import/sync state. Useful for change auditing and drift detection. Requires a start and end RFC3339 date-time.Input schema{
"type": "object",
"properties": {
"start": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$",
"description": "Start of the period (RFC3339 date-time, e.g. 2026-04-01T00:00:00Z)."
},
"end": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})$",
"description": "End of the period (RFC3339 date-time, e.g. 2026-04-28T00:00:00Z)."
}
},
"required": [
"start",
"end"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_incidentUse this when the user wants to view details of a specific cloud platform incident. Accepts either the incident ID or a partial title match (case-insensitive). Do NOT use this for listing all incidents (use get_cloud_incidents) or anomalies (use get_anomalies).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the cloud incident."
},
"title": {
"type": "string",
"description": "Partial title match (case-insensitive). Used to find the incident when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_incidentsUse this when the user wants to check for active cloud platform outages, service disruptions, or incidents from AWS, Google Cloud, or Azure. Do NOT use this for cost anomalies (use get_anomalies) or support tickets (use list_tickets).Input schema{
"type": "object",
"properties": {
"platform": {
"type": "string",
"description": "platform name",
"enum": [
"amazon-web-services",
"google-cloud-project",
"g-suite",
"office-365",
"google-cloud",
"open-ai"
]
},
"filter": {
"type": "string",
"description": "Filter string in format 'key:value|key:value'. Multiple values for same key are treated as OR, different keys as AND. Example: 'platform:google-cloud|status:active' or 'platform:google-cloud|platform:amazon-web-services'"
},
"pageToken": {
"type": "string",
"description": "Token for pagination. Use this to get the next page of results."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloud_overviewUse this when the user wants a high-level overview or dashboard of their entire cloud infrastructure. Returns cost by cloud provider, top services per cloud, top projects per cloud, recent cost anomalies, and recent cloud incidents — all in a single call. Do NOT use this for detailed drill-downs (use run_query), single-provider analysis, or anomaly-only queries.Input schema{
"type": "object",
"properties": {}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloudflow_connectionUse this when the user wants to view the details of a specific CloudFlow cloud provider connection by its ID, including its GCP/AWS configuration, collaborators, and status. Do NOT use this to list all connections (use list_cloudflow_connections) or to trigger a flow (use trigger_cloud_flow).Input schema{
"type": "object",
"properties": {
"connectionId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the CloudFlow connection to retrieve."
}
},
"required": [
"connectionId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloudflow_flow_runManage CloudFlow. Returns a run's status and, for each node, the JSON it consumed and produced. This is how
you find out *why* a run failed, or that it "succeeded" while producing the wrong data.
**`input` is null for most node types, and that is not an error.** Only action nodes — the
AWS, GCP, Azure, Oracle, DoiT and admin operations — record their inputs. Transform, code,
branch, switch, datastore, subflow and trigger nodes record none, so their `input` is
always null. `output` is recorded by every node that finishes, so read a transform's
behaviour from its `output`.
Payloads appear as soon as a node reports a terminal status, so a poll loop can read
results while later nodes are still running.
Any value the node's schema marks sensitive is replaced with a redaction marker;
credentials and connection configuration never appear.
Each `input` and `output` is capped at 64KB. When a payload exceeds that, whole entries
are dropped from the end, `truncated` is true, and `totalBytes` reports the untruncated
size — nothing is silently cut, and what you receive is always valid JSON.
Runs belonging to another tenant, or to a different flow, return `404`. Nodes inside a
fan-out currently report only the last path to finish.Input schema{
"type": "object",
"properties": {
"flowId": {
"type": "string"
},
"runId": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"flowId",
"runId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_cloudflow_templateUse this when the user wants to view the details of a specific CloudFlow template by its ID, including its name, description, and configuration instructions. Do NOT use this to list all templates (use list_cloudflow_templates) or to trigger a flow (use trigger_cloud_flow).Input schema{
"type": "object",
"properties": {
"templateId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the CloudFlow template to retrieve."
}
},
"required": [
"templateId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_commitmentReturns details of a specific Enterprise Discount Program (EDP) commitment contract, identified by its ID. Includes the full breakdown of commitment periods, per-period contracted values, and current spend attainment against the committed amount.Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the commitment to retrieve."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — |
get_contractList and manage tenant-scoped contracts as a T1/T2 PartnerOps caller. Returns the specified contract.Input schema{
"type": "object",
"properties": {
"customerID": {
"type": "string"
},
"contractID": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"customerID",
"contractID"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_contract_templateManage contract templates for PartnerOps resellers (T1/T2). Returns a single contract template owned by the authenticated tenant (from the bearer token). Requires ContractTemplatesAdmin, DoiT API access (`platform:externalApi`), and the `channelops:contracts:templates` entitlement.Input schema{
"type": "object",
"properties": {
"templateID": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"templateID"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_customerRead and update your organization's general settings. Returns the customer, including its general settings and contact info, scoped to `{customerId}`. `{customerId}` must match the customer resolved from the bearer token; a token scoped to a different customer gets `403`, even if that customer would otherwise be reachable through a reseller/MTS relationship. Requires the `Settings` permission and DoiT API access (`platform:externalApi`).Input schema{
"type": "object",
"properties": {
"customerId": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"customerId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_customer_geographic_access_scopeManage country-based access to tenants in your customer hierarchy. Returns the geographic scope for a target customer. The authenticated tenant must be the hierarchy root, and the target must be that root customer or one of its child customers. Targets outside that hierarchy are returned as not found. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"targetCustomerId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"targetCustomerId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_datahub_datasetUse this when the user wants to view details of a specific DataHub dataset by its ID. Returns full dataset metadata and schema. Do NOT use this for listing all datasets (use list_datahub_datasets) or cost queries (use run_query).Input schema{
"type": "object",
"properties": {
"name": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The name of the dataset to retrieve."
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_dimensionUse this to look up the valid filter values for a specific dimension before calling run_query — for example, call get_dimension({type: 'fixed', id: 'cloud_provider'}) to get the exact provider IDs available for this customer. Also use this when the user wants to view dimension details. Do NOT use this for listing all dimensions (use list_dimensions) or running queries (use run_query).Input schema{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label"
],
"description": "Dimension type"
},
"id": {
"type": "string",
"description": "Dimension id"
}
},
"required": [
"type",
"id"
]
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_entity_invoice_explainerExplain month-over-month changes in invoiced cloud costs. Returns invoiced cost changes for an invoice owned by the specified billing profile in the authenticated tenant.Input schema{
"type": "object",
"properties": {
"billingProfileId": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,128}$"
},
"invoiceNumber": {
"type": "string",
"pattern": "^[A-Za-z0-9_-]{1,64}$"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"billingProfileId",
"invoiceNumber"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_folderUse this when the user wants to view details of a specific Cloud Analytics folder. Accepts either the folder ID or a partial name (case-insensitive). Do NOT use this for listing all folders (use list_folders) or viewing reports (use get_report_config).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the folder to retrieve."
},
"name": {
"type": "string",
"description": "Partial name match (case-insensitive). Used to find the folder when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_geographic_access_custom_regionManage country-based access to tenants in your customer hierarchy. Returns a custom region owned by the authenticated tenant. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"customRegionId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"customRegionId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_insightUse this when the user wants the details and aggregate summary (savings, risk counts, status, description) of a single optimization insight identified by its source and key. Returns the insight metadata only — it does NOT include the individual affected resources (use get_insight_resources for those) and is not for listing all insights (use list_optimization_recommendations).Input schema{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "The source of the insight (e.g. 'aws-cost-optimization-hub', 'aws-trusted-advisor'). Use the 'source' field from list_optimization_recommendations."
},
"key": {
"type": "string",
"description": "The key of the insight (e.g. 'delete-ebs-volumes'). Use the 'key' field from list_optimization_recommendations."
}
},
"required": [
"source",
"key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_insight_resourcesUse this when the user wants to see which specific resources are affected by an optimization insight. Returns resource IDs, accounts, potential savings, and remediation details. Do NOT use this for listing all insights (use list_insights).Input schema{
"type": "object",
"properties": {
"source": {
"type": "string",
"description": "The source of the insight (e.g. 'aws-cost-optimization-hub', 'aws-trusted-advisor'). Use the 'source' field from list_optimization_recommendations."
},
"key": {
"type": "string",
"description": "The key of the insight (e.g. 'delete-ebs-volumes'). Use the 'key' field from list_optimization_recommendations."
}
},
"required": [
"source",
"key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_invoiceUse this when the user wants to view details of a specific invoice by its ID. Returns full invoice data including line items and status. Do NOT use this for listing all invoices (use list_invoices) or cost analysis (use run_query).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the invoice to retrieve."
}
},
"required": [
"id"
]
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_labelUse this when the user wants to view details of a specific label. Accepts either the label ID or a partial name (case-insensitive). Do NOT use this for listing all labels (use list_labels) or annotations (use list_annotations).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the label to retrieve."
},
"name": {
"type": "string",
"description": "Partial name match (case-insensitive). Used to find the label when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_label_assignmentsUse this when the user wants to see which resources are assigned to a specific label. Returns a list of assigned objects. Do NOT use this for viewing label details (use get_label) or allocations (use list_allocations).Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the label to retrieve assignments for."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_report_configGet the configuration of a specific Cloud Analytics report by ID. Returns the stored report object including name, type, and a nested 'config' field containing data source, metrics, dimensions, time range, filters, and visualization settings.Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the report to retrieve the configuration for."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — |
get_report_resultsUse this when the user wants to retrieve the data results of a specific saved report. Accepts either the report ID or a partial name (case-insensitive). Do NOT use this for listing all reports (use list_reports) or running ad-hoc queries (use run_query).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the report to retrieve results for."
},
"name": {
"type": "string",
"description": "Partial report name match (case-insensitive). Used to find the report when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_resource_permissionsUse this when the user wants to see who a Cloud Analytics resource is shared with and at what access level. Returns the sharing settings (per-user roles and public visibility) for a specific alert, budget, report, or allocation. Requires resourceType (alerts, budgets, reports, or allocations) and resourceId. Do NOT use this to list the resources themselves (use list_alerts, list_budgets, list_reports, or list_allocations).Input schema{
"type": "object",
"properties": {
"resourceType": {
"type": "string",
"enum": [
"alerts",
"budgets",
"reports",
"allocations"
],
"description": "The type of resource to inspect sharing settings for. One of: alerts, budgets, reports, allocations."
},
"resourceId": {
"type": "string",
"description": "The ID of the resource (alert, budget, report, or allocation) to retrieve permissions for."
}
},
"required": [
"resourceType",
"resourceId"
]
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_statussheet_componentsCloud Diagrams visualize your cloud infrastructure and resource relationships. Returns the specified components of a diagram layer. Provide at least one component
type with one or more IDs in the request body (for example, `node` or `element`).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"p": {
"type": "string"
},
"node": {
"type": "array",
"items": {
"type": "string"
},
"description": "Node IDs to fetch."
},
"element": {
"type": "array",
"items": {
"type": "string"
},
"description": "Element IDs to fetch."
},
"link": {
"type": "array",
"items": {
"type": "string"
},
"description": "Link IDs to fetch."
},
"group": {
"type": "array",
"items": {
"type": "string"
},
"description": "Group IDs to fetch."
},
"attachment": {
"type": "array",
"items": {
"type": "string"
},
"description": "Attachment IDs to fetch."
},
"note": {
"type": "array",
"items": {
"type": "string"
},
"description": "Note IDs to fetch."
},
"combiner": {
"type": "array",
"items": {
"type": "string"
},
"description": "Combiner IDs to fetch."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
get_themeUse this when the user wants to view details of a specific custom color theme. Accepts either the theme ID or a partial name (case-insensitive). Do NOT use this for listing all themes (use list_themes).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the custom theme to retrieve."
},
"name": {
"type": "string",
"description": "Partial name match (case-insensitive). Used to find the theme when ID is unknown."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
get_ticketReturns details of a specific support ticket from the DoiT API by its ID.Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1,
"pattern": "^\\d+$"
}
],
"description": "The numeric ID of the support ticket to retrieve."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — |
get_user_geographic_access_scopeManage country-based access to tenants in your customer hierarchy. Returns the geographic scope assigned to a user who belongs to the target customer. The authenticated tenant must be the hierarchy root, and the target must be that root customer or one of its child customers. Targets outside that hierarchy are returned as not found. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"targetCustomerId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"targetCustomerId",
"userId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
id_of_assetManage cloud resources or services in your cloud environment. Updates an existing asset, such as G Suite/Workspace or Office 365 subscription, to add or remove licenses.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"quantity": {
"type": "number"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
import_cloudflow_flowManage CloudFlow. Creates every flow of a previously exported bundle in the authenticated tenant.
Imports are create-only: each call creates new draft flows with new IDs — nothing is
published and no schedule is activated until the target tenant publishes.
Requirements declared by the bundle are resolved through `bindings` (requirement key →
target-tenant resource ID). Unbound connections and Datastore tables leave the
referencing nodes flagged incomplete; unbound global variables are auto-created. Pass
`options.createMissingTables: true` to create missing Datastore tables from the schemas
embedded in the bundle (structure only, never row data).
**Dry-run**: pass `?dryRun=true` to validate without writing. The response is an import
plan: per-requirement resolutions with candidate bindings in the target tenant, the
flows that would be created, and every validation issue at once. codeNode contract: upstream data comes only from `nodes["<node name>"]` (a dict of lists); the code body must end in a top-level `return`; `schema` is required. Code that defines an uncalled function, reads a bare `input`, or assigns `output` completes with `{message: null}` — no error, no result.Input schema{
"type": "object",
"properties": {
"dryRun": {
"type": "boolean"
},
"Idempotency-Key": {
"type": "string",
"maxLength": 255
},
"bundle": {
"type": "object",
"properties": {
"kind": {
"type": "string",
"enum": [
"cloudflow.doit.com/FlowBundle"
]
},
"schemaVersion": {
"type": "number",
"description": "Bundle format version. The server exports the newest version and accepts every version it has ever shipped."
},
"exportedAt": {
"type": [
"string",
"null"
],
"description": "Informational export timestamp; ignored on import."
},
"rootFlow": {
"type": "string",
"description": "Key (into `flows`) of the flow that was exported; the rest are its subflows."
},
"flows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Bundle-local flow key. Opaque — the server generates new IDs at import."
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"tags": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
},
"triggerType": {
"type": [
"string",
"null"
]
},
"firstNode": {
"type": "string",
"description": "Key of this flow's entry node."
},
"nodes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"type": {
"type": "string",
"description": "Node type (e.g. `triggerNode`, `actionNode`, `datastoreNode`). Validated against the supported node-type set at import."
},
"parameters": {
"type": "object",
"additionalProperties": {},
"description": "Node parameters with tenant-scoped scalar references replaced by `$req:`/`$bundle:` tokens."
},
"approval": {
"type": "object",
"properties": {
"required": {
"type": "boolean"
},
"message": {
"type": "string"
},
"rejectApprovalAfterTime": {
"type": "boolean"
},
"rejectTimeValue": {
"type": "number"
},
"rejectTimeUnit": {
"type": "string"
}
},
"additionalProperties": false,
"description": "Approval configuration without recipients (recipients are tenant-scoped and removed at export)."
},
"transitions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"target": {
"type": "string",
"description": "Key of the node this transition points at."
},
"label": {
"type": [
"string",
"null"
]
},
"pathId": {
"type": [
"string",
"null"
]
}
},
"required": [
"target"
],
"additionalProperties": false
}
}
},
"required": [
"key",
"name",
"type"
],
"additionalProperties": false
}
},
"localVariables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"required": {
"type": "boolean"
},
"type": {
"type": "string"
},
"elementType": {
"type": "string"
},
"value": {
"type": "string",
"description": "Present unless the export stripped variable values. Connection-typed values are `$req:connections/<key>` tokens."
}
},
"required": [
"key",
"name",
"type"
],
"additionalProperties": false
}
},
"unsupportedReferences": {
"type": "array",
"items": {
"type": "object",
"properties": {
"nodeKey": {
"type": "string"
},
"kind": {
"type": "string",
"enum": [
"policy",
"slackChannel"
]
},
"detail": {
"type": "string"
}
},
"required": [
"nodeKey",
"kind"
],
"additionalProperties": false
},
"description": "Tenant-scoped references removed at export (policy IDs, Slack channels); import flags the affected nodes incomplete."
}
},
"required": [
"key",
"name",
"firstNode",
"nodes"
],
"additionalProperties": false
}
},
"requirements": {
"type": "object",
"properties": {
"connections": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"provider": {
"type": "string",
"description": "Cloud provider the bound connection must have (e.g. `amazon-web-services`)."
},
"name": {
"type": "string",
"description": "The source connection's display name, as a matching hint."
},
"usedByNodes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"provider",
"name"
],
"additionalProperties": false
}
},
"datastoreTables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"fields": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"dataType": {
"type": "string"
},
"isUnique": {
"type": "boolean"
},
"description": {
"type": "string"
}
},
"required": [
"name",
"dataType"
],
"additionalProperties": false
}
},
"usedByNodes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"name",
"fields"
],
"additionalProperties": false
}
},
"globalVariables": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"name": {
"type": "string"
},
"description": {
"type": "string"
},
"type": {
"type": "string"
},
"elementType": {
"type": "string"
},
"value": {
"type": "string",
"description": "Present unless the export stripped variable values."
},
"usedByNodes": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"key",
"name",
"type"
],
"additionalProperties": false
}
}
},
"additionalProperties": false,
"description": "Tenant-scoped resources the bundle needs; each is bound to a target-tenant resource at import."
}
},
"required": [
"kind",
"schemaVersion",
"rootFlow",
"flows"
],
"additionalProperties": false,
"description": "Portable, tenant-neutral export of one or more flows. Contains no credentials, tenant identifiers, schedules, or execution state; tenant-scoped references are declared under `requirements` and appear inside node parameters as `$req:<section>/<key>` tokens (subflow references as `$bundle:flows/<flowKey>`)."
},
"bindings": {
"type": "object",
"properties": {
"connections": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"datastoreTables": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"globalVariables": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"additionalProperties": false,
"description": "Requirement key → target-tenant resource ID. Keys must be declared in the bundle's requirements. Run with `?dryRun=true` first to list required keys and candidate IDs."
},
"options": {
"type": "object",
"properties": {
"createMissingTables": {
"type": "boolean",
"description": "Create unbound Datastore tables from the schemas embedded in the bundle (structure only, never row data). A same-named existing table with an incompatible schema is a validation error."
},
"namePrefix": {
"type": "string",
"description": "Optional prefix for every created flow's name."
}
},
"additionalProperties": false
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"Idempotency-Key",
"bundle"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
invite_userUse this when the user wants to invite a new person to the organization. Ask the user to confirm the email, role, and organization before executing. Do NOT use this for updating existing users (use update_user) or listing users (use list_users).Input schema{
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "The email address of the user to invite (required)."
},
"roleId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the role to assign to the invited user."
},
"organizationId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the organization to assign the invited user to."
}
},
"required": [
"email"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
list_account_teamUse this when the user wants to know who their DoiT account team / account managers are. Returns the list of account managers assigned to the customer, including name, email, role, and Calendly scheduling link. Do NOT use this for listing platform users (use list_users) or organizations (use list_organizations).Input schema{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_alertsUse this when the user wants to see their cost alerts or check alert configurations. Returns a paginated list of alerts. Do NOT use this for anomaly detection (use get_anomalies) or budget tracking (use list_budgets).Input schema{
"type": "object",
"properties": {
"sortBy": {
"type": "string",
"enum": [
"name",
"createTime",
"updateTime",
"lastAlerted"
],
"description": "A field by which the results will be sorted."
},
"sortOrder": {
"type": "string",
"enum": [
"asc",
"desc"
],
"description": "Sort order: ascending (asc) or descending (desc)."
},
"maxResults": {
"type": "string",
"description": "Maximum number of results to return in a single page"
},
"pageToken": {
"type": "string",
"description": "Page token returned by a previous call to request the next page of results."
},
"filter": {
"type": "string",
"description": "Expression for filtering results. Syntax: key:[<value>]. Multiple filters joined with |. Available keys: owner, name."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_allocationsUse this when the user wants to see their cost allocation rules or configurations. Returns a list of allocations. Supports partial name filtering. Do NOT use this for cost queries (use run_query) or labels (use list_labels).Input schema{
"type": "object",
"properties": {
"pageToken": {
"type": "string",
"description": "Token for pagination. Use this to get the next page of results."
},
"name": {
"type": "string",
"description": "Partial name filter (case-insensitive). Returns only allocations whose name contains this string."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_annotationsUse this when the user wants to see calendar annotations or notes on cost data. Returns a list of annotations. Do NOT use this for labels (use list_labels) or alerts (use list_alerts).Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "The maximum number of results to return in a single page. Defaults to 500."
},
"pageToken": {
"type": "string",
"description": "Page token, returned by a previous call, to request the next page of results."
},
"filter": {
"type": "string",
"description": "An expression for filtering the results. Valid fields: content, timestamp, labels. Example: content:budget"
},
"sortBy": {
"type": "string",
"enum": [
"id",
"content",
"timestamp",
"timeCreated",
"timeModified"
],
"description": "A field by which the results will be sorted. Accepted values: id, content, timestamp, timeCreated, timeModified."
},
"sortOrder": {
"type": "string",
"enum": [
"asc",
"desc"
],
"description": "The sort order for results. Accepted values: asc, desc."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_assetsUse this when the user wants to browse their cloud assets, subscriptions, or resources. Returns a paginated list of assets. Supports partial name filtering. Do NOT use this for cost analysis (use run_query) or checking invoices (use list_invoices).Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "The maximum number of results to return in a single page. Defaults to 100. Maximum allowed value is 249."
},
"pageToken": {
"type": "string",
"description": "Page token, returned by a previous call, to request the next page of results."
},
"filter": {
"type": "string",
"description": "An expression for filtering the results. Uses key:[value] syntax, e.g. \"type:g-suite\". Multiple filters can be connected using a pipe |. Different keys result in AND; same key multiple times results in OR."
},
"name": {
"type": "string",
"description": "Partial name filter (case-insensitive). Returns only assets whose name contains this string."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_aws_member_accountsEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns all member AWS accounts under the specified AWS organization that have active or historical commitment coverage. Includes 30-day statistics and estimated monthly potential savings (`monthlyPotentialSavings`) per Savings Plan (SP) type. This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"managementAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"pageToken": {
"type": "string"
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 500
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"managementAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_aws_organizationsEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns all AWS organizations (accounts) accessible to the authenticated tenant. Use as the entry point to discover AWS organization account IDs, and organization-level onboarding status of the available commitment types and savings metrics.
Each item includes metadata, trailing 30-day aggregate statistics, precomputed YTD/lifetime savings totals per Savings Plan (SP) type, and estimated monthly potential savings (`monthlyPotentialSavings`) per SP type from the latest projection. Sum across items for customer-level totals. This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"pageToken": {
"type": "string"
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 500
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_aws_organizations_settingsEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns one item per onboarded AWS organization. Each item includes that AWS organization's commitments purchasing account (`purchaseAccountId`) and commitment settings for each commitment type activated on that AWS organization (`compute`, `database`).
Commitment settings cover recommendation and automation preferences (policy, term, payment option, automation mode, commitment limits, and related fields). They are stored at the customer level per commitment type and therefore have the same values on every AWS organization item. Only `purchaseAccountId` and which commitment types appear differ per AWS organization.
In the DoiT Console, commitment settings are edited on an account's Settings tab but apply across all AWS organizations for that commitment type; the purchasing account is set per AWS organization on Accounts Settings. This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"pageToken": {
"type": "string"
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 500
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_aws_planned_purchasesEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns planned purchases (laddering projections) for the AWS organization. One item per commitment type that has a projection available (typically `compute` and/or `database`; up to four commitment types as PerfectScale for Commitments expands).
With no filters, returns all available planned-purchase items for the AWS organization in stable commitment-type order (`compute`, then `database`, then any future commitment types in enum order). When a filtered commitment type has no planned purchases, the response is an empty `items` array (not `404`). Partial items return only the fields available at response time.
`404` is returned only when the AWS organization does not exist or the caller cannot access it. An AWS organization that is not onboarded for PerfectScale for Commitments still returns `200` with an empty `items` array when no planned purchases exist — use `GET /ps4commitments/v1/aws/organizations` (or get-by-id) for `onboardingStatus`.
**Pagination**: results are returned in stable commitment-type order (`compute`, then `database`, then any future commitment types in enum order). Use `maxResults` to limit page size (default 50, max 500). When more items remain, the response includes a non-null `pageToken`; pass it unchanged on the next request with the same query parameters (`service`, `maxResults`). `rowCount` is the number of items in this page. An invalid `pageToken` returns `400` with code `pagination_token_invalid`; an expired token returns `400` with code `pagination_token_expired`. This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"managementAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"service": {
"type": "string",
"enum": [
"compute",
"database"
]
},
"pageToken": {
"type": "string"
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 500
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"managementAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_aws_recommendationsEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns commitment purchase recommendations for the AWS organization, keyed by commitment type (`compute`, `database`). A commitment type is present only when it is onboarded and a recommendation is available.Input schema{
"type": "object",
"properties": {
"managementAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"managementAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_aws_reserved_instancesEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns a paginated list of Reserved Instances (RIs) for the specified AWS organization. Optionally filter by state, instance type, instance family, region, and offering class. Omit filters to return all RIs for the AWS organization. This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"managementAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"status": {
"type": "string",
"enum": [
"active",
"retired",
"payment_pending",
"payment_failed",
"queued",
"queued_deleted"
]
},
"instanceType": {
"type": "string"
},
"instanceFamily": {
"type": "string"
},
"region": {
"type": "string"
},
"offeringClass": {
"type": "string",
"enum": [
"standard",
"convertible"
]
},
"pageToken": {
"type": "string"
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 500
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"managementAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_aws_savings_plansEvaluate current AWS commitments, plan and automate purchases, and optimize cloud costs with PerfectScale for Commitments. Returns a paginated list of Savings Plans for the specified AWS organization. Optionally filter by plan type (`type`) and state (`status`). Omit both filters to return all plans for the AWS organization. This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"managementAccountId": {
"type": "string",
"pattern": "^\\d{12}$"
},
"type": {
"type": "string",
"enum": [
"compute",
"ec2_instance",
"sagemaker",
"database"
]
},
"status": {
"type": "string",
"enum": [
"pending_return",
"returning",
"active",
"expired",
"queued",
"queued_returning",
"payment_failed",
"payment_pending"
]
},
"pageToken": {
"type": "string"
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 500
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"managementAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_billing_transfer_end_customersManage AWS billing-transfer mappings between distributors and resellers and between resellers and end customers, and list program management accounts. Lists the end-customer AWS account mappings under a reseller's program management
account, identified by `dpmaId` and `resellerPmaAccountId`. Callable by the reseller who
owns the PMA or the distributor who owns the DPMA.
Input schema{
"type": "object",
"properties": {
"dpmaId": {
"type": "string"
},
"resellerPmaAccountId": {
"type": "string"
},
"includeRevoked": {
"type": "boolean"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"dpmaId",
"resellerPmaAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_billing_transfer_end_customers_by_resellerManage AWS billing-transfer mappings between distributors and resellers and between resellers and end customers, and list program management accounts. Same result as `GET /billingtransfer/v1/end-customers`, identified by
`resellerPmaAccountId` alone (no `dpmaId` needed). Callable by the reseller who owns the
PMA or the distributor who owns its DPMA.
Input schema{
"type": "object",
"properties": {
"resellerPmaAccountId": {
"type": "string"
},
"includeRevoked": {
"type": "boolean"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"resellerPmaAccountId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_billing_transfer_program_management_accountsManage AWS billing-transfer mappings between distributors and resellers and between resellers and end customers, and list program management accounts. Lists the caller's program management accounts (PMAs) and the reseller tenants mapped to
each one, including AWS Organizations handshake status per account. Distributor-only.
This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "number"
},
"pageToken": {
"type": "string"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_billing_transfer_reseller_accountsManage AWS billing-transfer mappings between distributors and resellers and between resellers and end customers, and list program management accounts. Lists every reseller program management account (RPMA) node belonging to the calling
reseller, with handshake state and status but without end-customer tenants — the
reseller-tier analog of `GET /billingtransfer/v1/programmanagementaccounts`.
Input schema{
"type": "object",
"properties": {
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_billing_transfer_reseller_accounts_with_tenantsManage AWS billing-transfer mappings between distributors and resellers and between resellers and end customers, and list program management accounts. Lists every reseller PMA node belonging to the calling reseller, each with the
end-customer tenants connected under it — the reseller-tier analog of
`GET /billingtransfer/v1/programmanagementaccounts`. `region`, `iamStatus` and
`lastRefreshTime` are inherited from the parent DPMA root; the reseller node itself
carries no IAM/region metadata of its own.
Input schema{
"type": "object",
"properties": {
"includeRevoked": {
"type": "boolean"
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_budget_suggestionsAI-generated budget recommendations you can accept (link to a budget you created) or dismiss. Returns the pending AI-generated budget suggestions for your account. The set is small (a handful
of pending suggestions) and is returned in full. Each suggestion can be accepted (after you create a
matching budget via `POST /analytics/v1/budgets`) or dismissed.Input schema{
"type": "object",
"properties": {
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_budgetsUse this when the user wants to see their cloud spending budgets or check budget status. Returns a paginated list of budgets with names, amounts, and utilization. Do NOT use this for cost analysis (use run_query) or spending alerts (use list_alerts).Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "The maximum number of results to return in a single page. Defaults to 50."
},
"pageToken": {
"type": "string",
"description": "Page token, returned by a previous call, to request the next page of results."
},
"filter": {
"type": "string",
"description": "An expression for filtering the results. Syntax: \"key:[<value>]\". Available keys: owner, lastModified in ms (>lastModified). Multiple filters can be connected using a pipe |. Note that using different keys in the same filter results in \"AND,\" while using the same key multiple times in the same filter results in \"OR\"."
},
"name": {
"type": "string",
"description": "Partial name filter (case-insensitive). Returns only budgets whose name contains this string."
},
"minCreationTime": {
"type": "string",
"description": "Min value for budget creation time, in milliseconds since the POSIX epoch. Only budgets created after or at this timestamp are returned."
},
"maxCreationTime": {
"type": "string",
"description": "Max value for budget creation time, in milliseconds since the POSIX epoch. Only budgets created before or at this timestamp are returned."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_cloud_diagram_activity_groupsUse this when the user wants the change history of a cloud diagram layer grouped by snapshot. Returns snapshot activity groups for the given layer (ss_id), ordered by timestamp descending; each group references a snapshot and contains the individual activity records (node/link/group/attachment create/update/delete) that belong to it. Page with offset/limit and filter with tags. Do NOT use this for cost analysis (use run_query) or incidents (use get_cloud_incidents).Input schema{
"type": "object",
"properties": {
"ss_id": {
"type": "string",
"minLength": 1,
"description": "Layer ID to list activity groups for."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Maximum number of groups to return (default 10)."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of groups to skip (default 0)."
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Filter activity groups by tags."
}
},
"required": [
"ss_id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_cloud_diagram_layer_snapshotsCloud Diagrams visualize your cloud infrastructure and resource relationships. Returns the list of saved snapshots for the specified diagram layer.Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"offset": {
"type": "number",
"minimum": 0
},
"limit": {
"type": "number",
"minimum": 1
},
"sort": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_cloud_diagram_node_activitiesUse this when the user wants the change history of a single component node in a cloud diagram layer. Returns individual activity records (NODE_CREATE/NODE_UPDATE/NODE_DELETE) for the given node (ss_id + nodeId), ordered by timestamp descending, each including the user who made the change. Page with offset/limit. Do NOT use this for cost analysis (use run_query) or incidents (use get_cloud_incidents).Input schema{
"type": "object",
"properties": {
"ss_id": {
"type": "string",
"minLength": 1,
"description": "Layer ID the node belongs to."
},
"nodeId": {
"type": "string",
"minLength": 1,
"description": "Node component ID."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Maximum number of records to return (default 50)."
},
"offset": {
"type": "integer",
"minimum": 0,
"description": "Number of records to skip (default 0)."
}
},
"required": [
"ss_id",
"nodeId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_cloudflow_connectionsUse this when the user wants to see their CloudFlow cloud provider connections (the GCP/AWS accounts connected for automation). Returns a cursor-paginated list of connections with their config and status. Do NOT use this to trigger a flow (use trigger_cloud_flow) or to view a single connection's details (use get_cloudflow_connection).Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "Maximum number of connections to return (1–100). Defaults to 50."
},
"pageToken": {
"type": "string",
"description": "Pagination cursor returned by a previous call, to request the next page of results."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_cloudflow_flow_runsManage CloudFlow. Returns a flow's runs, newest first. Use `mode` to separate test runs from production
ones — test runs are included by default.
Per-node detail is not included here; fetch a single run to read what each node consumed
and produced. This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"flowId": {
"type": "string"
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 500
},
"pageToken": {
"type": "string"
},
"mode": {
"type": "string",
"enum": [
"test",
"standard"
]
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"flowId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_cloudflow_templatesUse this when the user wants to see the catalogue of available CloudFlow templates (read-only blueprints they can build a flow from). Returns a cursor-paginated list of templates with their id, name, description, and instructions. Do NOT use this to view a single template's details (use get_cloudflow_template) or to trigger a flow (use trigger_cloud_flow).Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "Maximum number of templates to return (1–500). Defaults to 50."
},
"pageToken": {
"type": "string",
"description": "Pagination cursor returned by a previous call, to request the next page of results."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_cloudflowsUse this when the user wants to see their CloudFlow automation flows. Returns a cursor-paginated list of flows with their metadata, status, and last execution info.Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "Maximum number of flows to return (1–500). Defaults to 50."
},
"pageToken": {
"type": "string",
"description": "Pagination cursor returned by a previous call, to request the next page of results."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_commitmentsReturns a list of commitment contracts from the DoiT Commitment Manager. These are Enterprise Discount Program (EDP) agreements — negotiated minimum spend or usage commitments between the customer and a cloud provider (Google Cloud, AWS, or Azure) .Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "The maximum number of results to return in a single page. Defaults to 50."
},
"pageToken": {
"type": "string",
"description": "Page token, returned by a previous call, to request the next page of results."
},
"filter": {
"type": "string",
"description": "An expression for filtering the results. Syntax: key:[<value>]. Multiple filters can be connected using pipe |. Available filter keys: name, provider. Example: provider:[google-cloud]"
},
"sortBy": {
"type": "string",
"enum": [
"name",
"startDate",
"endDate",
"provider",
"createTime",
"updateTime"
],
"description": "A field by which the results will be sorted. Accepted values: name, startDate, endDate, provider, createTime, updateTime."
},
"sortOrder": {
"type": "string",
"enum": [
"asc",
"desc"
],
"description": "The sort order for results. Accepted values: asc, desc."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — |
list_contract_templatesManage contract templates for PartnerOps resellers (T1/T2). Lists contract templates owned by the authenticated tenant (from the bearer token). Requires ContractTemplatesAdmin, DoiT API access (`platform:externalApi`), and the `channelops:contracts:templates` entitlement.Input schema{
"type": "object",
"properties": {
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_contractsList and manage tenant-scoped contracts as a T1/T2 PartnerOps caller. Lists the contracts held by the specified customer. Callable by a T1/T2 PartnerOps principal for its own tenant or any descendant tenant. Read access requires contractsReadOnly, contractsViewer, or a write-capable role (without contractsReadOnly). User API tokens must include the matching permission in their scope.Input schema{
"type": "object",
"properties": {
"customerID": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"customerID"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_datahub_datasetsUse this when the user wants to see available DataHub datasets. Returns a list of datasets with metadata. Do NOT use this for billing data (use run_query) or assets (use list_assets).Input schema{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_dimensionsUse this when the user wants to see available dimensions for cost analysis queries. Returns a list of dimension types and values that can be used with run_query. Do NOT use this for running cost queries directly (use run_query) or viewing allocations (use list_allocations).Input schema{
"type": "object",
"properties": {
"filter": {
"type": "string",
"description": "Filter string (optional) in format 'key:value|key:value'. Multiple values for same key are treated as OR, different keys as AND. The fields eligible for filtering are: type, label, key.\n use the filter parameter only if you know the exact value of the key, otherwise the filter should be empty."
},
"pageToken": {
"type": "string",
"description": "Token for pagination. Use this to get the next page of results."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_foldersUse this when the user wants to see their Cloud Analytics folders, which organize reports and allocations into a hierarchy. Returns a list of folders with their metadata. Do NOT use this for listing reports (use list_reports) or labels (use list_labels).Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "The maximum number of results to return in a single page. Defaults to 500."
},
"pageToken": {
"type": "string",
"description": "Page token, returned by a previous call, to request the next page of results."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_geographic_access_countriesManage country-based access to tenants in your customer hierarchy. Returns the canonical ISO 3166-1 alpha-2 country catalogue used by geographic access policies.Input schema{
"type": "object",
"properties": {
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_geographic_access_custom_regionsManage country-based access to tenants in your customer hierarchy. Returns the ready custom regions owned by the authenticated tenant. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_invoicesUse this when the user wants to see their invoices, check billing history, or review payment records. Returns a list of invoices with amounts, dates, and status. Do NOT use this for cost analysis (use run_query) or budget tracking (use list_budgets).Input schema{
"type": "object",
"properties": {
"pageToken": {
"type": "string",
"description": "Token for pagination. Use this to get the next page of results."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_labelsUse this when the user wants to see their resource labels or label configurations. Returns a list of labels with their metadata. Do NOT use this for annotations (use list_annotations) or label assignments (use get_label_assignments).Input schema{
"type": "object",
"properties": {
"maxResults": {
"type": "string",
"description": "The maximum number of results to return in a single page. Defaults to 500."
},
"pageToken": {
"type": "string",
"description": "Page token, returned by a previous call, to request the next page of results."
},
"filter": {
"type": "string",
"description": "An expression for filtering the results. Valid fields: name, type. Example: name:budget"
},
"sortBy": {
"type": "string",
"enum": [
"id",
"name",
"type",
"createTime",
"updateTime"
],
"description": "A field by which the results will be sorted. Accepted values: id, name, type, createTime, updateTime."
},
"sortOrder": {
"type": "string",
"enum": [
"asc",
"desc"
],
"description": "The sort order for results. Accepted values: asc, desc."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_optimization_recommendationsUse this when the user asks about optimization, recommendations, insights, savings opportunities, rightsizing, idle resources, security findings, or cost reduction suggestions. Also use this when the user asks 'what insights are available?' or 'show me insights'. This is the primary tool for 'what can I optimize?', 'how can I save money?', and 'what insights do I have?' questions. Returns a prioritized list of actionable insights with estimated daily savings. Do NOT use this for cost anomalies/spikes (use get_anomalies) or budget tracking (use list_budgets).Input schema{
"type": "object",
"properties": {
"category": {
"type": "array",
"items": {
"type": "string",
"enum": [
"FinOps",
"OperationalExcellence",
"PerformanceEfficiency",
"Reliability",
"Security",
"Sustainability"
]
},
"description": "Filter by insight categories. Possible values: FinOps, OperationalExcellence, PerformanceEfficiency, Reliability, Security, Sustainability."
},
"priority": {
"type": "array",
"items": {
"type": "string",
"enum": [
"Low",
"Medium",
"High"
]
},
"description": "Filter by priority levels. Possible values: Low, Medium, High."
},
"displayStatus": {
"type": "array",
"items": {
"type": "string",
"enum": [
"actionable",
"acknowledged",
"in progress",
"optimized",
"dismissed"
]
},
"description": "Filter by display status. Possible values: actionable, acknowledged, in progress, optimized, dismissed."
},
"provider": {
"type": "string",
"description": "Filter by cloud provider."
},
"easyWin": {
"type": "boolean",
"description": "Filter for easy wins only."
},
"searchTerm": {
"type": "string",
"description": "Text search across insight titles and descriptions."
},
"page": {
"type": "number",
"minimum": 0,
"description": "Page number for pagination (zero-based)."
},
"pageSize": {
"type": "number",
"minimum": 1,
"maximum": 100,
"default": 20,
"description": "Number of results per page (default 20, max 100)."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_organizationsUse this when the user wants to see the organizations in their DoiT account. Returns a list of organizations. Do NOT use this for listing users (use list_users) or platforms (use list_platforms).Input schema{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_platformsUse this when the user wants to see available cloud platforms in their DoiT account. Returns a list of platforms. Do NOT use this for cloud incidents (use get_cloud_incidents) or products (use list_products).Input schema{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_productsUse this when the user wants to see available DoiT products or services. Returns a list of products. Do NOT use this for cloud incidents (use get_cloud_incidents) or platforms (use list_platforms).Input schema{
"type": "object",
"properties": {
"platform": {
"type": "string",
"description": "Filter products by platform"
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_reportsUse this when the user wants to see their saved Cloud Analytics reports or browse available reports. Returns a paginated list of reports with their IDs and metadata. Do NOT use this for running queries (use run_query) or getting report results (use get_report_results).Input schema{
"type": "object",
"properties": {
"filter": {
"type": "string",
"description": "Filter string in format 'key:value|key:value'. Multiple values for same key are treated as OR, different keys as AND. Possible filter keys: reportName, owner, type, updateTime, use the filter property only if you know for sure the value is a valid filter key, do not guess it."
},
"pageToken": {
"type": "string",
"description": "Token for pagination. Use this to get the next page of results."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_rolesUse this when the user wants to see available roles in their DoiT organization. Returns a list of roles with permissions. Do NOT use this for listing users (use list_users) or organizations (use list_organizations).Input schema{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_service_quotasMonitor cloud service quota usage across connected accounts and projects. Returns the latest service quota usage snapshots collected by DoiT for the authenticated customer.
Results include only quotas retained by DoiT's monitoring collectors and are not a complete or live inventory from the cloud providers.
Results are sorted by utilization percentage in descending order. This endpoint is paginated: to fetch the next page, call again passing the response's `pageToken` value as the `pageToken` parameter. Stop once the response has no `pageToken` — that means there are no more pages.Input schema{
"type": "object",
"properties": {
"cloudProvider": {
"type": "string",
"enum": [
"aws",
"gcp"
]
},
"minUtilizationPercent": {
"type": "number",
"minimum": 0,
"maximum": 100
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 200
},
"pageToken": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_themesUse this when the user wants to see the custom color themes defined for their account, which control the colors applied to Cloud Analytics reports. Returns a list of themes with their metadata. Do NOT use this for listing reports (use list_reports) or labels (use list_labels).Input schema{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_ticket_commentsReturns all comments on a support ticket. For customers, only public comments are returned. For DoiT employees, both public and private comments are returned.Input schema{
"type": "object",
"properties": {
"ticketId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1,
"pattern": "^\\d+$"
}
],
"description": "The numeric ID of the support ticket whose comments to retrieve."
}
},
"required": [
"ticketId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
} | — | — |
list_ticket_tagsCreate and manage support tickets with DoiT. Returns the tags currently set on a support request.
DoiT employee (doer) callers receive the full tag set verbatim,
including internal namespaces (e.g. `tier/*`, `synapse_*`). Customer
callers receive only tags under the `customer_tag/` namespace, with
that prefix stripped (e.g. a tag added as `billing` reads back as
`billing`). Always present; empty array when the caller has no visible
tags.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "number"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"ticketId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_ticketsUse this when the user wants to view their support tickets, check ticket status, or review open issues. Returns tickets with status, priority, and platform. Supports partial subject filtering. Do NOT use this for cloud incidents (use get_cloud_incidents) or cost alerts (use list_alerts).Input schema{
"type": "object",
"properties": {
"pageToken": {
"type": "string",
"description": "Page token for pagination"
},
"pageSize": {
"type": "number",
"description": "Number of tickets to return per page"
},
"subject": {
"type": "string",
"description": "Partial subject filter (case-insensitive). Returns only tickets whose subject contains this string."
}
}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
list_usersUse this when the user wants to see users in their DoiT organization or check who has access. Returns a list of users with roles. Do NOT use this for listing roles (use list_roles) or validating the current user (use validate_user).Input schema{
"type": "object",
"properties": {},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
post_insight_resource_resultsManage cloud insights representing recommendations and findings for cloud resources. Replaces all resource results for the specified insight. Any existing unresolved resource results not present in the new set will be removed. The response includes server-computed fields (severity, resolved, enhancement) for each resource result. To delete all resource results, send an empty array.
Input schema{
"type": "object",
"properties": {
"sourceID": {
"type": "string",
"enum": [
"public-api"
]
},
"insightKey": {
"type": "string"
},
"maxResults": {
"type": "number",
"minimum": 1,
"maximum": 5000
},
"resourceResults": {
"type": "array",
"items": {
"type": "object",
"properties": {
"resourceId": {
"type": "string",
"description": "The cloud resource identifier."
},
"resourceType": {
"type": "string",
"description": "What the resource actually is, e.g. for an EC2 resource ID, this field would be `instance`. Immutable after creation — updates to this field are silently ignored.\n"
},
"cloudProvider": {
"type": "string",
"description": "Immutable after creation — updates to this field are silently ignored."
},
"account": {
"type": "string",
"description": "The cloud account or project ID containing this resource. Immutable after creation — updates to this field are silently ignored."
},
"location": {
"type": "string",
"description": "Represents the region/zone of the resource in AWS, or equivalent for other providers. Immutable after creation — updates to this field are silently ignored.\n"
},
"externalId": {
"type": "string",
"description": "the external ID of the resource in the provider's system for the resource"
},
"externalUrl": {
"type": "string",
"description": "the URL to the resource-level issue in the provider's system"
},
"metadata": {
"type": "object",
"additionalProperties": {},
"description": "contains any additional information for the resource results"
},
"resultType": {
"type": "string",
"enum": [
"security_risk",
"potential_daily_savings",
"potential_daily_savings_with_recommendation",
"potential_daily_savings_with_cluster_agent"
],
"description": "The discriminator property that determines which fields are populated in the 'result' object."
},
"result": {
"type": "object",
"properties": {
"value": {
"type": "number",
"description": "the daily saving amount for this result"
},
"critical": {
"type": "number",
"description": "number of critical security risks"
},
"high": {
"type": "number",
"description": "number of high security risks"
},
"medium": {
"type": "number",
"description": "number of medium security risks"
},
"low": {
"type": "number",
"description": "number of low security risks"
},
"current": {
"type": "string",
"description": "the current state (i.e. current instance type)"
},
"recommendation": {
"type": "string",
"description": "the recommended state (i.e. recommended instance type)"
},
"agentInstalled": {
"type": "boolean",
"description": "true if the agent is installed"
}
},
"additionalProperties": false,
"description": "The result data for this resource. Which fields are populated depends on the resultType. For security_risk: critical, high, medium, low. For potential_daily_savings: value. For potential_daily_savings_with_recommendation: value, current, recommendation. For potential_daily_savings_with_cluster_agent: value, agentInstalled.\n"
}
},
"required": [
"resourceId",
"cloudProvider",
"account",
"resultType"
],
"additionalProperties": false,
"description": "A single resource-level result for creating or updating an insight. Server-computed fields (severity, resolved, enhancement) are not accepted here and will be ignored. Identity fields (resourceId, resultType, account, cloudProvider) form the composite key. The fields location and resource_type are set on creation only — any values provided for these fields during subsequent upserts are silently ignored.\n"
},
"description": "A list of resource-level results for creating or updating an insight."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"sourceID",
"insightKey",
"resourceResults"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
post_insight_resultUse this when the user wants to create a new custom insight or update an existing one's metadata (title, description, categories, status, remediation links). Only insights owned by the 'public-api' source can be managed. This manages the insight's metadata only — the individual affected resources are managed separately (post_insight_resource_results). Do NOT use this only to change an insight's status (use update_insight_status).Input schema{
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"public-api"
],
"default": "public-api",
"description": "The source that owns the insight. Only 'public-api' insights can be managed via this endpoint."
},
"key": {
"type": "string",
"description": "A unique key identifying the insight within the source. Used as both the path key and body key."
},
"title": {
"type": "string",
"description": "The display title of the insight."
},
"shortDescription": {
"type": "string",
"description": "A brief summary of the insight."
},
"cloudProvider": {
"type": "string",
"description": "The cloud provider associated with the insight (e.g. 'aws', 'gcp', 'azure')."
},
"categories": {
"type": "array",
"items": {
"type": "string",
"enum": [
"FinOps",
"Security"
]
},
"minItems": 1,
"description": "One or more categories this insight belongs to. Possible values: FinOps, Security."
},
"detailedDescriptionMdx": {
"type": "string",
"description": "A detailed description of the insight in MDX format."
},
"reportUrl": {
"type": "string",
"description": "URL to an external report related to this insight."
},
"cloudFlowTemplateId": {
"type": "string",
"description": "ID of a CloudFlow template that can automate the remediation of this insight."
},
"easyWinDescription": {
"type": "string",
"description": "A description of why this insight is considered an easy win."
},
"status": {
"type": "string",
"enum": [
"actionable",
"acknowledged",
"optimized",
"dismissed",
"in progress",
"upgrade needed",
"permissions needed"
],
"description": "The display status of the insight."
},
"dismissalDetails": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"enum": [
"not relevant",
"not enough information",
"not worth the effort",
"inaccurate optimization opportunities"
],
"description": "The reason the insight was dismissed."
},
"comment": {
"type": "string",
"description": "An optional free-text comment providing additional context."
}
},
"additionalProperties": false,
"description": "Details for why the insight was dismissed (only relevant when status is 'dismissed')."
}
},
"required": [
"key",
"title",
"shortDescription",
"cloudProvider",
"categories"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
post_insight_resultsManage cloud insights representing recommendations and findings for cloud resources. Creates or updates multiple insights in a single batch request.
Each insight in the batch includes its metadata and resource results inline.
For granular control over insight metadata and resource results independently,
use the single-insight and resource-results endpoints instead.
Input schema{
"type": "object",
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "A unique key for this insight within the source."
},
"title": {
"type": "string",
"description": "The display title of the insight."
},
"shortDescription": {
"type": "string",
"description": "A brief summary of the insight."
},
"detailedDescriptionMdx": {
"type": "string",
"description": "A detailed description of the insight in MDX format."
},
"cloudProvider": {
"type": "string",
"description": "The cloud provider associated with the resource."
},
"categories": {
"type": "array",
"items": {
"type": "string",
"enum": [
"FinOps",
"Security"
],
"description": "Allowed categories when creating insights via the public API."
},
"description": "One or more categories this insight belongs to."
},
"reportUrl": {
"type": "string",
"description": "URL to an external report related to this insight."
},
"cloudFlowTemplateId": {
"type": "string",
"description": "ID of a CloudFlow template that can automate the remediation of this insight."
},
"easyWinDescription": {
"type": "string",
"description": "A description of why this insight is considered an easy win."
},
"resourceResults": {
"type": "array",
"items": {
"type": "object",
"properties": {
"resourceId": {
"type": "string",
"description": "The cloud resource identifier."
},
"resourceType": {
"type": "string",
"description": "What the resource actually is, e.g. for an EC2 resource ID, this field would be `instance`. Immutable after creation — updates to this field are silently ignored.\n"
},
"cloudProvider": {
"type": "string",
"description": "Immutable after creation — updates to this field are silently ignored."
},
"account": {
"type": "string",
"description": "The cloud account or project ID containing this resource. Immutable after creation — updates to this field are silently ignored."
},
"location": {
"type": "string",
"description": "Represents the region/zone of the resource in AWS, or equivalent for other providers. Immutable after creation — updates to this field are silently ignored.\n"
},
"externalId": {
"type": "string",
"description": "the external ID of the resource in the provider's system for the resource"
},
"externalUrl": {
"type": "string",
"description": "the URL to the resource-level issue in the provider's system"
},
"metadata": {
"type": "object",
"additionalProperties": {},
"description": "contains any additional information for the resource results"
},
"resultType": {
"type": "string",
"enum": [
"security_risk",
"potential_daily_savings",
"potential_daily_savings_with_recommendation",
"potential_daily_savings_with_cluster_agent"
],
"description": "The discriminator property that determines which fields are populated in the 'result' object."
},
"result": {
"type": "object",
"properties": {
"value": {
"type": "number",
"description": "the daily saving amount for this result"
},
"critical": {
"type": "number",
"description": "number of critical security risks"
},
"high": {
"type": "number",
"description": "number of high security risks"
},
"medium": {
"type": "number",
"description": "number of medium security risks"
},
"low": {
"type": "number",
"description": "number of low security risks"
},
"current": {
"type": "string",
"description": "the current state (i.e. current instance type)"
},
"recommendation": {
"type": "string",
"description": "the recommended state (i.e. recommended instance type)"
},
"agentInstalled": {
"type": "boolean",
"description": "true if the agent is installed"
}
},
"additionalProperties": false,
"description": "The result data for this resource. Which fields are populated depends on the resultType. For security_risk: critical, high, medium, low. For potential_daily_savings: value. For potential_daily_savings_with_recommendation: value, current, recommendation. For potential_daily_savings_with_cluster_agent: value, agentInstalled.\n"
}
},
"required": [
"resourceId",
"cloudProvider",
"account",
"resultType"
],
"additionalProperties": false,
"description": "A single resource-level result for creating or updating an insight. Server-computed fields (severity, resolved, enhancement) are not accepted here and will be ignored. Identity fields (resourceId, resultType, account, cloudProvider) form the composite key. The fields location and resource_type are set on creation only — any values provided for these fields during subsequent upserts are silently ignored.\n"
},
"description": "A list of resource-level results for creating or updating an insight."
}
},
"required": [
"key",
"title",
"shortDescription",
"cloudProvider",
"categories",
"resourceResults"
],
"additionalProperties": false,
"description": "Request body for creating or updating an insight via the batch endpoint. Includes resource results."
},
"description": "List of insights to create or update."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"results"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
refine_cloudflowUse this when the user wants to refine or rebuild an existing CloudFlow automation using natural language. Streams real-time progress updates while the AI builds the flow, then returns the final result. Generated codeNode code is frequently broken in ways that pass validation and fail silently at run time. Always export_cloudflow_flow and test-run the result, and check the per-node output, before reporting success.Input schema{
"type": "object",
"properties": {
"question": {
"type": "string",
"description": "The instruction or question to refine or rebuild the flow"
},
"flowId": {
"type": "string",
"description": "The ID of the CloudFlow flow to refine"
},
"conversationId": {
"type": "string",
"description": "Optional conversation ID for multi-turn sessions"
}
},
"required": [
"question",
"flowId"
]
}Annotations{
"readOnlyHint": false,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
remove_ticket_tagsCreate and manage support tickets with DoiT. Removes one or more tags from an existing support request. The operation
is surgical — only the tags listed in the request are removed; tags not
listed are preserved. Removing a tag that is not present is a successful
no-op.
For customers, the system applies the same `customer_tag/` namespace
mapping as on add, so a customer who added `my_tag` (stored as
`customer_tag/my_tag`) can remove it by sending `my_tag`.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "number"
},
"tags": {
"type": "array",
"items": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"description": "List of tags to add or remove. Customer-submitted tags are auto-prefixed with `customer_tag/`."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"ticketId",
"tags"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
resend_inviteManage users who have access to the DoiT platform. Resets the invite expiry to 48 hours from now, invalidates the previous invite token (so
old email links stop working), and triggers a fresh invitation email. Works on invites in
any state including `Cancelled` — resending a cancelled invite reactivates it to `Pending`.
Returns `404` if no invite exists for the given ID (never created, or already accepted and removed).
Requires `usersManager` permission.
Input schema{
"type": "object",
"properties": {
"id": {
"type": "string"
},
"dryRun": {
"type": "boolean"
},
"Idempotency-Key": {
"type": "string",
"maxLength": 255
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"id",
"Idempotency-Key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
run_queryUse this when the user wants to analyze cloud costs, generate a cost breakdown, view spending trends, or run a custom analytics query across their cloud providers. Accepts a structured config with data source, metrics, dimensions, time range, and filters. Do NOT use this for listing saved reports (use list_reports), checking anomalies (use get_anomalies), or viewing budgets (use list_budgets).
Fields that are not populated will use their default values if needed.
To limit the number of rows returned per group, set the `limit.value` field inside each `config.group[]` entry (maximum 25).
If possible, use `timeRange` instead of `customTimeRange` when no specific dates are given.
Use "includeCurrent": true to include the current in-progress month. Use "includeCurrent": false only when asking about a fully completed past period.
Always use "metrics" (array) not the deprecated "metric" (object).
ALWAYS include a "group" with id "service_description" and type "fixed" unless the user explicitly asks to group by something else. This gives a per-service cost breakdown which is always the most useful default.
Common grouping dimension IDs (all type "fixed"):
"service_description" — cloud service (default)
"project_id" — GCP project / AWS account / Azure subscription (use when user asks to group by project, account, or subscription)
"cloud_provider" — cloud provider (AWS / GCP / Azure)
IMPORTANT — filter values are dimension IDs, never display names. Before filtering on any dimension
you are unsure about, call get_dimension({type, id}) to retrieve the exact valid values for this customer.
Known cloud provider IDs (cloud_provider, type "fixed"):
"amazon-web-services" = AWS, "google-cloud" = GCP, "microsoft-azure" = Azure
Example — top AWS services last month:
{
"config": {
"dataSource": "billing",
"metrics": [{"type": "basic", "value": "cost"}],
"timeRange": {"mode": "last", "amount": 1, "unit": "month", "includeCurrent": true},
"filters": [{"id": "cloud_provider", "type": "fixed", "values": ["amazon-web-services"]}],
"group": [{"id": "service_description", "type": "fixed", "limit": {"metric": {"type": "basic", "value": "cost"}, "sort": "desc", "value": 10}}]
}
}Input schema{
"type": "object",
"properties": {
"config": {
"type": "object",
"properties": {
"dataSource": {
"type": "string",
"enum": [
"billing",
"bqlens",
"billing-datahub",
"kubernetes-utilization"
],
"description": "Data source for the report. Accepted values: billing, bqlens, billing-datahub, kubernetes-utilization."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"basic",
"custom",
"extended"
],
"description": "Metric type. Accepted values: basic, custom, extended."
},
"value": {
"type": "string",
"description": "For basic metrics: 'cost', 'usage', or 'savings'. For extended metrics: e.g. 'amortized_cost'. For custom metrics: the custom metric ID."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
},
"maxItems": 4,
"description": "List of metrics to apply (max 4). Preferred over the deprecated 'metric' field."
},
"metric": {
"$ref": "#/properties/config/properties/metrics/items",
"description": "Deprecated: use 'metrics' instead."
},
"metricFilter": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"$ref": "#/properties/config/properties/metrics/items/properties/type"
},
"value": {
"$ref": "#/properties/config/properties/metrics/items/properties/value"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "The metric to filter on."
},
"operator": {
"type": "string",
"enum": [
"gt",
"lt",
"lte",
"gte",
"b",
"nb",
"e",
"ne"
],
"description": "Comparison operator. Accepted values: gt, lt, lte, gte, b, nb, e, ne. gt (>), lt (<), lte (<=), gte (>=), b (between), nb (not between), e (equals), ne (not equals)."
},
"values": {
"type": "array",
"items": {
"type": "number"
},
"description": "Values to compare against."
}
},
"required": [
"metric",
"operator",
"values"
],
"additionalProperties": false,
"description": "Filter to limit report rows by metric value."
},
"aggregation": {
"type": "string",
"enum": [
"total",
"percent_total",
"percent_col",
"percent_row"
],
"description": "How to aggregate data values. Accepted values: total, percent_total, percent_col, percent_row."
},
"advancedAnalysis": {
"type": "object",
"properties": {
"forecast": {
"type": "boolean",
"description": "Include a cost forecast."
},
"notTrending": {
"type": "boolean",
"description": "Highlight rows that are not trending."
},
"trendingDown": {
"type": "boolean",
"description": "Highlight rows trending down."
},
"trendingUp": {
"type": "boolean",
"description": "Highlight rows trending up."
}
},
"additionalProperties": false,
"description": "Advanced analysis options."
},
"timeInterval": {
"type": "string",
"enum": [
"hour",
"day",
"dayCumSum",
"week",
"isoweek",
"month",
"quarter",
"year",
"week_day"
],
"description": "Time interval for grouping data. Accepted values: hour, day, dayCumSum, week, isoweek, month, quarter, year, week_day."
},
"dimensions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dimension identifier. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Dimensions to break down data by (columns in table view)."
},
"timeRange": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"last",
"current",
"custom"
],
"description": "Time range mode. Accepted values: last, current, custom. Use 'custom' with customTimeRange for specific dates."
},
"amount": {
"type": "integer",
"minimum": 0,
"maximum": 5000,
"description": "Number of time units (0–5000). Required when mode is 'last'."
},
"unit": {
"type": "string",
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"description": "Time unit. Accepted values: day, week, month, quarter, year. Required when mode is 'last'."
},
"includeCurrent": {
"type": "boolean",
"description": "Whether to include the current (in-progress) period."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date in RFC3339 format."
},
"to": {
"type": "string",
"description": "End date in RFC3339 format."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom date range. Required when mode is 'custom'."
}
},
"required": [
"mode"
],
"additionalProperties": false,
"description": "Time range for the report. Preferred over customTimeRange."
},
"secondaryTimeRange": {
"type": "object",
"properties": {
"amount": {
"type": "integer",
"minimum": 0,
"description": "Number of periods to shift back (non-negative)."
},
"unit": {
"type": "string",
"enum": [
"day",
"month",
"quarter",
"year"
],
"description": "Time unit for shifting. Accepted values: day, month, quarter, year."
},
"includeCurrent": {
"type": "boolean",
"description": "When true, selects complete previous periods (e.g. full previous year). When false, shifts dates by amount."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date in RFC3339 format."
},
"to": {
"type": "string",
"description": "End date in RFC3339 format."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom date range for the secondary time range."
}
},
"additionalProperties": false,
"description": "Secondary time range for comparative reports."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start timestamp in RFC3339 format. Example: '2024-03-10T23:00:00Z'."
},
"to": {
"type": "string",
"description": "End timestamp in RFC3339 format. Example: '2024-03-12T23:00:00Z'."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom time range. Only use when timeRange mode is 'custom'."
},
"includePromotionalCredits": {
"type": "boolean",
"description": "Include promotional credits. Requires timeInterval of 'month', 'quarter', or 'year'."
},
"includeSubtotals": {
"type": "boolean",
"description": "Include subgroup totals. No effect when reading via API. Defaults to false."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The field to filter on. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type of the filter field. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"is",
"starts_with",
"ends_with",
"contains",
"regexp"
],
"description": "Filter match mode. Accepted values: is, starts_with, ends_with, contains, regexp."
},
"inverse": {
"type": "boolean",
"description": "Set to true to exclude the matched values (negation)."
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to filter on."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"description": "Filters to apply to the report."
},
"group": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dimension ID for the group-by row. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"limit": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"$ref": "#/properties/config/properties/metrics/items/properties/type"
},
"value": {
"$ref": "#/properties/config/properties/metrics/items/properties/value"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "Metric used for ranking."
},
"sort": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for the limit ranking. Accepted values: asc, desc, a_to_z."
},
"value": {
"type": "integer",
"description": "Number of items to show."
}
},
"required": [
"metric",
"sort",
"value"
],
"additionalProperties": false,
"description": "Limit to top/bottom N results."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Dimensions that define rows in the report (group-by)."
},
"layout": {
"type": "string",
"enum": [
"column_chart",
"stacked_column_chart",
"bar_chart",
"stacked_bar_chart",
"line_chart",
"spline_chart",
"area_chart",
"area_spline_chart",
"stacked_area_chart",
"treemap_chart",
"table",
"table_heatmap",
"table_row_heatmap",
"table_col_heatmap",
"csv_export",
"sheets_export"
],
"description": "Report layout / visualization type. Accepted values: column_chart, stacked_column_chart, bar_chart, stacked_bar_chart, line_chart, spline_chart, area_chart, area_spline_chart, stacked_area_chart, treemap_chart, table, table_heatmap, table_row_heatmap, table_col_heatmap, csv_export, sheets_export."
},
"displayValues": {
"type": "string",
"enum": [
"actuals_only",
"absolute_change",
"percentage_change",
"absolute_and_percentage"
],
"description": "How to display values in comparative reports. Accepted values: actuals_only, absolute_change, percentage_change, absolute_and_percentage."
},
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code for monetary values. Accepted values: USD, ILS, EUR, AUD, CAD, GBP, DKK, NOK, SEK, BRL, SGD, MXN, CHF, MYR, TWD, EGP, ZAR, JPY, IDR, AED, THB, COP."
},
"sortGroups": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for groups. Accepted values: asc, desc, a_to_z. Defaults to 'asc'. No effect when reading via API."
},
"sortDimensions": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for dimensions. Accepted values: asc, desc, a_to_z. Defaults to 'desc'. No effect when reading via API."
},
"splits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the field to split."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Type of the split. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"even",
"custom",
"proportional"
],
"description": "Split mode. Accepted values: even, custom, proportional."
},
"includeOrigin": {
"type": "boolean",
"description": "Whether to include the origin in the split results."
},
"origin": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Origin ID."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label",
"unallocated"
],
"description": "Origin type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, gke, gke_label, unallocated."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false,
"description": "Origin info for cost splitting."
},
"targets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Target ID."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Target type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label. Must match the split type unless split type is 'attribution_group', in which case target type must be 'attribution'."
},
"value": {
"type": "number",
"description": "Percent as float (e.g. 0.3 for 30%). Required only when split mode is 'custom'."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Targets for the split."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"description": "Cost splits to apply to the report."
}
},
"additionalProperties": false,
"description": "Configuration for the query. Use the dimension tool to look up valid dimension IDs."
}
},
"required": [
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
search_cloud_diagramsUse this when the user wants to search their cloud infrastructure diagrams and components by name or property. Returns matching diagram layers (scheme), components, and components matched by property value (prop). Optionally scope to a single layer with ss_id and page with from/size. Do NOT use this for cost analysis (use run_query) or incidents (use get_cloud_incidents).Input schema{
"type": "object",
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Search query string."
},
"ss_id": {
"type": "string",
"description": "Limit search to components within this layer (layer ID)."
},
"from": {
"type": "integer",
"minimum": 0,
"description": "Pagination offset (default 0)."
},
"size": {
"type": "integer",
"minimum": 1,
"description": "Maximum number of results per category (default 20)."
}
},
"required": [
"query"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
search_customersDoiT-internal (doer) tool: search across ALL DoiT customers by what they have — classification/kind, customer type, segment, tier package, domains, cloud asset platforms (AWS, GCP, Google Workspace, Office 365, Azure), Flexsave, standalone (direct self-serve) cloud assets, monthly cloud spend, invoiced spend over a month range, and active contracts. All provided conditions are AND-combined; within a list field the match is any-of. Returns matching customers with a summary and a nextPageToken for paging. Requires DoiT employee access (non-doers get an authorization error). Use this to FIND customers across the base; use other tools to drill into a specific customer.Input schema{
"type": "object",
"properties": {
"classification": {
"type": "array",
"items": {
"type": "string",
"enum": [
"business",
"strategic",
"terminated",
"inactive",
"suspendedForNonPayment"
]
},
"description": "Match customers in any of these classifications (the customer 'kind')."
},
"type": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match any of these customer types, e.g. 'procurement-only', 'product-only', 'procurement-and-product'."
},
"segment": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match any of these customer segments, e.g. 'Invest', 'Incubate', 'Accelerate'."
},
"tierPackages": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match customers subscribed to any of these tier packages, e.g. 'navigator', 'solve'."
},
"domains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Match customers whose primary or secondary domain is any of these."
},
"assetPlatforms": {
"type": "array",
"items": {
"type": "string",
"enum": [
"amazon-web-services",
"google-cloud",
"g-suite",
"office-365",
"microsoft-azure"
]
},
"description": "Match customers that have at least one asset on any of these cloud platforms (g-suite = Google Workspace, office-365 = Microsoft 365)."
},
"hasFlexsave": {
"type": "boolean",
"description": "If set, match customers that do (true) or do not (false) have Flexsave enabled on any cloud."
},
"standalone": {
"type": "boolean",
"description": "If set, match customers that do (true) or do not (false) have at least one standalone (direct self-serve) cloud asset. true keeps standalone/hybrid customers, false keeps resold-only ones."
},
"minMonthlyCloudSpend": {
"type": "number",
"description": "Minimum denormalized monthly cloud spend (cheap, from the customer record)."
},
"maxMonthlyCloudSpend": {
"type": "number",
"description": "Maximum denormalized monthly cloud spend."
},
"invoicedFromMonth": {
"type": "string",
"description": "Start month (YYYY-MM) for the authoritative invoiced-total spend filter. Requires invoicedToMonth."
},
"invoicedToMonth": {
"type": "string",
"description": "End month (YYYY-MM) for the invoiced-total spend filter. Requires invoicedFromMonth."
},
"invoicedMinTotal": {
"type": "number",
"description": "Minimum summed invoice total over the invoiced month range."
},
"invoicedMaxTotal": {
"type": "number",
"description": "Maximum summed invoice total over the invoiced month range."
},
"contractsActive": {
"type": "boolean",
"description": "If true, match only customers that have at least one active/expired contract."
},
"pageSize": {
"type": "integer",
"exclusiveMinimum": 0,
"maximum": 200,
"description": "Maximum customers to return per page (default 50, max 200)."
},
"pageToken": {
"type": "string",
"description": "Opaque page token from a previous response's nextPageToken, to fetch the next page."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
send_datahub_eventsUse this when the user wants to send DataHub events for ingestion (1–50,000 events per call). Each event requires a provider name and an RFC 3339 timestamp, and can optionally include dimensions and metrics. Ask the user to confirm the event count and provider details before executing. Data becomes available in Cloud Analytics within ~15 minutes. Do NOT use this for creating datasets (use create_datahub_dataset) or viewing datasets (use list_datahub_datasets).Input schema{
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"type": "object",
"properties": {
"provider": {
"type": "string",
"minLength": 1,
"pattern": "^[a-zA-Z0-9_-]+( [a-zA-Z0-9_-]+)*$",
"description": "The data provider identifier (required). Allowed characters: alphanumeric (0-9,a-z,A-Z), underscore (_), dash (-), and spaces between words. Example: 'Datadog'."
},
"id": {
"type": "string",
"description": "A unique event ID within the dataset. If omitted, a UUIDv4 is auto-generated by the server."
},
"time": {
"type": "string",
"minLength": 1,
"format": "date-time",
"description": "The event timestamp (required). Must be an RFC 3339 date-time string (e.g. '2024-03-10T23:00:00Z')."
},
"dimensions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"minLength": 1,
"description": "The dimension key."
},
"type": {
"type": "string",
"enum": [
"fixed",
"label",
"project_label",
"system_label"
],
"description": "The dimension type. Accepted values: fixed, label, project_label, system_label."
},
"value": {
"type": [
"string",
"boolean"
],
"description": "The dimension value. Can be a string or boolean."
}
},
"required": [
"key",
"type",
"value"
],
"additionalProperties": false
},
"description": "Optional list of dimensions (key/type/value triples) to categorize this event."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"value": {
"type": "number",
"description": "The metric value (numeric)."
},
"type": {
"type": "string",
"minLength": 1,
"description": "The metric type. Use 'cost' or 'usage' to map to built-in Cloud Analytics metrics, or a custom string (e.g. 'working_hours')."
}
},
"required": [
"value",
"type"
],
"additionalProperties": false
},
"description": "Optional list of metrics associated with this event."
}
},
"required": [
"provider",
"time"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 50000,
"description": "Array of DataHub events to ingest (required). Each event requires a provider and time. Accepts 1 to 50,000 events per call."
}
},
"required": [
"events"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
set_active_themeUse this when the user wants to change or activate a custom color theme for their Cloud Analytics reports. Accepts a theme ID or the sentinel "default" to revert to the built-in default. Ask the user to confirm the change before executing. Do NOT use this to retrieve the current active theme (use get_active_theme) or to update theme colors (use update_theme).Input schema{
"type": "object",
"properties": {
"themeId": {
"type": "string",
"minLength": 1,
"description": "The ID of the theme to set as active, or the reserved sentinel \"default\" to revert to the built-in default (no custom theme)."
}
},
"required": [
"themeId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
test_run_cloudflow_flowManage CloudFlow. Runs a flow once as a test, and **accepts an unpublished (draft) flow** — unlike
`actions/trigger`, which requires the flow to be published. Use this to verify a newly
authored or edited flow before publishing it.
Execution is identical to a production run: the same graph, the same bound connections,
the same credentials, and the same approval behaviour. An approval-gated node still parks
the run and its side effect still waits for a real approval — there is no request that
skips one.
The run is recorded as a test, so it does not appear in run history, does not count
towards dashboard statistics, does not become a dashboard widget's data source, and does
not consume a scheduled-run budget. It does hold the flow's concurrency lock, so a `409`
is returned while the flow is already running.
The flow's first node must be a webhook, scheduled, or manual trigger.
Before dispatching, the flow is validated with the same checks publish applies — a draft
has never been through them. A flow that fails returns `422` listing every offending node
at once, so all of them can be fixed in one pass.
Poll the `Location` URL to follow the run and read what each node produced.
Pass `?dryRun=true` to validate the flow without starting a run. Generated codeNode code is frequently broken in ways that pass validation and fail silently at run time. Always export_cloudflow_flow and test-run the result, and check the per-node output, before reporting success.Input schema{
"type": "object",
"properties": {
"flowId": {
"type": "string"
},
"dryRun": {
"type": "boolean"
},
"Idempotency-Key": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"flowId",
"Idempotency-Key"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
trigger_cloud_flowUse this when the user wants to trigger an automated CloudFlow workflow by its flow ID. This executes automation that may modify cloud resources externally. Ask the user to confirm the flow ID and any parameters before executing. Do NOT use this for viewing CloudFlow definitions or checking available flows.Input schema{
"type": "object",
"properties": {
"flowID": {
"type": "string",
"description": "The ID of the CloudFlow flow to trigger"
},
"requestBodyJson": {
"type": "object",
"description": "Optional JSON object to pass as the request body to the flow if the flow requires it"
}
},
"required": [
"flowID"
]
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_alertUse this when the user wants to modify an existing cost alert. Supports partial updates. Ask the user to confirm changes before executing. Do NOT use this for creating new alerts (use create_alert) or budgets (use create_budget).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The ID of the alert to update (required)."
},
"config": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"type": "string",
"minLength": 1,
"description": "Metric type identifier (e.g., 'basic', 'custom', 'extended')."
},
"value": {
"type": "string",
"minLength": 1,
"description": "Metric value identifier (e.g., 'cost', 'usage', 'savings')."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "The metric to evaluate (required). Object with 'type' and 'value' fields."
},
"timeInterval": {
"type": "string",
"enum": [
"hour",
"day",
"week",
"month",
"quarter",
"year"
],
"description": "The time interval to evaluate the condition (required). Accepted values: hour, day, week, month, quarter, year."
},
"value": {
"type": "number",
"description": "The alert threshold value (required)."
},
"condition": {
"type": "string",
"description": "Condition type (e.g., 'value', 'forecasted', 'percentage')."
},
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code. Accepted values: USD, ILS, EUR, AUD, CAD, GBP, DKK, NOK, SEK, BRL, SGD, MXN, CHF, MYR, TWD, EGP, ZAR, JPY, IDR, AED, THB, COP."
},
"operator": {
"type": "string",
"enum": [
"gt",
"lt"
],
"description": "Comparison operator. Accepted values: gt, lt."
},
"evaluateForEach": {
"type": "string",
"description": "Add a dimension to break down the evaluation of the condition."
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The field to filter on."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "The dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"is",
"starts_with",
"ends_with",
"contains",
"regexp"
],
"description": "Filter mode. Accepted values: is, starts_with, ends_with, contains, regexp."
},
"inverse": {
"type": "boolean",
"description": "Set to true to exclude the values."
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to filter on."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"description": "Filters that define the scope of the alert."
},
"dataSource": {
"type": "string",
"description": "The data source for the alert (e.g., 'billing')."
}
},
"required": [
"metric",
"timeInterval",
"value"
],
"additionalProperties": false,
"description": "Parameters that define when and how the alert is evaluated (required)."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Alert name. Must be non-empty if provided."
},
"recipients": {
"type": "array",
"items": {
"type": "string",
"format": "email"
},
"description": "List of email addresses to notify when the alert is triggered."
}
},
"required": [
"id",
"config"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_allocationUse this when the user wants to modify an existing cost allocation. Ask the user to confirm changes before executing. Do NOT use this for creating new allocations (use create_allocation) or viewing allocations (use list_allocations).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of the allocation to update"
},
"name": {
"type": "string",
"description": "Human-readable name of the allocation"
},
"description": {
"type": "string",
"description": "Description of the allocation's purpose"
},
"rule": {
"type": "object",
"properties": {
"components": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Key of an existing dimension, label, or tag key"
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label"
],
"description": "The type of the component"
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to match against"
},
"inverse_selection": {
"type": "boolean",
"description": "If true, exclude matching values instead of including them"
},
"include_null": {
"type": "boolean",
"description": "If true, include resources with no value for this dimension"
},
"mode": {
"type": "string",
"enum": [
"is",
"contains",
"starts_with",
"ends_with"
],
"description": "The matching mode for values"
}
},
"required": [
"key",
"type",
"values",
"mode"
]
},
"description": "Array of allocation components that define this rule"
},
"formula": {
"type": "string",
"description": "Logical formula combining components (e.g., 'A AND B')"
}
},
"description": "A single allocation rule that defines one grouping. Provide this for a single-rule allocation. Mutually exclusive with 'rules'"
},
"rules": {
"type": "array",
"items": {
"type": "object",
"properties": {
"components": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"description": "Key of an existing dimension, label, or tag key"
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label"
],
"description": "The type of the component"
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to match against"
},
"inverse_selection": {
"type": "boolean",
"description": "If true, exclude matching values instead of including them"
},
"include_null": {
"type": "boolean",
"description": "If true, include resources with no value for this dimension"
},
"mode": {
"type": "string",
"enum": [
"is",
"contains",
"starts_with",
"ends_with"
],
"description": "The matching mode for values"
}
},
"required": [
"key",
"type",
"values",
"mode"
]
},
"description": "Array of allocation components that define this rule"
},
"formula": {
"type": "string",
"description": "Logical formula combining components (e.g., 'A AND B')"
},
"name": {
"type": "string",
"description": "Name of the rule"
},
"description": {
"type": "string",
"description": "Description of the rule"
},
"action": {
"type": "string",
"enum": [
"create",
"update",
"select"
],
"description": "Required action for this rule (e.g., 'create', 'update', 'select')"
},
"id": {
"type": "string",
"description": "Rule ID (for existing rules), required for 'update' and 'select' actions"
}
}
},
"description": "Ordered list of allocation rules for a group allocation. Must include at least two rules. Mutually exclusive with 'rule'"
},
"unallocatedCosts": {
"type": [
"string",
"null"
],
"description": "Custom label for values that do not fit into any allocation rule (required when using 'rules' for group allocations)"
}
},
"required": [
"id"
]
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_annotationUse this when the user wants to modify an existing annotation. Ask the user to confirm changes before executing. Do NOT use this for creating new annotations (use create_annotation) or labels (use update_label).Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the annotation to update (required)."
},
"content": {
"anyOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "null"
}
],
"description": "The content of the annotation. Set to null to clear. Must be non-empty if provided as a string."
},
"timestamp": {
"anyOf": [
{
"type": "string",
"minLength": 1,
"format": "date-time"
},
{
"type": "null"
}
],
"description": "The date associated with the annotation in ISO 8601 date-time format. Set to null to clear."
},
"reports": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "List of report IDs to associate with the annotation. Set to null to clear."
},
"labels": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "List of label IDs to associate with the annotation. Set to null to clear. Labels must already exist."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_aws_featureManage cloud provider connections and check feature availability for connected accounts. Updates an AWS feature for an existing CloudConnect account.
Unlike the CloudFormation variant, this endpoint does not update Firestore channel documents,
require a CloudFormation stack ID, or handle StackSet member role ARNs.Input schema{
"type": "object",
"properties": {
"accountID": {
"type": "string"
},
"s3Bucket": {
"type": "string",
"description": "S3 bucket name for CloudTrail real-time anomaly detection. Required together with s3BucketRegion."
},
"s3BucketRegion": {
"type": "string",
"description": "AWS region of the S3 bucket. Required together with s3Bucket."
},
"enabledFeatures": {
"type": "array",
"items": {
"type": "string"
},
"description": "Declares which supported AWS features the caller intends to enable. Values must match feature names configured in awsFeaturePermissions on app/cloud-connect. The value is persisted and returned in account responses. When \"real-time-data\" is included, s3Bucket and s3BucketRegion are required; when it is not included, s3Bucket and s3BucketRegion are not allowed."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"accountID",
"enabledFeatures"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_budgetUse this when the user wants to modify an existing budget. Supports partial updates. Ask the user to confirm the changes before executing. Do NOT use this for viewing budgets (use list_budgets) or creating new budgets (use create_budget).Input schema{
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"description": "Budget name. Must be non-empty if provided."
},
"amount": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Budget period amount."
},
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code. Accepted values: USD, ILS, EUR, AUD, CAD, GBP, DKK, NOK, SEK, BRL, SGD, MXN, CHF, MYR, TWD, EGP, ZAR, JPY, IDR, AED, THB, COP."
},
"type": {
"type": "string",
"enum": [
"fixed",
"recurring"
],
"description": "Budget type. Accepted values: fixed, recurring."
},
"timeInterval": {
"type": "string",
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"description": "Recurring budget interval. Accepted values: day, week, month, quarter, year."
},
"startPeriod": {
"type": "integer",
"description": "Budget start date as a UNIX timestamp in milliseconds."
},
"endPeriod": {
"type": "integer",
"description": "Fixed budget end date as a UNIX timestamp in milliseconds. Must not be set for recurring budgets."
},
"description": {
"type": "string",
"description": "Budget description."
},
"usePrevSpend": {
"type": "boolean",
"description": "Use the last period's spend as the target amount for recurring budgets. Defaults to false."
},
"growthPerPeriod": {
"type": "number",
"minimum": 0,
"description": "Periodical growth percentage in recurring budgets. Must be >= 0. Defaults to 0."
},
"metric": {
"type": "string",
"enum": [
"cost",
"amortized_cost"
],
"description": "Budget metric. Accepted values: cost, amortized_cost. Defaults to cost."
},
"public": {
"type": "string",
"enum": [
"owner",
"editor",
"viewer"
],
"description": "Public sharing access level. Accepted values: owner, editor, viewer."
},
"scopes": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The field to filter on."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "The dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"is",
"starts_with",
"ends_with",
"contains",
"regexp"
],
"description": "Filter mode. Accepted values: is, starts_with, ends_with, contains, regexp."
},
"inverse": {
"type": "boolean",
"description": "Set to true to exclude the values."
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to filter on."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"minItems": 1,
"description": "Filters that define the scope of the budget. Cannot be combined with scope."
},
"scope": {
"type": "array",
"items": {
"type": "string"
},
"minItems": 1,
"description": "List of allocations that define the budget scope (deprecated). Cannot be combined with scopes."
},
"collaborators": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "Email address of the collaborator."
},
"role": {
"type": "string",
"enum": [
"owner",
"editor",
"viewer"
],
"description": "Role of the collaborator. Accepted values: owner, editor, viewer."
}
},
"required": [
"email",
"role"
],
"additionalProperties": false
},
"minItems": 1,
"description": "List of permitted users to view/edit the budget. If provided, must include at least one collaborator with role 'owner'."
},
"alerts": {
"type": "array",
"items": {
"type": "object",
"properties": {
"percentage": {
"type": "number",
"description": "Alert threshold as a percentage of the budget amount."
}
},
"required": [
"percentage"
],
"additionalProperties": false
},
"maxItems": 3,
"description": "List of up to three alert thresholds defined as a percentage of the amount."
},
"recipients": {
"type": "array",
"items": {
"type": "string",
"format": "email"
},
"description": "List of email addresses to notify when reaching an alert threshold."
},
"recipientsSlackChannels": {
"type": "array",
"items": {
"type": "object",
"properties": {
"customerId": {
"type": "string",
"description": "Customer ID for the Slack channel."
},
"id": {
"type": "string",
"minLength": 1,
"description": "Slack channel ID (required)."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Slack channel name (required)."
},
"shared": {
"type": "boolean",
"description": "Whether the channel is shared."
},
"type": {
"type": "string",
"description": "Slack channel type."
},
"workspace": {
"type": "string",
"description": "Slack workspace identifier."
}
},
"required": [
"id",
"name"
],
"additionalProperties": false
},
"description": "List of Slack channels to notify when reaching an alert threshold."
},
"seasonalAmounts": {
"type": "array",
"items": {
"type": "number"
},
"description": "List of seasonal amounts for recurring budgets with different amounts per period."
},
"id": {
"type": "string",
"minLength": 1,
"description": "The ID of the budget to update (required)."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_cloudflow_connectionUse this when the user wants to update an existing CloudFlow cloud provider connection — rename it, change its description, enable/disable it, update its GCP/AWS configuration, or change collaborators. All fields except connectionId are optional; at most one of gcpConfig or awsConfig may be set per request. Ask the user to confirm the changes before executing. Do NOT use this to create a new connection (use create_cloudflow_connection) or to trigger a flow (use trigger_cloud_flow).Input schema{
"type": "object",
"properties": {
"connectionId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the CloudFlow connection to update (required)."
},
"name": {
"type": "string",
"minLength": 1,
"description": "New connection name."
},
"description": {
"type": "string",
"description": "New description for the connection."
},
"enabled": {
"type": "boolean",
"description": "Set to false to disable the connection, true to re-enable it."
},
"gcpConfig": {
"type": "object",
"properties": {
"organizationId": {
"type": "string",
"description": "The GCP organization ID."
},
"folderId": {
"type": "string",
"description": "The GCP folder ID."
},
"projectId": {
"type": "string",
"description": "The GCP project ID."
},
"level": {
"type": "string",
"enum": [
"organization",
"folder",
"project"
],
"description": "The scope level of the GCP connection."
},
"serviceAccountName": {
"type": "string",
"description": "The service account used for the connection."
},
"predefinedRoles": {
"type": "array",
"items": {
"type": "string"
},
"description": "Predefined GCP roles to grant."
},
"customRole": {
"type": "object",
"properties": {
"roleId": {
"type": "string",
"description": "The ID of the custom role."
},
"permissions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The list of permissions granted by the custom role."
}
},
"additionalProperties": false,
"description": "A custom role definition."
},
"infraManagerProject": {
"type": "string",
"description": "The Infrastructure Manager project."
},
"infraManagerLocation": {
"type": "string",
"description": "The Infrastructure Manager location."
},
"infraManagerServiceAccount": {
"type": "string",
"description": "The Infrastructure Manager service account."
}
},
"additionalProperties": false,
"description": "Updated GCP configuration. At most one of gcpConfig or awsConfig may be set per request."
},
"awsConfig": {
"type": "object",
"properties": {
"context": {
"type": "array",
"items": {
"type": "object",
"properties": {
"accountId": {
"type": "string",
"description": "The AWS account ID."
},
"regions": {
"type": "array",
"items": {
"type": "string"
},
"description": "The AWS regions in scope for this account."
}
},
"additionalProperties": false
},
"description": "Per-account AWS context (account ID and regions)."
},
"roleName": {
"type": "string",
"description": "The AWS role name to assume."
},
"permissions": {
"type": "object",
"additionalProperties": {},
"description": "The permissions map for the AWS connection."
},
"managementAccount": {
"type": "string",
"description": "The AWS management (payer) account ID."
},
"organizationRootId": {
"type": "string",
"description": "The AWS organization root ID."
},
"scopeTargetedOrganizationalUnitIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Organizational unit IDs to include in scope."
},
"scopeExplicitAccountIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Account IDs explicitly included in scope."
},
"scopeExcludedAccountIds": {
"type": "array",
"items": {
"type": "string"
},
"description": "Account IDs excluded from scope."
},
"scopeManagementAccountExplicitInScope": {
"type": "boolean",
"description": "Whether the management account is explicitly in scope."
}
},
"additionalProperties": false,
"description": "Updated AWS configuration. At most one of gcpConfig or awsConfig may be set per request."
},
"collaborators": {
"type": "array",
"items": {
"type": "object",
"properties": {
"email": {
"type": "string",
"format": "email",
"description": "The collaborator's email address."
},
"role": {
"type": "string",
"enum": [
"owner",
"editor",
"user"
],
"description": "The collaborator's role on the connection."
}
},
"additionalProperties": false
},
"description": "Updated list of collaborators and their roles on the connection."
}
},
"required": [
"connectionId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_customerRead and update your organization's general settings. Partially updates the general settings and contact info of the customer identified by `{customerId}`. `{customerId}` must match the customer resolved from the bearer token; a token scoped to a different customer gets `403`, even if that customer would otherwise be reachable through a reseller/MTS relationship. Requires the `Settings` permission and DoiT API access (`platform:externalApi`); updating `allowedInviteDomains` additionally requires the `UsersManager` permission.
The request body must use `application/merge-patch+json` (RFC 7396): an omitted field leaves the current value unchanged, and an explicit `null` also leaves it unchanged, except for `urlSlug`, where an explicit empty string removes the customer's active URL slug rather than leaving it unchanged.
Fields are nested exactly as `getCustomer` returns them - `currency` and `allowedInviteDomains` under `settings`, `emails` under `contact` - so every value is read and written at the same path. `settings.currency` accepts only the codes listed in the schema and cannot be cleared; `allowedInviteDomains` and `contact.emails` are cleared with an empty array.Input schema{
"type": "object",
"properties": {
"customerId": {
"type": "string"
},
"urlSlug": {
"type": "string",
"description": "The customer's URL display name. An explicit empty string removes the active slug; a non-empty value must be 3-12 characters of lowercase letters, digits, or dashes, starting and ending with a letter or digit, and must be unique across all customers."
},
"settings": {
"type": "object",
"properties": {
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code for monetary values."
},
"allowedInviteDomains": {
"type": "array",
"items": {
"type": "string"
},
"description": "Email domains allowed to self-invite into the customer. Updating this field requires the `UsersManager` permission in addition to `Settings`. An empty array clears the list."
},
"mfaRequired": {
"type": "boolean",
"description": "Whether users of this customer are required to enroll in multi-factor authentication. A missing value is treated as `true`. Disabling this does not remove MFA enrollments existing users already have."
}
},
"additionalProperties": false,
"description": "Customer settings. Shared by the `getCustomer` response and the `updateCustomer` request body so a value is always read and written at the same path.\n\n`currency` accepts only the listed codes; any other value is rejected with `400`. Unlike `urlSlug` and `allowedInviteDomains` it cannot be cleared - no value unsets it."
},
"contact": {
"type": "object",
"properties": {
"emails": {
"type": "array",
"items": {
"type": "string"
},
"description": "Point-of-contact email addresses for the customer."
}
},
"additionalProperties": false,
"description": "Customer point-of-contact details. Shared by the `getCustomer` response and the `updateCustomer` request body so a value is always read and written at the same path."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"customerId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_customer_geographic_access_scopeManage country-based access to tenants in your customer hierarchy. Atomically replaces the geographic scope for a target customer. The authenticated tenant must be the hierarchy root, and the target must be that root customer or one of its child customers. Repeating an identical request is idempotent. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"targetCustomerId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"targetCustomerId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_datahub_datasetUse this when the user wants to modify an existing DataHub dataset's description. The dataset name is required to identify the dataset; only the description can be changed. Ask the user to confirm the changes before executing. Do NOT use this for creating datasets (use create_datahub_dataset) or listing datasets (use list_datahub_datasets).Input schema{
"type": "object",
"properties": {
"name": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The name of the dataset to update (required). Used for identification; the name cannot be changed."
},
"description": {
"type": "string",
"description": "The new description for the dataset. At least one updatable field (description) must be provided."
}
},
"required": [
"name"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_folderUse this when the user wants to rename, re-describe, or move (reparent) an existing Cloud Analytics folder. Ask the user to confirm changes before executing. Note: if a sibling folder at the target parent already has the same name, the folder will be auto-renamed by the API. Do NOT use this for creating new folders (use create_folder) or updating reports (use update_report).Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the folder to update (required)."
},
"name": {
"type": "string",
"minLength": 1,
"description": "New name for the folder."
},
"description": {
"type": [
"string",
"null"
],
"description": "New description for the folder. Set to null to clear."
},
"parentFolderId": {
"type": "string",
"description": "The ID of the new parent folder, or \"root\" to move to the top level."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_geographic_access_custom_regionManage country-based access to tenants in your customer hierarchy. Updates the name, country membership, or both for a custom region owned by the authenticated tenant. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"customRegionId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"countryCodes": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}$"
}
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"customRegionId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_insight_statusUse this when the user wants to change the display status of an existing insight (e.g. mark it acknowledged, in progress, optimized, or dismissed). Only insights owned by the 'public-api' source can be managed. When dismissing, an optional reason and comment can be supplied. Do NOT use this to edit an insight's title/description or create one (use post_insight_result).Input schema{
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"public-api"
],
"default": "public-api",
"description": "The source that owns the insight. Only 'public-api' insights can be managed via this endpoint."
},
"key": {
"type": "string",
"description": "The unique key identifying the insight to update."
},
"status": {
"type": "string",
"enum": [
"actionable",
"acknowledged",
"optimized",
"dismissed",
"in progress",
"upgrade needed",
"permissions needed"
],
"description": "The new display status of the insight. Possible values: actionable, acknowledged, optimized, dismissed, in progress, upgrade needed, permissions needed."
},
"dismissalDetails": {
"type": "object",
"properties": {
"reason": {
"type": "string",
"enum": [
"not relevant",
"not enough information",
"not worth the effort",
"inaccurate optimization opportunities"
],
"description": "The reason the insight was dismissed."
},
"comment": {
"type": "string",
"description": "An optional free-text comment providing additional context."
}
},
"additionalProperties": false,
"description": "Details for why the insight was dismissed (only relevant when status is 'dismissed')."
}
},
"required": [
"key",
"status"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
update_labelUse this when the user wants to modify an existing label. Supports partial updates. Ask the user to confirm changes before executing. Do NOT use this for creating new labels (use create_label) or annotations (use update_annotation).Input schema{
"type": "object",
"properties": {
"name": {
"anyOf": [
{
"anyOf": [
{
"not": {}
},
{
"type": "string",
"minLength": 1,
"description": "The name of the label (required, non-empty)."
}
],
"description": "The name of the label (required, non-empty)."
},
{
"type": "null"
}
],
"description": "The name of the label. Must be non-empty if provided, or null to clear."
},
"color": {
"anyOf": [
{
"anyOf": [
{
"not": {}
},
{
"type": "string",
"enum": [
"blue",
"skyBlue",
"teal",
"mint",
"lime",
"softYellow",
"apricot",
"lavender",
"purple",
"rosePink",
"slateGrey"
],
"description": "The color of the label (required). Accepted values: blue, skyBlue, teal, mint, lime, softYellow, apricot, lavender, purple, rosePink, slateGrey."
}
],
"description": "The color of the label (required). Accepted values: blue, skyBlue, teal, mint, lime, softYellow, apricot, lavender, purple, rosePink, slateGrey."
},
{
"type": "null"
}
],
"description": "The color of the label. Accepted values: blue, skyBlue, teal, mint, lime, softYellow, apricot, lavender, purple, rosePink, slateGrey, or null to clear."
},
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the label to update (required)."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_reportUse this when the user wants to modify an existing saved Cloud Analytics report. Supports partial updates. Ask the user to confirm changes before executing. Do NOT use this for running ad-hoc queries (use run_query).Input schema{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"description": "The ID of the report to update (required)."
},
"name": {
"type": "string",
"minLength": 1,
"description": "Report name."
},
"description": {
"type": "string",
"description": "Report description."
},
"labels": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of label IDs to assign to the report."
},
"config": {
"type": "object",
"properties": {
"dataSource": {
"type": "string",
"enum": [
"billing",
"bqlens",
"billing-datahub",
"kubernetes-utilization"
],
"description": "Data source for the report. Accepted values: billing, bqlens, billing-datahub, kubernetes-utilization."
},
"metrics": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"basic",
"custom",
"extended"
],
"description": "Metric type. Accepted values: basic, custom, extended."
},
"value": {
"type": "string",
"description": "For basic metrics: 'cost', 'usage', or 'savings'. For extended metrics: e.g. 'amortized_cost'. For custom metrics: the custom metric ID."
}
},
"required": [
"type",
"value"
],
"additionalProperties": false
},
"maxItems": 4,
"description": "List of metrics to apply (max 4). Preferred over the deprecated 'metric' field."
},
"metric": {
"$ref": "#/properties/config/properties/metrics/items",
"description": "Deprecated: use 'metrics' instead."
},
"metricFilter": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"$ref": "#/properties/config/properties/metrics/items/properties/type"
},
"value": {
"$ref": "#/properties/config/properties/metrics/items/properties/value"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "The metric to filter on."
},
"operator": {
"type": "string",
"enum": [
"gt",
"lt",
"lte",
"gte",
"b",
"nb",
"e",
"ne"
],
"description": "Comparison operator. Accepted values: gt, lt, lte, gte, b, nb, e, ne. gt (>), lt (<), lte (<=), gte (>=), b (between), nb (not between), e (equals), ne (not equals)."
},
"values": {
"type": "array",
"items": {
"type": "number"
},
"description": "Values to compare against."
}
},
"required": [
"metric",
"operator",
"values"
],
"additionalProperties": false,
"description": "Filter to limit report rows by metric value."
},
"aggregation": {
"type": "string",
"enum": [
"total",
"percent_total",
"percent_col",
"percent_row"
],
"description": "How to aggregate data values. Accepted values: total, percent_total, percent_col, percent_row."
},
"advancedAnalysis": {
"type": "object",
"properties": {
"forecast": {
"type": "boolean",
"description": "Include a cost forecast."
},
"notTrending": {
"type": "boolean",
"description": "Highlight rows that are not trending."
},
"trendingDown": {
"type": "boolean",
"description": "Highlight rows trending down."
},
"trendingUp": {
"type": "boolean",
"description": "Highlight rows trending up."
}
},
"additionalProperties": false,
"description": "Advanced analysis options."
},
"timeInterval": {
"type": "string",
"enum": [
"hour",
"day",
"dayCumSum",
"week",
"isoweek",
"month",
"quarter",
"year",
"week_day"
],
"description": "Time interval for grouping data. Accepted values: hour, day, dayCumSum, week, isoweek, month, quarter, year, week_day."
},
"dimensions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dimension identifier. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Dimensions to break down data by (columns in table view)."
},
"timeRange": {
"type": "object",
"properties": {
"mode": {
"type": "string",
"enum": [
"last",
"current",
"custom"
],
"description": "Time range mode. Accepted values: last, current, custom. Use 'custom' with customTimeRange for specific dates."
},
"amount": {
"type": "integer",
"minimum": 0,
"maximum": 5000,
"description": "Number of time units (0–5000). Required when mode is 'last'."
},
"unit": {
"type": "string",
"enum": [
"day",
"week",
"month",
"quarter",
"year"
],
"description": "Time unit. Accepted values: day, week, month, quarter, year. Required when mode is 'last'."
},
"includeCurrent": {
"type": "boolean",
"description": "Whether to include the current (in-progress) period."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date in RFC3339 format."
},
"to": {
"type": "string",
"description": "End date in RFC3339 format."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom date range. Required when mode is 'custom'."
}
},
"required": [
"mode"
],
"additionalProperties": false,
"description": "Time range for the report. Preferred over customTimeRange."
},
"secondaryTimeRange": {
"type": "object",
"properties": {
"amount": {
"type": "integer",
"minimum": 0,
"description": "Number of periods to shift back (non-negative)."
},
"unit": {
"type": "string",
"enum": [
"day",
"month",
"quarter",
"year"
],
"description": "Time unit for shifting. Accepted values: day, month, quarter, year."
},
"includeCurrent": {
"type": "boolean",
"description": "When true, selects complete previous periods (e.g. full previous year). When false, shifts dates by amount."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start date in RFC3339 format."
},
"to": {
"type": "string",
"description": "End date in RFC3339 format."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom date range for the secondary time range."
}
},
"additionalProperties": false,
"description": "Secondary time range for comparative reports."
},
"customTimeRange": {
"type": "object",
"properties": {
"from": {
"type": "string",
"description": "Start timestamp in RFC3339 format. Example: '2024-03-10T23:00:00Z'."
},
"to": {
"type": "string",
"description": "End timestamp in RFC3339 format. Example: '2024-03-12T23:00:00Z'."
}
},
"required": [
"from",
"to"
],
"additionalProperties": false,
"description": "Custom time range. Only use when timeRange mode is 'custom'."
},
"includePromotionalCredits": {
"type": "boolean",
"description": "Include promotional credits. Requires timeInterval of 'month', 'quarter', or 'year'."
},
"includeSubtotals": {
"type": "boolean",
"description": "Include subgroup totals. No effect when reading via API. Defaults to false."
},
"filters": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The field to filter on. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type of the filter field. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"is",
"starts_with",
"ends_with",
"contains",
"regexp"
],
"description": "Filter match mode. Accepted values: is, starts_with, ends_with, contains, regexp."
},
"inverse": {
"type": "boolean",
"description": "Set to true to exclude the matched values (negation)."
},
"values": {
"type": "array",
"items": {
"type": "string"
},
"description": "Values to filter on."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"description": "Filters to apply to the report."
},
"group": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Dimension ID for the group-by row. Use the dimension tool to get valid IDs."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Dimension type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"limit": {
"type": "object",
"properties": {
"metric": {
"type": "object",
"properties": {
"type": {
"$ref": "#/properties/config/properties/metrics/items/properties/type"
},
"value": {
"$ref": "#/properties/config/properties/metrics/items/properties/value"
}
},
"required": [
"type",
"value"
],
"additionalProperties": false,
"description": "Metric used for ranking."
},
"sort": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for the limit ranking. Accepted values: asc, desc, a_to_z."
},
"value": {
"type": "integer",
"description": "Number of items to show."
}
},
"required": [
"metric",
"sort",
"value"
],
"additionalProperties": false,
"description": "Limit to top/bottom N results."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Dimensions that define rows in the report (group-by)."
},
"layout": {
"type": "string",
"enum": [
"column_chart",
"stacked_column_chart",
"bar_chart",
"stacked_bar_chart",
"line_chart",
"spline_chart",
"area_chart",
"area_spline_chart",
"stacked_area_chart",
"treemap_chart",
"table",
"table_heatmap",
"table_row_heatmap",
"table_col_heatmap",
"csv_export",
"sheets_export"
],
"description": "Report layout / visualization type. Accepted values: column_chart, stacked_column_chart, bar_chart, stacked_bar_chart, line_chart, spline_chart, area_chart, area_spline_chart, stacked_area_chart, treemap_chart, table, table_heatmap, table_row_heatmap, table_col_heatmap, csv_export, sheets_export."
},
"displayValues": {
"type": "string",
"enum": [
"actuals_only",
"absolute_change",
"percentage_change",
"absolute_and_percentage"
],
"description": "How to display values in comparative reports. Accepted values: actuals_only, absolute_change, percentage_change, absolute_and_percentage."
},
"currency": {
"type": "string",
"enum": [
"USD",
"ILS",
"EUR",
"AUD",
"CAD",
"GBP",
"DKK",
"NOK",
"SEK",
"BRL",
"SGD",
"MXN",
"CHF",
"MYR",
"TWD",
"EGP",
"ZAR",
"JPY",
"IDR",
"AED",
"THB",
"COP"
],
"description": "Currency code for monetary values. Accepted values: USD, ILS, EUR, AUD, CAD, GBP, DKK, NOK, SEK, BRL, SGD, MXN, CHF, MYR, TWD, EGP, ZAR, JPY, IDR, AED, THB, COP."
},
"sortGroups": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for groups. Accepted values: asc, desc, a_to_z. Defaults to 'asc'. No effect when reading via API."
},
"sortDimensions": {
"type": "string",
"enum": [
"asc",
"desc",
"a_to_z"
],
"description": "Sort order for dimensions. Accepted values: asc, desc, a_to_z. Defaults to 'desc'. No effect when reading via API."
},
"splits": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "ID of the field to split."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Type of the split. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label."
},
"mode": {
"type": "string",
"enum": [
"even",
"custom",
"proportional"
],
"description": "Split mode. Accepted values: even, custom, proportional."
},
"includeOrigin": {
"type": "boolean",
"description": "Whether to include the origin in the split results."
},
"origin": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Origin ID."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"gke",
"gke_label",
"unallocated"
],
"description": "Origin type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, gke, gke_label, unallocated."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false,
"description": "Origin info for cost splitting."
},
"targets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "Target ID."
},
"type": {
"type": "string",
"enum": [
"datetime",
"fixed",
"optional",
"label",
"tag",
"project_label",
"system_label",
"attribution",
"attribution_group",
"allocation",
"allocation_rule",
"gke",
"gke_label"
],
"description": "Target type. Accepted values: datetime, fixed, optional, label, tag, project_label, system_label, attribution, attribution_group, allocation, allocation_rule, gke, gke_label. Must match the split type unless split type is 'attribution_group', in which case target type must be 'attribution'."
},
"value": {
"type": "number",
"description": "Percent as float (e.g. 0.3 for 30%). Required only when split mode is 'custom'."
}
},
"required": [
"id",
"type"
],
"additionalProperties": false
},
"description": "Targets for the split."
}
},
"required": [
"id",
"type",
"mode"
],
"additionalProperties": false
},
"description": "Cost splits to apply to the report."
}
},
"additionalProperties": false,
"description": "Configuration for the report. Only specified fields will be updated. Use the dimension tool to look up valid dimension IDs."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_resource_permissionsUse this when the user wants to change who a Cloud Analytics resource is shared with or update access levels. Updates the sharing settings (per-user roles and/or public visibility) for a specific alert, budget, report, or allocation. Requires resourceType and resourceId; at least one of permissions or public should be provided. Do NOT use this to view current permissions (use get_resource_permissions).Input schema{
"type": "object",
"properties": {
"resourceType": {
"type": "string",
"enum": [
"alerts",
"budgets",
"reports",
"allocations"
],
"description": "The type of resource to update sharing settings for. One of: alerts, budgets, reports, allocations."
},
"resourceId": {
"type": "string",
"description": "The ID of the resource (alert, budget, report, or allocation) to update permissions for."
},
"permissions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"user": {
"type": "string",
"description": "Email address of the user."
},
"role": {
"type": "string",
"enum": [
"owner",
"editor",
"viewer"
],
"description": "Role to grant: owner, editor, or viewer."
}
},
"required": [
"user",
"role"
]
},
"description": "List of per-user permission entries to set. Each entry has a user (email) and a role (owner, editor, or viewer)."
},
"public": {
"type": [
"string",
"null"
],
"enum": [
"editor",
"viewer",
null
],
"description": "Public visibility level. Set to 'editor' or 'viewer' to share with all users, or null to make private."
}
},
"required": [
"resourceType",
"resourceId"
]
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_themeUse this when the user wants to modify an existing custom color theme — rename it, change its primary color, or update its color palette. Accepts either the theme ID or a partial name match. Ask the user to confirm changes before executing. Do NOT use this for creating a new theme or changing which theme is active (use set_active_theme).Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the theme to update."
},
"name": {
"type": "string",
"description": "Partial name match (case-insensitive) used to find the theme when ID is unknown."
},
"newName": {
"type": "string",
"minLength": 1,
"description": "New display name for the theme."
},
"primaryColor": {
"type": "string",
"description": "New primary hex color for the theme (e.g. #1A73E8)."
},
"colors": {
"type": "object",
"properties": {
"light": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of hex color values for light mode."
},
"dark": {
"type": "array",
"items": {
"type": "string"
},
"description": "Array of hex color values for dark mode."
}
},
"required": [
"light",
"dark"
],
"additionalProperties": false,
"description": "New color palette for the theme. Provide both light and dark arrays."
}
},
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_ticketCreate and manage support tickets with DoiT. Partially updates a support request. Supports setting the request
`status` and/or `assignee`. DoiT employees may set any of `open`,
`pending`, `hold`, or `solved` and may set the `assignee`; customers may
set only `solved` (parity with the console "mark as resolved" action)
and may not set an assignee. `closed` is not settable via the API
(Zendesk auto-closes from `solved`). The `assignee` is a DoiT-employee
email, resolved server-side to a Zendesk agent; an email that does not
resolve to an active agent returns `400`. At least one mutable field
must be present. The response echoes the fields that were applied.Input schema{
"type": "object",
"properties": {
"ticketId": {
"type": "number"
},
"status": {
"type": "string",
"enum": [
"open",
"pending",
"hold",
"solved"
],
"description": "The status to set on the request."
},
"assignee": {
"type": "string",
"description": "Email of the DoiT employee to assign the request to,\nresolved to a Zendesk agent. DoiT employees only."
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"ticketId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_userUse this when the user wants to update a user's information such as name, job function, phone, language, or role. Ask the user to confirm the changes before executing. Do NOT use this for inviting new users (use invite_user) or listing users (use list_users).Input schema{
"type": "object",
"properties": {
"id": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The unique ID of the user to update."
},
"firstName": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The user's first name."
},
"lastName": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The user's last name."
},
"jobFunction": {
"type": "string",
"enum": [
"Data Engineer / Data Analysts",
"Executive Team",
"Finance / Accounting",
"Founder",
"Legal / Purchasing",
"Management",
"Sales / Marketing",
"Software / Ops Engineer"
],
"description": "The user's job function. Accepted values: Data Engineer / Data Analysts, Executive Team, Finance / Accounting, Founder, Legal / Purchasing, Management, Sales / Marketing, Software / Ops Engineer."
},
"phone": {
"type": "string",
"description": "The user's phone number including country calling code (e.g. +14155551234, +447911123456). Must start with a valid country calling code such as +1, +44, or +91."
},
"phoneExtension": {
"type": "string",
"pattern": "^[0-9]{1,15}$",
"description": "The user's phone extension. Digits only, up to 15 characters."
},
"language": {
"type": "string",
"enum": [
"en",
"ja",
"es"
],
"description": "The user's preferred language. Accepted values: en, ja, es."
},
"roleId": {
"allOf": [
{
"type": "string"
},
{
"type": "string",
"minLength": 1
}
],
"description": "The ID of the role to assign to the user."
}
},
"required": [
"id"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
update_user_geographic_access_scopeManage country-based access to tenants in your customer hierarchy. Atomically replaces the geographic scope assigned to a user who belongs to the target customer. The authenticated tenant must be the hierarchy root, and the target must be that root customer or one of its child customers. Repeating an identical request is idempotent. Requires the UsersManager permission.Input schema{
"type": "object",
"properties": {
"targetCustomerId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"userId": {
"type": "string",
"minLength": 1,
"maxLength": 200
},
"X-Tenant-Id": {
"type": "string"
},
"customerContext": {
"type": "string",
"description": "Scope the request to a specific customer by ID. Required for DoiT employees (whose token isn't tied to a single customer); omit for direct customer users."
}
},
"required": [
"targetCustomerId",
"userId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Annotations{
"readOnlyHint": false,
"destructiveHint": true,
"openWorldHint": true
} | — | — |
validate_userUse this ONLY when the user explicitly asks to verify their account connection or check who they are logged in as. Do NOT call this proactively before other tool calls — the OAuth token already guarantees the user is authenticated. Do NOT use this for listing users in the organization (use list_users).Input schema{
"type": "object",
"properties": {}
}Annotations{
"readOnlyHint": true,
"destructiveHint": false,
"openWorldHint": true
} | — | — |
Runtime contracts for authoring, repairing and verifying CloudFlow flows.
{
"resource_key": "doit://docs/cloudflow-authoring",
"uri": "doit://docs/cloudflow-authoring",
"name": "CloudFlow authoring guide",
"description": "Runtime contracts for authoring, repairing and verifying CloudFlow flows.",
"mime_type": "text/markdown",
"annotations": null,
"metadata_hash": "aa564fcc9cd772d08ca1b53b2734d643fc33c999d173bbe958095bd681e04af7"
}Get a high-level overview dashboard of your entire cloud infrastructure
{
"prompt_key": "cloud_overview",
"name": "cloud_overview",
"description": "Get a high-level overview dashboard of your entire cloud infrastructure",
"arguments": [],
"metadata_hash": "103c40c4672ac0ce8d2aaf0414b98a29a929713865a25b93d8d938b49353a806"
}List recent DoiT expert inquiries, optionally filtered locally by specified criteria
{
"prompt_key": "expert_inquiries",
"name": "expert_inquiries",
"description": "List recent DoiT expert inquiries, optionally filtered locally by specified criteria",
"arguments": [
{
"name": "status",
"description": "Optional, status (open, new, pending, hold, closed, solved)"
},
{
"name": "platform",
"description": "Optional, related platform"
},
{
"name": "product",
"description": "Optional, related product"
},
{
"name": "limit",
"description": "Optional, number of items"
}
],
"metadata_hash": "4e1915079f2712f8dc257b39c08b2aceedddc706798b5f76c35ba5731eb0dc34"
}Filter fields explanation for GCP and AWS resources
{
"prompt_key": "filter_fields_reference",
"name": "filter_fields_reference",
"description": "Filter fields explanation for GCP and AWS resources",
"arguments": [],
"metadata_hash": "cafdcfd7793c25fffbf4cce10bece88ff90ef250f0c10f7eebf10c9c6df0076e"
}Template for generating cost reports
{
"prompt_key": "generate_report_command",
"name": "generate_report_command",
"description": "Template for generating cost reports",
"arguments": [],
"metadata_hash": "18ade74e3bd0b6fb3a0c07e590dafdf63df42d2dfb30e608854f3760c9ca8467"
}Search DoiT expert inquiries by keyword, optionally filtered by platform and product
{
"prompt_key": "search_expert_inquiries",
"name": "search_expert_inquiries",
"description": "Search DoiT expert inquiries by keyword, optionally filtered by platform and product",
"arguments": [
{
"name": "keyword",
"description": "Keyword to search for in ticket subject and body",
"required": true
},
{
"name": "platform",
"description": "Optional, filter matches by related platform"
},
{
"name": "product",
"description": "Optional, filter matches by related product"
}
],
"metadata_hash": "f7d371b73a4d333e0128dd92b4448cd43eb5dcc3cf0ab8d369d8592bbcd4b615"
}Trigger a flow defined in CloudFlow by its flow ID, optionally passing a JSON payload as the request body if the flow requires it
{
"prompt_key": "trigger_cloudflow_flow",
"name": "trigger_cloudflow_flow",
"description": "Trigger a flow defined in CloudFlow by its flow ID, optionally passing a JSON payload as the request body if the flow requires it",
"arguments": [
{
"name": "flowID",
"description": "The ID of the flow to trigger"
},
{
"name": "requestBodyJson",
"description": "The request body JSON to pass to the flow"
}
],
"metadata_hash": "ab90c5b6205b0983ef2a5256528e75e07cb80ff34e48f606eb83492c92de8b57"
}No completed comparison is available.
| Risk | Change | Subject |
|---|---|---|
| No material changes recorded. | ||
| Severity | Finding | Advisory |
|---|---|---|
| No confirmed vulnerability is published for this version. | ||
Artifact SHA-256: eaf4ced16c9b312027d7ea302ac5bb48d3ab15907d0861866854081bf2679943
Scanner: mcp-proof-engine 0.1.0.