# Capability

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

> A Capability is a named set of Verbs on one Noun family that every Startup reaches through api.sb with one key, metered, limited, and logged.

A Capability is a named set of [Verbs](/business/nouns/verb) on one [Noun](/business/nouns/noun) family that every [Startup](/business/nouns/startup) reaches through [api.sb](/code/platform/api-sb) with one key, metered, limited, and logged.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | The name, such as `Workflows` or `Search`. |
| `nouns` | list of [Noun](/business/nouns/noun) | Yes | The Nouns it exposes, each with its Verbs. |
| `modes` | `json` | No | The Mode each Verb accepts; a stateless Verb is `try` only. |
| `upstream` | `string` | No | Who performs it behind api.sb, held as data and swappable without a caller noticing. |

## Object
```json
{
  "$id": "https://api.sb/quietcopy.com/capabilities/capability_1",
  "$type": "Capability",
  "name": "QuietCopy",
  "nouns": [
    "noun_1"
  ],
  "modes": {},
  "upstream": "Example upstream"
}
```

## Relationships
- <a id="rel-exposes"></a>A Capability **exposes** many [Nouns](/business/nouns/noun): a Capability exposes [Verbs](/business/nouns/verb) on one [Noun](/business/nouns/noun) family, metered, limited and logged under one key. `exposes`, inverse [`exposedBy`](/business/nouns/noun#rel-exposed-by).
- <a id="rel-recovery-objectives"></a>A Capability **has** many [Recovery Objectives](/business/nouns/recovery-objective): the Capability the objective restores. `recoveryObjectives`, inverse [`capability`](/business/nouns/recovery-objective#rel-capability).
- <a id="rel-runs"></a>A Capability **runs** many [Systems](/business/nouns/system): a [System](/business/nouns/system) is built on Capabilities, such as [Workflows](/business/nouns/workflow) or Search, that every [Startup](/business/nouns/startup) reaches with one key. `runs`, inverse [`runsOn`](/business/nouns/system#rel-runs-on).

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| <a id="get"></a>[Capability.get](/business/nouns/capability/get) | Returns one Capability by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[Capability.list](/business/nouns/capability/list) | Returns Capabilities, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |

A Capability is kept forever and never edited: it has no `update` or `delete`.

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

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `Capability.get` | Yes | Yes | Yes | Yes |
| `Capability.list` | Yes | Yes | Yes | Yes |

## Call it

**Ask**

```text
Show me the latest capability.
```

**API**

```bash
curl https://api.sb/petpantry.shop/capabilities/capability_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/petpantry.shop",
  "$type": "Capability",
  "$id": "https://api.sb/petpantry.shop/capabilities/capability_1",
  "capability": {
    "$id": "https://api.sb/petpantry.shop/capabilities/capability_1",
    "$type": "Capability",
    "name": "PetPantry",
    "nouns": [
      "noun_1"
    ]
  },
  "links": {
    "self": "https://api.sb/petpantry.shop/capabilities/capability_1",
    "up": "https://api.sb/petpantry.shop/capabilities"
  }
}
```

**SDK**

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

const capability = await $.Capability.get({ id: 'capability_1' })
```

**CLI**

```bash
npx startup-builder do Capability.get --json '{"id":"capability_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Capability.get({ id: 'capability_1' })"
  }
}
```

## Example
A clinic-reminder [SaaS](/products/templates/saas) sends 9,000 text reminders a day through the messaging Capability. It uses the key it uses for payments and search, every send is metered, and its [Limit](/business/nouns/limit) stops sends past 12,000 a day.