# Noun

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

> A Noun is a type of record, with its properties, its relationships, and the Verbs that act on it.

A Noun is a type of record, with its properties, its relationships, and the [Verbs](/business/nouns/verb) that act on it. Each record is a [Thing](/business/nouns/thing) of exactly one Noun.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | The singular, capitalized name. |
| `properties` | `json` | No | Its properties, each with a name, a type, and whether it is required. |
| `publishedIn` | [Version](/business/nouns/version) | No | The first published Version that serves it; from then on, edits go through a Change and `delete` refuses. |
| `status` | `string` | Yes | One of `draft`, `published` or `retired`. |

## Object
```json
{
  "$id": "https://api.sb/kilnbakery.com/nouns/noun_1",
  "$type": "Noun",
  "name": "Kiln Bakery",
  "properties": {},
  "publishedIn": "version_1",
  "status": "draft"
}
```

## Relationships
- <a id="rel-acted-on-by"></a>A Noun **is acted on by** many [Verbs](/business/nouns/verb): every [Verb](/business/nouns/verb) acts on one Noun, which names it: `Startup.launch` acts on [Startup](/business/nouns/startup). `actedOnBy`, inverse [`actsOn`](/business/nouns/verb#rel-acts-on).
- <a id="rel-curated-in"></a>A Noun **is curated in** many [Datasets](/business/nouns/dataset): a [Dataset](/business/nouns/dataset) collects and vouches for the [Things](/business/nouns/thing) of exactly one Noun. `curatedIn`, inverse [`curates`](/business/nouns/dataset#rel-curates).
- <a id="rel-defined-in"></a>A Noun **is defined in** many [Systems](/business/nouns/system): the Nouns a [System](/business/nouns/system) keeps records of; several Systems can share one Noun. `definedIn`, inverse [`defines`](/business/nouns/system#rel-defines).
- <a id="rel-exposed-by"></a>A Noun **is exposed by** one [Capability](/business/nouns/capability): a [Capability](/business/nouns/capability) exposes [Verbs](/business/nouns/verb) on one Noun family, metered, limited and logged under one key. `exposedBy`, inverse [`exposes`](/business/nouns/capability#rel-exposes).
- <a id="rel-instances"></a>A Noun’s **instances** are many [Things](/business/nouns/thing): a [Thing](/business/nouns/thing) takes the properties, relationships and [Verbs](/business/nouns/verb) of every Noun it is an instance of. `instances`, inverse [`instanceOf`](/business/nouns/thing#rel-instance-of).
- <a id="rel-moves-through"></a>A Noun **moves through** one [Lifecycle](/business/nouns/lifecycle): a Noun’s [Lifecycle](/business/nouns/lifecycle) lists the states its [Things](/business/nouns/thing) move through and the [Verbs](/business/nouns/verb) that move them. `movesThrough`, inverse [`governs`](/business/nouns/lifecycle#rel-governs).

## Lifecycle

| State | Meaning | Moves to |
| --- | --- | --- |
| `draft` (first) | Defined and editable; no published Version serves it. | `published` on [`Version.deployed`](/business/events/Version.deployed) when the deployed Version is the first to include this Noun |
| `published` | A published Version serves it; edits go through a Change, and `delete` refuses. | `retired` by [Noun.retire](/business/nouns/noun/retire) |
| `retired` | New Versions leave it out; its records, its history and every pinned Version keep serving. | None: it ends here. |

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| [Noun.retire](/business/nouns/noun/retire) | Retire removes a published Noun from new Versions; its records, its history and every pinned Version keep serving. | [Product Lead](/agents/product/product-lead) | [`Noun.retired`](/business/events/Noun.retired) | One-way (customer): `send`, `do` |
| [Noun.trace](/business/nouns/noun/trace) | Trace lists every Verb, Process, Offer, Dashboard and Version that references a Noun, so an edit or a retire shows its reach first. | [Worker](/business/nouns/worker) | [`Noun.traced`](/business/events/Noun.traced) | None. |
| <a id="create"></a>[Noun.create](/business/nouns/noun/create) | Creates a Noun. Inherited from [Noun](/business/nouns/noun). | None. | `Noun.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[Noun.get](/business/nouns/noun/get) | Returns one Noun by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Noun.list](/business/nouns/noun/list) | Returns Nouns, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="update"></a>[Noun.update](/business/nouns/noun/update) | Changes the given properties of a Noun. Inherited from [Noun](/business/nouns/noun). | None. | `Noun.updated` | Two-way: `try`, `send`, `do` |
| <a id="delete"></a>[Noun.delete](/business/nouns/noun/delete) | Deletes a Noun; its history is kept. Inherited from [Noun](/business/nouns/noun). | None. | `Noun.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` |
| --- | --- | --- | --- | --- |
| `Noun.create` | Yes | Yes | Yes | No |
| `Noun.get` | Yes | Yes | Yes | Yes |
| `Noun.list` | Yes | Yes | Yes | Yes |
| `Noun.update` | Yes | Yes | Yes | No |
| `Noun.delete` | Yes | Yes | Yes | No |
| `Noun.retire` | Yes | No | No | No |
| `Noun.trace` | Yes | Yes | Yes | No |

## Call it

**Ask**

```text
Retire the latest noun.
```

**API**

```bash
curl -X POST https://api.sb/shiftnote.app/nouns/noun_1/retire \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/shiftnote.app",
  "version": {
    "$id": "https://api.sb/shiftnote.app/versions/version_1",
    "$type": "Version",
    "fingerprint": "sha256:9f2c4e1a7b3d"
  },
  "noun": {
    "$id": "https://api.sb/shiftnote.app/nouns/noun_1",
    "$type": "Noun",
    "name": "ShiftNote",
    "status": "retired"
  },
  "action": {
    "$id": "https://api.sb/shiftnote.app/actions/action_1",
    "operation": "Noun.retire",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/shiftnote.app/actions/action_1"
  }
}
```

**SDK**

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

const { version, noun } = await $.Noun.retire({ noun: 'noun_1' })
```

**CLI**

```bash
npx startup-builder do Noun.retire --json '{"noun":"noun_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Noun.retire({ noun: 'noun_1' })"
  }
}
```

## Example
[Offer](/business/nouns/offer) is a Noun. Every Offer record has a `price` and `terms`, includes one [Product](/business/nouns/product), and moves only through Verbs such as [`Offer.publish`](/business/nouns/offer/publish) and [`Offer.accept`](/business/nouns/offer/accept).