# Verb

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

> A Verb is an action an Agent or a person performs on a Noun, emitting one event when it completes.

A Verb is an action an [Agent](/business/nouns/agent) or a [Human](/business/nouns/human) performs on a [Noun](/business/nouns/noun), emitting one [Event](/business/nouns/event) when it completes. Its name is `Noun.verb`, and its Event is the past tense: `Offer.publish` emits `Offer.published`.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | The camelCase action form. |
| `event` | `string` | Yes | The event the Verb emits. |
| `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/patentpad.com/verbs/verb_1",
  "$type": "Verb",
  "name": "PatentPad",
  "event": "Example event",
  "publishedIn": "version_1",
  "status": "draft"
}
```

## Relationships
- <a id="rel-acts-on"></a>A Verb **acts on** one [Noun](/business/nouns/noun): every Verb acts on one [Noun](/business/nouns/noun), which names it: `Startup.launch` acts on [Startup](/business/nouns/startup). `actsOn`, inverse [`actedOnBy`](/business/nouns/noun#rel-acted-on-by).
- <a id="rel-allowed-by"></a>A Verb **is allowed by** many [Permissions](/business/nouns/permission): each [Permission](/business/nouns/permission) allows one Verb, within its scope and [Limit](/business/nouns/limit). `allowedBy`, inverse [`allows`](/business/nouns/permission#rel-allows).
- <a id="rel-defaults-to"></a>A Verb **defaults to** one [Mode](/business/nouns/mode): the [Mode](/business/nouns/mode) a call uses when the caller names none: `try`, `send` or `do`. `defaultsTo`, inverse [`defaultFor`](/business/nouns/mode#rel-default-for).
- <a id="rel-exposed-as"></a>A Verb **is exposed as** many [Tools](/business/nouns/tool): a [Tool](/business/nouns/tool) is one Verb under one name on every [Interface](/business/nouns/interface), such as `Contact.create`. `exposedAs`, inverse [`exposes`](/business/nouns/tool#rel-exposes).
- <a id="rel-graded-by"></a>A Verb **is graded by** many [Evaluators](/business/nouns/evaluator): the Verbs whose results the [Evaluator](/business/nouns/evaluator) scores against its rubric before they count as done. `gradedBy`, inverse [`grades`](/business/nouns/evaluator#rel-grades).
- <a id="rel-implemented-by"></a>A Verb **is implemented by** many [Functions](/business/nouns/function): a [Function](/business/nouns/function) is how a Verb runs: code, a generative model, an [Agent](/business/nouns/agent) or a [Human](/business/nouns/human), and the caller never sees which. `implementedBy`, inverse [`implements`](/business/nouns/function#rel-implements).
- <a id="rel-invoked-as"></a>A Verb **is invoked as** many [Actions](/business/nouns/action): each [Action](/business/nouns/action) performs one Verb, which fixes its inputs, the [Event](/business/nouns/event) it emits and its delay window. `invokedAs`, inverse [`invokes`](/business/nouns/action#rel-invokes).
- <a id="rel-reserved-by"></a>A Verb **is reserved by** many [Reserved Acts](/business/nouns/reserved-act): the Verb the law reserves to a credentialed [Human](/business/nouns/human) in the act’s jurisdiction. `reservedBy`, inverse [`reserves`](/business/nouns/reserved-act#rel-reserves).
- <a id="rel-types"></a>A Verb **types** many [Relationships](/business/nouns/relationship): a [Relationship](/business/nouns/relationship) reads through a Verb whose forms name it from each side, such as `makes` and `madeBy`. `types`, inverse [`typedBy`](/business/nouns/relationship#rel-typed-by).

## 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 Verb |
| `published` | A published Version serves it; edits go through a Change, and `delete` refuses. | `retired` by [Verb.retire](/business/nouns/verb/retire) |
| `retired` | New Versions leave it out; callers pinned to earlier Versions keep calling it. | None: it ends here. |

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| [Verb.retire](/business/nouns/verb/retire) | Retire removes a published Verb from new Versions; callers pinned to earlier Versions keep calling it. | [Product Lead](/agents/product/product-lead) | [`Verb.retired`](/business/events/Verb.retired) | One-way (customer): `send`, `do` |
| <a id="create"></a>[Verb.create](/business/nouns/verb/create) | Creates a Verb. Inherited from [Noun](/business/nouns/noun). | None. | `Verb.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[Verb.get](/business/nouns/verb/get) | Returns one Verb by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Verb.list](/business/nouns/verb/list) | Returns Verbs, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="update"></a>[Verb.update](/business/nouns/verb/update) | Changes the given properties of a Verb. Inherited from [Noun](/business/nouns/noun). | None. | `Verb.updated` | Two-way: `try`, `send`, `do` |
| <a id="delete"></a>[Verb.delete](/business/nouns/verb/delete) | Deletes a Verb; its history is kept. Inherited from [Noun](/business/nouns/noun). | None. | `Verb.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` |
| --- | --- | --- | --- | --- |
| `Verb.create` | Yes | Yes | Yes | No |
| `Verb.get` | Yes | Yes | Yes | Yes |
| `Verb.list` | Yes | Yes | Yes | Yes |
| `Verb.update` | Yes | Yes | Yes | No |
| `Verb.delete` | Yes | Yes | Yes | No |
| `Verb.retire` | Yes | No | No | No |

## Call it

**Ask**

```text
Retire the latest verb.
```

**API**

```bash
curl -X POST https://api.sb/kilnbakery.com/verbs/verb_1/retire \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/kilnbakery.com",
  "version": {
    "$id": "https://api.sb/kilnbakery.com/versions/version_1",
    "$type": "Version",
    "fingerprint": "sha256:9f2c4e1a7b3d"
  },
  "verb": {
    "$id": "https://api.sb/kilnbakery.com/verbs/verb_1",
    "$type": "Verb",
    "name": "Kiln Bakery",
    "event": "Example event",
    "status": "retired"
  },
  "action": {
    "$id": "https://api.sb/kilnbakery.com/actions/action_1",
    "operation": "Verb.retire",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/kilnbakery.com/actions/action_1"
  }
}
```

**SDK**

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

const { version, verb } = await $.Verb.retire({ verb: 'verb_1' })
```

**CLI**

```bash
npx startup-builder do Verb.retire --json '{"verb":"verb_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Verb.retire({ verb: 'verb_1' })"
  }
}
```

## Example
An Agent runs [`Offer.publish`](/business/nouns/offer/publish) on a $49-a-month contract-review [Offer](/business/nouns/offer). The run is one [Action](/business/nouns/action): the Offer opens for acceptance, and `Offer.published` records the moment.