# Recording

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

> A Recording is the replay of one Visit or one agent browser session, masked at capture.

A Recording is the replay of one [Visit](/business/nouns/visit) or one agent browser session, masked at capture.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `visit` | [Visit](/business/nouns/visit) | No | The Visit it replays, for a person’s session. |
| `action` | [Action](/business/nouns/action) | No | The agent Action whose browser session it replays. |
| `file` | [File](/business/nouns/file) | No | The rendered video File, when one is rendered. |
| `seconds` | `integer` | No | Its length in seconds. |

## Object
```json
{
  "$id": "https://api.sb/routewise.dev/recordings/recording_1",
  "$type": "Recording",
  "visit": "visit_1",
  "action": "action_1",
  "file": "file_1",
  "seconds": 1
}
```

## Relationships
- <a id="rel-replays"></a>A Recording **replays** one [Visit](/business/nouns/visit): a Recording replays one [Visit](/business/nouns/visit), linked from every funnel step that Visit reached. `replays`, inverse [`recording`](/business/nouns/visit#rel-recording).

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

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

## Call it

**Ask**

```text
Show me the latest recording.
```

**API**

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

```json
{
  "api": "https://api.sb/ledgerlark.com",
  "$type": "Recording",
  "$id": "https://api.sb/ledgerlark.com/recordings/recording_1",
  "recording": {
    "$id": "https://api.sb/ledgerlark.com/recordings/recording_1",
    "$type": "Recording",
    "visit": "visit_1",
    "action": "action_1"
  },
  "links": {
    "self": "https://api.sb/ledgerlark.com/recordings/recording_1",
    "up": "https://api.sb/ledgerlark.com/recordings"
  }
}
```

**SDK**

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

const recording = await $.Recording.get({ id: 'recording_1' })
```

**CLI**

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

**MCP**

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

## Example
A buyer abandons checkout on a travel-insurance [Site](/business/nouns/site). Her Recording replays the 94-second [Visit](/business/nouns/visit) with card fields masked, and it shows her stuck on the date picker.