> ## 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.

> ## Agent Instructions
> Authenticate with the raw API key in the Authorization header. Never add a Bearer prefix.
> Use the sandbox base URL https://api.test.doola.com and a dk_test_ key in examples unless the user asks for production.
> Send an Idempotency-Key header on POST /v1/partner/customers and POST /v1/partner/companies. No other endpoint takes one.
> Every response is wrapped as {payload, error}. Read fields from payload and branch on error.code, never on the message.
> Drive formation progress from webhooks plus a reconciliation sweep, never a polling loop.
> Embedded SDK (@doola/js): the dk_ key stays on the server and mints customer sessions; the browser gets only a pk_ key and the session. onFormed carries only companyId and can fire more than once. Before charging, read the company with the dk_ key, require formationSubmissionStatus AWAITING_PAYMENT, check the owner's email, and price on the server. Then POST payment-confirmed, which answers 200 with an empty body, and replace the SDK element with a new doola.create() (never append a second one).
> The doola Formation MCP server at https://mcp.doola.com is for founders forming their own company with their own doola account. Partners integrate the Partner API or the Embedded SDK. The /mcp endpoint on this docs site only searches these docs.
> For a full capability summary with the rules above, read https://docs.doola.com/skill.md.

# Changelog

> Updates to the doola Embedded SDK and @doola/js.

Package releases are listed in full in the [`@doola/js` changelog](https://github.com/doolahq/doola-js/blob/main/packages/js/CHANGELOG.md). Changes to the Partner API endpoints the SDK uses are in the [Partner API changelog](/api/changelog).

<Update label="2026-10-08" description="@doola/js 0.3.0: each session conflict has its own error" tags={["Release"]}>
  doola answers a session with 409 for three reasons, and `onAuthError` now names each one: `email_in_use`, the new `external_id_conflict` and the new `customer_revoked`. The founder sees a message for each, and never the email message unless the email is the cause.

  Forward doola's error code to get them. `@doola/js/server` answers a 409 with `{ code }`, and `fetchAccessToken` rejects with it; see [Embed the SDK](/sdk/embed) and [Errors](/sdk/reference/errors#auth-errors). A route that sends only the status keeps getting `email_in_use` for a first 409. On a renewal, a 409 with `E_EMAIL_IN_USE` or with no code is `renewal_failed`. If you switch on `error.type` exhaustively, add the two new cases.
</Update>

<Update label="2026-10-08" description="SDK documentation" tags={["Docs"]}>
  The Embedded SDK has its own section in these docs: a [quickstart](/sdk/quickstart), the [payment guide](/sdk/payments), [testing](/sdk/testing) and a [go-live checklist](/sdk/go-live), and references for the [client](/sdk/reference/client), the [server helpers](/sdk/reference/server) and [errors](/sdk/reference/errors).

  The Partner API reference now lists every error [Confirm payment](/api/api-reference/companies/confirm-payment-for-a-draft-formation) and [Create a customer session](/api/api-reference/customer-sessions/create-a-customer-session) return, and the optional [Get your publishable key](/api/api-reference/sdk/get-your-publishable-key) endpoint.
</Update>

<Update label="2026-09-28" description="@doola/js 0.2.0: server helpers and Trusted Types" tags={["Release"]}>
  * **`@doola/js/server`** adds `createSessionHandler` and `createCustomerSession`, which build your session route. See [Create sessions](/sdk/sessions).
  * **Trusted Types.** Sites that enforce Trusted Types can allow the `doola-js` policy. See [Security and data](/sdk/security#content-security-policy).
</Update>

<Update label="2026-09-23" description="@doola/js 0.1.2: CommonJS types" tags={["Fix"]}>
  CommonJS projects using `node16` or `nodenext` module resolution get the right type definitions.
</Update>

<Update label="2026-09-23" description="@doola/js 0.1.0: first release" tags={["Release"]}>
  First release of `@doola/js`: `loadDoola`, the `<doola-embed>` element, session renewal through `fetchAccessToken`, and `onFormed`, which can fire again when a founder asks to pay for an unpaid formation.
</Update>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.