---
url: https://saas.dev/docs
md: https://saas.dev/docs.md
reads: [every Noun, Offer]
generates: all 34 outputs
next: https://saas.dev/docs/definition.md
---

# What a definition generates

> Write four files: a Startup, its Nouns and Verbs, and an Offer. They generate the App, API, CLI, MCP, SDK, Site, Docs and Blog, with Stripe billing.

- **App**: [A 9-screen Admin for your team](https://saas.dev/docs/app.md#admin) · [A button for every Verb](https://saas.dev/docs/app.md#buttons) · [SaaS App for your Customers](https://saas.dev/docs/app.md#saas-app) · [Customer sign-in](https://saas.dev/docs/customers.md#sign-in)
- **API**: [18 operations on 2 Collections](https://saas.dev/docs/interfaces.md#api) · [Your own domain](https://saas.dev/docs/customers.md#host) · [Customer keys and Limits](https://saas.dev/docs/customers.md#keys) · [One Tenant per Customer](https://saas.dev/docs/customers.md#tenants) · [Refusals that name the fix](https://saas.dev/docs/interfaces.md#refusals)
- **CLI**: [show for every record](https://saas.dev/docs/interfaces.md#cli) · [do for every Verb](https://saas.dev/docs/interfaces.md#cli)
- **MCP**: [search, fetch and do](https://saas.dev/docs/interfaces.md#mcp) · [Tools for your Customers’ agents](https://saas.dev/docs/customers.md#agents)
- **SDK**: [A typed $ with 14 methods](https://saas.dev/docs/interfaces.md#sdk) · [TypeScript, Zod and JSON Schema](https://saas.dev/docs/definition.md#fields) · [Packages under your name](https://saas.dev/docs/interfaces.md#sdk)
- **Site**: [Home, pricing and legal pages](https://startupbuilder.dev/products/site) · [/llms.txt, OpenAPI and agents.json](https://startupbuilder.dev/products/site)
- **Docs**: [A page per Noun and Verb](https://saas.dev/docs/interfaces.md#docs) · [A Markdown twin of every page](https://saas.dev/docs/interfaces.md#docs) · [Examples tested on every Interface](https://saas.dev/docs/interfaces.md#docs)
- **Blog**: [/blog](https://saas.dev/docs/how-it-works.md#blog) · [A changelog](https://saas.dev/docs/how-it-works.md#blog)
- **Stripe**: [A Product and Price per Offer](https://saas.dev/docs/get-paid.md#offer) · [Checkout and signed webhooks](https://saas.dev/docs/get-paid.md#checkout) · [Monthly subscriptions](https://saas.dev/docs/get-paid.md#subscriptions) · [A billing portal](https://saas.dev/docs/get-paid.md#portal) · [Payouts to your own account](https://saas.dev/docs/get-paid.md#payouts)
- **Underneath every Noun**: [Four Access levels](https://saas.dev/docs/interfaces.md#access) · [Previews that run nothing](https://saas.dev/docs/interfaces.md#what-ran) · [Try mode](https://saas.dev/docs/interfaces.md#what-ran) · [Versions and undo](https://saas.dev/docs/interfaces.md#what-ran) · [Test and Dev environments](https://saas.dev/docs/interfaces.md#environments) · [Export in one call](https://saas.dev/docs/interfaces.md#export)

What a definition generates: 34.

## Why define it once

Most of a SaaS is like every other: an API, sign-in, docs, a site, billing and screens. An agent can write it all; then you maintain it all. Write only what is yours: Nouns, Verbs and a price. Leaseclock's are a Unit, a Lease, renew, end and $29 a month, in 27 lines. From them come the App, API, CLI, MCP, SDK, Site, Docs and Blog, with Stripe billing and opinionated defaults. Nothing is scaffolded into your repo, so an improvement to the defaults reaches you on the next request. Override any style or component, and you maintain that one. The constraints are the feature.

## Your first call

```bash title="Terminal"
curl https://api.sb/startups/create
```

```json title="200 · application/json"
{
  "action": { "verb": "create", "object": "https://api.sb/", "mode": "do", "status": "Pending" },
  "preview": "Nothing ran. A GET on a Verb’s URL shows the Action it would create.",
  "verb": { "name": "Startup.create", "title": "Create a Startup", "mints": "Startup" }
}
```

This URL exists because Startup declares create.

[The four signed-in steps →](https://saas.dev/#make-it-yours)

Read next: [The definition](https://saas.dev/docs/definition.md)