# launch

URL: /business/nouns/startup/launch · Id: `verb:Startup.launch` · Call: `await $.Startup.launch({ … })` (SDK) or the `do` tool at `https://api.sb/mcp`. Inputs says what to pass, Outputs what returns, When it waits who approves.

> Launch puts a Startup live on its domain, serving its Offers to Customers.

Launch puts a [Startup](/business/nouns/startup) live on its domain, serving its [Offers](/business/nouns/offer) to [Customers](/business/nouns/customer).

## Inputs
| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `startup` | [Startup](/business/nouns/startup) | Yes | The Startup to launch. |

## Outputs
| Output | Type | Required | Description |
| --- | --- | --- | --- |
| `startup` | [Startup](/business/nouns/startup) | Yes | The Startup, now live. |

## Effects
- Emits [`Startup.launched`](/business/events/Startup.launched).
- Performed by the [Founder](/agents/founding/founder).
- Runs the entry checks of Live, and refuses when any check fails.
- Sets `launchedAt` on the Startup.

## Refuses when
| Check | Error | Fix | Then call |
| --- | --- | --- | --- |
| Offers published (`live-offers`) | [`refused`](/code/api/errors/refused) | Publish an Offer with a price and terms. | [Offer.publish](/business/nouns/offer/publish) |
| Work defined (`live-work`) | [`refused`](/code/api/errors/refused) | Give every published Offer a Workflow with each step assigned. | [Workflow.create](/business/nouns/workflow/create) |
| People assigned (`live-people`) | [`refused`](/code/api/errors/refused) | Seat an Agent or a person in every Role the Workflows need. | [Role.staff](/business/nouns/role/staff) |
| Site published (`live-site`) | [`refused`](/code/api/errors/refused) | Publish the home, pricing, terms, and privacy Pages. | [Version.deploy](/business/nouns/version/deploy) |
| Test run passed (`live-test-run`) | [`refused`](/code/api/errors/refused) | Have a sample Customer accept every published Offer in test. | [Offer.accept](/business/nouns/offer/accept) |
| Portal ready (`live-portal`) | [`refused`](/code/api/errors/refused) | Build the Startup so the Portal serves every Customer record. | [Startup.build](/business/nouns/startup/build) |
| Agent API open (`live-agent-api`) | [`refused`](/code/api/errors/refused) | Build the Startup and fix each conformance failure it names. | [Startup.build](/business/nouns/startup/build) |
| Payouts connected (`live-payouts`) | [`refused`](/code/api/errors/refused) | Have a person claim the Startup and finish payouts onboarding. | [Startup.claim](/business/nouns/startup/claim) |
| Address resolves (`live-address`) | [`refused`](/code/api/errors/refused) | Connect the Domain, wait for its certificate, and check `walletsEnabled`. | [Domain.connect](/business/nouns/domain/connect) |
| Five slots at Commitment (`live-slots`) | [`refused`](/code/api/errors/refused) | Run the cheapest test on each slot below Commitment, such as a fake door on the reserve page. | [Experiment.start](/business/nouns/experiment/start) |
| Sources secured (`live-sources`, [Dataset API](/products/templates/dataset-api), [Directory](/products/templates/directory) only) | [`refused`](/code/api/errors/refused) | Record a licensed, crawled, or synthetic Source for every Dataset. | [Source.create](/business/nouns/source/create) |
| Evals passing (`live-evals`, [Agent as a Service](/products/templates/agent-as-a-service) only) | [`refused`](/code/api/errors/refused) | Run the Evals again after fixing each failing task type. | [Action.evaluate](/business/nouns/action/evaluate) |
| SLA published (`live-sla`, [Services-as-Software](/products/templates/services-as-software), [E2E managed service](/products/templates/managed-service) only) | [`refused`](/code/api/errors/refused) | State the outcome, the SLA, and the remedy on every service Offer. | [Offer.publish](/business/nouns/offer/publish) |
| Supply seeded (`live-supply`, [Marketplace](/products/templates/marketplace), [Licensed-human marketplace](/products/templates/licensed-marketplace) only) | [`refused`](/code/api/errors/refused) | Onboard the first Suppliers and have each accept the supplier terms. | [Human.onboard](/business/nouns/human/onboard) |
| Credentials verified (`live-credentials`, [Licensed-human marketplace](/products/templates/licensed-marketplace) only) | [`refused`](/code/api/errors/refused) | Verify a current credential for each Supplier in each jurisdiction served. | [Credential.verify](/business/nouns/credential/verify) |
| Human steps staffed (`live-human-loop`, [E2E managed service](/products/templates/managed-service) only) | [`refused`](/code/api/errors/refused) | Seat a person in every human delivery step, with a response time. | [Role.staff](/business/nouns/role/staff) |
| The key is valid, but its scopes do not allow this operation. | [`forbidden`](/code/api/errors/forbidden) | Use a key whose scopes cover the operation, or ask an owner of the namespace to grant them. | [Startup.launch](/business/nouns/startup/launch) |

## When it waits
| Gate | Default |
| --- | --- |
| Decision class | Medium: two-way, visible |
| [Delay window](/systems/trust-and-governance/controls/one-way-windows) | 1 business hour, in which a watcher can pause, redirect or cancel it; then it runs. |
| Limit | The call [Limit](/business/nouns/limit) of the [Permission](/business/nouns/permission) it runs under. |
| Over the Limit | It waits `pending` for an [Approval](/business/nouns/approval) from the [Founder](/agents/founding/founder). Approved, it runs; refused, it ends `refused` with [`limit-exceeded`](/code/api/errors/limit-exceeded); unanswered by its deadline, it ends `canceled`. |

## Example
An [Agent](/business/nouns/agent) launches a Startup once its site and first Offer are ready, and Customers can accept that Offer from then on.

**Ask**

```text
Launch QuietCopy.
```

**API**

```bash
curl -X POST https://api.sb/quietcopy.com/startups/startup_1/launch \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

```json
{
  "api": "https://api.sb/quietcopy.com",
  "startup": {
    "$id": "https://api.sb/quietcopy.com/startups/startup_1",
    "$type": "Startup",
    "name": "QuietCopy"
  },
  "action": {
    "$id": "https://api.sb/quietcopy.com/actions/action_1",
    "operation": "Startup.launch",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/quietcopy.com/actions/action_1"
  }
}
```

**SDK**

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

const startup = await $.Startup.launch({ startup: 'startup_1' })
```

**CLI**

```bash
npx startup-builder do Startup.launch --json '{"startup":"startup_1"}'
```

**MCP**

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Startup.launch({ startup: 'startup_1' })"
  }
}
```

Guides that call it: [Launch my business](/business/launch-my-business).