---
title: "Submit formation"
method: POST
path: "/formations"
tags: ["Formations"]
---

# Submit formation

`POST /formations`

## Request

- Base URL: `https://api.crevio.co/v1`
- URL: `https://api.crevio.co/v1/formations`
- Auth: API key in header `Authorization`

Create a draft formation and start payment. Returns a Stripe checkout_url unless the account has a saved card, in which case the charge happens inline and charged_inline is true.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `entity_type` 'LLC', required: Today doola only supports LLC
  - `state` string, required: Two-letter US state code (e.g. WY)
  - `naics_code` string, required: 6-digit NAICS code (from GET /v1/formations/naics_codes)
  - `description` string, required
  - `phone_number` string
  - `name_options` object[], required
    - `name` string, required
    - `entity_type_ending` 'LLC' | 'L.L.C' | 'L.L.C.' | 'Limited Liability Company', required
  - `members` object[], required: LLC members. Ownership percentages must sum to exactly 100.
    - `legal_first_name` string, required
    - `legal_last_name` string, required
    - `contact_full_name` string, required
    - `is_natural_person` boolean
    - `ownership_percent` number, required
    - `address` object, required
      - `line1` string, required
      - `line2` string
      - `city` string, required
      - `state` string, required
      - `postal_code` string, required
      - `country` string, required: ISO 3166-1 Alpha-3
      - `phone` string
    - `ssn` string: Optional. Format XXX-XX-XXXX. Not stored locally.
  - `responsible_party` object, required
    - `legal_first_name` string, required
    - `legal_last_name` string, required
    - `email` string
    - `address` object, required
      - `line1` string, required
      - `line2` string
      - `city` string, required
      - `state` string, required
      - `postal_code` string, required
      - `country` string, required: ISO 3166-1 Alpha-3
      - `phone` string
    - `ssn` string: Optional. Not stored locally.
  - `mailing_address` object, required
    - `line1` string, required
    - `line2` string
    - `city` string, required
    - `state` string, required
    - `postal_code` string, required
    - `country` string, required: ISO 3166-1 Alpha-3
    - `phone` string
  - `verification_id` string: KYC verification id from the active KYC provider. Optional — omitted means auto-resolve via the configured provider.

## Response `201`

Formation created

- object
  - `id` string, required
  - `object` string, required
  - `status` 'awaiting_payment' | 'pending' | 'submitted' | 'completed' | 'failed', required
  - `entity_type` 'LLC', required
  - `state` string, required
  - `naics_code` string, required
  - `industry` string, nullable, required
  - `description` string, required
  - `name_options` unknown[], required
    - unknown
  - `members` unknown[], required
    - unknown
  - `responsible_party` object, required
  - `mailing_address` object, required
  - `ein` string, nullable, required
  - `formation_filing_date` string, nullable, required
  - `formation_filing_number` string, nullable, required
  - `services` unknown[], required
    - unknown
  - `signature_requirements` unknown[], required
    - unknown
  - `admin_notes` unknown[], required
    - unknown
  - `doola_error` string, nullable, required
  - `stripe_checkout_session_id` string, nullable, required
  - `submitted_at` string, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `required_actions` unknown[], required
    - unknown
  - `doola_company_id` string, nullable, required
  - `verification_id` string, nullable, required
  - `payment_status` 'unpaid' | 'paid' | 'refunded', required
  - `documents` FormationDocument[], required
    - `id` string, required
    - `object` string, required
    - `document_type` string, required
    - `name` string, required
    - `content_type` string, nullable, required
    - `doola_created_at` string, nullable, required
    - `doola_last_modified_at` string, nullable, required
    - `doola_company_id` string, required
    - `download_url` string, nullable, required
  - `checkout_url` string, nullable: Present when hosted checkout is needed
  - `charged_inline` boolean: True when card-on-file charged inline without redirect

## Other responses

- `400`: Bad request
- `401`: Authentication required
- `403`: Forbidden
- `409`: duplicate_record — a non-terminal formation already exists for this verification_id
- `422`: Validation error
- `429`: Rate limit exceeded — 600 requests per minute per credential. Retry after the number of seconds in `Retry-After`.
- `500`: Internal server error

---

[API](https://skmtc.dev/crevio/apis/crevio-api-v1.md) · [All operations](https://skmtc.dev/crevio/apis/crevio-api-v1/llms.txt) · [OpenAPI document](https://skmtc.dev/crevio/apis/crevio-api-v1/revisions/2219f18ad651?raw)
