---
title: "Add a milestone"
method: POST
path: "/projects/{id}/milestones"
---

# Add a milestone

`POST /projects/{id}/milestones`

## Request

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

Board admins only (workspace owners/admins, or explicit board admins).

## Request body

- object
  - `name` string, required
  - `dueOn` string, date, required

## Response `201`

Created

- 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`: Missing/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)
