---
title: "Perform a bulk update on a number of jobs"
method: POST
path: "/v1/org/{orgId}/change/bulkupdate"
tags: ["change"]
---

# Perform a bulk update on a number of jobs

`POST /v1/org/{orgId}/change/bulkupdate`

## Path parameters

- `orgId` string, required

## Request body

- BulkUpdateRequest
  - `jobIds` string[], required — list of job ids to update
  - `update` JobUpdate, required
    - `addRelationships` JobRelationship[] — relationships to add
      - `jobId` string, required — destination job id
      - `type` 'MANAGER' | 'DIRECT' | 'INDIRECT_MANAGER' | 'INDIRECT' | 'NONE', required — type of relationship
    - `removeRelationships` JobRelationship[] — relationships to remove
      - `jobId` string, required — destination job id
      - `type` 'MANAGER' | 'DIRECT' | 'INDIRECT_MANAGER' | 'INDIRECT' | 'NONE', required — type of relationship
    - `addGroupIds` string[] — groups to add
    - `removeGroupIds` string[] — groups to remove
    - `setGroupIds` object — groups to set
    - `grant` StockGrant
      - `id` string, required — unique identifier of grant
      - `stock` string, required — ticker symbol of this stock
      - `date` string, date, required — date of grant
      - `vestStartDate` string, date — vesting start date of grant
      - `expireDate` string, date — expiration date of grant
      - `shares` number, required — number of shares granted
      - `price` number, required — per share strike price
      - `type` 'ISO' | 'NSO' | 'RSU' | 'SAR' | 'PERFORMANCE_SHARES' | 'PHANTOM_STOCK' | 'RSA', required — type of grant
      - `vestSchedule` string, required — vesting schedule
      - `originalPrice` number — original per share value of stock (grant price at time of issue)
      - `currentPrice` number — current per share value of stock
      - `vestedShares` number — current number of shares vested
      - `vestedSharesNextYear` number — number of shares vested one year from today
      - `vestedSharesByDate` object — number of shares vested, by future date
      - `vestEndDate` string, date — vesting end date
      - `cancelDate` string, date — cancellation date
      - `terminationDate` string, date — termination date — vesting freezes on this date when the holder separates
      - `lastExercisableDate` string, date — last date on which vested shares can be exercised; after this the grant is forfeited
      - `details` string — details of the grant (arbitrary text)
      - `description` string — human-readable description of vesting schedule
    - `timeOff` TimeOff
      - `id` string, required — unique id of a time off request
      - `startDate` string, date, required — start date of time off, inclusive
      - `endDate` string, date, required — end date of time off, inclusive
      - `days` number — number of days used
      - `hours` number — number of hours used
      - `type` string — type of time off
      - `note` string — notes on the time off
      - `approval` 'APPROVED' | 'PENDING' | 'CANCELLED' | 'REJECTED' | 'SUPERSEDED' — approval status of the time off
    - `title` string — new title
    - `comp` Comp
      - `baseComp` PayInterval
        - `interval` 'YEARLY' | 'MONTHLY' | 'WEEKLY' | 'DAILY' | 'HOURLY', required — Interval (annual or hourly)
        - `pay` Money, required
          - `amount` number, required
          - `currency` string, required
          - `places` integer
        - `hoursPerWeek` integer — working hours per week if interval=hourly
        - `weeksPerYear` integer — working weeks per year if interval=hourly
        - `monthsPerYear` integer — months per year if interval=month
        - `daysPerYear` integer — days per year if interval=day
      - `variableTargets` VariableComp[] — variable compensation (money or percent)
        - `type` 'BONUS' | 'COMMISSION', required — compensation type
        - `interval` 'YEARLY', required — compensation interval
      - `grantShares` integer — planned stock grant, in shares
      - `grantValue` integer — planned stock grant, in value (based on the stock's currency, not the comp)
      - `grantType` 'ISO' | 'NSO' | 'RSU' | 'SAR' | 'PERFORMANCE_SHARES' | 'PHANTOM_STOCK' | 'RSA' — planned stock grant type
    - `placement` 'NORMAL' | 'ASSISTANT' — new placement
    - `employment` 'FULL' | 'PART' | 'TEMP' | 'CONTRACT' | 'INTERN' | 'EXPAT' — new employment status
    - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE' — new view sensitivity
    - `startDatePlanned` string, date — planned start date
    - `startDatePlannedRemove` boolean — remove planned start date. if both startDatePlanned and startDatePlannedRemove are set, startDatePlanned takes precedence
    - `startDate` string, date — new expected start date - will update to person start date in future
    - `backfillPersonId` string — set who this job is backfilling
    - `jobCodeId` string — set (or unset) the job code for this job
    - `hasUnsetFields` boolean — set who this job is backfilling
    - `fields` object — custom fields values to set
  - `date` string, date, required — date of update
  - `scenarioId` string — scenario id
  - `note` string — note for update

## Response `200`

successful operation

- Process
  - `id` string, required — globally unique id
  - `orgId` string, required — parent org id
  - `label` string, required — human-readable label that identifies this process
  - `type` string, required — process type
  - `status` 'PENDING' | 'RUNNING' | 'DONE' | 'ERROR', required — current status of process
  - `filePath` string — data file path
  - `logPath` string — data log path
  - `runUserId` string, required — user id who is running the process
  - `parentProcessId` string — process id of parent process
  - `createId` string, required — created by user id (user who requested the process run)
  - `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, required — 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
  - `startAt` string — started at timestamp
  - `endAt` string — ended at timestamp
  - `message` string — status or error message
  - `progress` number, double — percent progress so far
  - `internalError` string — internal-only error message
  - `options` object, required — options passed to the process
  - `results` object — results summary for the process
  - `logDataList` LogData[] — list of log data that occurred during running of this process
    - `level` 'INFO' | 'WARN' | 'ERROR', required
    - `at` string, required — created timestamp
    - `message` string
    - `data` object, required
  - `state` object — process-specific state data
  - `summary` string — human-readable, searchable summary of what this process did
  - `appId` string — app id of the process
  - `uuid` string — unique ID of the process at queue time

## Other responses

- `400` — bad request
- `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/revisions/3040a9f4373f/schema)
