---
title: Update a usage quota
description: Datadog, the leading service for cloud-scale monitoring.
breadcrumbs: Docs > API Reference > Usage Metering
---

> For the complete documentation index, see [llms.txt](https://docs.datadoghq.com/llms.txt).

# Update a usage quota{% #update-a-usage-quota %}
Copy pageCopied
{% tab title="v2" %}
**Note**: This endpoint is in Preview and is subject to change. If you have any feedback, contact [Datadog support](https://docs.datadoghq.com/help/).
| Datadog site      | API endpoint                                                                   |
| ----------------- | ------------------------------------------------------------------------------ |
| ap1.datadoghq.com | PATCH https://api.ap1.datadoghq.com/api/v2/usage/quotas/{quota_namespace}/{id} |
| ap2.datadoghq.com | PATCH https://api.ap2.datadoghq.com/api/v2/usage/quotas/{quota_namespace}/{id} |
| app.datadoghq.eu  | PATCH https://api.datadoghq.eu/api/v2/usage/quotas/{quota_namespace}/{id}      |
| app.ddog-gov.com  | PATCH https://api.ddog-gov.com/api/v2/usage/quotas/{quota_namespace}/{id}      |
| us2.ddog-gov.com  | PATCH https://api.us2.ddog-gov.com/api/v2/usage/quotas/{quota_namespace}/{id}  |
| uk1.datadoghq.com | PATCH https://api.uk1.datadoghq.com/api/v2/usage/quotas/{quota_namespace}/{id} |
| app.datadoghq.com | PATCH https://api.datadoghq.com/api/v2/usage/quotas/{quota_namespace}/{id}     |
| us3.datadoghq.com | PATCH https://api.us3.datadoghq.com/api/v2/usage/quotas/{quota_namespace}/{id} |
| us5.datadoghq.com | PATCH https://api.us5.datadoghq.com/api/v2/usage/quotas/{quota_namespace}/{id} |

### Overview

Updates the supplied fields on a usage quota and leaves omitted fields unchanged. The quota must belong to the caller's organization or one of its descendants, and its opaque identifier must belong to the requested quota namespace. Requires the `billing_edit` permission. This endpoint requires the `billing_edit` permission.

OAuth apps require the `billing_edit` authorization [scope](https://docs.datadoghq.com/api/latest/scopes.md#usage-metering) to access this endpoint.



### Arguments

#### Path Parameters

| Name                              | Type   | Description                                                                                                       |
| --------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------- |
| quota_namespace [*required*] | string | The product-specific namespace whose usage quotas are being managed.                                              |
| id [*required*]              | string | The opaque quota identifier returned by a previous list or create request. Clients must pass this value verbatim. |

### Request

#### Body Data (required)

The usage quota fields to update. Omitting an attribute leaves its current value unchanged.

{% tab title="Model" %}

| Parent field | Field                        | Type    | Description                                                                                                                                                                                                                                                 |
| ------------ | ---------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|              | data [*required*]       | object  | A usage quota resource to update.                                                                                                                                                                                                                           |
| data         | attributes [*required*] | object  | Attributes to update on a usage quota. Omitting a property leaves its current value unchanged.                                                                                                                                                              |
| attributes   | enforced                     | boolean | Whether to actively block usage above the limit. Omit this field to leave the current enforcement setting unchanged.                                                                                                                                        |
| attributes   | usage_limit                  | int64   | The new quota limit in the usage units defined by the quota namespace. For an organization-wide quota (empty scope), the limit must be greater than the usage already recorded in the current period. Omit this field to leave the current limit unchanged. |
| data         | id [*required*]         | string  | The opaque usage quota identifier, which must match the identifier in the request path.                                                                                                                                                                     |
| data         | type [*required*]       | enum    | The JSON:API resource type for a usage quota. Allowed enum values: `quotas`                                                                                                                                                                                 |

{% /tab %}

{% tab title="Example" %}

```json
{
  "data": {
    "attributes": {
      "enforced": false,
      "usage_limit": 120000
    },
    "id": "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f",
    "type": "quotas"
  }
}
```

{% /tab %}

### Response

{% tab title="200" %}
OK
{% tab title="Model" %}
Response containing a usage quota.

| Parent field         | Field                           | Type    | Description                                                                                                                                                                                                                                                                               |
| -------------------- | ------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|                      | data [*required*]          | object  | A usage quota resource.                                                                                                                                                                                                                                                                   |
| data                 | attributes [*required*]    | object  | Attributes of a usage quota.                                                                                                                                                                                                                                                              |
| attributes           | enforced [*required*]      | boolean | Whether usage above the limit is actively blocked instead of only tracked or alerted on.                                                                                                                                                                                                  |
| attributes           | org_public_id [*required*] | string  | The public ID of the organization that owns the quota.                                                                                                                                                                                                                                    |
| attributes           | scope                           | object  | A namespace-specific key and value identifying what the quota applies to within an organization. The object contains exactly one entry. A value of `"*"` identifies the default quota applied to entities without a specific quota. This field is omitted for an organization-wide quota. |
| additionalProperties | <any-key>                       | string  |
| attributes           | usage_limit [*required*]   | double  | The quota limit in the usage units defined by the quota namespace. May be fractional for quotas configured before public writes required whole units.                                                                                                                                     |
| data                 | id [*required*]            | string  | An opaque usage quota identifier. Clients must pass this value back verbatim in update and delete requests and must not infer any structure from it.                                                                                                                                      |
| data                 | type [*required*]          | enum    | The JSON:API resource type for a usage quota. Allowed enum values: `quotas`                                                                                                                                                                                                               |

{% /tab %}

{% tab title="Example" %}

```json
{
  "data": {
    "attributes": {
      "enforced": true,
      "org_public_id": "abcdef12345",
      "scope": {
        "<any-key>": "jane@example.com"
      },
      "usage_limit": 100000
    },
    "id": "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f",
    "type": "quotas"
  }
}
```

{% /tab %}

{% /tab %}

{% tab title="400" %}
Bad Request. Returned if the request is malformed, or if the `id` in the request body does not match the `id` in the request path.
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="403" %}
Forbidden
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="404" %}
Not Found
{% tab title="Model" %}
API error response.

| Parent field | Field                    | Type     | Description                                                                     |
| ------------ | ------------------------ | -------- | ------------------------------------------------------------------------------- |
|              | errors [*required*] | [object] | A list of errors.                                                               |
| errors       | detail                   | string   | A human-readable explanation specific to this occurrence of the error.          |
| errors       | meta                     | object   | Non-standard meta-information about the error                                   |
| errors       | source                   | object   | References to the source of the error.                                          |
| source       | header                   | string   | A string indicating the name of a single request header which caused the error. |
| source       | parameter                | string   | A string indicating which URI query parameter caused the error.                 |
| source       | pointer                  | string   | A JSON pointer to the value in the request document that caused the error.      |
| errors       | status                   | string   | Status code of the response.                                                    |
| errors       | title                    | string   | Short human-readable summary of the error.                                      |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    {
      "detail": "Missing required attribute in body",
      "meta": {},
      "source": {
        "header": "Authorization",
        "parameter": "limit",
        "pointer": "/data/attributes/title"
      },
      "status": "400",
      "title": "Bad Request"
    }
  ]
}
```

{% /tab %}

{% /tab %}

{% tab title="429" %}
Too many requests
{% tab title="Model" %}
API error response.

| Field                    | Type     | Description       |
| ------------------------ | -------- | ----------------- |
| errors [*required*] | [string] | A list of errors. |

{% /tab %}

{% tab title="Example" %}

```json
{
  "errors": [
    "Bad Request"
  ]
}
```

{% /tab %}

{% /tab %}

### Code Example

##### 
                  \## default
# 
 \# Path parameters export quota_namespace="ai_credits" export id="MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f" \# Curl command curl -X PATCH "https://api.datadoghq.com/api/v2/usage/quotas/${quota_namespace}/${id}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "DD-API-KEY: ${DD_API_KEY}" \
-H "DD-APPLICATION-KEY: ${DD_APP_KEY}" \
-d @- << EOF
{
  "data": {
    "attributes": {
      "enforced": false,
      "usage_limit": 120000
    },
    "id": "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f",
    "type": "quotas"
  }
}
EOF 
                
##### 

```python
"""
Update a usage quota returns "OK" response
"""

from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.usage_metering_api import UsageMeteringApi
from datadog_api_client.v2.model.usage_quota_type import UsageQuotaType
from datadog_api_client.v2.model.usage_quota_update_attributes import UsageQuotaUpdateAttributes
from datadog_api_client.v2.model.usage_quota_update_data import UsageQuotaUpdateData
from datadog_api_client.v2.model.usage_quota_update_request import UsageQuotaUpdateRequest

body = UsageQuotaUpdateRequest(
    data=UsageQuotaUpdateData(
        attributes=UsageQuotaUpdateAttributes(
            enforced=False,
            usage_limit=120000,
        ),
        id="MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f",
        type=UsageQuotaType.QUOTAS,
    ),
)

configuration = Configuration()
configuration.unstable_operations["update_quota"] = True
with ApiClient(configuration) as api_client:
    api_instance = UsageMeteringApi(api_client)
    response = api_instance.update_quota(
        quota_namespace="ai_credits", id="MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f", body=body
    )

    print(response)
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=python) and then save the example to `example.py` and run following commands:
    DD_SITE="datadoghq.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" python3 "example.py"
##### 

```ruby
# Update a usage quota returns "OK" response

require "datadog_api_client"
DatadogAPIClient.configure do |config|
  config.unstable_operations["v2.update_quota".to_sym] = true
end
api_instance = DatadogAPIClient::V2::UsageMeteringAPI.new

body = DatadogAPIClient::V2::UsageQuotaUpdateRequest.new({
  data: DatadogAPIClient::V2::UsageQuotaUpdateData.new({
    attributes: DatadogAPIClient::V2::UsageQuotaUpdateAttributes.new({
      enforced: false,
      usage_limit: 120000,
    }),
    id: "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f",
    type: DatadogAPIClient::V2::UsageQuotaType::QUOTAS,
  }),
})
p api_instance.update_quota("ai_credits", "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f", body)
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=ruby) and then save the example to `example.rb` and run following commands:
    DD_SITE="datadoghq.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" rb "example.rb"
##### 

```go
// Update a usage quota returns "OK" response

package main

import (
	"context"
	"encoding/json"
	"fmt"
	"os"

	"github.com/DataDog/datadog-api-client-go/v2/api/datadog"
	"github.com/DataDog/datadog-api-client-go/v2/api/datadogV2"
)

func main() {
	body := datadogV2.UsageQuotaUpdateRequest{
		Data: datadogV2.UsageQuotaUpdateData{
			Attributes: datadogV2.UsageQuotaUpdateAttributes{
				Enforced:   *datadog.NewNullableBool(datadog.PtrBool(false)),
				UsageLimit: *datadog.NewNullableInt64(datadog.PtrInt64(120000)),
			},
			Id:   "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f",
			Type: datadogV2.USAGEQUOTATYPE_QUOTAS,
		},
	}
	ctx := datadog.NewDefaultContext(context.Background())
	configuration := datadog.NewConfiguration()
	configuration.SetUnstableOperationEnabled("v2.UpdateQuota", true)
	apiClient := datadog.NewAPIClient(configuration)
	api := datadogV2.NewUsageMeteringApi(apiClient)
	resp, r, err := api.UpdateQuota(ctx, "ai_credits", "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f", body)

	if err != nil {
		fmt.Fprintf(os.Stderr, "Error when calling `UsageMeteringApi.UpdateQuota`: %v\n", err)
		fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r)
	}

	responseContent, _ := json.MarshalIndent(resp, "", "  ")
	fmt.Fprintf(os.Stdout, "Response from `UsageMeteringApi.UpdateQuota`:\n%s\n", responseContent)
}
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=go) and then save the example to `main.go` and run following commands:
    DD_SITE="datadoghq.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" go run "main.go"
##### 

```java
// Update a usage quota returns "OK" response

import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.UsageMeteringApi;
import com.datadog.api.client.v2.model.UsageQuotaResponse;
import com.datadog.api.client.v2.model.UsageQuotaType;
import com.datadog.api.client.v2.model.UsageQuotaUpdateAttributes;
import com.datadog.api.client.v2.model.UsageQuotaUpdateData;
import com.datadog.api.client.v2.model.UsageQuotaUpdateRequest;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = ApiClient.getDefaultApiClient();
    defaultClient.setUnstableOperationEnabled("v2.updateQuota", true);
    UsageMeteringApi apiInstance = new UsageMeteringApi(defaultClient);

    UsageQuotaUpdateRequest body =
        new UsageQuotaUpdateRequest()
            .data(
                new UsageQuotaUpdateData()
                    .attributes(
                        new UsageQuotaUpdateAttributes().enforced(false).usageLimit(120000L))
                    .id("MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f")
                    .type(UsageQuotaType.QUOTAS));

    try {
      UsageQuotaResponse result =
          apiInstance.updateQuota(
              "ai_credits", "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f", body);
      System.out.println(result);
    } catch (ApiException e) {
      System.err.println("Exception when calling UsageMeteringApi#updateQuota");
      System.err.println("Status code: " + e.getCode());
      System.err.println("Reason: " + e.getResponseBody());
      System.err.println("Response headers: " + e.getResponseHeaders());
      e.printStackTrace();
    }
  }
}
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=java) and then save the example to `Example.java` and run following commands:
    DD_SITE="datadoghq.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" java "Example.java"
##### 

```rust
// Update a usage quota returns "OK" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_usage_metering::UsageMeteringAPI;
use datadog_api_client::datadogV2::model::UsageQuotaType;
use datadog_api_client::datadogV2::model::UsageQuotaUpdateAttributes;
use datadog_api_client::datadogV2::model::UsageQuotaUpdateData;
use datadog_api_client::datadogV2::model::UsageQuotaUpdateRequest;

#[tokio::main]
async fn main() {
    let body = UsageQuotaUpdateRequest::new(UsageQuotaUpdateData::new(
        UsageQuotaUpdateAttributes::new()
            .enforced(Some(false))
            .usage_limit(Some(120000)),
        "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f".to_string(),
        UsageQuotaType::QUOTAS,
    ));
    let mut configuration = datadog::Configuration::new();
    configuration.set_unstable_operation_enabled("v2.UpdateQuota", true);
    let api = UsageMeteringAPI::with_config(configuration);
    let resp = api
        .update_quota(
            "ai_credits".to_string(),
            "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f".to_string(),
            body,
        )
        .await;
    if let Ok(value) = resp {
        println!("{:#?}", value);
    } else {
        println!("{:#?}", resp.unwrap_err());
    }
}
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=rust) and then save the example to `src/main.rs` and run following commands:
    DD_SITE="datadoghq.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" cargo run
##### 

```typescript
/**
 * Update a usage quota returns "OK" response
 */

import { client, v2 } from "@datadog/datadog-api-client";

const configuration = client.createConfiguration();
configuration.unstableOperations["v2.updateQuota"] = true;
const apiInstance = new v2.UsageMeteringApi(configuration);

const params: v2.UsageMeteringApiUpdateQuotaRequest = {
  body: {
    data: {
      attributes: {
        enforced: false,
        usageLimit: 120000,
      },
      id: "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f",
      type: "quotas",
    },
  },
  quotaNamespace: "ai_credits",
  id: "MjAfYWlfY3JlZGl0c1911c2VyX2hhbmRsZTpfX0FMTF9f",
};

apiInstance
  .updateQuota(params)
  .then((data: v2.UsageQuotaResponse) => {
    console.log(
      "API called successfully. Returned data: " + JSON.stringify(data)
    );
  })
  .catch((error: any) => console.error(error));
```

#### Instructions

First [install the library and its dependencies](https://docs.datadoghq.com/api/latest.md?code-lang=typescript) and then save the example to `example.ts` and run following commands:
    DD_SITE="datadoghq.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" tsc "example.ts"
{% /tab %}
