# Company formation

> Form a US LLC or C-Corp in any state, with the registered agent, the EIN and the formation documents. Agents draft; the owner files.

A project is one business's app; **Company** forms the business behind it: a US LLC or C-Corp in any state, with the registered agent, the EIN and the formation documents, through one API, the console, the CLI or an agent. Vibiz files on your instructions. **Vibiz is not a law firm and gives no legal or tax advice**: the owner chooses the entity type and the state.

## Company formation: cost and what is needed

`vibiz_company catalog` lists every US state with its state fee per entity type, plus Vibiz's `service_fee_cents` and `expedite_fee_cents`. **All amounts are in cents**: `fees { llc: 11000 }` is $110.00. The price of a filing = state fee + service fee (+ expedite fee if the EIN is expedited); `vibiz_company catalog` with `state` (e.g. `"DE"`) returns quotes that add them up. The registered agent is included at no extra fee. Vibiz's service fee is `service_fee_cents` (14900 = $149.00 today) and the expedited EIN fee `expedite_fee_cents` (0 today); the state fee is the state's own. The catalog is the source of truth: quote from it, never from memory.

Vibiz is not a law firm and gives no legal or tax advice: say so when the user asks which entity or state to choose, and let them decide.

### What a draft needs

`vibiz_company draft`; read `problems` for what still blocks submit.

- `entity_type` (`llc` or `c_corp`) and `state`: the owner chooses.
- 1–3 `names` in order of preference, without the ending (LLC / Inc.).
- `industry` (from the catalog) and a short `description` (at most 50 characters).
- business and mailing address: your own, or use the registered agent's (included, no extra fee).
- `people`: name, email, address with phone; LLC `ownership_percent` summing to 100; C-Corp roles (president, secretary, treasurer, director) and shares; one `responsible_party` for the EIN.
- the responsible party's SSN/ITIN is given by a person in the console or `vibiz company`, never through an agent.

### Development and production

Development (the default for agents) runs the whole flow for free: nothing is filed, nothing is charged (submit, then `simulate` formation / ein). A real filing is submitted and paid by the owner (console or `vibiz company submit`, which shows the price first and asks them to type the company name).

## Pricing

| What | Amount |
| --- | --- |
| State filing fee | the state's fee for the entity type, from `GET /v1/company/catalog` (`jurisdictions[].fees`, in cents) |
| Vibiz service fee | `service_fee_cents`: **$149.00** today (`14900`) |
| Expedited EIN | `expedite_fee_cents`: **0 today** |
| Registered agent | included |

A draft carries `quote: { state_fee_cents, service_fee_cents, total_cents }`, what submitting would cost now; submit fixes it into `price`. A production submit appears on the account's usage as `company.formation`; a filing that fails (nothing filed) is reversed.

```bash
curl "https://app.vibiz.app/v1/company/catalog?env=development" -H "Authorization: Bearer $VIBIZ_API_KEY"
# → { "object": "company_catalog", "jurisdictions": [{ "state": "DE", "name": "Delaware", "fees": { "llc": 11000, "c_corp": 10900 } }, …],
#     "service_fee_cents": 14900, "expedite_fee_cents": 0, "disclaimer": "…" }
```

The fees above are from the catalog as an example; always read them from the catalog.

## Limits

- Entities: `llc` and `c_corp`, any US state and DC. Not offered yet: UK Ltd, Estonia OÜ, Singapore Pte. Ltd., Canada (listed under `coming_soon` with why).
- One company per project and environment.
- 1–3 names, each up to 120 characters, without the ending; a description of at most 50 characters; up to 10 people, first and last name at most 50 characters each.
- LLC ownership sums to exactly 100 (two decimals at most). C-Corp: at least one president, secretary, treasurer and director, and `shares` with `authorized` and `par_value_usd`.
- Indiana and Illinois need your own US business and mailing address.
- An expedited EIN only when nobody has an SSN (ITINs are fine).

## Lifecycle

```text
draft ──submit──▶ submitted ──▶ filing ──▶ formed ──▶ completed
                     │                       (EIN pending)  (EIN issued)
                     └──▶ failed
```

`actions[]` lists what the state needs from you (`names_rejected`, `founder_address_required`, a signature); `signatures[]` the SS-4 / Form 8821 to sign; `documents[]` the articles, the EIN letter and the rest.

## Draft and submit

```bash
vibiz company draft --file company.json --dev
vibiz company --dev                       # status, problems, next step
vibiz company submit --dev                # development: nothing is filed
vibiz company simulate formation          # development only
vibiz company simulate ein
```

`company.json`, an LLC with one owner:

```json
{
  "entity_type": "llc",
  "state": "WY",
  "names": [{ "name": "Acme Bakery" }, { "name": "Acme Breads" }],
  "industry": "Bakeries and Tortilla Manufacturing",
  "description": "Neighborhood bakery and online orders",
  "people": [
    {
      "first_name": "Ana",
      "last_name": "Diaz",
      "email": "ana@example.com",
      "address": { "line1": "1 Main St", "city": "Austin", "state": "TX", "postal_code": "78701", "country": "USA", "phone": "+15125550100" },
      "ownership_percent": 100,
      "responsible_party": true
    }
  ]
}
```

Pick `industry` from the catalog's `industries`. Over HTTP: `PUT /v1/projects/:id/company?env=development` with that body, `GET` to read `problems` and `quote`, `POST …/company/submit { "accept_terms": true }`.

A production submit is the owner's and checks what was reviewed: `{ "confirm": true, "accept_terms": true, "expected_total_cents": <quote.total_cents>, "expected_updated_at": "<updated_at>" }`. If the draft or the price changed since, it answers `409` and the owner reviews again. The CLI prints the price and asks the owner to type the company's name.

A live filing is paid first: from the account's credits (`402 payment_required` when the balance is short of the quote), or by card with `POST /v1/projects/:id/company/checkout?env=production` and the same body, which returns a payment page and files the company as soon as it is paid. A filing that fails is refunded to where the money came from ([Billing](https://app.vibiz.app/docs/billing)).

## What agents can and can't do

| | development | production |
| --- | --- | --- |
| Read the catalog, draft, read | yes | yes, masked (EIN, emails, street lines, phones) |
| Submit, simulate | yes (nothing filed) | no: `403 owner_only` |
| Sign, answer actions, download documents | yes | no: `403 owner_only` |
| Send an SSN or ITIN | never (`403`) | never: a person enters it in the console or the CLI |

## Errors

| Code | Status | When | Next step |
| --- | --- | --- | --- |
| `invalid_request` | 400 | unknown state, entity or industry; more than 3 names; submit with `problems` (in `details.problems`) | fix each `problems[].path` |
| `payment_required` | 402 | a live submit with less credit than the quote | add credits, or pay the filing by card (`…/company/checkout`) |
| `forbidden` + `owner_only` | 403 | an agent submitting, signing or sending a tax id | the owner, in the console ▸ Company |
| `conflict` | 409 | not a draft any more; the reviewed quote or draft changed | read it again and review |
| `not_found` | 404 | no company yet | `PUT` a draft |
| `provider_unavailable` | 503 | formation is not available in this environment right now | retry later |
