# Create a formation

Source: https://joinopenfile.com/docs/api/create-formation
Index: https://joinopenfile.com/llms.txt

`POST /api/v1/formations`

Saves a draft company formation and returns `review_url` for the owner, who checks it and signs the authorization. Nothing is filed or charged until they do. Every field is optional; `issues` lists what's left.

In the MCP server this is `create_formation`.

## Example

```bash
curl -X POST https://api.joinopenfile.com/v1/formations \
  -H "content-type: application/json" \
  -d '{
  "entity": "llc",
  "state": "WY",
  "name": "Northwind",
  "package": "pro",
  "contact": {
    "name": "Sam Lee",
    "email": "sam@example.com"
  }
}'
```

## Body

| Name | Type | Required | Description |
| --- | --- | --- | --- |
| `entity` | `llc`, `corp`, `scorp`, `nonprofit` | No | The kind of company. |
| `state` | string | No | The state to form in, two letters. |
| `name` | string | No | The company name, without LLC or Inc. |
| `designator` | string | No | The ending, like `LLC`. `get_state` lists what the state accepts. |
| `backup_name` | string | No | A second choice, used if the state won't take the first. |
| `purpose` | string | No | The business purpose. A nonprofit must state a specific one. |
| `management` | `member`, `manager` | No | LLCs only: run by its members or by managers. |
| `shares` | string | No | Corporations only: authorized shares, digits only. |
| `par_value` | string | No | Corporations only: par value in dollars. Empty for no par. |
| `package` | `basic`, `pro`, `premium` | No | The package. |
| `ein` | boolean | No | Basic only: add the EIN. Pro and Premium include it. |
| `agreement` | boolean | No | Basic only: add the operating agreement or bylaws. Pro and Premium include them. |
| `expedite` | boolean | No | Pay the state for faster processing, where it offers that. |
| `members` | integer | No | LLC members, in states that charge per member. |
| `county` | string | No | County, where publication depends on it. |
| `add_ons` | array of string | No | Add-on ids to include. `list_services` shows which can be added. Recurring ones can't: only the owner can start those. |
| `contact` | object | No | Who to reach about the order. |
| `contact.name` | string | No | Full name. |
| `contact.email` | string | No | Email address. |
| `contact.phone` | string | No | Phone number. |
| `principal` | object | No | The company's principal address. The owner can also add it when they review the order. |
| `principal.street` | string | No | Street. |
| `principal.city` | string | No | City. |
| `principal.state` | string | No | Two-letter state. |
| `principal.zip` | string | No | ZIP code. |
| `owners` | array of object | No | An LLC's members or a corporation's directors. The owner can also add these when they review the order. |
| `registered_agent` | object | No | The registered agent the owner named. |
| `registered_agent.name` | string | No | The agent's name. |
| `registered_agent.address` | object | No | A street address. |
| `registered_agent.address.street` | string | No | Street. |
| `registered_agent.address.city` | string | No | City. |
| `registered_agent.address.state` | string | No | Two-letter state. |
| `registered_agent.address.zip` | string | No | ZIP code. |

## Errors

| Status | When |
| --- | --- |
| `400` | Invalid input. |
| `429` | Too many requests. |
| `503` | undefined |

The body is the [error shape](https://joinopenfile.com/docs/errors.md).
