---
title: "Compare resources between environments"
method: POST
path: "/v2/environments/{targetEnvironmentId}/diff"
tags: ["Environments"]
---

# Compare resources between environments

`POST /v2/environments/{targetEnvironmentId}/diff`

Compares workflows and other resources between the source and target environments, returning detailed diff information including additions, modifications, and deletions.

## Path parameters

- `targetEnvironmentId` string, required

## Request body

- DiffEnvironmentRequestDto
  - `sourceEnvironmentId` string — Source environment ID to compare from. Defaults to the Development environment if not provided.

## Response `200`

OK

- DiffEnvironmentResponseDto
  - `sourceEnvironmentId` string, required — Source environment ID
  - `targetEnvironmentId` string, required — Target environment ID
  - `resources` ResourceDiffResultDto[], required — Diff resources by resource type
    - `resourceType` 'REGULAR' | 'ECHO' | 'BRIDGE', required — Type of the layout
    - `sourceResource` ResourceInfoDto
      - `id` string, nullable — Resource ID (workflow ID or step ID)
      - `name` string, nullable — Resource name (workflow name or step name)
      - `updatedBy` UserInfoDto
        - `_id` string, required — User ID
        - `firstName` string, required — User first name
        - `lastName` string, nullable — User last name
        - `externalId` string — User external ID
      - `updatedAt` string, date-time, nullable — When the resource was last updated
    - `targetResource` ResourceInfoDto
      - `id` string, nullable — Resource ID (workflow ID or step ID)
      - `name` string, nullable — Resource name (workflow name or step name)
      - `updatedBy` UserInfoDto
        - `_id` string, required — User ID
        - `firstName` string, required — User first name
        - `lastName` string, nullable — User last name
        - `externalId` string — User external ID
      - `updatedAt` string, date-time, nullable — When the resource was last updated
    - `changes` ResourceDiffDto[], required — List of specific changes for this resource
      - `sourceResource` ResourceInfoDto
        - `id` string, nullable — Resource ID (workflow ID or step ID)
        - `name` string, nullable — Resource name (workflow name or step name)
        - `updatedBy` UserInfoDto
          - `_id` string, required — User ID
          - `firstName` string, required — User first name
          - `lastName` string, nullable — User last name
          - `externalId` string — User external ID
        - `updatedAt` string, date-time, nullable — When the resource was last updated
      - `targetResource` ResourceInfoDto
        - `id` string, nullable — Resource ID (workflow ID or step ID)
        - `name` string, nullable — Resource name (workflow name or step name)
        - `updatedBy` UserInfoDto
          - `_id` string, required — User ID
          - `firstName` string, required — User first name
          - `lastName` string, nullable — User last name
          - `externalId` string — User external ID
        - `updatedAt` string, date-time, nullable — When the resource was last updated
      - `resourceType` 'REGULAR' | 'ECHO' | 'BRIDGE', required — Type of the layout
      - `action` 'added' | 'modified' | 'deleted' | 'unchanged' | 'moved', required — Type of change
      - `diffs` object — Detailed changes (only for modified resources)
        - `previous` object, nullable — Previous state of the resource (null for added resources)
        - `new` object, nullable — New state of the resource (null for deleted resources)
      - `stepType` string — Step type (only for step resources)
      - `previousIndex` number — Previous index in steps array (for moved/deleted steps)
      - `newIndex` number — New index in steps array (for moved/added steps)
    - `summary` DiffSummaryDto, required
      - `added` number, required — Number of added resources (workflows and steps)
      - `modified` number, required — Number of modified resources (workflows and steps)
      - `deleted` number, required — Number of deleted resources (workflows and steps)
      - `unchanged` number, required — Number of unchanged resources (workflows and steps)
    - `dependencies` ResourceDependencyDto[] — Dependencies that affect this resource
      - `resourceType` 'REGULAR' | 'ECHO' | 'BRIDGE', required — Type of the layout
      - `resourceId` string, required — ID of the dependent resource
      - `resourceName` string, required — Name of the dependent resource
      - `isBlocking` boolean, required — Whether this dependency blocks the operation
      - `reason` 'LAYOUT_REQUIRED_FOR_WORKFLOW' | 'LAYOUT_EXISTS_IN_TARGET' | 'AGENT_REQUIRED_FOR_WORKFLOW' | 'AGENT_EXISTS_IN_TARGET', required — Reason for the dependency
  - `summary` EnvironmentDiffSummaryDto, required
    - `totalEntities` number, required — Total number of entities compared
    - `totalChanges` number, required — Total number of changes detected
    - `hasChanges` boolean, required — Whether any changes were detected

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found
- `405` — Method Not Allowed
- `409` — Conflict
- `413` — Payload Too Large
- `414` — URI Too Long
- `415` — Unsupported Media Type
- `422` — Unprocessable Entity
- `429` — The client has sent too many requests in a given amount of time.
- `500` — Internal Server Error
- `503` — The server is currently unable to handle the request due to a temporary overload or scheduled maintenance, which will likely be alleviated after some delay.

---

[API](https://skmtc.net/novu/apis/deprecated-novu-api-use-openapi-json-yaml-instead.md) · [All operations](https://skmtc.net/novu/apis/deprecated-novu-api-use-openapi-json-yaml-instead/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/novu/deprecated-novu-api-use-openapi-json-yaml-instead/versions/986fe259fa85/schema)
