# Launch my business

URL: /business/launch-my-business · Id: `guide:launch-my-business`

> Launch puts a Startup live on its domain, opens its Site and takes real payments through Stripe once every entry check of Live passes.

[Startup.launch](/business/nouns/startup/launch) puts a [Startup](/business/nouns/startup) live on its domain, serving its [Offers](/business/nouns/offer) to [Customers](/business/nouns/customer). It refuses until every entry check of [Live](/business/lifecycle/states/live) passes, and names each check that fails.

Needs: [Open a bank account](/systems/finance/open-a-bank-account) · [Offer](/business/nouns/offer) · [Put up a page](/start/guides/put-up-a-page)

**Before it runs**

- Who says yes: You. Your agent shows you the run and waits for your [Approval](/business/nouns/approval).
- You leave the chat: Never: it all happens in the chat.
- First question at Idea: “A refundable deposit, or the full price?”

## What you get
- 1 business moved to Live (Startup)
- 10 launch checks every Startup passes, plus any its template adds (Lifecycle)
- 1 site public at leaseline.app (Site)
- 1 Offer on sale at $29 a month (Offer)
- 1 checkout that takes real cards (Stripe's Checkout Session)
- 1 Stripe account taking live charges and paying out to your bank (Stripe's Account and Payout)
- 1 billing portal where customers change or cancel (Stripe's Billing Portal)
- 1 launch announcement goes to your Audiences (Workflow)

## Your agent does
**For agents**

- Guide: `guide:launch-my-business`, status `live`. Page: [/business/launch-my-business.md](/business/launch-my-business.md).
- Approval: ask the founder first. Show the run, then wait for their Approval; a refusal ends it.
- Leaves the chat: never.
- Needs first: [Open a bank account](/systems/finance/open-a-bank-account), [Offer](/business/nouns/offer), [Put up a page](/start/guides/put-up-a-page).
- Run: call the steps in order, each through the API, SDK, CLI or MCP tab below; a later step passes the `$id` an earlier one returns. Each value marked example is the sample business’s: pass the founder’s own.

| Step | Verb | Inputs (type, required, this guide’s value) | Returns |
| --- | --- | --- | --- |
| 1 | [`Startup.launch`](/business/nouns/startup/launch) (`verb:Startup.launch`) | `startup` Startup (an id), required: the `$id` of the first Startup `Startup.list` returns | `startup` Startup |

Returns: the last call answers with `startup` and its `action`, whose `status` is `done`, `pending` (waiting on an Approval or a Worker), `failed`, `canceled` or `refused`:

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

Next: offer [Sell outside the US](/products/offers/sell-outside-the-us) (`guide:sell-outside-the-us`) when `Order.placed` fires, or “Launch on Monday at 9 am”, or “Tell my waitlist a day before everyone else”.

Calls: `Startup.launch`

Ask:

```text
Launch Leaseline.
Put the business live and start taking payments.
Open leaseline.app to customers today.
```

API:

```bash
# Look up the Startup: Startup.list
STARTUP=$(curl "https://api.sb/leaseline.app/startups?limit=1" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" | jq -r '.startups[0]["$id"] | split("/") | last')

# Startup.launch
curl -X POST https://api.sb/leaseline.app/startups/$STARTUP/launch \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
```

SDK:

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

const [startup] = await $.Startup.list({ limit: 1 })
await $.Startup.launch({ startup: startup.$id })
```

CLI:

```bash
STARTUP=$(npx startup-builder do Startup.list --json '{"limit":1}' | jq -r '.startups[0]["$id"] | split("/") | last')
npx startup-builder do Startup.launch --json '{"startup":"'"$STARTUP"'"}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "const [startup] = await $.Startup.list({ limit: 1 })\nreturn await $.Startup.launch({ startup: startup.$id })"
  }
}
```

Launch refuses until every check below that applies to your Startup passes. The [launch checklist](/start/launch-checklist) gives the words that clear each one.

| Check | Applies to | What clears it | Call |
| --- | --- | --- | --- |
| Offers published | Every Startup | Publish an Offer with a price and terms. | [Offer.publish](/business/nouns/offer/publish) |
| Work defined | Every Startup | Give every published Offer a Workflow with each step assigned. | [Workflow.create](/business/nouns/workflow/create) |
| People assigned | Every Startup | Seat an Agent or a person in every Role the Workflows need. | [Role.staff](/business/nouns/role/staff) |
| Site published | Every Startup | Publish the home, pricing, terms, and privacy Pages. | [Version.deploy](/business/nouns/version/deploy) |
| Test run passed | Every Startup | Have a sample Customer accept every published Offer in test. | [Offer.accept](/business/nouns/offer/accept) |
| Portal ready | Every Startup | Build the Startup so the Portal serves every Customer record. | [Startup.build](/business/nouns/startup/build) |
| Agent API open | Every Startup | Build the Startup and fix each conformance failure it names. | [Startup.build](/business/nouns/startup/build) |
| Payouts connected | Every Startup | Have a person claim the Startup and finish payouts onboarding. | [Startup.claim](/business/nouns/startup/claim) |
| Address resolves | Every Startup | Connect the Domain, wait for its certificate, and check `walletsEnabled`. | [Domain.connect](/business/nouns/domain/connect) |
| Five slots at Commitment | Every Startup | 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 | [Dataset API](/products/templates/dataset-api), [Directory](/products/templates/directory) | Record a licensed, crawled, or synthetic Source for every Dataset. | [Source.create](/business/nouns/source/create) |
| Evals passing | [Agent as a Service](/products/templates/agent-as-a-service) | Run the Evals again after fixing each failing task type. | [Action.evaluate](/business/nouns/action/evaluate) |
| SLA published | [Services-as-Software](/products/templates/services-as-software), [E2E managed service](/products/templates/managed-service) | State the outcome, the SLA, and the remedy on every service Offer. | [Offer.publish](/business/nouns/offer/publish) |
| Supply seeded | [Marketplace](/products/templates/marketplace), [Licensed-human marketplace](/products/templates/licensed-marketplace) | Onboard the first Suppliers and have each accept the supplier terms. | [Human.onboard](/business/nouns/human/onboard) |
| Credentials verified | [Licensed-human marketplace](/products/templates/licensed-marketplace) | Verify a current credential for each Supplier in each jurisdiction served. | [Credential.verify](/business/nouns/credential/verify) |
| Human steps staffed | [E2E managed service](/products/templates/managed-service) | Seat a person in every human delivery step, with a response time. | [Role.staff](/business/nouns/role/staff) |

## Change it
- Launch on Monday at 9 am.
- Tell my waitlist a day before everyone else.
- Pause the business for a week.

## Under the hood
- Systems: [Sites](/products/site/sites), [Billing](/systems/billing), [Ledger](/systems/ledger)
- Nouns: [Startup](/business/nouns/startup), [Lifecycle](/business/nouns/lifecycle), [Site](/business/nouns/site), [Offer](/business/nouns/offer)
- Events: [`Startup.launched`](/business/events/Startup.launched)
- Stripe objects: `Account`, `Checkout Session`, `Billing Portal`, `Payout`