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

# Non-US founders

> Form US companies for founders outside the US, where the IRS requires a signed SS-4 — and, for an expedited EIN, a signed Form 8821 — before issuing the EIN.

doola forms US companies (LLC or C-Corp) regardless of where the founder lives. When **no one on the company has a US tax ID**, the IRS requires a signed **SS-4** before it will issue the EIN. The Partner API handles this end to end: doola generates the SS-4, you send the founder a fully whitelabeled signing link, and doola files it once signed.

A non-US founder who also requests an [expedited EIN](/api/expedited-ein) signs one **additional** document, **Form 8821** (Tax Information Authorization), which lets doola retrieve the EIN letter directly from the IRS — the authorization the expedited path relies on. Form 8821 uses the exact same signing flow as the SS-4; only the `documentType` differs.

Everything else about the [formation flow](/api/formation) stays the same. Signing is the only addition, and it only appears for non-US founders.

<Note>
  "US company, non-US founder" is the case this covers. You still form a Wyoming or Delaware entity. What changes is that the founder signs an SS-4 (and, for an expedited EIN, a Form 8821) because they have no SSN or ITIN to put on the EIN application.
</Note>

## When signing applies

A company needs an **SS-4** signature when **no person on it supplies a US tax ID (SSN or ITIN)**. doola checks every person on the company:

* every LLC `member`,
* every C-Corp `executiveMember`,
* and the `responsibleParty`.

If any one of them has an SSN or ITIN, the company is treated as US and **no signature is required**. If none of them do, it is a non-US founder and **an SS-4 signature is required**.

A **Form 8821** signature is required on top of the SS-4 when the same non-US company **also requested an expedited EIN** (the `EinCreation` service carries the `Expedite` [variant](/api/company-services)). A non-US company on a standard EIN needs only the SS-4; a US company needs neither.

| Founder                      | EIN speed | Requirements         |
| ---------------------------- | --------- | -------------------- |
| US (someone has an SSN/ITIN) | any       | none                 |
| Non-US                       | Standard  | `SS4`                |
| Non-US                       | Expedite  | `SS4` and `FORM8821` |

You never compute this yourself. doola returns the answer on the company as `signatureRequirements`.

## Detecting the requirement

Both **Create company** and **Retrieve company** return a `signatureRequirements` array. It is always present.

A non-US founder on a standard EIN returns one pending SS-4 requirement:

```json theme={null}
{
  "signatureRequirements": [
    { "documentType": "SS4", "status": "PENDING" }
  ]
}
```

A non-US founder who requested an expedited EIN returns both, each pending until signed:

```json theme={null}
{
  "signatureRequirements": [
    { "documentType": "SS4", "status": "PENDING" },
    { "documentType": "FORM8821", "status": "PENDING" }
  ]
}
```

A US founder returns an empty array, meaning nothing to sign:

```json theme={null}
{
  "signatureRequirements": []
}
```

| Field          | Values                 | Meaning                                                    |
| -------------- | ---------------------- | ---------------------------------------------------------- |
| `documentType` | `SS4`, `FORM8821`      | The document the founder must sign.                        |
| `status`       | `PENDING`, `COMPLETED` | `PENDING` until that document is signed, then `COMPLETED`. |

<Tip>
  Branch your onboarding on `signatureRequirements`. A non-empty array means you need to collect one or more signatures before formation can finish; an empty array means you are done after Create company. Each entry is independent — request a session, remind, and track completion per `documentType`.
</Tip>

## The signing flow

The flow below shows the SS-4. **Form 8821 is identical** — request a session with `documentType: "FORM8821"`, and the reminder and completion webhooks are the `signature_form8821_*` / `document_form8821_uploaded` equivalents. When both are required, run them independently (in parallel or in any order).

```mermaid theme={null}
sequenceDiagram
    participant P as Your backend
    participant D as doola API
    participant U as Founder

    P->>D: Create company (non-US founder)
    D-->>P: signatureRequirements includes SS4 PENDING (and FORM8821 PENDING when expedited)

    P->>D: POST /companies/{companyId}/signatures with the documentType
    D-->>P: signing session (url, expiresAt)
    P->>U: Request the founder for signature

    Note over D,P: Not signed yet
    D-->>P: webhook signature reminder day 1, 3, 7 (ss4 and form8821 events)
    Note over P: Request a fresh session, re-send

    U-->>D: Founder signs
    D-->>P: webhook signature completed (ss4 or form8821)
    D-->>P: webhook document uploaded (ss4 or form8821)
    Note over D: doola files the documents and retrieves the EIN
    D-->>P: webhook document_einletter_uploaded (EIN issued)
```

## Request a signing session

Create a signing session whenever you are about to present a document to the founder, passing the `documentType` you are collecting (`SS4` or `FORM8821`). The signing link is short lived, so always mint a fresh one right before you show it rather than storing it.

See [Create a signature session](/api/api-reference/signatures/create-a-signature-session) in the API reference for the request body, response fields, and status codes.

### About the signing link

* **It is fully whitelabeled.** The founder sees no doola branding and no third-party signing-provider branding. It is your flow, end to end.
* **Always request a fresh session before presenting it.** Each new session voids any earlier unsigned session for the same document, so an old link stops working once you mint a new one. Generating a session on every "sign now" action keeps the link valid and avoids handing out a link that has already expired.

<Warning>
  Do not cache or email a signing `url` for later. Links expire two hours after issuance, and a newer session voids an older one. If a founder opens a stale or voided link, the redirect returns `410 E_SIGNATURE_URL_EXPIRED`. Mint a new session at the moment of signing instead.
</Warning>

## Reminders are yours to send

doola does not email or chase the founder. You own the reminder cadence. To help, doola emits a reminder webhook on **day 1, day 3, and day 7** after each document is generated, while it remains unsigned: `signature_ss4_reminder_due` for the SS-4 and `signature_form8821_reminder_due` for the Form 8821.

When you receive one:

1. Request a **fresh** signing session for that `documentType` (the link from the original request has likely expired).
2. Re-present it to the founder, however you nudge users (email, in-app, push).

Reminders stop automatically once that document is signed. There is no separate expiry event after day 7; the cadence simply ends.

<Note>
  Subscribe to the reminder events only if you want doola to drive your reminder timing. If you run your own cadence, you can ignore them and poll `signatureRequirements` or watch for the completion events instead.
</Note>

## Completion

For each document, two events fire when the founder finishes, at two distinct moments:

| Event                                                      | Fires when                                                                                                     |
| ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- |
| `signature_ss4_completed` / `signature_form8821_completed` | The instant the founder signs. React here to update your UI immediately.                                       |
| `document_ss4_uploaded` / `document_form8821_uploaded`     | Once the signed PDF is stored and downloadable through the [document endpoints](/api/domain-objects#document). |

At the same time, that document's `signatureRequirements[].status` flips from `PENDING` to `COMPLETED` on the company.

After that, formation continues exactly as it does for US founders: doola files the signed documents with the IRS, and the EIN follows. Watch `company_ein_issued`, `document_einletter_uploaded`, and the **Formation** service status, as described in [Company formation](/api/formation#two-things-to-track).

<Tip>
  Need the EIN faster? If Expedited EIN is part of your partner agreement, non-US founders qualify for the [expedited EIN](/api/expedited-ein), requested at company creation with `requestedServices`. The SS-4 signing flow on this page still applies; only the EIN processing is prioritized.
</Tip>

## Errors

These are specific to the signing endpoints. Branch on `error.code`, never on the message.

| HTTP | Code                            | Meaning                                                                                                                                                             |
| ---- | ------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 400  | `E_DOCUMENT_TYPE_NOT_SUPPORTED` | The document type cannot be signed through this endpoint. Supported types are `SS4` and `FORM8821`.                                                                 |
| 404  | `E_NOT_FOUND`                   | No company with this ID belongs to your tenant.                                                                                                                     |
| 409  | `E_DOCUMENT_ALREADY_SIGNED`     | The requested document is already signed. Read `signatureRequirements` to confirm its `COMPLETED` status.                                                           |
| 410  | `E_SIGNATURE_URL_EXPIRED`       | The signing link is expired, voided, or tampered with. Request a new session and present the fresh link.                                                            |
| 422  | `E_FORMATION_NOT_ELIGIBLE`      | The company does not require this document — e.g. a US company (someone has an SSN or ITIN), or `FORM8821` requested for a company that is not on an expedited EIN. |

See [Errors](/api/errors) for the response envelope and the global codes that any endpoint can return.
