# View address

URL: /code/views/view-address · Id: `page:code/views/view-address`

> A view address names any view by scope, Role and window, and the same string opens that view on the web, a phone, an agent's context, the API and MCP.

A view address names one view by its scope, its [Role](/business/nouns/role) and its window. Every view is a point in that space, so none is designed by hand.

## Grammar
```text
view:<scope>?role=<role>&w=<window>&env=<live|test>&asOf=<watermark>
```

| Part | Holds | Default |
| --- | --- | --- |
| `scope` | What the view covers | Required |
| `role` | A Role or a [Team](/business/nouns/team) id, which narrows the view to what that seat answers for | The scope's own view |
| `w` | A horizon value | The current week |
| `env` | `live` or `test` | `live` |
| `asOf` | An [Event](/business/nouns/event) watermark or a time | Now |

Views are not stored. A [Dashboard](/business/nouns/dashboard) is a record, but the view it fills is computed on every read from the address and the records behind it.

## Scopes
| Scope | Written as | Example |
| --- | --- | --- |
| The [Studio](/business/nouns/studio) | `studio` | `view:studio` |
| A [Startup](/business/nouns/startup) | its domain | `view:chairside.app` |
| A part of a Startup | its domain and path | `view:chairside.app/products/reminders` |
| A [Portfolio](/business/nouns/portfolio) query | `portfolio:` and a saved [Collection](/business/nouns/collection) | `view:portfolio:b2c-marketplaces` |
| One person | `person:` and their id | `view:person:ana-reyes` |

Scope and Role combine freely. `view:portfolio:b2c-marketplaces?role=marketing` is marketing across every b2c marketplace in the Portfolio. `view:person:ana-reyes` is the union of every Role that person holds, in every Startup.

## Windows
The window is a horizon value. Its horizon picks the base Dashboard, so the same scope reads as a day's work, a week's review or a year's plan.

| Horizon | Value |
| --- | --- |
| Day | `2026-10-22` |
| Week | `2026Q4W4` |
| Quarter | `2026Q4` |
| Year | `2026` |
| Three years | `2026-2028` |

## Live and as of
Views are live by default: each number is as fresh as the last Event behind it. `asOf` pins a view to one watermark, so every reader and every rendering sees the same numbers.

The weekly review uses both. It reads the week view as of the week's close, while the founder's phone shows live numbers from the same resolver. `env=test` resolves the same address over records written in test [Mode](/business/nouns/mode).

## Every surface
One address opens everywhere. An agent fetches it through [MCP](/code/mcp); a phone, a watch or a script reads it through the [API](/code/api).

```json
{ "name": "fetch", "arguments": { "id": "view:permitfeed.dev?role=sales-lead&w=2026Q4W4" } }
```

```bash
curl "https://api.sb/views/permitfeed.dev?role=sales-lead&w=2026Q4W4" \
  -H "Accept: text/markdown" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

Every Role, Team and [Metric](/business/nouns/metric) page links its address, and every Markdown block a view renders states its address on its first line. A citation copied from an agent's reasoning opens the same view for the person reading it.