---
title: "Update a milestone (partial)"
method: PATCH
path: "/milestones/{id}"
---

# Update a milestone (partial)

`PATCH /milestones/{id}`

## Request

- Base URL: `https://craaft.io/api/v1`
- URL: `https://craaft.io/api/v1/milestones/{id}`
- Auth: HTTP bearer

Board admins only. Setting `achieved: true` stamps `achievedAt`
once (re-sending `true` keeps the original stamp); `achieved:
false` clears it.

## Request body

- object
  - `name` string
  - `dueOn` string, date
  - `achieved` boolean

## Response `200`

Updated

- Milestone
  - `id` string, uuid, required
  - `projectId` string, uuid, required
  - `name` string, required
  - `dueOn` string, date, required
  - `achievedAt` string, date-time, nullable
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `400`: Blank name, name too long, or invalid dueOn
- `401`: Missing or invalid token
- `403`: Caller is a board member but not an admin
- `404`: Resource doesn't exist or caller isn't a member of its workspace

---

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