# Page

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

> A Page is an addressable page of a Site, of a named type such as pricing, about one Thing or each member of a Collection.

A Page is an addressable page of a [Site](/business/nouns/site), of a named type such as pricing, about one [Thing](/business/nouns/thing) or each member of a [Collection](/business/nouns/collection). A [Template](/business/nouns/template) renders it.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `path` | `string` | Yes | The path under its Site, such as `/pricing`. |
| `kind` | `string` | No | The page type, such as `landing`, `pricing`, or `terms`. |
| `from` | `string` | No | Lineage: the slot it compiles from, as `Hypothesis#<slot>@v<version>`. |

## Object
```json
{
  "$id": "https://api.sb/shiftnote.app/pages/page_1",
  "$type": "Page",
  "path": "/",
  "kind": "landing",
  "from": "Hypothesis#approach@v1"
}
```

## Relationships
- <a id="rel-contained-in"></a>A Page **is contained in** one [Site](/business/nouns/site): a [Site](/business/nouns/site) serves its Pages, each at its own path. `containedIn`, inverse [`contains`](/business/nouns/site#rel-contains).
- <a id="rel-displays"></a>A Page **displays** many pieces of [Content](/business/nouns/content): Pages display published [Content](/business/nouns/content); one piece appears on many Pages. `displays`, inverse [`displayedOn`](/business/nouns/content#rel-displayed-on).
- <a id="rel-embeds"></a>A Page **embeds** many [Forms](/business/nouns/form): [Forms](/business/nouns/form) sit on Pages; one Form appears on many Pages. `embeds`, inverse [`embeddedIn`](/business/nouns/form#rel-embedded-in).
- <a id="rel-rendered-with"></a>A Page **is rendered with** one [Template](/business/nouns/template): a [Template](/business/nouns/template) fills one Page per [Thing](/business/nouns/thing) or per member of a [Collection](/business/nouns/collection). `renderedWith`, inverse [`renders`](/business/nouns/template#rel-renders).
- <a id="rel-targets"></a>A Page **targets** many [Keywords](/business/nouns/keyword): a Page is written to rank for, or be cited on, its [Keywords](/business/nouns/keyword). `targets`, inverse [`targetedBy`](/business/nouns/keyword#rel-targeted-by).
- <a id="rel-uses"></a>A Page **uses** many [Components](/business/nouns/component): a Page is assembled from [Components](/business/nouns/component), each filled from records. `uses`, inverse [`usedOn`](/business/nouns/component#rel-used-on).

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

## Call it

**Ask**

```text
Add a page to RouteWise.
```

**API**

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

```json
{
  "api": "https://api.sb/routewise.dev",
  "page": {
    "$id": "https://api.sb/routewise.dev/pages/page_1",
    "$type": "Page",
    "path": "/"
  },
  "action": {
    "$id": "https://api.sb/routewise.dev/actions/action_1",
    "operation": "Page.create",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/routewise.dev/actions/action_1"
  }
}
```

**SDK**

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

const page = await $.Page.create({ path: '/' })
```

**CLI**

```bash
npx startup-builder do Page.create --json '{"path":"/"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Page.create({ path: '/' })"
  }
}
```

## Example
`/inspectors/denver` is a Page of kind `city` on a home-inspector directory, one per member of a [Collection](/business/nouns/collection) of cities. Adding an inspector updates it with no edit.