---
title: "Set Goal"
method: POST
path: "/projects/{project_id}/goal"
---

# Set Goal

`POST /projects/{project_id}/goal`

## Request

- Base URL: `https://usemeridian.us` (the document declares no server; this is the origin it was published from)
- URL: `https://usemeridian.us/projects/{project_id}/goal`
- Auth: none declared

Upsert the goal state, incrementing version.

Goal-ownership rule (v0.3.2): if the project has a recorded
``creator_human_id`` *and* the request body supplies a ``human_id``
that doesn't match, refuse with 403. Sessions without a human_id
(legacy callers, MCP workers that don't claim an identity) keep
their old write privilege.

## Path parameters

- `project_id` string, required

## Request body

- GoalSet: Body for POST /projects/{id}/goal. Content may be a JSON object or a plain string — both forms are accepted. ``human_id`` is optional but when provided is checked against the project's creator; a mismatch returns 403 to prevent silent overwrites between teammates. ``north_star`` and ``sprint`` are optional (v0.5.2). When omitted, previously-set values are preserved.
  - `content` union, required
    - object
    - string
  - `human_id` string, nullable
  - `north_star` string, nullable
  - `sprint` string, nullable
  - `minor` boolean
  - `expected_updated_at` string, nullable
  - `expected_north_star_updated_at` string, nullable
  - `expected_sprint_updated_at` string, nullable
  - `source` unknown

## Response `200`

Successful Response

- GoalState: A goal-state row. Content is decoded back to its original form (dict if it was stored as JSON, str otherwise). ``ambient_tasks`` (v0.4.2/3) carries the last few task descriptions so cold sessions read recent activity inline with the directive they get from a single ``get_goal`` call — no extra round trip. ``north_star`` and ``sprint`` (v0.5.2) are the structured goal hierarchy fields. Both are None when not yet set.
  - `id` string, required
  - `project_id` string, required
  - `content` union, required
    - object
    - string
  - `version` integer, required
  - `created_at` string, required
  - `updated_at` string, required
  - `ambient_tasks` object[], nullable
  - `north_star` string, nullable
  - `sprint` string, nullable
  - `north_star_inherited` boolean, nullable
  - `north_star_source_project_id` string, nullable
  - `xml` string, nullable
  - `cache_blocks` object[], nullable
  - `coherence_warning` object, nullable
  - `field_ages` object, nullable
  - `field_updated_at` object, nullable
  - `decisions` string, nullable

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/usemeridian/apis/meridian.md) · [All operations](https://skmtc.dev/usemeridian/apis/meridian/llms.txt) · [OpenAPI document](https://skmtc.dev/usemeridian/apis/meridian/revisions/f37a894bd374?raw)
