---
title: "Copy a goal and its targets into a new goal"
method: POST
path: "/v1/org/{orgId}/goal/{goalId}/copy"
tags: ["goal"]
---

# Copy a goal and its targets into a new goal

`POST /v1/org/{orgId}/goal/{goalId}/copy`

## Request

- Base URL: `https://localhost`
- URL: `https://localhost/v1/org/{orgId}/goal/{goalId}/copy`
- Auth: none declared
- TypeScript: <https://skmtc.dev/charthop/apis/charthop-api/docs/v1/org/:orgId/goal/:goalId/copy/post.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `orgId` string, required
- `goalId` string, required

## Request body

- UpdateGoal
  - `goalTypeId` string: goal type
  - `parentGoalId` string: parent goal id, for cascading goals
  - `originalGoalId` string: original goal id, linking this goal to the goal it was copied from
  - `relatedGoalIds` string[]: list of other goals that are related to this goal
  - `ownerPersonIds` string[]: list of persons who are responsible for this goal
  - `supportPersonIds` string[]: list of persons who help support this goal
  - `groupIds` string[]: list of groups who are responsible for this goal
  - `label` string: human-readable name of the goal
  - `labelTr` Translations
    - `values` object, required
  - `slug` string: url-safe slug for the goal, auto-generated from label if not provided
  - `description` string: human-readable description of the goal
  - `descriptionTr` Translations
    - `values` object, required
  - `startDate` string, date: start date for this goal
  - `endDate` string, date: end date for this goal
  - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE': sensitivity level of goal
  - `shareAccess` ShareAccess[]: users who are specifically granted permission to view or edit this goal
    - `access` 'NONE' | 'LIMITED_READ' | 'LIMITED_WRITE' | 'STANDARD_READ' | 'STANDARD_WRITE' | 'COMPENSATION_READ' | 'FULL_READ' | 'COMP_PLANNING_PARTICIPANT' | 'COMPENSATION_WRITE' | 'WRITE' | 'COMPENSATION_OWNER' | 'OWNER', required: access permission level
    - `userId` string: user id
    - `groupId` string: group id
    - `everyone` boolean: grant this access level to everyone in the org (mutually exclusive with userId/groupId)
    - `fields` string: fields
  - `progressUpdateConfig` GoalProgressUpdateConfig
    - `schedule` string, required: schedule to send progress reminders, in crontab format
    - `messageChannel` MessageChannelConfig
      - `channels` string[], required
      - `alwaysEmail` boolean, required
    - `message` string: custom message, if any, to include with progress reminders
    - `messageTr` Translations
      - `values` object, required

## Response `201`

created

- Goal
  - `id` string, required: globally unique id
  - `orgId` string, required: parent organization id
  - `status` 'DRAFT' | 'ACTIVE' | 'DONE', required: status
  - `goalTypeId` string, required: goal type
  - `parentGoalId` string: parent goal id, for cascading goals
  - `originalGoalId` string: original goal id, linking this goal to the goal it was copied from
  - `relatedGoalIds` string[]: list of other goals that are related to this goal
  - `ownerPersonIds` string[]: list of persons who are responsible for this goal
  - `supportPersonIds` string[]: list of persons who help support this goal
  - `groupIds` string[]: list of groups who are responsible for this goal
  - `label` string, required: human-readable name of the goal
  - `labelTr` Translations
    - `values` object, required
  - `slug` string, required: url-safe slug for the goal, auto-generated from label if not provided
  - `description` string: human-readable description of the goal
  - `descriptionTr` Translations
    - `values` object, required
  - `startDate` string, date, required: start date for this goal
  - `endDate` string, date, required: end date for this goal
  - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE', required: sensitivity level of goal
  - `shareAccess` ShareAccess[], required: users who are specifically granted permission to view or edit this goal
    - `access` 'NONE' | 'LIMITED_READ' | 'LIMITED_WRITE' | 'STANDARD_READ' | 'STANDARD_WRITE' | 'COMPENSATION_READ' | 'FULL_READ' | 'COMP_PLANNING_PARTICIPANT' | 'COMPENSATION_WRITE' | 'WRITE' | 'COMPENSATION_OWNER' | 'OWNER', required: access permission level
    - `userId` string: user id
    - `groupId` string: group id
    - `everyone` boolean: grant this access level to everyone in the org (mutually exclusive with userId/groupId)
    - `fields` string: fields
  - `progressUpdateConfig` GoalProgressUpdateConfig
    - `schedule` string, required: schedule to send progress reminders, in crontab format
    - `messageChannel` MessageChannelConfig
      - `channels` string[], required
      - `alwaysEmail` boolean, required
    - `message` string: custom message, if any, to include with progress reminders
    - `messageTr` Translations
      - `values` object, required
  - `progressSummary` GoalProgressSummary
    - `id` string
    - `percent` number
    - `confidence` integer
    - `done` integer
    - `progressAt` string
    - `at` string
    - `actuals` GoalTargetActual[]
      - `goalTargetId` string, required
      - `value` union
        - string
        - number
        - boolean
    - `forecasts` GoalProgressForecast[]
      - `goalTargetId` string, required
      - `type` 'WORST' | 'COMMIT' | 'CALL' | 'LIKELY' | 'BEST', required
      - `label` string
      - `value` union, required
        - string
        - number
        - boolean
      - `labelTr` Translations
        - `values` object, required
    - `targetValues` GoalTargetWithValue[]
      - `goalTargetId` string, required
      - `label` string, required
      - `value` union, required
        - string
        - number
        - boolean
      - `color` string
      - `labelTr` Translations
        - `values` object, required
    - `comment` string
  - `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

- `400`: invalid data
- `401`: not authorized
- `403`: permission denied
- `404`: not found

## Changes

- **2026-08-04** `b0fbaa594067`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/charthop/apis/charthop-api/changes/v1/org/:orgId/goal/:goalId/copy/post.md)

---

[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/5abf11116bbb?raw)
