# Products

URL: /code/file-conventions/products · Id: `page:code/file-conventions/products`

> A file in products/ defines one Product, what a customer gets and its promise, as an App, API, Agent, Dataset or Service.

A file in `products/` defines one [Product](/business/nouns/product): what a [Customer](/business/nouns/customer) gets, and its promise. It implements the abstract products under [Products](/products).

```text
products/
└── pro.mdx      Leaseline Pro: an App and an API over Lease
```

## Reference
MDX. Frontmatter is the Product; the body is its promise, shown wherever it is sold.

| Key | Type | Holds |
| --- | --- | --- |
| `$type` | list | One or more of `App`, `API`, `Agent`, `Dataset`, `Service` |
| `nouns` | [Noun](/business/nouns/noun) names | The Nouns it exposes; they stay in `nouns/` so Products share them |
| `verbs` | [Verb](/business/nouns/verb) ids | The Verbs a Customer may call |
| `interfaces` | list | The [Interfaces](/business/nouns/interface) it ships on; every kind by default |
| `role` | [Role](/business/nouns/role) path | For an `Agent`: the Role in `agents/` its agent fills |

A [Site](/business/nouns/site) is a folder of its own in `sites/`.

## Examples
### Minimal
```mdx title="products/pro.mdx"
---
$type: [App]
nouns: [Lease]
---
```

### Leaseline
Leaseline declares a `Lease` Noun.

```mdx title="products/pro.mdx"
---
$type: [App, API]
nouns: [Lease]
verbs: [Lease.renew, Lease.notify]
---
No renewal slips past its date.
```

## What it builds
The [SoftwareBuilder](/code/builders/software) builds [App](/business/nouns/app), API, [Agent](/business/nouns/agent) and [Dataset](/business/nouns/dataset) Products. The [ServiceBuilder](/code/builders/service) builds a [Service](/business/nouns/service).

- a `Product` with its promise
- for an API: its paths, OpenAPI, SDK, CLI operations and MCP tools
- for an App: the screens of every exposed Noun
- for an Agent: its [Tools](/business/nouns/tool) and agent card; for a Service: the work lifecycle from ordered to accepted

## Routing
An API serves at `/api` on the [Startup](/business/nouns/startup)'s [Domain](/business/nouns/domain) and at `api.sb/leaseline.app`. An App mounts at `/app`. [Routing](/code/routing) has every rule.

## Good to know
- A Product has no price. An [Offer](/business/nouns/offer) sells it, from an [offer file](/code/file-conventions/offers).
- Two `$type` values on one file ship one promise on two Interfaces.