# Visit

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

> A Visit is one span of a Visitor’s Events on a Startup’s Sites and Apps.

A Visit is one span of a [Visitor](/business/nouns/visitor)’s [Events](/business/nouns/event) on a [Startup](/business/nouns/startup)’s [Sites](/business/nouns/site) and [Apps](/business/nouns/app).

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `startedAt` | `datetime` | Yes | When it began. |
| `acquisition` | `string` | No | How the Visitor arrived: search, AI answer, agent, referral, ad, or direct. |

## Object
```json
{
  "$id": "https://api.sb/routewise.dev/visits/visit_1",
  "$type": "Visit",
  "startedAt": "2026-10-22T12:00:00Z",
  "acquisition": "Example acquisition"
}
```

## Relationships
- <a id="rel-lands"></a>A Visit **lands** one [Site](/business/nouns/site): each Visit arrives on one [Site](/business/nouns/site). `lands`, inverse [`visits`](/business/nouns/site#rel-visits).
- <a id="rel-recording"></a>A Visit **has** one [Recording](/business/nouns/recording): a [Recording](/business/nouns/recording) replays one Visit, linked from every funnel step that Visit reached. `recording`, inverse [`replays`](/business/nouns/recording#rel-replays).
- <a id="rel-started-by"></a>A Visit **is started by** one [Visitor](/business/nouns/visitor): each Visit is one span of a [Visitor](/business/nouns/visitor)’s [Events](/business/nouns/event) on the [Startup](/business/nouns/startup)’s [Sites](/business/nouns/site) and [Apps](/business/nouns/app). `startedBy`, inverse [`starts`](/business/nouns/visitor#rel-starts).

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

A Visit 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` |
| --- | --- | --- | --- | --- |
| `Visit.get` | Yes | Yes | Yes | Yes |
| `Visit.list` | Yes | Yes | Yes | Yes |

## Call it

**Ask**

```text
Show me the latest visit.
```

**API**

```bash
curl https://api.sb/ledgerlark.com/visits/visit_1 \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/ledgerlark.com",
  "$type": "Visit",
  "$id": "https://api.sb/ledgerlark.com/visits/visit_1",
  "visit": {
    "$id": "https://api.sb/ledgerlark.com/visits/visit_1",
    "$type": "Visit",
    "startedAt": "2026-10-22T12:00:00Z"
  },
  "links": {
    "self": "https://api.sb/ledgerlark.com/visits/visit_1",
    "up": "https://api.sb/ledgerlark.com/visits"
  }
}
```

**SDK**

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

const visit = await $.Visit.get({ id: 'visit_1' })
```

**CLI**

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

**MCP**

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

## Example
A Visitor lands on the pricing [Page](/business/nouns/page), reads the docs, and leaves after 4 minutes. Those Events form one Visit.