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

get-user-notification

dci get-user-notification

Returns one personal notification config. Requires Users Manager (usersManager). A subscribed type stays in the response when the target user later loses that type's permission; the type permission is not re-checked on read. A notification id that does not belong to this user in the resolved tenant returns 404, without saying whether it exists elsewhere.

Output​

OK - Personal notification returned.

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

FieldTypeDescription
idstringServer-assigned notification id. null only on a dry-run create.
namestringDisplay name of the notification config.
createTimestring (date-time)When the config was created. null only on a dry-run create.
updateTimestring (date-time)When the config was last changed. null only on a dry-run create.
etagstringCurrent strong ETag. Send it unchanged in If-Match on update or delete. null only on a dry-run create.
destinationsarray of objectServer-managed destinations. Always one email entry with the target user's address.
destinations[].typestringDelivery channel. Personal delivery is email only. One of: "email".
destinations[].addressstring (email)Target user's email, copied by the server.
settingsobjectSubscribed settings.
settings.newInvoicesobjectNew invoices.
settings.newInvoices.billingProfileIdsarray of stringBilling-profile ids in this tenant, shaped like ent_01HEXAMPLEBILLING0001. This API does not list billing profiles, and GET /billing/v1/invoices does not return these ids. Empty or omitted means every billing profile in the tenant. A read of an omitted or empty list returns the field absent. An explicit list is returned in the order sent. A duplicate id is rejected with 422.
settings.newProformaInvoicesobjectNew proforma invoices.
settings.newProformaInvoices.billingProfileIdsarray of stringBilling-profile ids in this tenant, shaped like ent_01HEXAMPLEBILLING0001. This API does not list billing profiles, and GET /billing/v1/invoices does not return these ids. Empty or omitted means every billing profile in the tenant. A read of an omitted or empty list returns the field absent. An explicit list is returned in the order sent. A duplicate id is rejected with 422.
settings.paymentRemindersobjectDue or overdue payments.
settings.paymentReminders.billingProfileIdsarray of stringBilling-profile ids in this tenant, shaped like ent_01HEXAMPLEBILLING0001. This API does not list billing profiles, and GET /billing/v1/invoices does not return these ids. Empty or omitted means every billing profile in the tenant. A read of an omitted or empty list returns the field absent. An explicit list is returned in the order sent. A duplicate id is rejected with 422.
settings.creditUtilizationobjectCredit utilization.
settings.quotaUtilizationobjectQuota utilization.
settings.cloudIncidentsobjectCloud incidents.
settings.newSkuUsageobjectNew SKUs Usage Detected.
settings.dailyDigestobjectDaily digest.
settings.dailyDigest.allocationIdsarray of stringAllocation rule ids from GET /analytics/v1/allocations. At least one id is required. A read returns the ids in the order sent. A duplicate, or an id outside the tenant, is rejected with 422.
settings.weeklyDigestobjectWeekly digest.
settings.weeklyDigest.allocationIdsarray of stringAllocation rule ids from GET /analytics/v1/allocations. At least one id is required. A read returns the ids in the order sent. A duplicate, or an id outside the tenant, is rejected with 422.
settings.monthlyDigestobjectMonthly digest.
settings.expertInsightsobjectThird-party insights (a new custom insight from the DoiT expert team).
settings.insightsobjectNew insights (DoiT proprietary insights).
settings.insights.pillarsarray of stringInsight pillars. Empty or omitted means all pillars.
settings.insights.severitiesarray of stringInsight severities. Empty or omitted means all severities.
settings.insights.providersarray of stringInsights provider ids such as aws, gcp, azure, azure-ad, general, google-cloud-source, google-workspace, k8s, oci, and vmware. These are the ids Insights resources use, not invoice platform ids such as amazon-web-services. Empty or omitted means all providers. Available ids depend on the tenant's connected accounts. Each value is a non-empty string.
settings.costAnomaliesobjectCloud cost anomalies.
settings.costAnomalies.minSeveritystringwarning — warning and above. critical — critical only. There is no information or all value; a write of all is rejected with 422. Clients may send only warning or critical. Responses return only warning or critical. A missing or empty stored severity (console "All severity levels") is returned as warning. critical is stored and returned as critical. One of: "warning", "critical".
settings.costAnomalies.minExcessCostobjectMinimum excess cost, as Money. Notify when excess cost is above this amount, not total spend. 100.00 USD means $100. currency must be USD; any other currency is rejected with 422. A negative amount is rejected with 422. A fractional amount is rejected with 422 (100.99 is not a whole number of dollars). 100 and 100.00 are both accepted. 0 and 0.00 are accepted. Amounts above 1,000,000,000 whole dollars, and forms such as Inf, exponents, a leading +, or underscores, are rejected with 422. Responses return the amount as "100.00".
settings.costAnomalies.minExcessCost.amountstringDecimal monetary amount at ISO 4217 minor-unit precision (string).
settings.costAnomalies.minExcessCost.currencystringISO 4217 currency code.
settings.costAnomalies.allocationsobjectAllocation scope for cost-anomaly notifications. ids are allocation ids from GET /analytics/v1/allocations. An id outside the caller's tenant is rejected with 422 without saying whether it exists elsewhere. mode: all means every allocation with anomaly detection enabled, including anomalies that are not tied to an allocation, and it carries an empty ids. include and exclude require at least one id. mode: all with a non-empty ids, and include or exclude with an empty ids, are rejected with 422. ids are an ordered list: the server stores and returns them in the order sent, and it does not sort or drop entries. A duplicate id is rejected with 422.
settings.costAnomalies.allocations.modestringall — every allocation with anomaly detection enabled (and unallocated anomalies). include — only the listed ids. exclude — all enabled allocations except the listed ids. all cannot be sent with a non-empty ids. include and exclude cannot be sent with an empty ids. One of: "all", "include", "exclude".
settings.costAnomalies.allocations.idsarray of stringAllocation ids, in the order sent. A read returns that same order. A duplicate id is rejected with 422. Empty when mode is all. Non-empty when mode is include or exclude.
settings.costAnomalies.repeatobjectResend controls for an active cost anomaly. Omit the whole repeat object when neither control is set. An empty object is rejected with 422.
settings.costAnomalies.repeat.everyHoursintegerResend until the anomaly is inactive, every N hours (1–24).
settings.costAnomalies.repeat.whenCostGrowsobjectResend when the anomaly's cost grows. At least one of percentIncrease or minIncrease is required. An object with only withinHours, only match, or neither amount is rejected with 422. - both percentIncrease and minIncrease present → match is required (or or and) - exactly one of percentIncrease or minIncrease present → omit match (percentage-only or value-only) - neither amount present → rejected with 422 percentIncrease is an integer percent (10 means 10 percent) and must be at least 1. Omit withinHours when the time window is off. Nested fields omitted — see the raw JSON schema.
settings.savingsPlanApprovalobjectPerfectScale for Commitments, AWS Savings Plans: purchases require approval.
settings.savingsPlanPurchasedobjectPerfectScale for Commitments, AWS Savings Plans: a Savings Plan was purchased.
settings.cudApprovalobjectPerfectScale for Commitments, Google Cloud committed use discounts: purchases require approval.
settings.cudPurchasedobjectPerfectScale for Commitments, Google Cloud committed use discounts: a committed use discount was purchased.
settings.dataIntegrationSyncFailureobjectData integration sync failures.

Example response (--output json)​

{
"id": "notif_01HX9P2KQVJ8Z3M4T5N6V7W8Y9",
"name": "Anomaly alerts",
"createTime": "2026-10-01T08:00:00Z",
"updateTime": "2026-10-01T08:00:00Z",
"etag": "3f7a1c9e2b4d6f8a0c1e3a5b7d9f1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e",
"destinations": [
{
"type": "email",
"address": "[email protected]"
}
],
"settings": {
"costAnomalies": {
"minSeverity": "warning",
"minExcessCost": {
"amount": "100.00",
"currency": "USD"
},
"allocations": {
"mode": "include",
"ids": [
"alloc_abc",
"alloc_def"
]
},
"repeat": {
"everyHours": 24,
"whenCostGrows": {
"match": "or",
"percentIncrease": 10,
"minIncrease": {
"amount": "150.00",
"currency": "USD"
},
"withinHours": 6
}
}
}
}
}
Raw JSON schema
{
"type": "object",
"additionalProperties": false,
"description": "Personal notification config for one user. Create and read return the full resource with the same field names. Update and delete require `If-Match` against the strong `etag`.",
"required": [
"id",
"name",
"createTime",
"updateTime",
"etag",
"destinations",
"settings"
],
"properties": {
"id": {
"type": "string",
"readOnly": true,
"x-terraform-computed": true,
"description": "Server-assigned notification id. `null` only on a dry-run create.",
"nullable": true,
"example": "notif_01HX9P2KQVJ8Z3M4T5N6V7W8Y9"
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Display name of the notification config.",
"example": "Anomaly alerts"
},
"createTime": {
"type": "string",
"format": "date-time",
"readOnly": true,
"x-terraform-computed": true,
"description": "When the config was created. `null` only on a dry-run create.",
"nullable": true,
"example": "2026-10-01T08:00:00Z"
},
"updateTime": {
"type": "string",
"format": "date-time",
"readOnly": true,
"x-terraform-computed": true,
"description": "When the config was last changed. `null` only on a dry-run create.",
"nullable": true,
"example": "2026-10-01T08:00:00Z"
},
"etag": {
"type": "string",
"readOnly": true,
"x-terraform-computed": true,
"description": "Current strong ETag. Send it unchanged in `If-Match` on update or delete. `null` only on a dry-run create.",
"nullable": true,
"example": "3f7a1c9e2b4d6f8a0c1e3a5b7d9f1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f1a3c5e"
},
"destinations": {
"type": "array",
"readOnly": true,
"x-terraform-computed": true,
"minItems": 1,
"maxItems": 1,
"description": "Server-managed destinations. Always one email entry with the target user's address.",
"items": {
"type": "object",
"additionalProperties": false,
"description": "Server-copied email destination. The create/update body does not accept an email address; the server copies the target user's email.",
"required": [
"type",
"address"
],
"properties": {
"type": {
"type": "string",
"description": "Delivery channel. Personal delivery is email only.",
"enum": [
"email"
]
},
"address": {
"type": "string",
"format": "email",
"readOnly": true,
"x-doit-pii": true,
"x-terraform-computed": true,
"description": "Target user's email, copied by the server.",
"example": "[email protected]"
}
}
},
"example": [
{
"type": "email",
"address": "[email protected]"
}
]
},
"settings": {
"description": "Subscribed settings.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"minProperties": 1,
"description": "Subscribed notification settings. One property per type. A present property means that type is\nsubscribed. At least one property is required. `costAnomalies` is not required. `awsBillingDataImport`\nis not a personal type and is rejected with `422`. `conditions` is not a field and is rejected with\n`422`.\n\nThe caller still needs Users Manager (`usersManager`). For every subscribed type other than `costAnomalies`, the\ntarget user must hold the permission below on create and on update. The type permission is not\nre-checked on read. The `403` problem includes `permission` (the id) and `notificationType` (the\nproperty name). Cost anomalies do not add this check. That difference is intentional: the Console\nassociates cloud cost anomalies with Cloud Analytics, and this API does not require a target-user\nCloud Analytics permission for `costAnomalies`.\n\n| Property | Permission | Permission id |\n| --- | --- | --- |\n| `newInvoices`, `newProformaInvoices`, `paymentReminders`, `creditUtilization` | Invoice Viewer | `HN6A3cPzDBcAIlc3ncDy` |\n| `quotaUtilization`, `dailyDigest`, `weeklyDigest`, `monthlyDigest`, `newSkuUsage` | Cloud Analytics User | `sfmBZeLN8uXWooCqJ4NO` |\n| `savingsPlanApproval`, `savingsPlanPurchased`, `cudApproval`, `cudPurchased` | Cloud Analytics User | `sfmBZeLN8uXWooCqJ4NO` |\n| `cloudIncidents` | Issues Viewer | `dEJbIiUcHn8GhW7IiWLW` |\n| `expertInsights`, `insights` | Insights Manager | `Co8Hf8SfDWvS7PxPlqc6` |\n| `dataIntegrationSyncFailure` | Assets Manager | `wfDH3k1FmYKHlQBwGIzZ` |",
"properties": {
"newInvoices": {
"description": "New invoices.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Billing profiles this notification applies to. Omit `billingProfileIds`, or send an empty array, to include every billing profile in the tenant. An id outside the tenant is rejected with `422`, the same error as an unknown id.",
"properties": {
"billingProfileIds": {
"type": "array",
"description": "Billing-profile ids in this tenant, shaped like `ent_01HEXAMPLEBILLING0001`. This API does not list billing profiles, and `GET /billing/v1/invoices` does not return these ids. Empty or omitted means every billing profile in the tenant. A read of an omitted or empty list returns the field absent. An explicit list is returned in the order sent. A duplicate id is rejected with `422`.",
"items": {
"type": "string",
"minLength": 1,
"example": "ent_01HEXAMPLEBILLING0001"
}
}
}
}
]
},
"newProformaInvoices": {
"description": "New proforma invoices.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Billing profiles this notification applies to. Omit `billingProfileIds`, or send an empty array, to include every billing profile in the tenant. An id outside the tenant is rejected with `422`, the same error as an unknown id.",
"properties": {
"billingProfileIds": {
"type": "array",
"description": "Billing-profile ids in this tenant, shaped like `ent_01HEXAMPLEBILLING0001`. This API does not list billing profiles, and `GET /billing/v1/invoices` does not return these ids. Empty or omitted means every billing profile in the tenant. A read of an omitted or empty list returns the field absent. An explicit list is returned in the order sent. A duplicate id is rejected with `422`.",
"items": {
"type": "string",
"minLength": 1,
"example": "ent_01HEXAMPLEBILLING0001"
}
}
}
}
]
},
"paymentReminders": {
"description": "Due or overdue payments.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Billing profiles this notification applies to. Omit `billingProfileIds`, or send an empty array, to include every billing profile in the tenant. An id outside the tenant is rejected with `422`, the same error as an unknown id.",
"properties": {
"billingProfileIds": {
"type": "array",
"description": "Billing-profile ids in this tenant, shaped like `ent_01HEXAMPLEBILLING0001`. This API does not list billing profiles, and `GET /billing/v1/invoices` does not return these ids. Empty or omitted means every billing profile in the tenant. A read of an omitted or empty list returns the field absent. An explicit list is returned in the order sent. A duplicate id is rejected with `422`.",
"items": {
"type": "string",
"minLength": 1,
"example": "ent_01HEXAMPLEBILLING0001"
}
}
}
}
]
},
"creditUtilization": {
"description": "Credit utilization.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"quotaUtilization": {
"description": "Quota utilization.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"cloudIncidents": {
"description": "Cloud incidents.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"newSkuUsage": {
"description": "New SKUs Usage Detected.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"dailyDigest": {
"description": "Daily digest.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Allocation rules included in a daily or weekly digest. At least one id is required.",
"required": [
"allocationIds"
],
"properties": {
"allocationIds": {
"type": "array",
"minItems": 1,
"description": "Allocation rule ids from `GET /analytics/v1/allocations`. At least one id is required. A read returns the ids in the order sent. A duplicate, or an id outside the tenant, is rejected with `422`.",
"items": {
"type": "string",
"minLength": 1,
"example": "alloc_abc"
}
}
}
}
]
},
"weeklyDigest": {
"description": "Weekly digest.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Allocation rules included in a daily or weekly digest. At least one id is required.",
"required": [
"allocationIds"
],
"properties": {
"allocationIds": {
"type": "array",
"minItems": 1,
"description": "Allocation rule ids from `GET /analytics/v1/allocations`. At least one id is required. A read returns the ids in the order sent. A duplicate, or an id outside the tenant, is rejected with `422`.",
"items": {
"type": "string",
"minLength": 1,
"example": "alloc_abc"
}
}
}
}
]
},
"monthlyDigest": {
"description": "Monthly digest.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"expertInsights": {
"description": "Third-party insights (a new custom insight from the DoiT expert team).",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"insights": {
"description": "New insights (DoiT proprietary insights).",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Optional insight filters. An empty or omitted list means every value of that filter. An insight must match every criterion across `pillars`, `severities`, and `providers`. A read of an omitted or empty list returns that field absent. An explicit list is returned in the order sent. A repeated value is rejected with `422`.",
"properties": {
"pillars": {
"type": "array",
"description": "Insight pillars. Empty or omitted means all pillars.",
"items": {
"type": "string",
"enum": [
"cost",
"operations",
"performance",
"security",
"compliance"
],
"x-enumDescriptions": {
"cost": "Cost. Notify for insights in the Cost category.",
"operations": "Operations. Notify for insights in the Operations category.",
"performance": "Performance. Notify for insights in the Performance category.",
"security": "Security. Notify for insights in the Security category.",
"compliance": "Compliance. Notify for insights in the Compliance category."
}
}
},
"severities": {
"type": "array",
"description": "Insight severities. Empty or omitted means all severities.",
"items": {
"type": "string",
"enum": [
"critical",
"high",
"medium",
"low"
],
"x-enumDescriptions": {
"critical": "Critical. Notify for Critical insights.",
"high": "High. Notify for High insights.",
"medium": "Medium. Notify for Medium insights.",
"low": "Low. Notify for Low insights."
}
}
},
"providers": {
"type": "array",
"description": "Insights provider ids such as `aws`, `gcp`, `azure`, `azure-ad`, `general`, `google-cloud-source`, `google-workspace`, `k8s`, `oci`, and `vmware`. These are the ids Insights resources use, not invoice platform ids such as `amazon-web-services`. Empty or omitted means all providers. Available ids depend on the tenant's connected accounts. Each value is a non-empty string.",
"items": {
"type": "string",
"minLength": 1,
"example": "aws"
}
}
}
}
]
},
"costAnomalies": {
"description": "Cloud cost anomalies.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Cost-anomaly notification settings: minimum severity, excess-cost threshold, allocation scope, and\noptional resend controls.\n",
"required": [
"minSeverity",
"minExcessCost",
"allocations"
],
"properties": {
"minSeverity": {
"type": "string",
"enum": [
"warning",
"critical"
],
"x-enumDescriptions": {
"warning": "Warning and above. A missing stored severity (Console \"All severity levels\") is also returned as `warning`.",
"critical": "Critical."
},
"description": "`warning` — warning and above. `critical` — critical only. There is no `information` or `all` value; a write of `all` is rejected with `422`. Clients may send only `warning` or `critical`. Responses return only `warning` or `critical`. A missing or empty stored severity (console \"All severity levels\") is returned as `warning`. `critical` is stored and returned as `critical`.",
"example": "warning"
},
"minExcessCost": {
"description": "Minimum excess cost, as Money. Notify when excess cost is above this amount, not total spend.\n`100.00` USD means $100. `currency` must be `USD`; any other currency is rejected with `422`. A\nnegative amount is rejected with `422`. A fractional amount is rejected with `422` (`100.99` is not a\nwhole number of dollars). `100` and `100.00` are both accepted. `0` and `0.00` are accepted. Amounts\nabove 1,000,000,000 whole dollars, and forms such as `Inf`, exponents, a leading `+`, or underscores,\nare rejected with `422`. Responses return the amount as `\"100.00\"`.\n",
"allOf": [
{
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^-?(0|[1-9]\\d*)(\\.\\d+)?$",
"description": "Decimal monetary amount at ISO 4217 minor-unit precision (string).",
"example": "100.00"
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code.",
"example": "USD"
}
}
}
]
},
"allocations": {
"type": "object",
"additionalProperties": false,
"description": "Allocation scope for cost-anomaly notifications. `ids` are allocation ids from `GET\n/analytics/v1/allocations`. An id outside the caller's tenant is rejected with `422` without saying\nwhether it exists elsewhere.\n\n`mode: all` means every allocation with anomaly detection enabled, including anomalies that are not\ntied to an allocation, and it carries an empty `ids`. `include` and `exclude` require at least one\nid. `mode: all` with a non-empty `ids`, and `include` or `exclude` with an empty `ids`, are rejected\nwith `422`. `ids` are an ordered list: the server stores and returns them in the order sent, and it does\nnot sort or drop entries. A duplicate id is rejected with `422`.\n",
"required": [
"mode",
"ids"
],
"properties": {
"mode": {
"type": "string",
"enum": [
"all",
"include",
"exclude"
],
"x-enumDescriptions": {
"all": "Include all enabled allocations, including anomalies that are not tied to an allocation. Send an empty `ids`.",
"include": "Include specific allocations. Requires at least one id.",
"exclude": "Exclude specific allocations. Requires at least one id."
},
"description": "`all` — every allocation with anomaly detection enabled (and unallocated anomalies). `include` — only the listed ids. `exclude` — all enabled allocations except the listed ids. `all` cannot be sent with a non-empty `ids`. `include` and `exclude` cannot be sent with an empty `ids`.",
"example": "include"
},
"ids": {
"type": "array",
"description": "Allocation ids, in the order sent. A read returns that same order. A duplicate id is rejected\nwith `422`. Empty when `mode` is `all`. Non-empty when `mode` is `include` or `exclude`.\n",
"items": {
"type": "string",
"minLength": 1
},
"example": [
"alloc_abc",
"alloc_def"
]
}
}
},
"repeat": {
"type": "object",
"additionalProperties": false,
"minProperties": 1,
"description": "Resend controls for an active cost anomaly. Omit the whole `repeat` object when neither control is\nset. An empty object is rejected with `422`.\n",
"properties": {
"everyHours": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"description": "Resend until the anomaly is inactive, every N hours (1–24).\n",
"example": 24
},
"whenCostGrows": {
"type": "object",
"additionalProperties": false,
"minProperties": 1,
"description": "Resend when the anomaly's cost grows. At least one of `percentIncrease` or `minIncrease` is required.\nAn object with only `withinHours`, only `match`, or neither amount is rejected with `422`.\n\n- both `percentIncrease` and `minIncrease` present → `match` is\n required (`or` or `and`)\n- exactly one of `percentIncrease` or `minIncrease` present → omit\n `match` (percentage-only or value-only)\n- neither amount present → rejected with `422`\n\n`percentIncrease` is an integer percent (`10` means 10 percent) and must be at least 1. Omit\n`withinHours` when the time window is off.",
"properties": {
"match": {
"type": "string",
"enum": [
"or",
"and"
],
"x-enumDescriptions": {
"or": "Resend when either the percent increase or the dollar increase is reached.",
"and": "Resend only when both are reached."
},
"description": "How to combine percent and dollar growth when both are set. Required when both amounts are present; omit when only one amount is present.",
"example": "or"
},
"percentIncrease": {
"type": "integer",
"minimum": 1,
"description": "Minimum percent cost increase that triggers a resend. `10` means 10 percent. Must be greater than 0.\n",
"example": 10
},
"minIncrease": {
"description": "Minimum cost growth that triggers a resend, as Money. Must be a positive whole number of dollars.\n`150.00` USD means $150. `currency` must be `USD`; any other currency is rejected with `422`. `0`,\n`0.00`, and a negative amount are rejected with `422`. A fractional amount is rejected with `422`\n(`150.99` is not a whole number of dollars). `150` and `150.00` are both accepted. Amounts above\n1,000,000,000 whole dollars, and forms such as `Inf`, exponents, a leading `+`, or underscores, are\nrejected with `422`. Responses return the amount as `\"150.00\"`.\n",
"allOf": [
{
"type": "object",
"required": [
"amount",
"currency"
],
"properties": {
"amount": {
"type": "string",
"pattern": "^-?(0|[1-9]\\d*)(\\.\\d+)?$",
"description": "Decimal monetary amount at ISO 4217 minor-unit precision (string).",
"example": "100.00"
},
"currency": {
"type": "string",
"pattern": "^[A-Z]{3}$",
"description": "ISO 4217 currency code.",
"example": "USD"
}
}
}
]
},
"withinHours": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"description": "Optional window in hours for the growth check (1–24).",
"example": 6
}
}
}
}
}
}
}
]
},
"savingsPlanApproval": {
"description": "PerfectScale for Commitments, AWS Savings Plans: purchases require approval.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"savingsPlanPurchased": {
"description": "PerfectScale for Commitments, AWS Savings Plans: a Savings Plan was purchased.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"cudApproval": {
"description": "PerfectScale for Commitments, Google Cloud committed use discounts: purchases require approval.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"cudPurchased": {
"description": "PerfectScale for Commitments, Google Cloud committed use discounts: a committed use discount was purchased.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
},
"dataIntegrationSyncFailure": {
"description": "Data integration sync failures.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "A present empty object means this type is subscribed, for example `\"creditUtilization\": {}`. The object has no fields. On a patch property, `null` unsubscribes that type and is a different value.",
"example": {}
}
]
}
}
}
],
"example": {
"dailyDigest": {
"allocationIds": [
"alloc_abc"
]
}
}
}
}
}

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.
50040API_SERVER_ERRORThe API failed to process the request. Retryable; contact DoiT support if it persists.

Aliases: getusernotification