---
title: "Duplicate an approval chain including all of its stages and settings"
method: POST
path: "/v1/org/{orgId}/approval-chain/{approvalChainId}/duplicate"
tags: ["approval"]
---

# Duplicate an approval chain including all of its stages and settings

`POST /v1/org/{orgId}/approval-chain/{approvalChainId}/duplicate`

## Request

- Base URL: `https://localhost`
- URL: `https://localhost/v1/org/{orgId}/approval-chain/{approvalChainId}/duplicate`
- Auth: none declared

## Path parameters

- `orgId` string, required
- `approvalChainId` string, required

## Response `201`

approval chain duplicated

- ApprovalChain
  - `id` string, required: globally unique id
  - `orgId` string, required: parent organization id
  - `entityId` string: entity id
  - `entityType` 'COMP_REVIEW' | 'SCENARIO' | 'TIMEOFF': entity type
  - `name` string, required: human-readable name of approval chain
  - `isPreview` boolean: isPreview specifies that this is a preview for implementations that use it (e.g. Compensation Reviews)
  - `fallbackApproverJobId` string: the jobId of the fallback approver
  - `fallbackApproverJobError` string: most recent error for fallback approver
  - `approvalNotifierGroups` ApprovalNotifierGroup[]: notifier groups with optional conditions for post-approval notification
    - `groupId` string, required: globally unique id for this notifier group
    - `userIds` string[], required: user ids to notify in this group
    - `inclusionBehavior` 'ONLY_INCLUDE_IF' | 'EXCLUDE_IF': condition behavior for this notifier group; null means always notify
    - `inclusionExpression` string: expression to evaluate for conditional notification
  - `createId` string: created by user id
  - `createBehalfId` string: created on behalf of user id
  - `createAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `createAt` string: created timestamp
  - `updateId` string: last updated by user id
  - `updateBehalfId` string: last updated on behalf of user id
  - `updateAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `updateAt` string: last updated timestamp
  - `deleteId` string: deleted by user id
  - `deleteBehalfId` string: deleted on behalf of user id
  - `deleteAttribution` Attribution
    - `principalUserId` string
    - `agentUserIds` string[]
    - `eventId` string
    - `aiChatId` string
    - `aiToolUseId` string
    - `channel` 'WEB' | 'MOBILE' | 'SLACK' | 'TEAMS' | 'MCP'
  - `deleteAt` string: deleted timestamp

## Other responses

- `401`: not authorized
- `403`: permission denied
- `404`: not found

---

[API](https://skmtc.dev/charthop/apis/charthop-api.md) · [All operations](https://skmtc.dev/charthop/apis/charthop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/charthop/apis/charthop-api/revisions/408971534d3f?raw)
