# Form my company

URL: /systems/legal-and-corporate/form-my-company · Id: `guide:form-my-company`

> Say "form my company" and get a corporation with its certificate filed, its first directors appointed and its cap table open.

Forming a [Company](/business/nouns/company) files its certificate, appoints its first directors and opens its cap table. A corporation is the default once a cofounder is seated or the [Startup](/business/nouns/startup) raises; an LLC only when the [Decision](/business/nouns/decision) records why.

Needs: [Startup](/business/nouns/startup)

**Before real money moves**

- 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.

## What you get
- 1 Company formed in Delaware, its certificate filed and its first directors appointed (Company)
- 1 entity-type Decision: a corporation, or an LLC with the reason recorded (Decision)
- 1 formation documents for you to sign as an officer (Document)
- 1 cap table with the founders’ shares (Share)

## Your agent does
**For agents**

- Guide: `guide:form-my-company`, status `beta`. Page: [/systems/legal-and-corporate/form-my-company.md](/systems/legal-and-corporate/form-my-company.md).
- Approval: ask the founder first. Show the run, then wait for their Approval; a refusal ends it.
- Leaves the chat: never.
- Needs first: [Startup](/business/nouns/startup).
- 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 | [`Company.incorporate`](/business/nouns/company/incorporate) (`verb:Company.incorporate`) | `legalName` string, required: example `"Leaseline Inc."`; `jurisdiction` string, required: example `"US-DE"` | `company` Company |

Returns: the last call answers with `company` 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",
  "company": {
    "$id": "https://api.sb/leaseline.app/companies/company_1",
    "$type": "Company",
    "name": "Leaseline",
    "legalName": "Leaseline Inc.",
    "status": "incorporated"
  },
  "action": {
    "$id": "https://api.sb/leaseline.app/actions/action_1",
    "operation": "Company.incorporate",
    "status": "done"
  },
  "links": {
    "self": "https://api.sb/leaseline.app/actions/action_1"
  }
}
```

Next: offer “Make it an LLC, and record why”, or “Add my cofounder as a director”.

Calls: `Company.incorporate`

Ask:

```text
Form my company.
Incorporate Leaseline in Delaware.
Make Leaseline a real company.
```

API:

```bash
# Company.incorporate
curl -X POST https://api.sb/leaseline.app/companies/incorporate \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"legalName":"Leaseline Inc.","jurisdiction":"US-DE"}'
```

SDK:

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

await $.Company.incorporate({ legalName: 'Leaseline Inc.', jurisdiction: 'US-DE' })
```

CLI:

```bash
npx startup-builder do Company.incorporate --json '{"legalName":"Leaseline Inc.","jurisdiction":"US-DE"}'
```

MCP:

```json
{
  "name": "do",
  "arguments": {
    "code": "return await $.Company.incorporate({ legalName: 'Leaseline Inc.', jurisdiction: 'US-DE' })"
  }
}
```

## Change it
- Make it an LLC, and record why.
- Add my cofounder as a director.
- Register it in another state where I hire.

## Under the hood
- Systems: [Corporate records](/systems/corporate-records)
- Nouns: [Company](/business/nouns/company), [Decision](/business/nouns/decision), [Document](/business/nouns/document), [Share](/business/nouns/share)
- Events: [`Company.incorporated`](/business/events/Company.incorporated)