Skip to main content

Response shape

Every response uses the same envelope. On success, payload holds the result and error is null. The one exception is a successful Confirm payment, which answers 200 with an empty body.
On failure, payload is null and error carries a machine readable code, a human readable message, a requestId, and, for validation failures, per field details.
Branch on error.code, not on message. Codes are stable; messages may change.

Request IDs

Every response from doola’s API servers, success or failure, carries an x-request-id header. On a failure, error.requestId holds the same value. It is 32 lowercase hex characters and identifies the request’s trace. Log it with your own record of the call. When you contact doola support about a request, quote this id and support can find that trace on our side. Never use it as an idempotency or deduplication key: use Idempotency-Key for that. It identifies the request’s trace and is not guaranteed to be unique per call, so use it for correlation only. An x-request-id header you send is not echoed back.

Global error reference

These can be returned by any endpoint. Endpoint specific codes are documented in the API reference.

Industry errors

Returned only by Create company. The Choosing an industry guide has the full context.

Expedited EIN errors

Returned only by Create company when requestedServices is present. The Expedited EIN guide has the full context.

Required action errors

Returned by the required-action reads and the resolution endpoint. The Required actions guide has the full context.

Signature errors

Returned by the signing endpoints. The SS-4 and Form 8821 signing guide has the full context.

Annual Report Filing errors

Returned by the Annual Report Filing endpoints. The guide lists which endpoint returns each one.

Embedded SDK errors

Returned by the two Partner API endpoints an Embedded SDK integration calls from your server. SDK errors covers what the SDK reports in the browser. Creating a customer session also returns 409 E_EMAIL_IN_USE from the global reference, and is limited to 600 sessions a minute per tenant (429 E_RATE_LIMITED).
Last modified on October 28, 2026