---
title: "Update an existing budget"
method: PATCH
path: "/v1/org/{orgId}/budget/{budgetId}"
tags: ["budget"]
---

# Update an existing budget

`PATCH /v1/org/{orgId}/budget/{budgetId}`

## Path parameters

- `orgId` string, required
- `budgetId` string, required

## Query parameters

- `date` string, date

## Request body

- UpdateBudget
  - `slug` string — url-safe slug for the budget, auto-generated from label if not provided
  - `label` string — human-readable label for the budget
  - `ownerPersonIds` string[] — list of persons who own this budget
  - `groupIds` string[] — list of group IDs (e.g. department) for this budget
  - `color` string — color of budget
  - `startDate` string, date — start date of the budget
  - `endDate` string, date — end date of the budget
  - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE' — sensitivity level of budget
  - `shareAccess` ShareAccess[] — users who are specifically granted permission to view or edit this budget
    - `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
    - `fields` string — fields
  - `costExpr` string — calculation to compute cost
  - `costBasis` 'ANNUALIZED' | 'PERIOD_TOTAL' — cost measurement basis for this budget; null inherits the org default
  - `status` 'DRAFT' | 'ACTIVE' | 'ARCHIVED' — status of the budget
  - `amount` Money
    - `amount` number, required
    - `currency` string, required
    - `places` integer
  - `baselinedAt` string — instant this budget first became ACTIVE, freezing its baseline (null while never activated); set once by the server on the first DRAFT->ACTIVE transition, never re-stamped (sc-123222)

## Response `200`

updated

- Budget
  - `id` string, required — globally unique id
  - `orgId` string, required — parent organization id
  - `slug` string, required — url-safe slug for the budget, auto-generated from label if not provided
  - `label` string — human-readable label for the budget
  - `ownerPersonIds` string[] — list of persons who own this budget
  - `groupIds` string[] — list of group IDs (e.g. department) for this budget
  - `color` string — color of budget
  - `startDate` string, date, required — start date of the budget
  - `endDate` string, date, required — end date of the budget
  - `sensitive` 'GLOBAL' | 'ORG' | 'SENSITIVE' | 'PERSONAL' | 'MANAGER' | 'HIGH' | 'PRIVATE', required — sensitivity level of budget
  - `shareAccess` ShareAccess[], required — users who are specifically granted permission to view or edit this budget
    - `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
    - `fields` string — fields
  - `costExpr` string — calculation to compute cost
  - `costBasis` 'ANNUALIZED' | 'PERIOD_TOTAL' — cost measurement basis for this budget; null inherits the org default
  - `status` 'DRAFT' | 'ACTIVE' | 'ARCHIVED', required — status of the budget
  - `usage` Money
    - `amount` number, required
    - `currency` string, required
    - `places` integer
  - `effectiveCostBasis` 'ANNUALIZED' | 'PERIOD_TOTAL' — effective cost basis after applying the org-default fallback (computed on read)
  - `amount` Money
    - `amount` number, required
    - `currency` string, required
    - `places` integer
  - `baselinedAt` string — instant this budget first became ACTIVE, freezing its baseline (null while never activated); set once by the server on the first DRAFT->ACTIVE transition, never re-stamped (sc-123222)
  - `createDate` string, date, required — when this budget starts existing in org history
  - `deleteDate` string, date — when this budget stops existing in org history (null if still active)
  - `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

## Other responses

- `400` — invalid data
- `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/revisions/50a1edd6b27e/schema)
