Skip to main content
Two required actions belong to imported companies. Both are part of doola’s review of the import, and both are announced by their own webhook. See Required actions for the payload, the status model, and how to read actions back.

Missing documents

IMPORT_DOCUMENTS_MISSING is raised when an import is still at AWAITING_DOCUMENTS a day after it was created. doola checks once a day, and raises at most one per import. requestedDocumentTypes is empty for this code. Read documentRequirements on the company for what is still missing: every entry with status: "missing" still needs uploading. The reason lists what was missing when the action opened, for example Upload the missing documents to continue: ArticlesOfOrganization, EinLetter., and is not updated as documents arrive. To clear it, upload each missing document. Once the last one is on file, the action closes as resolved and the import moves to IN_REVIEW. There is nothing to submit: posting a resolution for this action answers 422 E_REQUIRED_ACTION_NOT_RESOLVABLE. If the documents never arrive, nothing else happens. The import stays at AWAITING_DOCUMENTS and the action stays open.

More information needed

IMPORT_INFO_REQUIRED is raised when doola’s review finds something on the imported company that needs correcting. The action says exactly what it needs:
  • requestedFieldIds: the company fields to send back, corrected.
  • requestedDocumentTypes: the document types to upload.
Either list can be empty, but never both. The reason is built from the same picks, for example Update these company details: EIN, company addresses. Upload: EIN letter.
The webhook leaves out requestedFieldIds or requestedDocumentTypes when it is empty. The required-action reads always return both.

The flow

Field ids

requestedFieldIds uses these ids. Each is sent back under importCorrections with the same key, except legalName, which is sent as nameOptions. requestedDocumentTypes uses ArticlesOfOrganization, EinLetter, OperatingAgreement (LLC) and CorporateBylaws (CCorp).

Sending the corrections

First upload each requested document and keep the returned id. Then call the resolution endpoint with importCorrections and documentIds:
1

Send exactly the requested fields

Every id in requestedFieldIds must be in importCorrections, and nothing else. A missing field answers E_REQUIRED_ACTION_FIELD_MISSING, an extra one E_REQUIRED_ACTION_FIELD_NOT_REQUESTED. A blank text value counts as not sent, so a requested field sent blank is refused as missing.
2

Cover every requested document type

documentIds holds up to 10 ids of documents on this company. Together they must cover every type in requestedDocumentTypes. Adding an EIN to a company that had none also needs an EinLetter, even when none was requested.
3

Follow the import's rules

Each value follows the rule the import applies to the same field. nameOptions, addresses and companyDetails at the top level of the body belong to other action codes and are refused here.
The response is the action, already resolved, with its full history. Its submitted step echoes what you sent, with every SSN masked. The corrections are on the company at once: read it back to see them. The import’s status does not change; doola continues its review. The endpoint takes no Idempotency-Key. After a timeout, read the action back instead of retrying: once it is closed, a second call answers 409 E_REQUIRED_ACTION_CLOSED.

Lists and people

A list you send replaces what doola holds. A person you leave out is removed. Every person on the company comes back from Get a company with an id: the responsibleParty, each member, each executive member and each manager. To keep a person, send them back with that id:
  • Their SSN stays as it is when you send it back masked, exactly as the company returned it (****-**-6789), or leave it out. A masked SSN whose last four digits differ answers 400 E_REQUEST_BODY_INVALID.
  • To change their SSN, send the new value in full.
  • A person without an id is new and has no SSN unless you send one. A masked SSN on a new member or manager answers 400 E_REQUEST_BODY_INVALID.
  • An id must belong to a person of the same kind on this company, and appear once. Anything else answers 400 E_VALIDATION_FAILED under importCorrections.<field>.

Changing the state or filing number

When a correction changes state, formationFilingNumber or both, the pair the company ends up with is checked by the same rule as the import. If another company already holds it, the answer is 409 E_COMPANY_ALREADY_REGISTERED and nothing changes. As on the import, the message names the other company only when it is one of yours, and an archived company never counts.

After doola verifies the import

Verification closes any IMPORT_INFO_REQUIRED still open, as resolved. A correction that arrives after the import was verified answers 409 E_REQUIRED_ACTION_CLOSED with the message the import was verified after this action was raised, and changes nothing. If doola later takes the import back to IN_REVIEW and needs more, it can raise a new action.

After doola applies for the EIN

Once doola has applied for the company’s EIN, the application carries the company’s details as they are. Until the IRS issues the EIN, a correction answers 409 E_REQUIRED_ACTION_CLOSED with the message doola already applied for this company's EIN with its details as they are, and changes nothing. This holds even when doola takes the import back to IN_REVIEW, and doola raises no new IMPORT_INFO_REQUIRED in that time.

Errors

Checks run in a fixed order: body shape, company and action scope, actionCode match, then the correction checks. Any refusal changes nothing, and the action stays open. See Errors for the response envelope and the global codes any endpoint can return.
Last modified on November 6, 2026