Skip to main content

Documentation Index

Fetch the complete documentation index at: https://usenaive.ai/docs/llms.txt

Use this file to discover all available pages before exploring further.

Company Formation is the incorporation primitive. Naive orchestrates LLC formation through Doola, pulling verified PII from Footprint’s 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 to Doola
naive formation execute <formation-id>

Tools

ToolTypeDescriptionCost
list_naics_codesInfoList NAICS industry codesFree
submit_formationCoreStep 1: Validate KYC + create $249 Stripe CheckoutFree (creates checkout)
retry_formation_paymentCoreRegenerate Stripe Checkout if it expiredFree
execute_formationCoreStep 2: Submit to Doola after payment$249 paid via Stripe
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 Stripe 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 Stripe Checkout)
   └─ POST /v1/formation (business info + verification_id)
   └─ Returns checkout_url for $249 payment

4. User pays via Stripe Checkout
   └─ Webhook updates payment_status to "paid"

5. Execute formation (submits to Doola)
   └─ POST /v1/formation/:id/submit
   └─ PII decrypted from Footprint vault and sent to Doola

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 (Doola rejected the submission), 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 Doola submission with POST /v1/formation/:id/submit, which may resolve transient errors.

Pricing

LLC formation costs $249 USD, paid upfront via Stripe Checkout. The fee covers:
  • Doola formation service
  • State filing fees
  • Registered agent service
  • EIN application
  • All required legal documents
Payment is collected via Stripe Checkout when you call POST /v1/formation. The formation only proceeds to Doola 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.stripe.com/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 to Doola"
}
PII fields (SSN, DOB, member addresses) are not included in the request body. They are decrypted from Footprint’s 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 Stripe 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",
  "doola_customer_id": "doola-customer-id",
  "doola_company_id": "doola-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 Doola customer
  3. Decrypts PII from Footprint vault
  4. Maps fields to Doola schema
  5. Submits the formation to Doola

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 Stripe Checkout payment
pendingPayment received, ready for execute step
submittedSubmitted to Doola, formation in progress
formation_completedFormation complete, documents being generated
failedFormation failed (check doola_error)

Payment Statuses

StatusMeaning
unpaidStripe 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_configuredDOOLA_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_errorDoola API 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 Stripe Checkout)
    │   { verification_id, state: "WY", ... }
    │   → status: awaiting_payment, checkout_url

    ├─ User opens checkout_url and pays $249       → Stripe 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)