---
title: "Create an approval chain"
method: POST
path: "/v1/org/{orgId}/approval-chain"
tags: ["approval"]
---

# Create an approval chain

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

## Path parameters

- `orgId` string, required

## Query parameters

- `createDefaultStages` boolean

## Request body

- CreateApprovalChain
  - `entityId` string — entity id
  - `entityType` 'COMP_REVIEW' | 'SCENARIO' | 'TIMEOFF' — entity type
  - `name` string, required — human-readable name of approval chain
  - `isPreview` boolean, required — 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[], required — 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

## Response `201`

approval chain created

- 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

- `202` — snapshot currently building
- `400` — bad request
- `401` — not authorized
- `403` — permission denied
- `404` — not found

---

[API](https://skmtc.net/charthop/apis/charthop-api.md) · [All operations](https://skmtc.net/charthop/apis/charthop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/charthop/charthop-api/versions/50a1edd6b27e/schema)
