Skip to main content
Company Formation is the incorporation primitive. Naive orchestrates LLC formation through Naive’s formation engine, pulling verified PII from the encrypted identity vault at submission time so sensitive data (SSN, DOB, addresses) never touches your database. Identity verification (KYC) for all founders must be completed before formation can proceed.

CLI First

# 1) Get NAICS options
naive formation naics-codes

# 2) Submit formation to create $249 checkout URL
naive formation submit --verification-id <verification-id> --state WY --naics <naics-code-id> --description "AI-powered business automation platform" --names '[{"name":"Acme Tech","entity_type_ending":"LLC"}]'

# 3) After payment, execute submission for filing
naive formation execute <formation-id>

Tools

ToolTypeDescriptionCost
list_naics_codesInfoList NAICS industry codesFree
submit_formationCoreStep 1: Validate KYC + create $249 hosted checkoutFree (creates checkout)
retry_formation_paymentCoreRegenerate hosted checkout if it expiredFree
execute_formationCoreStep 2: Submit for filing after payment$249 paid via hosted checkout
list_formationsInfoList all formation requestsFree
get_formationInfoGet formation status and detailsFree
formation_documentsInfoList formation documentsFree
formation_document_downloadInfoGet document download URLFree

Prerequisites

  1. Completed identity verification — all founders must have passed KYC via the verification primitive. The verification’s ready_for_formation must be true.
  2. NAICS code — select the industry code for your business from the NAICS codes list.
  3. Business details — entity type, state, company name options, description, and (optionally) mailing address.
  4. Payment — $249 USD via hosted checkout.

Workflow

1. Complete KYC for all founders
   └─ GET /v1/verification/:id → ready_for_formation: true

2. Select NAICS code
   └─ GET /v1/formation/naics-codes → pick naics_code_id

3. Submit formation (creates hosted checkout)
   └─ POST /v1/formation (business info + verification_id)
   └─ Returns checkout_url for $249 payment

4. User pays via hosted checkout
   └─ Webhook updates payment_status to "paid"

5. Execute formation (submits the filing)
   └─ POST /v1/formation/:id/submit
   └─ PII decrypted from encrypted identity vault and dispatched for filing

6. Track progress
   └─ GET /v1/formation/:id → status updates

7. Download documents when ready
   └─ GET /v1/formation/:id/documents → Articles of Organization, EIN Letter

Idempotency & Recovery

Duplicate prevention. If you call POST /v1/formation for a verification that already has a non-failed formation, the API returns duplicate_record with the existing formation’s ID. This prevents accidental double-billing. Call GET /v1/formation/:id on the existing one to recover its state. Failed before payment. If a formation hits failed status with payment_status: "unpaid" (e.g. checkout session expired), use POST /v1/formation/:id/retry-payment to generate a fresh checkout URL. The business info is preserved. Failed after payment. If a formation hits failed after payment was confirmed (the formation filing was rejected), do not create a new formation — the original $249 is held against that record. Contact support@usenaive.ai for resolution. You can also retry the formation submission with POST /v1/formation/:id/submit, which may resolve transient errors.

Pricing

LLC formation costs $249 USD, paid upfront via hosted checkout. The fee covers:
  • managed formation service
  • State filing fees
  • Registered agent service
  • EIN application
  • All required legal documents
Payment is collected via hosted checkout when you call POST /v1/formation. The formation only proceeds to filing after payment is confirmed.

Listing NAICS Codes

curl https://api.usenaive.ai/v1/formation/naics-codes \
  -H "Authorization: Bearer nv_sk_your_key"

Submitting Formation

curl -X POST https://api.usenaive.ai/v1/formation \
  -H "Authorization: Bearer nv_sk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "verification_id": "3dcde53f-abaa-4bb6-a5b5-2d704fad6c19",
    "entity_type": "LLC",
    "state": "WY",
    "naics_code_id": "2o8v0kcaCWyPyi3LJFsCiTCFSyk",
    "description": "AI-powered business automation platform",
    "name_options": [
      { "name": "Acme Tech", "entity_type_ending": "LLC" },
      { "name": "Acme Technologies", "entity_type_ending": "LLC" },
      { "name": "Acme Solutions", "entity_type_ending": "L.L.C." }
    ],
    "mailing_address": {
      "line1": "123 Main St",
      "city": "San Francisco",
      "state": "CA",
      "postal_code": "94105",
      "country": "US",
      "phone": "+14155551234"
    }
  }'
Response (201):
{
  "id": "formation-uuid",
  "status": "awaiting_payment",
  "payment_status": "unpaid",
  "checkout_url": "https://checkout.usenaive.ai/c/pay/cs_test_xxx...",
  "checkout_session_id": "cs_test_xxx",
  "price_usd": "$249",
  "entity_type": "LLC",
  "state": "WY",
  "name_options": [...],
  "next_step": "Open the checkout_url to complete payment, then call POST /v1/formation/:id/submit to submit the formation"
}
PII fields (SSN, DOB, member addresses) are not included in the request body. They are decrypted from the encrypted identity vault during the execute step, after payment is confirmed. This ensures sensitive data never persists in Naive’s database.

Parameters

ParamTypeRequiredDescription
verification_idstringYesUUID of a completed KYC verification
entity_typestringYes"LLC"
statestringYes2-letter US state code (e.g. "WY", "DE")
naics_code_idstringYesFrom GET /v1/formation/naics-codes
descriptionstringYesBusiness description (max 256 chars)
name_optionsarrayYesAt least 1 name option (recommend 3 for availability)
mailing_addressobjectNoOptional. Defaults to primary member’s KYC address if not provided.

Executing Formation (After Payment)

After the user pays via the checkout URL, the payment webhook updates payment_status to paid. Then call:
curl -X POST https://api.usenaive.ai/v1/formation/formation-uuid/submit \
  -H "Authorization: Bearer nv_sk_your_key"
Response:
{
  "id": "formation-uuid",
  "formation_customer_id": "formation-customer-id",
  "formation_company_id": "formation-company-id",
  "status": "submitted",
  "payment_status": "paid",
  "entity_type": "LLC",
  "state": "WY"
}
This step:
  1. Verifies payment_status === "paid" (returns invalid_input error if not)
  2. Creates a formation customer
  3. Decrypts PII from encrypted identity vault
  4. Maps fields to the filing schema
  5. Submits the formation for filing

Name Options

Provide multiple name options in case your first choice is unavailable in the state. Each option needs:
FieldDescription
nameCompany name without entity ending
entity_type_ending"LLC", "L.L.C", "L.L.C.", or "Limited Liability Company"

Formation Statuses

StatusMeaning
awaiting_paymentCreated, waiting for $249 hosted checkout payment
pendingPayment received, ready for execute step
submittedSubmitted for filing, formation in progress
formation_completedFormation complete, documents being generated
failedFormation failed (check formation_error)

Payment Statuses

StatusMeaning
unpaidhosted checkout created but not paid
paidPayment confirmed, formation can proceed
refundedPayment was refunded (formation cancelled)

Documents

After formation completes, documents become available:
Document TypeDescription
ArticlesOfOrganizationFiled articles with the state
EinLetterIRS EIN assignment letter
MailBusiness mail documents
# List documents
curl https://api.usenaive.ai/v1/formation/formation-uuid/documents \
  -H "Authorization: Bearer nv_sk_your_key"

# Get download URL
curl https://api.usenaive.ai/v1/formation/formation-uuid/documents/doc-id \
  -H "Authorization: Bearer nv_sk_your_key"
Document download URLs are temporary signed URLs that expire after approximately 1 hour. Download immediately or re-fetch the URL when needed.

Error Handling

ErrorCauseRecovery
feature_not_configuredFORMATION_API_KEY not setConfigure env var
invalid_inputKYC not completedComplete verification first
invalid_inputMissing required fieldsCheck parameters
resource_not_foundFormation or verification not foundCheck UUIDs
provider_errorFiling provider rejected the requestCheck field validation

Typical Workflow

Agent receives task: "Incorporate my company as a Wyoming LLC"

    ├─ GET /v1/verification/:id                    → Confirm KYC passed
    │   → ready_for_formation: true

    ├─ GET /v1/formation/naics-codes               → Find industry code
    │   → naicsCodeId: "2o8v0kcaCWyPyi3LJFsCiTCFSyk"

    ├─ POST /v1/formation                          → Submit (creates hosted checkout)
    │   { verification_id, state: "WY", ... }
    │   → status: awaiting_payment, checkout_url

    ├─ User opens checkout_url and pays $249       → payment webhook fires
    │   → payment_status: paid, status: pending

    ├─ POST /v1/formation/:id/submit               → Execute formation
    │   → id: formation-uuid, status: submitted

    ├─ GET /v1/formation/:id                       → Check progress
    │   → status: submitted (days/weeks)

    ├─ GET /v1/formation/:id                       → Check again
    │   → status: formation_completed

    ├─ GET /v1/formation/:id/documents             → List documents
    │   → ArticlesOfOrganization, EinLetter

    └─ GET /v1/formation/:id/documents/:docId      → Download
        → downloadUrl (signed, 1hr expiry)