# The API

URL: /products/platform/api · Id: `page:products/platform/api`

> An API on StartupBuilder is a published promise of Verbs on Nouns, compiled from one definition, with StartupBuilder built from the same parts.

An API on [StartupBuilder](/code/builders/startup) is a published promise: these [Verbs](/business/nouns/verb) on these [Nouns](/business/nouns/noun), for these callers, on these terms. Every part compiles from one definition, and StartupBuilder keeps the same promise to its own callers.

## Seven parts, one definition
| Part | The question it answers | Where it comes from |
| --- | --- | --- |
| Contract | What can be called, with what input and output | Nouns and Verbs |
| Address | Where each [Interface](/business/nouns/interface) answers | A [Domain](/business/nouns/domain) and a path per Interface |
| Caller | Who calls, and for whom | Keys from [Identity](/code/platform/identity) and [Roles](/business/nouns/role) |
| Terms | What a call costs and how far it goes | [Offers](/business/nouns/offer), [Meters](/business/nouns/meter) and [Limits](/business/nouns/limit) |
| Execution | What runs a call | The [Function](/business/nouns/function) behind each Verb |
| [Change](/business/nouns/change) | How the contract grows without breaking callers | Changes and [Versions](/business/nouns/version) |
| History | What happened | [Actions](/business/nouns/action) and [Events](/business/nouns/event) |

A [Startup](/business/nouns/startup) authors the Nouns, Verbs and Offers. The rest derives: routes, OpenAPI, the SDK, the CLI, the MCP server, errors, docs, the key screen, the usage screen and the changelog. Every record behind it lives in the [Database](/code/platform/capabilities/database).

## Two kinds of caller
Every Startup's API serves two kinds of caller. Its [Workers](/business/nouns/worker) run the business: they publish Offers, answer [Conversations](/business/nouns/conversation) and close [Periods](/business/nouns/period). Its [Customers](/business/nouns/customer) use the [Product](/business/nouns/product): they look up opening hours or reschedule an appointment.

Both reach the same records through the same Verbs. They differ in address, scope and brand.

| | Workers and tests | Customers |
| --- | --- | --- |
| Address | `https://api.sb/openhours.dev` | `https://api.openhours.dev` |
| Scope | Every Verb their Role grants, across the Startup | Their own [Tenant](/business/nouns/tenant), and the Verbs their Role grants |
| Names | StartupBuilder's SDK, CLI and MCP server | The Startup's own packages, docs, status page and error pages |

Customers never see [api.sb](/code/platform/api-sb). No address, package, header or error page they meet names the platform.

## StartupBuilder is built the same way
StartupBuilder is the Product of a [Studio](/business/nouns/studio), startups.studio, which runs as a Startup like any other. Its API at api.sb, its reference, SDK, CLI and MCP server compile through the same projection as every Startup's.

Every tool StartupBuilder gives founders, each Startup gives its Customers:

| StartupBuilder gives | Each Startup gives its Customers |
| --- | --- |
| Keys with a test twin and rotation | The same keys, in the Startup's [Portal](/business/nouns/portal) |
| Usage against their Limits | Usage against each Limit of their Offer |
| A request log with the checks each call passed | Their own requests, with the same checks |
| A version pin and a changelog | A pin on the Startup's versions, and its changelog |
| The `startup-builder` SDK, CLI and MCP server | An SDK, a CLI and an MCP server named for the Startup |

No route is written by hand. A need the generic routes cannot meet changes the abstraction for every Startup, and a tool the platform keeps for itself is a defect.

## What stays a choice
Three things stay open per Verb:

- **Who does the work.** The Function can be code, a model, an [Agent](/business/nouns/agent) or a credentialed [Human](/business/nouns/human), and callers see no difference.
- **When it ships.** A Verb can be published before any Function exists. It answers with a quote, and each call counts toward the decision to build it.
- **Which shape it speaks.** An Interface can conform to an outside [Standard](/business/nouns/standard), such as SCIM, with no hand-written route.