# Project

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

> A Project is a body of work toward a Goal: its Tasks and Issues, a start, and a target date.

A Project is a body of work toward a [Goal](/business/nouns/goal): its [Tasks](/business/nouns/task) and [Issues](/business/nouns/issue), a start, and a target date.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `startsOn` | `date` | No | When work begins. |
| `targetDate` | `date` | No | When it should be done. |

## Object
```json
{
  "$id": "https://api.sb/shiftnote.app/projects/project_1",
  "$type": "Project",
  "startsOn": "2026-10-22",
  "targetDate": "2026-10-22"
}
```

## Relationships
- <a id="rel-advances"></a>A Project **advances** one [Goal](/business/nouns/goal): a Project’s work serves one [Goal](/business/nouns/goal). `advances`, inverse [`projects`](/business/nouns/goal#rel-projects).
- <a id="rel-plans"></a>A Project **plans** many [Tasks](/business/nouns/task): a Project is made of [Tasks](/business/nouns/task). `plans`, inverse [`project`](/business/nouns/task#rel-project).

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

## Call it

**Ask**

```text
Add a project to RouteWise.
```

**API**

```bash
curl -X POST https://api.sb/routewise.dev/projects \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"startsOn":"2026-10-22"}'
```

```json
{
  "api": "https://api.sb/routewise.dev",
  "project": {
    "$id": "https://api.sb/routewise.dev/projects/project_1",
    "$type": "Project",
    "startsOn": "2026-10-22",
    "targetDate": "2026-10-22"
  },
  "action": {
    "$id": "https://api.sb/routewise.dev/actions/action_1",
    "operation": "Project.create",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/routewise.dev/actions/action_1"
  }
}
```

**SDK**

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

const project = await $.Project.create({ startsOn: '2026-10-22' })
```

**CLI**

```bash
npx startup-builder do Project.create --json '{"startsOn":"2026-10-22"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Project.create({ startsOn: '2026-10-22' })"
  }
}
```

## Example
A tax-preparation service opens a second state as a Project. It holds 22 [Tasks](/business/nouns/task) and 4 [Issues](/business/nouns/issue), starts on the 1st, and targets a date eight weeks later.