# What ships today

URL: /code/status · Id: `page:code/status`

> Each surface the API, SDK, CLI and MCP pages describe, its status today and the exact line that works now, checked against npm and the live hosts.

The API, SDK, CLI and MCP pages describe the designed product, and each surface ships on its own. `live` works as the pages describe, `beta` runs with less or differently, and `planned` is documented and not shipped.

## Surfaces
| Surface | Status | Today |
| --- | --- | --- |
| API, `https://api.sb` | `beta` | api.sb answers: its root, `/openapi.json`, `/llms.txt` and the Studio’s 242 Startups at `/startups` read with no key. A Startup’s own records and every write need an id.org.ai bearer token, which `startup-builder login` stores and `SB_TOKEN` holds in CI; the scoped `sk_` keys these pages describe are not issued. Every Verb POST outside `try` carries an `Idempotency-Key`. Its responses differ from these pages: `api` is an object, a response carries `links`, `nav`, `verbs` and `user` in place of an `actions` map, and an error is `{"error":{"status","code","message"}}` as `application/json`, with no `type`, `title`, `fix` or `next`. Branch on the HTTP status and `error.code`. |
| SDK, `import { $ } from 'startup-builder'` | `planned` | `npm install startup-builder` installs 0.3.0, the CLI’s own library (`Api`, `Session`, `work`). It exports no `$`, and `startup-builder/test`, `/ui`, `/react` and `/globals` do not resolve. |
| CLI, `npx startup-builder` | `beta` | `startup-builder` 0.3.0 runs `login`, `whoami`, `show`, `do`, `versions`, `revert` and the work loop (`queue`, `claim`, `close`, `release`, `work`) against api.sb. Its `do` takes `--data` for JSON input and previews in `try` unless `--do` or `--send`; it has no `schema`, `search`, `dev`, `listen`, `trigger`, `keys` or `logs`. It sends `SB_TOKEN` when set, and otherwise the token `login` stored. It also lacks `next`, `done`, `pending`, `clock`, `eval` and `connect`, and the `--fields`, `--env`, `--try` and `--json` input flags. |
| MCP, `https://api.sb/mcp` | `beta` | The hosted server signs the client in over OAuth and serves `search`, `fetch` and `do`, where `do` runs TypeScript against `$`. Its `$` declares 73 Nouns, fewer than the reference lists. A call resolves to its Action, whose `status` is `Pending`, `Done`, `Refused`, `Failed` or `Canceled`. A call without `{ mode: 'do' }` runs in `try`: it returns the Action it would record and stores nothing. A program’s writes commit when it returns, so it does not read its own writes. |
| Create, `npm create startups` | `planned` | On npm, `create-startups` is 0.2.0, an unrelated idea generator: it takes none of these flags and writes no `startup.ts`, `startups.lock` or `.mcp.json`. Do not run `npm create startups` from these pages. |
| Startup Interfaces, `api.<your domain>` | `planned` | The Products pages describe each Startup’s own API host, SDK package, CLI, MCP server, App, Tenants, sign-in and webhooks (for the worked example: `api.leaseline.app`, the `leaseline` package, `LEASELINE_API_KEY` and `Leaseline-Signature`). None is published: `leaseline` is not on npm, `api.leaseline.app` does not resolve, and api.sb’s `$` has no `App`, `Interface` or `Tenant` Noun. |
| SOC 2, `https://startupbuilder.dev/systems/trust-and-governance` | `planned` | The Trust pages document the platform’s Controls and map each to SOC 2 criteria. They name no SOC 2 report, auditor, report type or period, so no report can be sent to a buyer from them today. |
| Docs MCP, `https://startupbuilder.dev/mcp` | `live` | POST only, read-only and keyless: `search`, `fetch` and `guides`. `plan` and `preview` are `planned` and not served. |
| startups.new, `https://startups.new` | `beta` | startups.new is open: describe the business in plain words, and its agent turns it into Business-as-Code, previews it and publishes it to startups.studio. These pages do not list which later steps (claiming, connecting Stripe, publishing) complete there today; its chat says what it can do for your business. |

**What works on each surface now.**

- **API**, `beta`. Sign in with `npx startup-builder@0.3.0 login`, then read records and preview Verbs through the CLI or the hosted MCP server.

   ```bash
   curl https://api.sb/startups
   ```
- **SDK**, `planned`. The hosted MCP server’s `do` tool runs a different `$`, typed by `https://api.sb/$.d.ts`: only the Verbs it declares run there (see Verbs on api.sb), each call resolves to its Action (`status` `Done`, `Pending`, `Refused`, `Failed` or `Canceled`), not to the record this SDK returns, and a call without `{ mode: 'do' }` runs in `try` and stores nothing.

   ```bash
   claude mcp add --transport http sb https://api.sb/mcp
   ```
- **CLI**, `beta`. The `do` lines on these pages use 0.3.0’s own flags (`--data`, `--do`, `--idempotency-key`); the commands 0.3.0 lacks are marked on the CLI reference. Check a command’s flags with its `--help`.

   ```bash
   npx startup-builder@0.3.0 login
   ```
- **MCP**, `beta`. Fetch `https://api.sb/$.d.ts` before a `do` program and call only what it declares. Preview in `try`, then pass `{ mode: 'do' }`; run a write and a read of its result as two `do` calls.

   ```bash
   claude mcp add --transport http sb https://api.sb/mcp
   ```
- **Create**, `planned`. Until it ships, describe the Startup on [startups.new](https://startups.new), or sign in with `npx startup-builder@0.3.0 login` and read it on api.sb. Open [startups.new](https://startups.new).
- **Startup Interfaces**, `planned`. A Startup’s records and Verbs are on api.sb, at its namespace, for the Verbs api.sb declares.

   ```bash
   curl https://api.sb/startups
   ```
- **SOC 2**, `planned`. Share the Control and framework map pages; a buyer who needs an audited report asks the Startups.Studio team on startups.studio. Open [startupbuilder.dev/systems/trust-and-governance/frameworks](https://startupbuilder.dev/systems/trust-and-governance/frameworks).
- **Docs MCP**, `live`.

   ```bash
   claude mcp add --transport http startupbuilder-docs https://startupbuilder.dev/mcp
   ```
- **startups.new**, `beta`. Open [startups.new](https://startups.new).

## Works today
**Works today.** These lines run against api.sb now. The outputs shown were captured from it; the CLI and MCP lines follow the startup-builder 0.3.0 README.

1. Read the Studio’s Startups, with no sign-in:

   ```bash
   curl -s "https://api.sb/startups?limit=1" | jq '.startups[0] | {"$id", name, status}'
   ```

   ```text
   {
     "$id": "https://api.sb/adjusters.directory",
     "name": "adjusters.directory",
     "status": "Designed"
   }
   ```

2. Read what the hosted `$` declares: `curl -s 'https://api.sb/$.d.ts'` returns the index of 73 Nouns and their Verbs. [What ships today](/code/status#verbs-on-apisb) lists them.

3. Sign in: `npx startup-builder@0.3.0 login` opens id.org.ai in your browser (`login --device` in a terminal with none), and `npx startup-builder@0.3.0 whoami` prints who api.sb sees.

4. Read a Startup: `npx startup-builder@0.3.0 show /headless.ly --json`.

5. Preview a Verb: `npx startup-builder@0.3.0 do <Noun.verb> <$id> --data '<json>'` runs it in `try` and stores nothing; add `--do` to run it. `npx startup-builder@0.3.0 help do` lists every flag.

6. Connect an agent: `claude mcp add --transport http sb https://api.sb/mcp`, sign in from `/mcp`, then call `do` with `return await $.search('headless.ly')`. A call runs in `try` unless it passes `{ mode: 'do' }`, and resolves to its Action.

## Verbs on api.sb
api.sb serves 164 of the 1109 Verbs these pages document. Each Noun below also reads with `get`, `list`, `find`. A Verb outside this table is `planned` on every surface: its page says so, `/verbs.json` gives it `"apiSb": false`, and a guide that calls it is `planned`.

| Noun | Verbs api.sb serves |
| --- | --- |
| `Thing` | `revert`, `create`, `update` |
| `Noun` | `revert`, `create`, `update`, `preview`, `convert` |
| `Verb` | `revert`, `create`, `update` |
| `Field` | `revert`, `create`, `update` |
| `Change` | `revert`, `create`, `update`, `open`, `merge`, `rebase`, `close` |
| `Decision` | `revert`, `create`, `update` |
| `Claim` | `revert`, `create`, `update` |
| `Code` | `revert`, `create`, `update` |
| `Collection` | `revert`, `create`, `update`, `invite`, `message` |
| `ContactPoint` | `revert`, `create`, `update`, `findEmail`, `verifyEmail` |
| `Dataset` | `revert`, `create`, `update` |
| `Deck` | `revert`, `create`, `update` |
| `DeckPart` | `revert`, `create`, `update` |
| `Domain` | `revert`, `create`, `update`, `reserve`, `launch`, `park` |
| `Facet` | `revert`, `create`, `update` |
| `Goal` | `revert`, `create`, `update`, `plan` |
| `HeadlessSaasCrudSurface` | `revert`, `create`, `update` |
| `HeadlessSaasDataModel` | `revert`, `create`, `update` |
| `HeadlessSaasErd` | `revert`, `create`, `update` |
| `HeadlessSaasProfile` | `revert`, `create`, `update` |
| `HeadlessSaasRepresentativeOffer` | `revert`, `create`, `update` |
| `HostClaim` | `revert`, `create`, `update` |
| `Hypothesis` | `revert`, `create`, `update`, `test`, `support`, `refute`, `reopen` |
| `KeyResult` | `revert`, `create`, `update` |
| `Mapping` | `revert`, `create`, `update` |
| `Meter` | `revert`, `create`, `update` |
| `Metric` | `revert`, `create`, `update` |
| `Offer` | `revert`, `create`, `update`, `publish`, `invite`, `verify`, `reprice`, `retire` |
| `Offering` | `revert`, `create`, `update` |
| `OutcomeContract` | `revert`, `create`, `update` |
| `Overview` | `revert`, `create`, `update` |
| `Page` | `revert`, `create`, `update` |
| `Problem` | `revert`, `create`, `update` |
| `Product` | `revert`, `create`, `update`, `search`, `publish`, `evaluate`, `rollback` |
| `Project` | `revert`, `create`, `update` |
| `Prospect` | `revert`, `create`, `update`, `search`, `enroll`, `suppress` |
| `Record` | `revert`, `create`, `update` |
| `Referral` | `revert`, `create`, `update` |
| `ReferralReward` | `revert`, `create`, `update` |
| `Relationship` | `revert`, `create`, `update` |
| `Retro` | `revert`, `create`, `update` |
| `Service` | `revert`, `create`, `update` |
| `Session` | `revert`, `create`, `update` |
| `Software` | `revert`, `create`, `update`, `search`, `publish`, `evaluate`, `rollback` |
| `SoftwarePrimitiveCard` | `revert`, `create`, `update` |
| `SolutionOverview` | `revert`, `create`, `update` |
| `Startup` | `revert`, `create`, `update`, `launch`, `pause`, `resume`, `extend`, `graduate`, `sell`, `shutDown` |
| `Story` | `revert`, `create`, `update` |
| `Suppression` | `revert`, `create`, `update` |
| `Task` | `revert`, `create`, `update`, `assign`, `unassign`, `claim`, `renew`, `release`, `block`, `unblock`, `escalate`, `complete`, `cancel`, `approve`, `refuse`, `requestChange`, `file` |
| `Template` | `revert`, `create`, `update` |
| `Theme` | `revert`, `create`, `update` |
| `Variant` | `revert`, `create`, `update` |
| `Version` | `revert`, `create`, `update` |
| `Watch` | `revert`, `create`, `update` |
| `WatchChannel` | `revert`, `create`, `update` |
| `Capability` | `revert`, `create`, `update` |
| `Floor` | `revert`, `create`, `update` |
| `Play` | `revert`, `create`, `update` |
| `Process` | `revert`, `create`, `update` |
| `Publisher` | `revert`, `create`, `update`, `get` |
| `RateCard` | `revert`, `create`, `update`, `get` |
| `Strategy` | `revert`, `create`, `update` |
| `Workflow` | `revert`, `create`, `update` |
| `Role` | `revert`, `create`, `update`, `fill`, `grant` |
| `AgentSession` | `revert`, `create`, `update` |
| `Limit` | `revert`, `create`, `update` |
| `ModelCall` | `revert`, `create`, `update`, `generate`, `embed`, `classify`, `transcribe` |
| `Webhook` | `revert`, `create`, `update` |
| `ApiDefinition` | `revert`, `create`, `update` |
| `ApiFunctionCascade` | `revert`, `create`, `update` |
| `Breakdown` | `revert`, `create`, `update` |
| `Diagrams` | `revert`, `create`, `update` |

## Package entry points
Each path a page imports or runs, and what resolves at it on npm.

| Entry point | Status | Today |
| --- | --- | --- |
| `startup-builder` | `planned` | 0.3.0 exports the CLI’s library (`Api`, `Session`, `work`), not `$`. |
| `startup-builder/test` | `planned` | Not in 0.3.0’s exports. |
| `startup-builder/ui` | `planned` | Not in 0.3.0’s exports. |
| `startup-builder/react` | `planned` | Not in 0.3.0’s exports. |
| `startup-builder/globals` | `planned` | Not in 0.3.0’s exports. |
| `npx startup-builder` | `beta` | The 0.3.0 command line, the package’s bin. |
| `create-startups` | `planned` | The name holds the unrelated 0.2.0. |

## The worked example
Leaseline is the worked example. `leaseline.app` and `api.leaseline.app` do not resolve and `api.sb/leaseline.app` returns 404, so its ids show the shape of a record, and a copied call returns 404 today.

Every example keeps its Leaseline ids, labelled as the worked example, so pages agree with each other and with the [types this site hosts](/products/what-compiles).