Skip to main content
Your customer may already own a US company that someone else formed. Import it to manage it through doola: file its annual reports and order an EIN for it. An import files nothing. doola records the company as the state has it on file, reviews it against its documents, and marks it verified.

The flow

  1. Import the company. It starts at importStatus: AWAITING_DOCUMENTS.
  2. Upload the documents listed in documentRequirements. Once every one is on file, the import moves to IN_REVIEW.
  3. doola reviews the import. If something needs correcting, doola raises a required action and you answer it.
  4. doola verifies the import: importStatus becomes VERIFIED and company_import_verified fires.

Importing the company

Idempotency-Key is required, as on Create a company. Retrying with the same key and body returns the first response. A failed import releases the key, so fix the request and retry with the same key.

Fields

Send the company as the state has it on file today. Fields shared with company creation follow the same rules: see Domain objects.

Response

201 with the company. An imported company differs from one doola forms in a few fields:
The registered agent you sent is stored with the import but not returned on the company. company_imported fires once the import is saved. No formation webhooks fire for an imported company.

Uploading the documents

documentRequirements lists what doola needs before it can review the import: Upload each one as multipart/form-data, with the file in file and its type in documentType:
The response is 201 with the stored document:
  • PDF only, up to 10MB, with a file name of at most 255 characters. doola checks the file’s contents, not the declared content type.
  • documentType is one of ArticlesOfOrganization, EinLetter, OperatingAgreement, CorporateBylaws or OTHER.
  • Idempotency-Key is required. Retrying the same file with the same key returns the first upload instead of storing a second copy.
  • The document then appears in the company’s document list and downloads by its id. Every type except OTHER fires its document_*_uploaded webhook, as when doola stores a document.
You can upload to any company you own, not only imported ones. On a company doola formed, an upload has the same effect as doola receiving that document, so upload there only when doola asks you to. Once the last required document is on file, the import moves to IN_REVIEW. This happens shortly after the upload, not inside the upload call, so read the company again rather than expecting the upload response to show it.

If documents are missing

doola checks once a day for imports still at AWAITING_DOCUMENTS a day after they were created. For each one it raises a single IMPORT_DOCUMENTS_MISSING required action, announced by the company_import_documents_missing webhook. Upload the missing documents and the action closes on its own. Nothing else happens if they never arrive: the import stays at AWAITING_DOCUMENTS and annual filing stays closed.

Upload errors

Review and verification

Once the documents are on file, doola checks them against the facts you sent.
  • Everything matches. doola verifies the import. importStatus becomes VERIFIED and company_import_verified fires.
  • Something needs correcting. doola raises an IMPORT_INFO_REQUIRED required action that names the fields and documents it needs. You send the corrections, doola applies them to the company, and the review continues.
There is no rejection: doola resolves every problem through a required action.

Import statuses

A verified import can go back to IN_REVIEW if doola needs to check it again. No webhook announces that move, so read importStatus in your reconciliation sweep. Annual filing closes again until the import is verified again. Work that already started, such as an EIN application, carries on.

What waits for verification

  • Annual filing. Submitting or confirming an annual report for an imported company answers 409 E_IMPORT_NOT_VERIFIED until importStatus is VERIFIED. The requirement and fee reads work at any time.
  • The EIN. See Ordering an EIN.

Ordering an EIN

An imported company without an EIN can order one with Add a service. You can order it at any point after the import:
  • Before verification, the EIN waits at NotStarted / WaitingForFilingServiceToComplete and starts when doola verifies the import.
  • After verification, it starts right away.
A company imported with an ein already has one, so ordering another answers 409 E_EIN_ALREADY_ISSUED.

Listing imported companies

List companies returns origin on every company and importStatus on imported ones, and takes two filters:
Any other value answers 400 E_VALIDATION_FAILED, with the detail on error.fields.origin or error.fields.importStatus.

Webhooks

company_imported and company_import_verified carry doolaCompanyId only: read the company for the rest. The two required-action events carry the required action payload. See Webhooks for examples.

Errors

Branch on error.code, never on the message. A field error answers 400 E_VALIDATION_FAILED with the field’s own code under error.fields: The other errors: A refused import stores nothing.
Last modified on November 6, 2026