> This page is for Developers.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://zuora.ferndocs.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://zuora.ferndocs.com/_mcp/server.

# Compare and deploy a source tenant to a target tenant

POST https://rest.test.zuora.com/deployment-manager/deployments/tenants
Content-Type: multipart/form-data

Compare and deploy a source tenant to a target tenant.


Reference: https://zuora.ferndocs.com/developers/api-reference/zuora-api/deployment-manager/metadata-deployment/compare-deploy-tenant

## Authentication

- `Authorization` header (bearer token, required) — Use `Bearer {{token}}` in the `Authorization` header for authentication.

## Servers

- `https://rest.test.zuora.com` (US Developer & Central Sandbox (incl. Test Drive), default)
- `https://rest.sandbox.na.zuora.com` (US API Sandbox Cloud 1)
- `https://rest.apisandbox.zuora.com` (US API Sandbox Cloud 2)
- `https://rest.na.zuora.com` (US Production Cloud 1)
- `https://rest.zuora.com` (US Production Cloud 2)
- `https://rest.test.eu.zuora.com` (EU Developer & Central Sandbox)
- `https://rest.sandbox.eu.zuora.com` (EU API Sandbox)
- `https://rest.eu.zuora.com` (EU Production)
- `https://rest.test.ap.zuora.com` (APAC Developer & Central Sandbox)
- `https://rest.ap.zuora.com` (APAC Production)

## Request

### Headers

- `Zuora-Entity-Ids` (string, optional) — An entity ID. If you have [Zuora Multi-entity](https://knowledgecenter.zuora.com/BB_Introducing_Z_Business/Multi-entity) enabled and the OAuth token is valid for more than one entity, you must use this header to specify which entity to perform the operation in. If the OAuth token is only valid for a single entity, or you do not have Zuora Multi-entity enabled, you do not need to set this header.

### Body (multipart/form-data)

This endpoint expects a multipart form.

- `name` (string, required) — Deployment's name.
- `description` (string, required) — Deployment's description.
- `sendEmail` (boolean, required) — Specifies if an email should be sent.
- `emails` (string, optional) — If sendEmail parameter is set to true, comma separated values of emails can be specified. Example email1@test.com,email2@test.com.
- `comments` (string, optional) — Content of the email to be sent.
- `settings` (boolean, required) — Specified if settings module should be considered in the deployment process.
- `notifications` (boolean, required) — Specified if notifications module should be considered in the deployment process.
- `workflows` (boolean, required) — Specified if workflows module should be considered in the deployment process.
- `customFields` (boolean, required) — Specified if customFields module should be considered in the deployment process.
- `customObjects` (boolean, optional) — Specified if customObjects module should be considered in the deployment process.
- `productCatalog` (boolean, required) — Specified if productCatalog module should be considered in the deployment process.
- `taxation` (boolean, optional) — Specified if taxation module should be considered in the deployment process.
- `userRoles` (boolean, required) — Specified if userRoles module should be considered in the deployment process.
- `reporting` (boolean, required) — Specified if reporting module should be considered in the deployment process.
- `sourceTenantId` (string, required) — Id of the source tenant.

## Response

### 200

OK

- `id` (string, optional) — ID of the Deployment Manager migration process
- `status` (enum, optional) — Status of the Deployment Manager migration process
  - Allowed values: `DEPLOYING`, `REVERTING`, `PARTIALLY-REVERTED`, `FAILED`, `ROLLBACK-FAILED`, `REVERTED`, `COMPARING`, `SUBMITTED`, `SKIPPED`, `IDENTICAL`, `COMPARE-DONE`, `COMPARE-FAILED`, `CANCELLED`

## Examples

**Request**

```json
{
  "customFields": true,
  "description": "string",
  "name": "string",
  "notifications": true,
  "productCatalog": true,
  "reporting": true,
  "sendEmail": true,
  "settings": true,
  "sourceTenantId": "string",
  "userRoles": true,
  "workflows": true
}
```

**Response**

```json
{
  "id": "8039d54b-da6f-4d80-88d5-06220c42861f",
  "status": "DEPLOYING"
}
```

**SDK Code**

```python Metadata Deployment_CompareDeployTenant_example
import requests

url = "https://rest.test.zuora.com/deployment-manager/deployments/tenants"

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"comments\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customFields\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customObjects\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"description\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"emails\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"notifications\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productCatalog\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reporting\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sendEmail\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"settings\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourceTenantId\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"taxation\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userRoles\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"workflows\"\r\n\r\ntrue\r\n-----011000010111000001101001--\r\n"
headers = {
    "Authorization": "Bearer <token>",
    "Content-Type": "multipart/form-data; boundary=---011000010111000001101001"
}

response = requests.post(url, data=payload, headers=headers)

print(response.json())
```

```javascript Metadata Deployment_CompareDeployTenant_example
const url = 'https://rest.test.zuora.com/deployment-manager/deployments/tenants';
const form = new FormData();
form.append('comments', '');
form.append('customFields', 'true');
form.append('customObjects', '');
form.append('description', 'string');
form.append('emails', '');
form.append('name', 'string');
form.append('notifications', 'true');
form.append('productCatalog', 'true');
form.append('reporting', 'true');
form.append('sendEmail', 'true');
form.append('settings', 'true');
form.append('sourceTenantId', 'string');
form.append('taxation', '');
form.append('userRoles', 'true');
form.append('workflows', 'true');

const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};

options.body = form;

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go Metadata Deployment_CompareDeployTenant_example
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://rest.test.zuora.com/deployment-manager/deployments/tenants"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"comments\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customFields\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customObjects\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"description\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"emails\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"notifications\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productCatalog\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reporting\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sendEmail\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"settings\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourceTenantId\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"taxation\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userRoles\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"workflows\"\r\n\r\ntrue\r\n-----011000010111000001101001--\r\n")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby Metadata Deployment_CompareDeployTenant_example
require 'uri'
require 'net/http'

url = URI("https://rest.test.zuora.com/deployment-manager/deployments/tenants")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"comments\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customFields\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customObjects\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"description\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"emails\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"notifications\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productCatalog\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reporting\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sendEmail\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"settings\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourceTenantId\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"taxation\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userRoles\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"workflows\"\r\n\r\ntrue\r\n-----011000010111000001101001--\r\n"

response = http.request(request)
puts response.read_body
```

```java Metadata Deployment_CompareDeployTenant_example
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://rest.test.zuora.com/deployment-manager/deployments/tenants")
  .header("Authorization", "Bearer <token>")
  .body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"comments\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customFields\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customObjects\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"description\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"emails\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"notifications\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productCatalog\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reporting\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sendEmail\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"settings\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourceTenantId\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"taxation\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userRoles\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"workflows\"\r\n\r\ntrue\r\n-----011000010111000001101001--\r\n")
  .asString();
```

```php Metadata Deployment_CompareDeployTenant_example
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://rest.test.zuora.com/deployment-manager/deployments/tenants', [
  'multipart' => [
    [
        'name' => 'customFields',
        'contents' => 'true'
    ],
    [
        'name' => 'description',
        'contents' => 'string'
    ],
    [
        'name' => 'name',
        'contents' => 'string'
    ],
    [
        'name' => 'notifications',
        'contents' => 'true'
    ],
    [
        'name' => 'productCatalog',
        'contents' => 'true'
    ],
    [
        'name' => 'reporting',
        'contents' => 'true'
    ],
    [
        'name' => 'sendEmail',
        'contents' => 'true'
    ],
    [
        'name' => 'settings',
        'contents' => 'true'
    ],
    [
        'name' => 'sourceTenantId',
        'contents' => 'string'
    ],
    [
        'name' => 'userRoles',
        'contents' => 'true'
    ],
    [
        'name' => 'workflows',
        'contents' => 'true'
    ]
  ]
  'headers' => [
    'Authorization' => 'Bearer <token>',
  ],
]);

echo $response->getBody();
```

```csharp Metadata Deployment_CompareDeployTenant_example
using RestSharp;

var client = new RestClient("https://rest.test.zuora.com/deployment-manager/deployments/tenants");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddParameter("undefined", "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"comments\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customFields\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"customObjects\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"description\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"emails\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"notifications\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"productCatalog\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"reporting\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sendEmail\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"settings\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"sourceTenantId\"\r\n\r\nstring\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"taxation\"\r\n\r\n\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"userRoles\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"workflows\"\r\n\r\ntrue\r\n-----011000010111000001101001--\r\n", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift Metadata Deployment_CompareDeployTenant_example
import Foundation

let headers = ["Authorization": "Bearer <token>"]
let parameters = [
  [
    "name": "comments",
    "value": 
  ],
  [
    "name": "customFields",
    "value": "true"
  ],
  [
    "name": "customObjects",
    "value": 
  ],
  [
    "name": "description",
    "value": "string"
  ],
  [
    "name": "emails",
    "value": 
  ],
  [
    "name": "name",
    "value": "string"
  ],
  [
    "name": "notifications",
    "value": "true"
  ],
  [
    "name": "productCatalog",
    "value": "true"
  ],
  [
    "name": "reporting",
    "value": "true"
  ],
  [
    "name": "sendEmail",
    "value": "true"
  ],
  [
    "name": "settings",
    "value": "true"
  ],
  [
    "name": "sourceTenantId",
    "value": "string"
  ],
  [
    "name": "taxation",
    "value": 
  ],
  [
    "name": "userRoles",
    "value": "true"
  ],
  [
    "name": "workflows",
    "value": "true"
  ]
]

let boundary = "---011000010111000001101001"

var body = ""
var error: NSError? = nil
for param in parameters {
  let paramName = param["name"]!
  body += "--\(boundary)\r\n"
  body += "Content-Disposition:form-data; name=\"\(paramName)\""
  if let filename = param["fileName"] {
    let contentType = param["content-type"]!
    let fileContent = String(contentsOfFile: filename, encoding: String.Encoding.utf8)
    if (error != nil) {
      print(error as Any)
    }
    body += "; filename=\"\(filename)\"\r\n"
    body += "Content-Type: \(contentType)\r\n\r\n"
    body += fileContent
  } else if let paramValue = param["value"] {
    body += "\r\n\r\n\(paramValue)"
  }
}

let request = NSMutableURLRequest(url: NSURL(string: "https://rest.test.zuora.com/deployment-manager/deployments/tenants")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```