---
title: Upgrade hosts
description: Datadog, the leading service for cloud-scale monitoring.
breadcrumbs: Docs > API Reference > Fleet Automation
---

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

# Upgrade hosts{% #upgrade-hosts %}
Copy pageCopied
{% tab title="v2" %}

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

### Overview



Create and immediately start a new package upgrade on hosts matching the specified filter query.

This endpoint allows you to upgrade the Datadog Agent to a specific version on hosts matching the specified filter query.

The deployment is created and started automatically. The system:

1. Identifies all hosts matching the filter query.
1. Validates that the specified version is available.
1. Begins rolling out the package upgrade to the target hosts.

Returns a 400 if `filter_query` or `target_packages` is missing, a target package is missing a name or version, or the filter query does not match any host eligible for the upgrade. Returns a 409 if a conflicting upgrade is already running on one or more target hosts.
This endpoint requires all of the following permissions:`agent_upgrade_write``fleet_policies_write` 


### Request

#### Body Data (required)

Request payload containing the package upgrade details.

{% tab title="Model" %}

| Parent field    | Field                             | Type     | Description                                                                                     |
| --------------- | --------------------------------- | -------- | ----------------------------------------------------------------------------------------------- |
|                 | data [*required*]            | object   | Data for creating a new v2 package upgrade deployment.                                          |
| data            | attributes [*required*]      | object   | Attributes for creating a new v2 package upgrade deployment.                                    |
| attributes      | filter_query [*required*]    | string   | Query used to filter and select target hosts for the deployment. Uses the Datadog query syntax. |
| attributes      | target_packages [*required*] | [object] | List of packages and their target versions to deploy to the selected hosts.                     |
| target_packages | name [*required*]            | string   | The name of the package to deploy.                                                              |
| target_packages | version [*required*]         | string   | The target version of the package to deploy.                                                    |
| data            | type [*required*]            | enum     | The type of deployment resource. Allowed enum values: `deployment`                              |

{% /tab %}

{% tab title="Example" %}

```json
{
  "data": {
    "attributes": {
      "filter_query": "env:prod AND service:web",
      "target_packages": [
        {
          "name": "datadog-agent",
          "version": "7.52.0"
        }
      ]
    },
    "type": "deployment"
  }
}
```

{% /tab %}

### Response

{% tab title="201" %}
CREATED
{% tab title="Model" %}
Response containing the newly created deployment.

| Parent field      | Field                        | Type     | Description                                                                                                                                                                                                                                                                                                                                                                                                        |
| ----------------- | ---------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|                   | data [*required*]       | object   | A deployment in the v2 API response.                                                                                                                                                                                                                                                                                                                                                                               |
| data              | attributes [*required*] | object   | Attributes of a deployment in the v2 API response.                                                                                                                                                                                                                                                                                                                                                                 |
| attributes        | author                       | string   | Handle of the user who triggered the deployment.                                                                                                                                                                                                                                                                                                                                                                   |
| attributes        | config_operations            | [object] | Ordered list of configuration file operations applied by this deployment. Absent for package deployments, which have no configuration file operations.                                                                                                                                                                                                                                                             |
| config_operations | file_op [*required*]    | enum     | Type of file operation to perform on the target configuration file.                                                                                                                                                                                                                                                                                                                                                |
| config_operations | file_path [*required*]  | string   | Absolute path to the target configuration file on the host.                                                                                                                                                                                                                                                                                                                                                        |
| config_operations | patch                        | object   | Patch data in JSON format to apply to the configuration file. When using `merge-patch`, this object is merged with the existing configuration, allowing you to add, update, or override specific fields without replacing the entire file. The structure must match the target configuration file format (for example, YAML structure for Datadog Agent config). Not applicable when using the `delete` operation. |
| attributes        | duration_seconds             | int64    | Duration of the deployment in seconds, computed as `finished_at - started_at`. Zero if the deployment has not finished.                                                                                                                                                                                                                                                                                            |
| attributes        | error_summary                | string   | Top-level error message for the deployment. Populated only when the deployment has failed.                                                                                                                                                                                                                                                                                                                         |
| attributes        | estimated_finished_at        | int64    | Estimated completion time of the deployment as a Unix timestamp. Zero if not available.                                                                                                                                                                                                                                                                                                                            |
| attributes        | finished_at                  | int64    | Time the deployment finished as a Unix timestamp. Zero if not yet finished.                                                                                                                                                                                                                                                                                                                                        |
| attributes        | is_scheduled                 | boolean  | Whether this deployment was triggered by a schedule (`schedule_id` is non-empty).                                                                                                                                                                                                                                                                                                                                  |
| attributes        | query                        | string   | Query used to filter and select target hosts for the deployment.                                                                                                                                                                                                                                                                                                                                                   |
| attributes        | schedule_id                  | string   | Identifier of the schedule that triggered this deployment. Empty if triggered manually.                                                                                                                                                                                                                                                                                                                            |
| attributes        | started_at                   | int64    | Time the deployment started as a Unix timestamp. Zero if not yet started.                                                                                                                                                                                                                                                                                                                                          |
| attributes        | status                       | string   | Current high-level status of the deployment (for example, "pending", "running", "completed", "failed").                                                                                                                                                                                                                                                                                                            |
| attributes        | target_versions              | [string] | Package versions targeted by this deployment.                                                                                                                                                                                                                                                                                                                                                                      |
| attributes        | total_hosts                  | int64    | Total number of hosts targeted by this deployment.                                                                                                                                                                                                                                                                                                                                                                 |
| attributes        | update_type                  | string   | Type of update operation performed by this deployment (for example, "update_config_operations", "update_package").                                                                                                                                                                                                                                                                                                 |
| data              | id [*required*]         | string   | Unique identifier for the deployment.                                                                                                                                                                                                                                                                                                                                                                              |
| data              | type [*required*]       | enum     | The type of deployment resource. Allowed enum values: `deployment`                                                                                                                                                                                                                                                                                                                                                 |

{% /tab %}

{% tab title="Example" %}

```json
{
  "data": {
    "attributes": {
      "author": "alice@datadoghq.com",
      "config_operations": [
        {
          "file_op": "merge-patch",
          "file_path": "/datadog.yaml",
          "patch": {
            "apm_config": {
              "enabled": true
            },
            "log_level": "debug",
            "logs_enabled": true
          }
        }
      ],
      "duration_seconds": 1000,
      "error_summary": "A host failed to update",
      "estimated_finished_at": 1699999999,
      "finished_at": 0,
      "is_scheduled": true,
      "query": "env:prod AND service:web",
      "schedule_id": "sched-123",
      "started_at": 1699990000,
      "status": "pending",
      "target_versions": [
        "7.52.0"
      ],
      "total_hosts": 42,
      "update_type": "update_config_operations"
    },
    "id": "k7Q-3mX-p9Z",
    "type": "deployment"
  }
}
```

{% /tab %}

{% /tab %}

{% tab title="400" %}
Bad Request
{% 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 %}

{% tab title="401" %}
Unauthorized
{% 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 %}

{% tab title="403" %}
Forbidden
{% 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 %}

{% tab title="409" %}
Conflict
{% 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 %}

{% 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
# 
 \# Curl command curl -X POST "https://api.datadoghq.com/api/v2/fleet/deployments/upgrade" \
-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": {
      "filter_query": "env:prod AND service:web",
      "target_packages": [
        {
          "name": "datadog-agent",
          "version": "7.52.0"
        }
      ]
    },
    "type": "deployment"
  }
}
EOF 
                
##### 

```python
"""
Upgrade hosts returns "CREATED" response
"""

from datadog_api_client import ApiClient, Configuration
from datadog_api_client.v2.api.fleet_automation_api import FleetAutomationApi
from datadog_api_client.v2.model.fleet_deployment_package import FleetDeploymentPackage
from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_attributes import (
    FleetDeploymentPackageUpgradeV2Attributes,
)
from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_create import FleetDeploymentPackageUpgradeV2Create
from datadog_api_client.v2.model.fleet_deployment_package_upgrade_v2_create_request import (
    FleetDeploymentPackageUpgradeV2CreateRequest,
)
from datadog_api_client.v2.model.fleet_deployment_resource_type import FleetDeploymentResourceType

body = FleetDeploymentPackageUpgradeV2CreateRequest(
    data=FleetDeploymentPackageUpgradeV2Create(
        attributes=FleetDeploymentPackageUpgradeV2Attributes(
            filter_query="env:prod AND service:example-fleet-automation",
            target_packages=[
                FleetDeploymentPackage(
                    name="datadog-agent",
                    version="7.52.0",
                ),
            ],
        ),
        type=FleetDeploymentResourceType.DEPLOYMENT,
    ),
)

configuration = Configuration()
with ApiClient(configuration) as api_client:
    api_instance = FleetAutomationApi(api_client)
    response = api_instance.create_fleet_deployment_upgrade_v2(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
# Upgrade hosts returns "CREATED" response

require "datadog_api_client"
api_instance = DatadogAPIClient::V2::FleetAutomationAPI.new

body = DatadogAPIClient::V2::FleetDeploymentPackageUpgradeV2CreateRequest.new({
  data: DatadogAPIClient::V2::FleetDeploymentPackageUpgradeV2Create.new({
    attributes: DatadogAPIClient::V2::FleetDeploymentPackageUpgradeV2Attributes.new({
      filter_query: "env:prod AND service:example-fleet-automation",
      target_packages: [
        DatadogAPIClient::V2::FleetDeploymentPackage.new({
          name: "datadog-agent",
          version: "7.52.0",
        }),
      ],
    }),
    type: DatadogAPIClient::V2::FleetDeploymentResourceType::DEPLOYMENT,
  }),
})
p api_instance.create_fleet_deployment_upgrade_v2(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
// Upgrade hosts returns "CREATED" 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.FleetDeploymentPackageUpgradeV2CreateRequest{
		Data: datadogV2.FleetDeploymentPackageUpgradeV2Create{
			Attributes: datadogV2.FleetDeploymentPackageUpgradeV2Attributes{
				FilterQuery: "env:prod AND service:example-fleet-automation",
				TargetPackages: []datadogV2.FleetDeploymentPackage{
					{
						Name:    "datadog-agent",
						Version: "7.52.0",
					},
				},
			},
			Type: datadogV2.FLEETDEPLOYMENTRESOURCETYPE_DEPLOYMENT,
		},
	}
	ctx := datadog.NewDefaultContext(context.Background())
	configuration := datadog.NewConfiguration()
	apiClient := datadog.NewAPIClient(configuration)
	api := datadogV2.NewFleetAutomationApi(apiClient)
	resp, r, err := api.CreateFleetDeploymentUpgradeV2(ctx, body)

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

	responseContent, _ := json.MarshalIndent(resp, "", "  ")
	fmt.Fprintf(os.Stdout, "Response from `FleetAutomationApi.CreateFleetDeploymentUpgradeV2`:\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
// Upgrade hosts returns "CREATED" response

import com.datadog.api.client.ApiClient;
import com.datadog.api.client.ApiException;
import com.datadog.api.client.v2.api.FleetAutomationApi;
import com.datadog.api.client.v2.model.FleetDeploymentPackage;
import com.datadog.api.client.v2.model.FleetDeploymentPackageUpgradeV2Attributes;
import com.datadog.api.client.v2.model.FleetDeploymentPackageUpgradeV2Create;
import com.datadog.api.client.v2.model.FleetDeploymentPackageUpgradeV2CreateRequest;
import com.datadog.api.client.v2.model.FleetDeploymentResourceType;
import com.datadog.api.client.v2.model.FleetDeploymentV2CreateResponse;
import java.util.Collections;

public class Example {
  public static void main(String[] args) {
    ApiClient defaultClient = ApiClient.getDefaultApiClient();
    FleetAutomationApi apiInstance = new FleetAutomationApi(defaultClient);

    FleetDeploymentPackageUpgradeV2CreateRequest body =
        new FleetDeploymentPackageUpgradeV2CreateRequest()
            .data(
                new FleetDeploymentPackageUpgradeV2Create()
                    .attributes(
                        new FleetDeploymentPackageUpgradeV2Attributes()
                            .filterQuery("env:prod AND service:example-fleet-automation")
                            .targetPackages(
                                Collections.singletonList(
                                    new FleetDeploymentPackage()
                                        .name("datadog-agent")
                                        .version("7.52.0"))))
                    .type(FleetDeploymentResourceType.DEPLOYMENT));

    try {
      FleetDeploymentV2CreateResponse result = apiInstance.createFleetDeploymentUpgradeV2(body);
      System.out.println(result);
    } catch (ApiException e) {
      System.err.println(
          "Exception when calling FleetAutomationApi#createFleetDeploymentUpgradeV2");
      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
// Upgrade hosts returns "CREATED" response
use datadog_api_client::datadog;
use datadog_api_client::datadogV2::api_fleet_automation::FleetAutomationAPI;
use datadog_api_client::datadogV2::model::FleetDeploymentPackage;
use datadog_api_client::datadogV2::model::FleetDeploymentPackageUpgradeV2Attributes;
use datadog_api_client::datadogV2::model::FleetDeploymentPackageUpgradeV2Create;
use datadog_api_client::datadogV2::model::FleetDeploymentPackageUpgradeV2CreateRequest;
use datadog_api_client::datadogV2::model::FleetDeploymentResourceType;

#[tokio::main]
async fn main() {
    let body = FleetDeploymentPackageUpgradeV2CreateRequest::new(
        FleetDeploymentPackageUpgradeV2Create::new(
            FleetDeploymentPackageUpgradeV2Attributes::new(
                "env:prod AND service:example-fleet-automation".to_string(),
                vec![FleetDeploymentPackage::new(
                    "datadog-agent".to_string(),
                    "7.52.0".to_string(),
                )],
            ),
            FleetDeploymentResourceType::DEPLOYMENT,
        ),
    );
    let configuration = datadog::Configuration::new();
    let api = FleetAutomationAPI::with_config(configuration);
    let resp = api.create_fleet_deployment_upgrade_v2(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
/**
 * Upgrade hosts returns "CREATED" response
 */

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

const configuration = client.createConfiguration();
const apiInstance = new v2.FleetAutomationApi(configuration);

const params: v2.FleetAutomationApiCreateFleetDeploymentUpgradeV2Request = {
  body: {
    data: {
      attributes: {
        filterQuery: "env:prod AND service:example-fleet-automation",
        targetPackages: [
          {
            name: "datadog-agent",
            version: "7.52.0",
          },
        ],
      },
      type: "deployment",
    },
  },
};

apiInstance
  .createFleetDeploymentUpgradeV2(params)
  .then((data: v2.FleetDeploymentV2CreateResponse) => {
    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 %}
