メインコンテンツへスキップ

get-gcp-recommendation

dci get-gcp-recommendation <billingAccountId> <gcp_service> [flags]

Returns the recommendation for one product line (gcp_service) and region scope on the GCP billing account, including analysis metrics and time-bucketed eligible spend. Use granularity to choose the eligible-spend bucket size (defaults to day).

region is an optional query param, defaulting to global. In v1 the only supported values are gcp_service=compute and region=global. When no stored recommendation matches the scope, recommendation is omitted and estimatedEquivalentRecommendedCommitment is 0.

  • billingAccountId — GCP Billing Account ID (format XXXXXX-XXXXXX-XXXXXX; the account that owns the CUDs) that scopes the request.
  • gcp_service — PS4C product line to fetch the recommendation for.

Flags

FlagTypeDefaultExampleDescription
--regionstringFilter GCP planned purchases by region scope. Requires gcp_service; when omitted together with gcp_service, all available regions for all available product lines are returned. A request with region but no gcp_service returns 400 with code gcp_service_required. One of: "global".
--granularitystring"day"Time bucket size for eligible-spend data points on the recommendation response. If omitted, defaults to day. Coarser buckets return min/max/median usage; hour returns per-hour totals. One of: "hour", "day", "week", "month".

Every command also accepts the CLI-wide flags for output shaping — see Output formats and Table output options.

Output

Recommendation detail with eligible-spend usage series.

By default dci renders the result as a table. Use --output json to get the full structure described below — see Output formats.

FieldTypeDescription
estimatedEquivalentRecommendedCommitmentnumber (double)Shelf-price hourly equivalent ($/h) of the recommended commitment, derived from the median hourly eligible usage over the trailing window multiplied by estimatedAverageCoverage. Use this to compare the recommendation line to eligible usage on charts.
recommendationobjectRecommended commitment metrics for the requested (service, region) scope.
recommendation.policystringCoverage target policy currently configured for this commitment type (display name). One of: "Conservative", "Balanced (Recommended)", "Max Savings".
recommendation.regionstringRegion scope for this recommendation. v1 supports global only. One of: "global".
recommendation.servicestringPS4C product line (gcp_service) this recommendation belongs to. One of: "compute".
recommendation.currentCommitmentnumber (double)Active hourly commitment ($/h) currently applied to this billing account and product line, including commitments already purchased.
recommendation.recommendedCommitmentnumber (double)Recommended total hourly commitment ($/h) based on usage patterns and your commitment policy. Designed to increase savings while managing underutilization risk.
recommendation.potentialAdditionalSavingsnumber (double)Estimated additional monthly savings ($/month) from applying the recommended commitment relative to currentCommitment.
recommendation.estimatedAverageCoveragenumber (double)Estimated average coverage (0–1) of eligible spend if the recommended commitment were in place.
eligibleUsagearray of objectEligible spend over time at the requested granularity. Empty when no eligible usage exists in the trailing window.
eligibleUsage[].usageTimestring (date-time)Start of the time bucket for this data point (UTC).
eligibleUsage[].totalUsagenumber (double)Total eligible usage in the bucket when granularity is hour. Prefer min/max/median for coarser granularities.
eligibleUsage[].minUsagenumber (double)Minimum eligible usage ($/h) observed in the bucket (day/week/month views).
eligibleUsage[].maxUsagenumber (double)Maximum eligible usage ($/h) observed in the bucket (day/week/month views).
eligibleUsage[].medianUsagenumber (double)Median eligible usage ($/h) observed in the bucket (day/week/month views).
Raw JSON schema
{
"type": "object",
"description": "A single GCP recommendation paired with its eligible-spend usage series.",
"properties": {
"estimatedEquivalentRecommendedCommitment": {
"type": "number",
"format": "double",
"description": "Shelf-price hourly equivalent ($/h) of the recommended commitment, derived from the median hourly eligible usage over the trailing window multiplied by `estimatedAverageCoverage`. Use this to compare the recommendation line to eligible usage on charts."
},
"recommendation": {
"allOf": [
{
"type": "object",
"description": "A CUD purchase recommendation for a (service, region) scope.",
"properties": {
"policy": {
"type": "string",
"enum": [
"Conservative",
"Balanced (Recommended)",
"Max Savings"
],
"description": "Coverage target policy currently configured for this commitment type (display name).",
"x-enumDescriptions": {
"Conservative": "Lower coverage target; favors stable usage and lower underutilization risk.",
"Balanced (Recommended)": "Moderate coverage target; default balance of savings and buffer.",
"Max Savings": "Aggressive coverage target; highest savings potential with a smaller buffer."
}
},
"region": {
"type": "string",
"enum": [
"global"
],
"description": "Region scope for this recommendation. v1 supports `global` only."
},
"service": {
"type": "string",
"enum": [
"compute"
],
"description": "PS4C product line (`gcp_service`) this recommendation belongs to."
},
"currentCommitment": {
"type": "number",
"format": "double",
"description": "Active hourly commitment ($/h) currently applied to this billing account and product line, including commitments already purchased."
},
"recommendedCommitment": {
"type": "number",
"format": "double",
"description": "Recommended total hourly commitment ($/h) based on usage patterns and your commitment policy. Designed to increase savings while managing underutilization risk."
},
"potentialAdditionalSavings": {
"type": "number",
"format": "double",
"description": "Estimated additional monthly savings ($/month) from applying the recommended commitment relative to `currentCommitment`."
},
"estimatedAverageCoverage": {
"type": "number",
"format": "double",
"description": "Estimated average coverage (0–1) of eligible spend if the recommended commitment were in place."
}
}
}
],
"description": "Recommended commitment metrics for the requested (service, region) scope."
},
"eligibleUsage": {
"type": "array",
"description": "Eligible spend over time at the requested `granularity`. Empty when no eligible usage exists in the trailing window.",
"items": {
"type": "object",
"description": "One time-bucketed eligible-spend usage point for the recommendation chart. Units are shelf-price hourly dollars ($/h) unless noted by the client visualization.",
"properties": {
"usageTime": {
"type": "string",
"format": "date-time",
"description": "Start of the time bucket for this data point (UTC).",
"nullable": true
},
"totalUsage": {
"type": "number",
"format": "double",
"description": "Total eligible usage in the bucket when granularity is `hour`. Prefer min/max/median for coarser granularities."
},
"minUsage": {
"type": "number",
"format": "double",
"description": "Minimum eligible usage ($/h) observed in the bucket (day/week/month views)."
},
"maxUsage": {
"type": "number",
"format": "double",
"description": "Maximum eligible usage ($/h) observed in the bucket (day/week/month views)."
},
"medianUsage": {
"type": "number",
"format": "double",
"description": "Median eligible usage ($/h) observed in the bucket (day/week/month views)."
}
}
}
}
}
}

Errors

On failure, dci prints a single error message — with a hint when one is available — and exits with a typed code your scripts can branch on. See Errors and exit codes for the full contract.

HTTP status to exit code mapping
HTTP statusExit codeError codeMeaning
40030VALIDATION_ERRORThe arguments or request body were rejected. Review the command's flags and payload.
40110AUTHENTICATION_FAILEDNot signed in, or the API token is invalid. Run dci login or check DCI_API_KEY.
40311PERMISSION_DENIEDThe DoiT user or the active customer context does not have access.
40420RESOURCE_NOT_FOUNDThe requested resource does not exist. Check the identifier argument.
500, 50340API_SERVER_ERRORThe API failed to process the request. Retryable; contact DoiT support if it persists.

Aliases: getgcprecommendation