# Meeting Type

URL: /business/nouns/meeting-type · Id: `noun:meeting-type`

> A Meeting Type is a kind of Meeting a Contact books from a public link: its length, medium, questions and the Availability it books into.

A Meeting Type is a kind of [Meeting](/business/nouns/meeting) a [Contact](/business/nouns/contact) books from a public link: its length, medium, questions and the [Availability](/business/nouns/availability) it books into.

## Properties
| Property | Type | Required | Description |
| --- | --- | --- | --- |
| `name` | `string` | Yes | What the booking page calls it, such as `Intro call`. |
| `duration` | `integer` | Yes | Minutes each Meeting runs. |
| `medium` | `string` | Yes | How people meet: `video`, `phone` or `inPerson`. |
| `availability` | [Availability](/business/nouns/availability) | Yes | The hours it books into. |
| `url` | `url` | No | The booking link, served on the Startup’s Domain once published. |
| `questions` | `string[]` | No | What the booker answers before the time is held. |
| `offer` | [Offer](/business/nouns/offer) | No | The Offer a paid booking accepts first, with its deposit and no-show rule. |

## Object
```json
{
  "$id": "https://api.sb/leaseline.app/meeting-types/mtgtype_qw2d5yGLVN",
  "$type": "MeetingType",
  "name": "Problem interview",
  "duration": 20,
  "medium": "video",
  "availability": "availability_8Zj0a7vvRl",
  "url": "https://leaseline.app/book/problem-interview",
  "questions": [
    "Example questions"
  ],
  "offer": "offer_2hzYe1ERo0"
}
```

## Relationships
- <a id="rel-books-into"></a>A Meeting Type **books into** one [Availability](/business/nouns/availability): each Meeting Type books into one [Availability](/business/nouns/availability), and an Availability serves many Meeting Types. `booksInto`, inverse [`meetingTypes`](/business/nouns/availability#rel-meeting-types).
- <a id="rel-meetings"></a>A Meeting Type **has** many [Meetings](/business/nouns/meeting): a [Meeting](/business/nouns/meeting) booked from a link names its Meeting Type. `meetings`, inverse [`bookedFrom`](/business/nouns/meeting#rel-booked-from).

## Verbs
| Verb | Description | Subject | Event | Class |
| --- | --- | --- | --- | --- |
| [MeetingType.publish](/business/nouns/meeting-type/publish) | Publish puts a Meeting Type’s booking link live on the Startup’s Domain, where each pick books a Meeting into its Availability. | [Customer Lead](/agents/customer/customer-lead) | [`MeetingType.published`](/business/events/MeetingType.published) | Two-way: `try`, `send`, `do` |
| <a id="create"></a>[MeetingType.create](/business/nouns/meeting-type/create) | Creates a Meeting Type. Inherited from [Noun](/business/nouns/noun). | None. | `MeetingType.created` | Two-way: `try`, `send`, `do` |
| <a id="get"></a>[MeetingType.get](/business/nouns/meeting-type/get) | Returns one Meeting Type by id. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="list"></a>[MeetingType.list](/business/nouns/meeting-type/list) | Returns Meeting Types, newest first, one page at a time. Inherited from [Noun](/business/nouns/noun). | None. | None. | Read: `try`, `do` |
| <a id="update"></a>[MeetingType.update](/business/nouns/meeting-type/update) | Changes the given properties of a Meeting Type. Inherited from [Noun](/business/nouns/noun). | None. | `MeetingType.updated` | Two-way: `try`, `send`, `do` |
| <a id="delete"></a>[MeetingType.delete](/business/nouns/meeting-type/delete) | Deletes a Meeting Type: a soft delete that keeps its history, undone by `Thing.restore`. Inherited from [Noun](/business/nouns/noun). | None. | `MeetingType.deleted` | Two-way: `try`, `send`, `do` |

## Permissions
Which Access level may call each Verb. One-way Verbs wait their delay window.

| Operation | `owner` | `admin` | `member` | `viewer` |
| --- | --- | --- | --- | --- |
| `MeetingType.create` | Yes | Yes | Yes | No |
| `MeetingType.get` | Yes | Yes | Yes | Yes |
| `MeetingType.list` | Yes | Yes | Yes | Yes |
| `MeetingType.update` | Yes | Yes | Yes | No |
| `MeetingType.delete` | Yes | Yes | Yes | No |
| `MeetingType.publish` | Yes | Yes | Yes | No |

## Call it
In code: [API](/code/api/meeting-type) · [SDK](/code/sdk/meeting-type) · [CLI](/code/cli/meeting-type) · [MCP](/code/mcp/meeting-type).

**Ask**

```text
Publish the latest meeting type.
```

**API**

```bash
curl -X POST https://api.sb/leaseline.app/meeting-types/mtgtype_qw2d5yGLVN/publish \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/leaseline.app",
  "meetingType": {
    "$id": "https://api.sb/leaseline.app/meeting-types/mtgtype_qw2d5yGLVN",
    "$type": "MeetingType",
    "name": "Problem interview",
    "duration": 20,
    "medium": "video",
    "availability": "availability_8Zj0a7vvRl"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/act_br07HsG8MG",
    "operation": "MeetingType.publish",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/act_br07HsG8MG"
  }
}
```

**SDK**

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

const meetingType = await $.MeetingType.publish({ meetingType: 'mtgtype_qw2d5yGLVN' })
```

**CLI**

```bash
npx startup-builder do MeetingType.publish --json '{"meetingType":"mtgtype_qw2d5yGLVN"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.MeetingType.publish({ meetingType: 'mtgtype_qw2d5yGLVN' })"
  }
}
```

## Works with
| With | Links |
| --- | --- |
| Roles | [Customer Lead](/agents/customer/customer-lead) |
| Systems | [Scheduling](/systems/scheduling) |
| Guides | [Book problem interviews from my waitlist](/systems/sales/book-problem-interviews), [Give me a booking link](/systems/sales/give-me-a-booking-link) |

## Example
Leaseline publishes `Intro call`, a 20-minute video Meeting Type booked into Dana Okafor’s [Availability](/business/nouns/availability). A property manager picks a morning slot and answers one question about their units. The [Meeting](/business/nouns/meeting) lands on both calendars with a join link.