---
title: Bulk update work items
description: Applies a single action (such as changing priority, status, assignment, or archiving) to multiple work items at once.
breadcrumbs: Docs > API > Bulk update work items
---

> For the complete documentation index, see [llms.txt](https://dnd37xeb23o8n.cloudfront.net/stefon.simmons/docs-astro-web-10435/llms.txt).

# Bulk update work items

## v2 (latest)

| Datadog site      | API endpoint                                         |
| ----------------- | ---------------------------------------------------- |
| app.datadoghq.com | POST https://api.datadoghq.com/api/v2/cases/bulk     |
| us3.datadoghq.com | POST https://api.us3.datadoghq.com/api/v2/cases/bulk |
| us5.datadoghq.com | POST https://api.us5.datadoghq.com/api/v2/cases/bulk |
| app.datadoghq.eu  | POST https://api.datadoghq.eu/api/v2/cases/bulk      |
| ap1.datadoghq.com | POST https://api.ap1.datadoghq.com/api/v2/cases/bulk |
| ap2.datadoghq.com | POST https://api.ap2.datadoghq.com/api/v2/cases/bulk |
| uk1.datadoghq.com | POST https://api.uk1.datadoghq.com/api/v2/cases/bulk |
| app.ddog-gov.com  | POST https://api.ddog-gov.com/api/v2/cases/bulk      |
| us2.ddog-gov.com  | POST https://api.us2.ddog-gov.com/api/v2/cases/bulk  |

### Overview

Applies a single action (such as changing priority, status, assignment, or archiving) to multiple work items at once. The list of work item IDs and the action type with its payload are specified in the request body.

OAuth apps require the `cases_write` authorization [scope](https://dnd37xeb23o8n.cloudfront.net/stefon.simmons/docs-astro-web-10435/api/latest/scopes.md#case-management) to access this endpoint.

### Request

#### Body Data (required)

Work item bulk update request payload.

{% tabs %}
{% tab label="Model" %}
| Parent field         | Field                   | Type     | Description                                                                                                                                                                                                                                                                                                                       |
| -------------------- | ----------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|                      | data [*required*]       | object   | Data object wrapping the bulk update type and attributes.                                                                                                                                                                                                                                                                         |
| data                 | attributes [*required*] | object   | Attributes for the bulk update, specifying which work items to update and the action to apply.                                                                                                                                                                                                                                    |
| attributes           | case_ids [*required*]   | [string] | An array of work item identifiers to apply the bulk action to.                                                                                                                                                                                                                                                                    |
| attributes           | payload                 | object   | A key-value map of action-specific parameters. The required keys depend on the action type (for example, `priority` for the priority action, `assignee_id` for assign).                                                                                                                                                           |
| additionalProperties | <any-key>               | string   |                                                                                                                                                                                                                                                                                                                                   |
| attributes           | type [*required*]       | enum     | The type of action to apply in a bulk update. Allowed values are `priority`, `status`, `assign`, `unassign`, `archive`, `unarchive`, `jira`, `servicenow`, `linear`, `update_project`. Allowed enum values: `priority`, `status`, `assign`, `unassign`, `archive`, `unarchive`, `jira`, `servicenow`, `linear`, `update_project`. |
| data                 | type [*required*]       | enum     | JSON:API resource type for bulk work item operations. Allowed enum values: `bulk`.                                                                                                                                                                                                                                                |
{% /tab %}

{% tab label="Example" %}
```json
{
  "data": {
    "attributes": {
      "case_ids": [
        "case-id-1",
        "case-id-2"
      ],
      "payload": {
        "<any-key>": "string"
      },
      "type": "priority"
    },
    "type": "bulk"
  }
}
```
{% /tab %}
{% /tabs %}

### Response

{% tabs %}
{% tab label="200" %}
OK
{% /tab %}

{% tab label="400" %}
Bad Request

{% tabs %}
{% tab label="Model" %}
API error response.

| Field               | Type     | Description       |
| ------------------- | -------- | ----------------- |
| errors [*required*] | [string] | A list of errors. |
{% /tab %}

{% tab label="Example" %}
```json
{
  "errors": [
    "Bad Request"
  ]
}
```
{% /tab %}
{% /tabs %}
{% /tab %}

{% tab label="401" %}
Unauthorized

{% tabs %}
{% tab label="Model" %}
API error response.

| Field               | Type     | Description       |
| ------------------- | -------- | ----------------- |
| errors [*required*] | [string] | A list of errors. |
{% /tab %}

{% tab label="Example" %}
```json
{
  "errors": [
    "Bad Request"
  ]
}
```
{% /tab %}
{% /tabs %}
{% /tab %}

{% tab label="403" %}
Forbidden

{% tabs %}
{% tab label="Model" %}
API error response.

| Field               | Type     | Description       |
| ------------------- | -------- | ----------------- |
| errors [*required*] | [string] | A list of errors. |
{% /tab %}

{% tab label="Example" %}
```json
{
  "errors": [
    "Bad Request"
  ]
}
```
{% /tab %}
{% /tabs %}
{% /tab %}

{% tab label="404" %}
Not Found

{% tabs %}
{% tab label="Model" %}
API error response.

| Field               | Type     | Description       |
| ------------------- | -------- | ----------------- |
| errors [*required*] | [string] | A list of errors. |
{% /tab %}

{% tab label="Example" %}
```json
{
  "errors": [
    "Bad Request"
  ]
}
```
{% /tab %}
{% /tabs %}
{% /tab %}

{% tab label="429" %}
Too many requests

{% tabs %}
{% tab label="Model" %}
API error response.

| Field               | Type     | Description       |
| ------------------- | -------- | ----------------- |
| errors [*required*] | [string] | A list of errors. |
{% /tab %}

{% tab label="Example" %}
```json
{
  "errors": [
    "Bad Request"
  ]
}
```
{% /tab %}
{% /tabs %}
{% /tab %}
{% /tabs %}

### Code Example

{% tabs %}
{% tab label="Curl" %}
```bash
# Set your Datadog site and credentials
export DD_SITE="datadoghq.com" # Or us3.datadoghq.com, us5.datadoghq.com, datadoghq.eu, ap1.datadoghq.com, ap2.datadoghq.com, uk1.datadoghq.com, ddog-gov.com, us2.ddog-gov.com
# Use a Personal Access Token or Service Access Token
export DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>"

curl -X POST "https://api.${DD_SITE}/api/v2/cases/bulk" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${DD_BEARER_TOKEN}" \
-d @- << EOF
{
  "data": {
    "attributes": {
      "case_ids": [
        "case-id-1",
        "case-id-2"
      ],
      "payload": {
        "priority": "P1"
      },
      "type": "priority"
    },
    "type": "bulk"
  }
}
EOF
```
{% /tab %}

{% tab label="Go" %}
```go
// Bulk update cases returns "OK" response

package main

import (
	"context"
	"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.CaseBulkUpdateRequest{
		Data: datadogV2.CaseBulkUpdateRequestData{
			Attributes: datadogV2.CaseBulkUpdateRequestAttributes{
				CaseIds: []string{
					"case-id-1",
					"case-id-2",
				},
				Payload: map[string]string{
					"priority": "P1",
				},
				Type: datadogV2.CASEBULKACTIONTYPE_PRIORITY,
			},
			Type: datadogV2.CASEBULKRESOURCETYPE_BULK,
		},
	}
	ctx := datadog.NewDefaultContext(context.Background())
	ctx = context.WithValue(ctx, datadog.ContextAccessToken, os.Getenv("DD_BEARER_TOKEN"))
	configuration := datadog.NewConfiguration()
	apiClient := datadog.NewAPIClient(configuration)
	api := datadogV2.NewCaseManagementApi(apiClient)
	r, err := api.BulkUpdateCases(ctx, body)

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

#### Instructions

First [install the library and its dependencies](https://dnd37xeb23o8n.cloudfront.net/api/latest.md?code-lang=go) and then save the example to `main.go` and run following commands:

```bash
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" go run "main.go"
```
{% /tab %}

{% tab label="Java" %}
```java
// Bulk update cases returns "OK" response

import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.CaseManagementApi;
import com.datadog.api.client.v2.model.CaseBulkActionType;
import com.datadog.api.client.v2.model.CaseBulkResourceType;
import com.datadog.api.client.v2.model.CaseBulkUpdateRequest;
import com.datadog.api.client.v2.model.CaseBulkUpdateRequestAttributes;
import com.datadog.api.client.v2.model.CaseBulkUpdateRequestData;
import java.util.Arrays;
import java.util.Map;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = ApiClient.getDefaultApiClient();
    defaultClient.setAccessToken(System.getenv("DD_BEARER_TOKEN"));
    CaseManagementApi apiInstance = new CaseManagementApi(defaultClient);

    CaseBulkUpdateRequest body =
        new CaseBulkUpdateRequest()
            .data(
                new CaseBulkUpdateRequestData()
                    .attributes(
                        new CaseBulkUpdateRequestAttributes()
                            .caseIds(Arrays.asList("case-id-1", "case-id-2"))
                            .payload(Map.ofEntries(Map.entry("priority", "P1")))
                            .type(CaseBulkActionType.PRIORITY))
                    .type(CaseBulkResourceType.BULK));

    try {
      apiInstance.bulkUpdateCases(body);
    } catch (ApiException e) {
      System.err.println("Exception when calling CaseManagementApi#bulkUpdateCases");
      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://dnd37xeb23o8n.cloudfront.net/api/latest.md?code-lang=java) and then save the example to `Example.java` and run following commands:

```bash
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" java "Example.java"
```
{% /tab %}

{% tab label="Python" %}
```python
"""
Bulk update cases returns "OK" response
"""

from os import environ
from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.case_management_api import CaseManagementApi
from datadog_api_client.v2.model.case_bulk_action_type import CaseBulkActionType
from datadog_api_client.v2.model.case_bulk_resource_type import CaseBulkResourceType
from datadog_api_client.v2.model.case_bulk_update_request import CaseBulkUpdateRequest
from datadog_api_client.v2.model.case_bulk_update_request_attributes import CaseBulkUpdateRequestAttributes
from datadog_api_client.v2.model.case_bulk_update_request_data import CaseBulkUpdateRequestData

body = CaseBulkUpdateRequest(
    data=CaseBulkUpdateRequestData(
        attributes=CaseBulkUpdateRequestAttributes(
            case_ids=[
                "case-id-1",
                "case-id-2",
            ],
            payload=dict(
                priority="P1",
            ),
            type=CaseBulkActionType.PRIORITY,
        ),
        type=CaseBulkResourceType.BULK,
    ),
)

configuration = Configuration()
configuration.access_token = environ["DD_BEARER_TOKEN"]
with ApiClient(configuration) as api_client:
    api_instance = CaseManagementApi(api_client)
    api_instance.bulk_update_cases(body=body)
```

#### Instructions

First [install the library and its dependencies](https://dnd37xeb23o8n.cloudfront.net/api/latest.md?code-lang=python) and then save the example to `example.py` and run following commands:

```bash
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" python3 "example.py"
```
{% /tab %}

{% tab label="Ruby" %}
```ruby
# Bulk update cases returns "OK" response

require "datadog_api_client"
DatadogAPIClient.configure do |config|
  config.access_token = ENV["DD_BEARER_TOKEN"]
end
api_instance = DatadogAPIClient::V2::CaseManagementAPI.new

body = DatadogAPIClient::V2::CaseBulkUpdateRequest.new({
  data: DatadogAPIClient::V2::CaseBulkUpdateRequestData.new({
    attributes: DatadogAPIClient::V2::CaseBulkUpdateRequestAttributes.new({
      case_ids: [
        "case-id-1",
        "case-id-2",
      ],
      payload: {
        priority: "P1",
      },
      type: DatadogAPIClient::V2::CaseBulkActionType::PRIORITY,
    }),
    type: DatadogAPIClient::V2::CaseBulkResourceType::BULK,
  }),
})
p api_instance.bulk_update_cases(body)
```

#### Instructions

First [install the library and its dependencies](https://dnd37xeb23o8n.cloudfront.net/api/latest.md?code-lang=ruby) and then save the example to `example.rb` and run following commands:

```bash
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" rb "example.rb"
```
{% /tab %}

{% tab label="Rust" %}
```rust
// Bulk update cases returns "OK" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_case_management::CaseManagementAPI;
use datadog_api_client::datadogV2::model::CaseBulkActionType;
use datadog_api_client::datadogV2::model::CaseBulkResourceType;
use datadog_api_client::datadogV2::model::CaseBulkUpdateRequest;
use datadog_api_client::datadogV2::model::CaseBulkUpdateRequestAttributes;
use datadog_api_client::datadogV2::model::CaseBulkUpdateRequestData;
use std::collections::BTreeMap;

#[tokio::main]
async fn main() {
    let body = CaseBulkUpdateRequest::new(CaseBulkUpdateRequestData::new(
        CaseBulkUpdateRequestAttributes::new(
            vec!["case-id-1".to_string(), "case-id-2".to_string()],
            CaseBulkActionType::PRIORITY,
        )
        .payload(BTreeMap::from([("priority".to_string(), "P1".to_string())])),
        CaseBulkResourceType::BULK,
    ));
    let configuration = datadog::Configuration::new();
    let api = CaseManagementAPI::with_config(configuration);
    let resp = api.bulk_update_cases(body).await;
    if let Ok(value) = resp {
        println!("{:#?}", value);
    } else {
        println!("{:#?}", resp.unwrap_err());
    }
}
```

#### Instructions

First [install the library and its dependencies](https://dnd37xeb23o8n.cloudfront.net/api/latest.md?code-lang=rust) and then save the example to `src/main.rs` and run following commands:

```bash
DD_SITE="datadoghq.com" DD_API_KEY="<DD_API_KEY>" DD_APP_KEY="<DD_APP_KEY>" cargo run
```
{% /tab %}

{% tab label="TypeScript" %}
```typescript
/**
 * Bulk update cases returns "OK" response
 */

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

const configuration = client.createConfiguration({
  authMethods: {
    AuthZ: {
      accessToken: process.env.DD_BEARER_TOKEN as string,
    },
  },
});
const apiInstance = new v2.CaseManagementApi(configuration);

const params: v2.CaseManagementApiBulkUpdateCasesRequest = {
  body: {
    data: {
      attributes: {
        caseIds: ["case-id-1", "case-id-2"],
        payload: {
          priority: "P1",
        },
        type: "priority",
      },
      type: "bulk",
    },
  },
};

apiInstance
  .bulkUpdateCases(params)
  .then((data: any) => {
    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://dnd37xeb23o8n.cloudfront.net/api/latest.md?code-lang=typescript) and then save the example to `example.ts` and run following commands:

```bash
DD_SITE="datadoghq.com" DD_BEARER_TOKEN="<PERSONAL_ACCESS_TOKEN OR SERVICE_ACCESS_TOKEN>" tsc "example.ts"
```
{% /tab %}
{% /tabs %}
