# Goal

URL: /business/nouns/goal · Id: `noun:goal`

> A Goal is what a Thing is trying to achieve: an objective with one or more Key Results.

A Goal is what a [Thing](/business/nouns/thing) is trying to achieve: an objective with one or more [Key Results](/business/nouns/key-result). Every [Startup](/business/nouns/startup) holds one Goal it must reach: its [Minimum Success Criteria](/business/nouns/minimum-success-criteria).

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `objective` | `text` | Yes | The qualitative outcome. |
| `horizon` | `string` | No | One of `day`, `week`, `quarter`, `year`, or `three-years`. |

## Object
```json
{
  "$id": "https://api.sb/shiftnote.app/goals/goal_1",
  "$type": "Goal",
  "objective": "Example objective",
  "horizon": "day"
}
```

## Relationships
- <a id="rel-advanced-by"></a>A Goal **is advanced by** many [Campaigns](/business/nouns/campaign): a [Campaign](/business/nouns/campaign) spends its budget and window toward one Goal. `advancedBy`, inverse [`advances`](/business/nouns/campaign#rel-advances).
- <a id="rel-held-by"></a>A Goal **is held by** one [Thing](/business/nouns/thing): every [Thing](/business/nouns/thing) pursues Goals, such as a [Startup](/business/nouns/startup)’s quarterly objective or a [Team](/business/nouns/team)’s weekly target. `heldBy`, inverse [`aimsFor`](/business/nouns/thing#rel-aims-for).
- <a id="rel-key-results"></a>A Goal **has** many [Key Results](/business/nouns/key-result): a Goal is met when its [Key Results](/business/nouns/key-result) reach their targets. `keyResults`, inverse [`measures`](/business/nouns/key-result#rel-measures).
- <a id="rel-projects"></a>A Goal **has** many [Projects](/business/nouns/project): a [Project](/business/nouns/project)’s work serves one Goal. `projects`, inverse [`advances`](/business/nouns/project#rel-advances).

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| <a id="create"></a>[Goal.create](/business/nouns/goal/create) | Creates a Goal. Inherited from [Noun](/business/nouns/noun). | None. | `Goal.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[Goal.get](/business/nouns/goal/get) | Returns one Goal by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Goal.list](/business/nouns/goal/list) | Returns Goals, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="update"></a>[Goal.update](/business/nouns/goal/update) | Changes the given properties of a Goal. Inherited from [Noun](/business/nouns/noun). | None. | `Goal.updated` | Two-way: `try`, `send`, `do` |
| <a id="delete"></a>[Goal.delete](/business/nouns/goal/delete) | Deletes a Goal; its history is kept. Inherited from [Noun](/business/nouns/noun). | None. | `Goal.deleted` | One-way: `send`, `do` |

## Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `Goal.create` | Yes | Yes | Yes | No |
| `Goal.get` | Yes | Yes | Yes | Yes |
| `Goal.list` | Yes | Yes | Yes | Yes |
| `Goal.update` | Yes | Yes | Yes | No |
| `Goal.delete` | Yes | Yes | Yes | No |

## Call it

**Ask**

```text
Add a goal to RouteWise.
```

**API**

```bash
curl -X POST https://api.sb/routewise.dev/goals \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"objective":"Example objective"}'
```

```json
{
  "api": "https://api.sb/routewise.dev",
  "goal": {
    "$id": "https://api.sb/routewise.dev/goals/goal_1",
    "$type": "Goal",
    "objective": "Example objective"
  },
  "action": {
    "$id": "https://api.sb/routewise.dev/actions/action_1",
    "operation": "Goal.create",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/routewise.dev/actions/action_1"
  }
}
```

**SDK**

```ts
import { $ } from 'startup-builder'

const goal = await $.Goal.create({ objective: 'Example objective' })
```

**CLI**

```bash
npx startup-builder do Goal.create --json '{"objective":"Example objective"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Goal.create({ objective: 'Example objective' })"
  }
}
```

## Example
A clinic-reminder [SaaS](/products/templates/saas) holds a Goal with the `objective` "cut no-shows for 200 clinics" and `horizon: year`. Its one Key Result moves paid clinics from 35 to 200.