> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doola.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Updates and changes to the doola Partner API.

<Update label="2026-07-31" description="Expedited EIN available to every partner">
  The [expedited EIN](/api/expedited-ein) no longer requires enablement on your account. Send `requestedServices: [{ "service": "EinCreation", "variant": "Expedite" }]` on create company endpoint to request it. Expedited processing remains an additional fee, billed per company formed with it.

  Everything else is unchanged: expedited EIN is still available only for a **non-US founder** (`400 E_EXPEDITED_EIN_NOT_ELIGIBLE` otherwise, before anything is created), and the founder still signs a [Form 8821](/api/expedited-ein#the-form-8821-signature) alongside the SS-4.
</Update>

<Update label="2026-07-21" description="Formation filing number on company responses">
  Create company and Retrieve company now return `formationFilingNumber` — the filing number the state assigned when the formation was filed. It is `null` until the formation is filed and is populated alongside `formationFilingDate`; see [Reading progress](/api/formation#reading-progress).

  In the [sandbox playground](/api/sandbox-playground), `formation/complete` sets a fixed test value (`PLAYGROUND-FILING`).
</Update>

<Update label="2026-07-14" description="New webhook: document_operatingagreement_uploaded">
  A new webhook event, `document_operatingagreement_uploaded`, fires when an **LLC** company's Operating Agreement is ready to download. doola now generates the Operating Agreement for partner companies shortly after the Articles of Organization are processed, so the event typically arrives soon after `document_aoo_uploaded`.

  The payload is the standard `document_*` shape (`documentId`, `documentType: "OperatingAgreement"`, `documentCreatedAt`); use `documentId` with the [document endpoints](/api/domain-objects#document) to download. All partner tenants are subscribed automatically; see [Webhooks](/api/webhooks#events).

  Previously doola did not generate an Operating Agreement for partner companies. The [sandbox playground](/api/sandbox-playground)'s `formation/complete` now also lists the event in `triggeredEvents` for an LLC test company.
</Update>

<Update label="2026-07-13" description="New webhook: document_corporatebylaws_uploaded">
  A new webhook event, `document_corporatebylaws_uploaded`, fires when a **CCorp** company's Corporate Bylaws are ready to download. doola generates the Bylaws shortly after the Articles of Organization are processed, so the event typically arrives soon after `document_aoo_uploaded`.

  The payload is the standard `document_*` shape (`documentId`, `documentType: "CorporateBylaws"`, `documentCreatedAt`); use `documentId` with the [document endpoints](/api/domain-objects#document) to download. All partner tenants are subscribed automatically; see [Webhooks](/api/webhooks#events).

  Previously the Bylaws appeared in the documents list without any event. The [sandbox playground](/api/sandbox-playground)'s `formation/complete` now also lists the event in `triggeredEvents` for a CCorp test company.
</Update>

<Update label="2026-07-03" description="Sandbox playground: complete formation and EIN on demand">
  Sandbox now includes a playground that drives a test company through the two milestones you cannot control in the real world: the state confirming the formation, and the IRS issuing the EIN.

  * `POST /v1/partner/playground/companies/{companyId}/formation/complete` sets the filing date, uploads the Articles of Organization, fires `company_formation_completed` and `document_aoo_uploaded`, and advances the Formation service to `Completed`.
  * `POST /v1/partner/playground/companies/{companyId}/eincreation/complete` sets a test EIN, uploads the EIN letter, fires `company_ein_issued` and `document_einletter_uploaded`, and advances the EinCreation service to `Completed`.

  Each endpoint runs the same operations production uses, so webhooks are signed, subscription-filtered, retried, and logged exactly like real deliveries. The endpoints exist only in sandbox. See the new [Sandbox playground](/api/sandbox-playground) guide.
</Update>

<Update label="2026-07-03" description="Form 8821 e-signature for expedited-EIN non-US founders">
  A non-US founder who requests an [expedited EIN](/api/expedited-ein) now signs a **Form 8821** (Tax Information Authorization) in addition to the SS-4, letting doola retrieve the EIN letter directly from the IRS. It uses the same signing flow as the SS-4.

  * `signatureRequirements` on Create company and Retrieve company now includes a pending `FORM8821` entry alongside `SS4` for a non-US + expedited-EIN company. Standard-EIN and US companies are unchanged.
  * `POST /v1/partner/companies/{companyId}/signatures` accepts `documentType: "FORM8821"`.
  * Three new webhook events mirror the SS-4 set: `signature_form8821_completed`, `document_form8821_uploaded`, and `signature_form8821_reminder_due` (day 1, 3, 7).

  See [Non-US founders](/api/non-us-formation). Existing SS-4 behavior is unchanged.
</Update>

<Update label="2026-06-30" description="Expedited EIN at company formation">
  Partners with the expedited EIN feature can now request prioritized EIN processing for **non-US founders**. Add `requestedServices: [{ "service": "EinCreation", "variant": "Expedite" }]` to the create-company request; the company's `EinCreation` service then carries `variant: "Expedite"` on the create and retrieve responses.

  Both gates run before anything is created: Expedited EIN must be part of your partner agreement (`403 E_FEATURE_NOT_ENABLED` otherwise) and the founder must be non-US (`400 E_EXPEDITED_EIN_NOT_ELIGIBLE` otherwise). A rejected request creates no company and releases your `Idempotency-Key`.

  Omitting `requestedServices` keeps standard processing, so existing integrations are unaffected. See the new [Expedited EIN](/api/expedited-ein) guide.
</Update>

<Update label="2026-06-30" description="New webhook: company_ein_issued">
  A new webhook event, `company_ein_issued`, fires the first time a company's EIN is recorded. Fetch the company to read the `ein` field. A later correction to the EIN value does not re-fire it.

  It complements `document_einletter_uploaded`, which fires separately once the IRS confirmation letter is downloadable. All partner tenants are subscribed automatically; see [Webhooks](/api/webhooks#events).
</Update>

<Update label="2026-06-26" description="Precise industry selection — naicsCode deprecated">
  Create-company now accepts an `industry` field for precise NAICS classification. The response now echoes both `naicsCode` and `industry`.

  **`naicsCode` is deprecated.** It keeps working through **2026-09-21** (90 days) so existing integrations are unaffected. When both fields are sent, `industry` takes precedence.

  **Upgrade:** switch the create payload from `naicsCode` to `industry`, sourcing the value from the NAICS reference list. See [Choosing a NAICS industry](/api/naics-industry) for precedence and validation details.
</Update>

<Update label="2026-06-24" description="Non-US founder formation with SS-4 e-signature">
  You can now form US companies for non-US founders through the Partner API. When no member, executive member, or responsible party has a US tax ID, the founder signs an SS-4 before the IRS issues the EIN.

  * Create company and Retrieve company now return `signatureRequirements`: a pending `SS4` entry for a non-US founder, or an empty list for a US founder.
  * `POST /v1/partner/companies/{companyId}/signatures` returns a fresh, whitelabeled signing link (expires in two hours) to embed or send to the founder.
  * Three new webhook events: `signature_ss4_completed`, `document_ss4_uploaded`, and `signature_ss4_reminder_due` (day 1, 3, 7). You own the reminder cadence.

  See the new [Non-US founders](/api/non-us-formation) guide. US-founder integrations are unaffected.
</Update>

<Update label="2026-06-24" description="formationSubmissionStatus does not report formation completion">
  Don't use `formationSubmissionStatus` to check whether a formation is finished. This field only tracks whether doola has received the formation request. Its values are `PENDING`, `SUBMITTED`, and `FAILED`, and it never reaches a "completed" state, so polling it for completion will wait forever.

  To know when a formation is actually done (filed with the state, EIN issued, documents available), read the per-service statuses on [Company services](/api/company-services), subscribe to the `company_formation_completed` webhook, or check the `ein` and document fields on the company. The [Company formation](/api/formation) guide now spells this out in its Status lifecycle section.
</Update>

<Update label="2026-06-09" description="Clearer conflict when an email is already in use">
  Creating a customer with an email that already belongs to a non-customer principal (for example a partner-dashboard user) now returns `409 E_EMAIL_IN_USE` instead of `500`. One email cannot be both a dashboard user and a customer, so this is a client-side conflict you can handle — use a different email.
</Update>

<Update label="2026-06-04" description="Idempotent retries after a failed create">
  A failed create no longer locks its `Idempotency-Key`. If a create returns a `4xx` (validation or pre-check) or a transient `5xx`, the key is released — fix the request and retry with the **same** key instead of generating a new one.

  Successful creates are still replayed for the same key, and reusing a key from an already-successful create with a different body still returns `409 E_IDEMPOTENCY_KEY_REUSED`.
</Update>

<Update label="2026-06-04" description="C-Corp formation">
  The create-company endpoint now supports C-Corp formation. Set `entityType` to `CCorp` and provide `executiveMembers` (President, Secretary, Treasurer, and Director) and `ccorpValuation` (authorized shares and par value per share) in place of `members`.

  `entityType` defaults to `LLC`, so existing LLC integrations are unaffected.
</Update>

<Update label="2026-06-03" description="Initial release">
  First release of the doola Partner API developer docs and reference.

  * **Customers** — create, retrieve, and list customers.
  * **Companies** — submit a formation, retrieve a company, and list companies.
  * **Documents** — list a company's documents and fetch a download URL.
  * **Reference data** — countries, US states, NAICS codes, and state filing fees.
  * Guides for authentication, the formation lifecycle, webhooks, and errors.
  * Interactive API reference generated directly from the live API.
</Update>
