URL: /code/apps/scheduling · Id: `page:/code/apps/scheduling`

# Scheduling

> A booking link into each seat’s free hours, so an interested reply becomes a booked Meeting with a brief, not a thread of emails.

A booking link into each seat’s free hours, so an interested reply becomes a booked [Meeting](https://startupbuilder.dev/business/nouns/meeting) with a brief, not a thread of emails.

- **System:** [Scheduling](https://startupbuilder.dev/systems/scheduling)
- **Nouns:** 1
- **Verbs:** 4
- **Events:** 2

```text title="Run it · Ask"
Book Rosa Alvarez for Tuesday at 2 p.m. Central, 30 minutes, on how Northgate tracks renewals today.
```

```ts title="Run it · SDK"
import { $ } from 'startup-builder'

const result = await $.try.Meeting.book({ contact: 'contact_Rq2wN8bX5t', at: '2026-11-03T20:00:00Z' })
```

```json title="Run it · Response"
{
  "api": "https://api.sb/leaseline.app",
  "meeting": {
    "$type": "Meeting",
    "contact": "https://api.sb/leaseline.app/contacts/contact_Rq2wN8bX5t",
    "at": "2026-11-03T20:00:00Z",
    "agenda": "How Northgate Rentals tracks rent and lease renewals today, 30 minutes"
  },
  "action": {
    "operation": "Meeting.book",
    "mode": "try",
    "status": "done"
  }
}
```

## Nouns
| Noun | What it is |
| --- | --- |
| [Meeting](https://startupbuilder.dev/business/nouns/meeting) | A Meeting is a scheduled time when Workers and Contacts meet about one or more Things, producing notes, Decisions, and Tasks. |

## Properties
The hub defines each Noun’s core Properties; Scheduling adds the ones a sale needs.

### Meeting
| Property | Type | What it holds | Defined by |
| --- | --- | --- | --- |
| `at` | `datetime` | When it starts. | The hub |
| `agenda` | `text` | What it covers. | The hub |
| `transcript` | `text` | What was said. | The hub |
| `deal` | `Deal` | The deal it moves; the notes land there. | Scheduling |
| `brief` | `Content` | The one-page brief on the account, written before the call by `Deal.brief`. | Scheduling |
| `held` | `'held' \| 'no-show' \| 'moved'` | What happened, read from the calendar and the call. | Scheduling |

## Verbs
| Verb | What it does | Approval | On each site | Limits |
| --- | --- | --- | --- | --- |
| [`Meeting.book`](/code/apps/scheduling/book) | Books a time both calendars show free and sends the invite from your domain. | Runs on its own | Outlook | Only a time both calendars show free; a slot taken between offer and pick refuses, and the next free slot is offered. |
| [`Meeting.create`](https://startupbuilder.dev/business/nouns/meeting/create) | Saves a Meeting set up outside your booking link, so its brief and notes land on the deal. | Runs on its own | None. | None. |
| [`Meeting.update`](https://startupbuilder.dev/business/nouns/meeting/update) | Moves or changes a Meeting and sends the new invite to everyone on it. | Runs on its own | None. | None. |
| [`Meeting.list`](https://startupbuilder.dev/business/nouns/meeting/list) | Lists your Meetings by day, deal or seat, each with its agenda and notes. | Runs on its own | None. | None. |

## Events
| Event | Emitted by |
| --- | --- |
| `Meeting.booked` | [`Meeting.book`](/code/apps/scheduling/book) |
| `Meeting.updated` | [`Meeting.update`](https://startupbuilder.dev/business/nouns/meeting/update) |

A [Trigger](https://startupbuilder.dev/business/nouns/trigger) can start a Workflow on any of them, and a Watch delivers each to your endpoint, signed ([Events and webhooks](/code/events)).

## Who operates it
| Part | Scheduling |
| --- | --- |
| Accountable | [Sales lead](https://startupbuilder.dev/agents/sales/sales-lead) |
| Also calls its Verbs | [Sales Engineer](https://startupbuilder.dev/agents/sales/sales-engineer), [customer lead](https://startupbuilder.dev/agents/customer/customer-lead), [Onboarding Specialist](https://startupbuilder.dev/agents/customer/onboarding-specialist), [Prospector](https://startupbuilder.dev/agents/sales/prospector) |
| Seat | An agent holds each seat until you seat a person in it. |
| Asks you first | None of its Verbs: each runs within its seat’s Limits |

## Integrations
[Google Calendar](/code/integrations/google-calendar) · [Gmail](/code/integrations/gmail) · [Outlook](/code/integrations/outlook)

## Import and export
| Direction | What | How |
| --- | --- | --- |
| Import | Your calendar | `Integration.connect` for [Google Calendar](/code/integrations/google-calendar); only free and busy are read |
| Export | Meetings held and their outcomes | `Collection.export` |

## Example
**An interested reply becomes a booked call.**

1. A reply reads interested. The answer offers three times your calendar shows free.
2. The buyer picks Thursday at 10:00. `Meeting.book` holds it and sends the invite from leaseline.app.
3. The day before, `Deal.brief` writes the account brief onto the Meeting.