update-user-notification
dci update-user-notification [body] [flags]
Partially updates a personal notification with an application/merge-patch+json body (RFC 7396). Omitted fields stay unchanged; nested objects are deep-merged; nested arrays (for example allocations.ids) are replaced when present. Optional resend fields are cleared with null (for example "settings":\{"costAnomalies":\{"repeat":null\}\}). Send null for a settings property to unsubscribe that type. Nulling the last remaining type is 422, decided before the type-permission check, so the status does not depend on which permissions the target user holds. Requires Users Manager (usersManager). For each type still subscribed after the merge, other than costAnomalies, the target user must hold that type's permission, including when the patch does not mention that type (a rename included). The permission id for each type is documented on UserNotificationSettings. A missing permission is 403 with permission and notificationType. A permission lookup that fails is 503. The request also requires the If-Match header and the Idempotency-Key header. With dryRun=true the request goes through the same checks as a real update and returns the notification as it would look after the patch, without changing anything.
Reads are immediately consistent. After a completed update, a GET of that notification returns the new state.
Pass the request body as name: value arguments or pipe JSON on stdin — see Command structure.
Request
Content-Type: application/merge-patch+json
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Replacement display name when renaming the config. | |
settings | object | Merge-patch for settings. Omit a property to leave that type unchanged. Send null to unsubscribe that type. After the merge at least one type must remain. | |
settings.newInvoices | object | New invoices. | |
settings.newInvoices.billingProfileIds | array of string | 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. | |
settings.newProformaInvoices | object | New proforma invoices. | |
settings.newProformaInvoices.billingProfileIds | array of string | 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. | |
settings.paymentReminders | object | Due or overdue payments. | |
settings.paymentReminders.billingProfileIds | array of string | 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. | |
settings.creditUtilization | object | Credit utilization. | |
settings.quotaUtilization | object | Quota utilization. | |
settings.cloudIncidents | object | Cloud incidents. | |
settings.newSkuUsage | object | New SKUs Usage Detected. | |
settings.dailyDigest | object | Daily digest. | |
settings.dailyDigest.allocationIds | array of string | yes | 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. |
settings.weeklyDigest | object | Weekly digest. | |
settings.weeklyDigest.allocationIds | array of string | yes | 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. |
settings.monthlyDigest | object | Monthly digest. | |
settings.expertInsights | object | Third-party insights (a new custom insight from the DoiT expert team). | |
settings.insights | object | New insights (DoiT proprietary insights). | |
settings.insights.pillars | array of string | Insight pillars. Empty or omitted means all pillars. | |
settings.insights.severities | array of string | Insight severities. Empty or omitted means all severities. | |
settings.insights.providers | array of string | 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. | |
settings.costAnomalies | object | Cloud cost anomalies. Sending costAnomalies when that type is not yet subscribed requires minSeverity, minExcessCost, and allocations; a partial object is 422. | |
settings.costAnomalies.minSeverity | string | warning — warning and above. critical — critical only. Clients may send only warning or critical. A write of all is rejected with 422. One of: "warning", "critical". | |
settings.costAnomalies.minExcessCost | object | Minimum excess cost, as Money. Omit it to leave the current value; it cannot be cleared. 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. | |
settings.costAnomalies.minExcessCost.amount | string | yes | Decimal monetary amount at ISO 4217 minor-unit precision (string). |
settings.costAnomalies.minExcessCost.currency | string | yes | ISO 4217 currency code. |
settings.costAnomalies.allocations | object | Merge-patch for allocations. Omit a field to leave it; when ids is present the array replaces the current list. A patch that sets mode: all together with a non-empty ids, or include / exclude together with an empty ids, is rejected with 422. The merged allocations follow the same rule: all carries an empty ids, and include or exclude carries at least one id. | |
settings.costAnomalies.allocations.mode | string | 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 paired with a non-empty ids. include and exclude cannot be paired with an empty ids. One of: "all", "include", "exclude". | |
settings.costAnomalies.allocations.ids | array of string | Replacement allocation ids when present, 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.repeat | object | Resend controls, or null to clear them all. | |
settings.costAnomalies.repeat.everyHours | integer | Resend until the anomaly is inactive, every N hours (1–24). Send null to clear. | |
settings.costAnomalies.repeat.whenCostGrows | object | Growth-based resend controls. Send null to clear this branch while leaving everyHours. Nested fields omitted — see the raw JSON schema. | |
settings.savingsPlanApproval | object | PerfectScale for Commitments, AWS Savings Plans: purchases require approval. | |
settings.savingsPlanPurchased | object | PerfectScale for Commitments, AWS Savings Plans: a Savings Plan was purchased. | |
settings.cudApproval | object | PerfectScale for Commitments, Google Cloud committed use discounts: purchases require approval. | |
settings.cudPurchased | object | PerfectScale for Commitments, Google Cloud committed use discounts: a committed use discount was purchased. | |
settings.dataIntegrationSyncFailure | object | Data integration sync failures. |
Example body (JSON)
{
"settings": {
"costAnomalies": {
"minSeverity": "critical"
}
}
}
Raw JSON schema
{
"type": "object",
"additionalProperties": false,
"minProperties": 1,
"description": "JSON Merge Patch (RFC 7396) for a personal notification. Omitted fields stay unchanged; nested objects are deep-merged; nested arrays (for example `allocations.ids`) are replaced when present. Send `null` to clear optional members such as `repeat`, `whenCostGrows`, `withinHours`, `percentIncrease`, and `minIncrease`.",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Replacement display name when renaming the config.",
"example": "Anomaly alerts (updated)"
},
"settings": {
"type": "object",
"additionalProperties": false,
"description": "Merge-patch for `settings`. Omit a property to leave that type unchanged. Send `null` to unsubscribe that type. After the merge at least one type must remain.",
"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"
}
}
}
}
],
"nullable": true
},
"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"
}
}
}
}
],
"nullable": true
},
"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"
}
}
}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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"
}
}
}
}
],
"nullable": true
},
"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"
}
}
}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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"
}
}
}
}
],
"nullable": true
},
"costAnomalies": {
"description": "Cloud cost anomalies. Sending `costAnomalies` when that type is not yet subscribed requires `minSeverity`, `minExcessCost`, and `allocations`; a partial object is `422`.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Merge-patch for `costAnomalies`. Omitted fields stay unchanged. `repeat` may be `null` to clear all resend controls. `minSeverity`, `minExcessCost`, and `allocations` cannot be cleared — omit them or send a new value.",
"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. Clients may send only `warning` or `critical`. A write of `all` is rejected with `422`."
},
"minExcessCost": {
"description": "Minimum excess cost, as Money. Omit it to leave the current value; it cannot be cleared. `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`.",
"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": "Merge-patch for `allocations`. Omit a field to leave it; when `ids` is present the array replaces the current list. A patch that sets `mode: all` together with a non-empty `ids`, or `include` / `exclude` together with an empty `ids`, is rejected with `422`. The merged allocations follow the same rule: `all` carries an empty `ids`, and `include` or `exclude` carries at least one id.",
"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 paired with a non-empty `ids`. `include` and `exclude` cannot be paired with an empty `ids`."
},
"ids": {
"type": "array",
"description": "Replacement allocation ids when present, 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`.",
"items": {
"type": "string",
"minLength": 1
}
}
}
},
"repeat": {
"description": "Resend controls, or `null` to clear them all.",
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Merge-patch for `repeat`. Nested `whenCostGrows` may be `null` to clear only that branch. Nulling the last remaining control, for example `everyHours: null` when that is the only stored field, leaves `repeat: {}`. An empty `repeat` is rejected with `422`. To clear every resend control, send `null` for `costAnomalies.repeat` itself.",
"properties": {
"everyHours": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"description": "Resend until the anomaly is inactive, every N hours (1–24). Send `null` to clear.",
"nullable": true
},
"whenCostGrows": {
"allOf": [
{
"type": "object",
"additionalProperties": false,
"description": "Merge-patch for `whenCostGrows`. Omit a field to leave it; send `null` to clear `match`, `percentIncrease`, `minIncrease`, or `withinHours`. After the merge, `percentIncrease` and/or `minIncrease` must still be set, and both amounts still require `match`. A merged object with only `withinHours`, only `match`, or neither amount is rejected with `422`.",
"properties": {
"match": {
"type": "string",
"enum": [
"or",
"and",
null
],
"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. Send `null` to clear.",
"nullable": true
},
"percentIncrease": {
"type": "integer",
"minimum": 1,
"description": "Minimum percent cost increase that triggers a resend. Must be greater than 0. Send `null` to clear.",
"nullable": true
},
"minIncrease": {
"description": "Minimum cost growth, as Money. Must be a positive whole number of dollars. Send `null` to clear. `currency` must be `USD`; any other currency is rejected with `422`. `0`, `0.00`, and a negative amount are rejected with `422`. A fractional amount is rejected with `422` (`150.99` is not a whole number of dollars). `150` and `150.00` are both accepted. Amounts above 1,000,000,000 whole dollars, and forms such as `Inf`, exponents, a leading `+`, or underscores, are rejected with `422`.",
"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"
}
}
}
],
"nullable": true
},
"withinHours": {
"type": "integer",
"minimum": 1,
"maximum": 24,
"description": "Optional window in hours (1–24). Send `null` to clear.",
"nullable": true
}
}
}
],
"description": "Growth-based resend controls. Send `null` to clear this branch while leaving `everyHours`.",
"nullable": true
}
}
}
],
"nullable": true
}
}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
},
"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": {}
}
],
"nullable": true
}
}
}
},
"example": {
"settings": {
"costAnomalies": {
"minSeverity": "critical"
}
}
}
}
Flags
| Flag | Type | Default | Example | Description |
|---|---|---|---|---|
--dry-run | boolean | false | If true, validates the request and returns the would-be result without applying it. The response then carries the X-Dry-Run header. |
Every command also accepts the CLI-wide flags for output shaping — see Output formats and Table output options.
Output
OK - Notification updated. The updated example is a completed patch: updateTime and etag change. The dryRun example is the preview when dryRun=true: the merged settings, with the current updateTime and etag left unchanged.
By default dci renders the result as a table. Use --output json to get the full structure described below — see Output formats.
| Field | Type | Description |
|---|---|---|
id | string | Server-assigned notification id. null only on a dry-run create. |
name | string | Display name of the notification config. |
createTime | string (date-time) | When the config was created. null only on a dry-run create. |
updateTime | string (date-time) | When the config was last changed. null only on a dry-run create. |
etag | string | Current strong ETag. Send it unchanged in If-Match on update or delete. null only on a dry-run create. |
destinations | array of object | Server-managed destinations. Always one email entry with the target user's address. |
destinations[].type | string | Delivery channel. Personal delivery is email only. One of: "email". |
destinations[].address | string (email) | Target user's email, copied by the server. |
settings | object | Subscribed settings. |
settings.newInvoices | object | New invoices. |
settings.newInvoices.billingProfileIds | array of string | 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. |
settings.newProformaInvoices | object | New proforma invoices. |
settings.newProformaInvoices.billingProfileIds | array of string | 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. |
settings.paymentReminders | object | Due or overdue payments. |
settings.paymentReminders.billingProfileIds | array of string | 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. |
settings.creditUtilization | object | Credit utilization. |
settings.quotaUtilization | object | Quota utilization. |
settings.cloudIncidents | object | Cloud incidents. |
settings.newSkuUsage | object | New SKUs Usage Detected. |
settings.dailyDigest | object | Daily digest. |
settings.dailyDigest.allocationIds | array of string | 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. |
settings.weeklyDigest | object | Weekly digest. |
settings.weeklyDigest.allocationIds | array of string | 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. |
settings.monthlyDigest | object | Monthly digest. |
settings.expertInsights | object | Third-party insights (a new custom insight from the DoiT expert team). |
settings.insights | object | New insights (DoiT proprietary insights). |
settings.insights.pillars | array of string | Insight pillars. Empty or omitted means all pillars. |
settings.insights.severities | array of string | Insight severities. Empty or omitted means all severities. |
settings.insights.providers | array of string | 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. |
settings.costAnomalies | object | Cloud cost anomalies. |
settings.costAnomalies.minSeverity | string | 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. One of: "warning", "critical". |
settings.costAnomalies.minExcessCost | object | Minimum 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.amount | string | Decimal monetary amount at ISO 4217 minor-unit precision (string). |
settings.costAnomalies.minExcessCost.currency | string | ISO 4217 currency code. |
settings.costAnomalies.allocations | object | Allocation 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.mode | string | 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. One of: "all", "include", "exclude". |
settings.costAnomalies.allocations.ids | array of string | Allocation 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.repeat | object | Resend 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.everyHours | integer | Resend until the anomaly is inactive, every N hours (1–24). |
settings.costAnomalies.repeat.whenCostGrows | object | Resend 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.savingsPlanApproval | object | PerfectScale for Commitments, AWS Savings Plans: purchases require approval. |
settings.savingsPlanPurchased | object | PerfectScale for Commitments, AWS Savings Plans: a Savings Plan was purchased. |
settings.cudApproval | object | PerfectScale for Commitments, Google Cloud committed use discounts: purchases require approval. |
settings.cudPurchased | object | PerfectScale for Commitments, Google Cloud committed use discounts: a committed use discount was purchased. |
settings.dataIntegrationSyncFailure | object | Data integration sync failures. |