> ## Documentation Index
> Fetch the complete documentation index at: https://docs.getpalm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Comply overview

> Act on behalf of businesses — formation, filings, registered agent services, and reinstatement through the same API you use to verify and monitor.

export const iconProps = (variant = "default") => {
  const iconVariants = {
    default: "palm-icon-default",
    horizontal: "palm-icon-horizontal",
    stack: "palm-icon-stack",
    navigation: "palm-icon-navigation",
    darkHorizontal: "palm-icon-dark-horizontal",
    dark_stack: "palm-icon-dark-stack",
    getStarted: "palm-icon-get-started",
    useCase: "palm-icon-use-case",
    useCaseSection: "palm-icon-use-case-section"
  };
  return iconVariants[variant] ?? iconVariants.default;
};

export const PalmCard = ({title, description, icon, variant = "default", href, items}) => {
  if (variant === "useCase") {
    return <a href={href || '#'} className="no-underline pc-wrapper-use-case">
        <div className="pc-use-case-card-top">
          {icon && <div className="pc-use-case-icon-box">{icon}</div>}
          <span className="pc-use-case-card-title">{title}</span>
        </div>
        {description && <p className="pc-use-case-card-desc">{description}</p>}
        <span className="pc-use-case-learn-more">Learn more →</span>
      </a>;
  }
  if (variant === "getStarted") {
    return <div data-card className="pc-wrapper-get-started flex flex-col gap-3 border border-[rgba(4,44,47,0.1)] rounded-2xl p-6">
        <div className="pc-wrapper-inner-get-started">
          {icon !== undefined && <div className="pc-icon-container-get-started">{icon}</div>}
          {title !== undefined && <span className="pc-title-get-started">{title}</span>}
        </div>
        {items && items.length > 0 && <ul className="pc-items-get-started">
            {items.map((item, i) => <li key={i}>
                <a href={item.href} className="pc-item-link-get-started">{item.label}</a>
              </li>)}
          </ul>}
      </div>;
  }
  const variants = {
    default: {
      wrapper: "pc-wrapper-default",
      title: "pc-title",
      description: "pc-description"
    },
    horizontal: {
      wrapper: "pc-wrapper-card",
      title: "pc-title-horizontal",
      description: "pc-description"
    },
    stack: {
      wrapper: "pc-wrapper-stack",
      title: "pc-title-stack",
      description: "pc-description"
    },
    darkHorizontal: {
      wrapper: "pc-wrapper-dark-horizontal",
      title: "pc-title-dark-horizontal",
      description: "pc-description-dark-horizontal",
      iconWrapper: "pc-icon-container-dark-horizontal"
    },
    navigation: {
      wrapper: "pc-wrapper-navigation",
      title: "pc-title-navigation",
      description: "pc-description-navigation"
    },
    dark_stack: {
      icon: "pc-icon-card",
      title: "pc-title",
      description: "pc-description"
    }
  };
  const styles = variants[variant] ?? variants.default;
  const inner = <a data-card href={href ? href : '#'} className={`no-underline flex flex-col h-full items-start gap-4 p-6 rounded-2xl hover:opacity-80 transition-opacity ${styles.wrapper}`}>
      {icon !== undefined && <span className={styles.iconWrapper ?? "icon-wrapper"}>{icon}</span>}
      {(title !== undefined || description !== undefined) && <div className="flex flex-col min-w-0">
          {title !== undefined && <span className={styles.title}>{title}</span>}
          {description !== undefined && <span className={styles.description}>{description}</span>}
        </div>}
    </a>;
  return inner;
};

Comply is where Palm writes. [Onboard](/onboard/overview) finds a business, [Verify](/verify/overview) confirms it, and [Monitor](/monitor/overview) watches it. Comply acts on it, submitting filings to the authority on the business's behalf and writing the confirmed result back to the record you already hold.

Every accepted filing returns state-confirmed data to that same record, which keeps it current long after the initial verification.

<div className="semitransparent-image-wrapper">
  <img src="https://mintcdn.com/palmfinance/1RPIbiD5PV2g0B_e/images/ComplyOverviewEyeCatch.webp?fit=max&auto=format&n=1RPIbiD5PV2g0B_e&q=85&s=8b6363efd9ccd947fd3a6a1510d3ec75" alt="Image showcasing a confirmation screen for a filing." style={{maxWidth: '960px', width: '100%', margin: '0' }} width="1920" height="928" data-path="images/ComplyOverviewEyeCatch.webp" />
</div>

***

## The compliance lifecycle

Every business registered with a US state moves through the same three stages.

<span className="initial-bold">Formation.</span> A business becomes a legal entity when a state accepts its formation filing. Until then it cannot open accounts, sign contracts, or hold assets in its own name. Most businesses also need an EIN, the IRS-assigned tax identification number, before they can hire, bank, or file taxes.

<span className="initial-bold">Ongoing compliance.</span> Registration is not permanent. States require periodic filings and fees to keep an entity in good standing, and every state-registered business must name a registered agent to receive legal and government documents. When a required filing is missed, the state can suspend or administratively dissolve the registration. A suspended entity is a live problem for anyone who lends to it, banks it, or relies on its standing.

<span className="initial-bold">Remediation.</span> A business that has lost good standing can usually recover it, but recovery is rarely a single form. States generally require the missed filings, the outstanding fees, and a penalty before they will restore the registration.

## What you can do through the API

Comply does three things today.

| Capability | What it does |
| - | - |
| <span className="initial-bold">[Form a business](/comply/form-a-business)</span> | File an LLC or C-Corp formation with any US state, with EIN and registered agent as add-ons. |
| <span className="initial-bold">[Apply for an EIN](/comply/apply-for-an-ein)</span> | Submit an EIN application to the IRS, standalone or bundled with a formation. |
| <span className="initial-bold">[Registered agent](/comply/registered-agent)</span> | Offer registered agent service to your members' businesses, and receive the mail the state sends through the API. |

Palm's compliance infrastructure maps the filing requirements, deadlines, fee structures, and submission processes for all 50 US states and DC. For the entity types available today, see [Form an LLC](https://docs.getpalm.com/api-reference/v1/filing/form-an-llc) and [Form a corporation](https://docs.getpalm.com/api-reference/v1/filing/form-a-corporation).

## How Comply connects to Onboard, Verify, and Monitor

<div className="grid-image-wrapper">
  <img src="https://mintcdn.com/palmfinance/1RPIbiD5PV2g0B_e/images/GeneralPalmOutline.webp?fit=max&auto=format&n=1RPIbiD5PV2g0B_e&q=85&s=56b2ec60e41ae1af5d984b2d07ddfaa4" alt="Representation of how comply falls within the Palm product suite." className="grid-image" width="1802" height="2394" data-path="images/GeneralPalmOutline.webp" />
</div>

| Product | Role |
| - | - |
| <span className="initial-bold">Onboard</span> | Find the business. Pull registration data. |
| <span className="initial-bold">Verify</span> | Verify the business. Confirm identity and standing. |
| <span className="initial-bold">Monitor</span> | Watch the business. Subscribe to changes. |
| <span className="initial-bold">Comply</span> | Act on the business. File, and write the result back. |

Each product feeds the next. A business formed through Comply is immediately available to Verify and Monitor without re-entering data, and a standing change surfaced by Monitor tells you a business needs action. Because every accepted filing updates the record with state-confirmed data, the record stays current through compliance work the business already has to complete.

## How filings work

Forming a business and applying for an EIN each create a **filing**: a tracked record that carries its own status, fees, cases, and documents. The filing object is generic. The lifecycle, the case mechanism, and document delivery work the same way no matter what Palm files.

<Note>
  Registered agent service is not a filing. Palm tracks it on its own resource at `GET /v1/business/{business_id}/registered-agent`, with its own lifecycle. See [Registered agent](/comply/registered-agent).
</Note>

### The lifecycle

When nothing interrupts it, a filing takes this path:

```text theme={null}
queued → ready_to_file → processing → filed → completed
```

Group the statuses by what each one asks of you.

<span className="initial-bold">In flight.</span> `queued`, `ready_to_file`, `processing`, and `filed` all mean Palm is working. A `filing.*` webhook fires at each transition, so you can drive your UI from events rather than polling.

<span className="initial-bold">Waiting on you.</span> A case is open on the filing. This is the only state that blocks on you, and Palm tracks it separately from status. See below.

<span className="initial-bold">Finished.</span> On `completed`, the result holds the registration number for a formation or the EIN for an application. The other terminal statuses mean the filing stopped, and `status_reason` says why.

For the full status list and the shape of every field, see [Retrieve a filing](https://docs.getpalm.com/api-reference/v1/filing/retrieve-a-filing).

### When Palm needs something from you

Most filings finish on the original request alone. When Palm needs something more, a correction or a detail not collected at submission, it opens a **case** on the filing and notifies you with a `case.opened` webhook.

The request arrives as a description of what Palm needs, whether that is a value or a document, so you can render the prompt directly from the payload.

See [Cases](/comply/cases) for the lifecycle and how to respond.

### Documents

A completed filing carries the documents it produced: articles of organization or incorporation, IRS confirmation letters, state certificates, and receipts. Retrieve each through the Documents API for as long as you hold the record.

## Fees and expedited processing

Filing fees vary by state, entity type, and filing method, and several states price a filing on inputs specific to that state: authorized shares, par value, authorized capital, member count. Palm exposes this through a dedicated fee endpoint rather than a static table, so you can show a member a cost before they commit.

<Note>
  **Every fee returned before submission is an estimate.** Where a state prices a filing on inputs you supply, Palm applies that state's rules to calculate the estimate. Palm sets the final amount when the filing completes and sends it with the `filing.completed` webhook. The receipt on the completed filing is the source of truth.
</Note>

Where a state offers expedited processing, the fee response returns the available tiers and the surcharge for each, and you submit your chosen tier with the formation request.

See [Get formation fee estimate](https://docs.getpalm.com/api-reference/v1/filing/get-formation-fee-estimate) for the required inputs per jurisdiction.

## Validate before you submit

Every filing type has a matching validate endpoint that checks a payload against the state's compliance rules without creating a filing or a business record. It returns every compliance error in one pass, which makes it well suited to inline validation in your collection flow, so a member fixes the problem while they are still in the form rather than after the filing is queued.

## Before you begin

* A Palm API key. <span className="link-wrapper">[Get access](/get-started/get-access)</span>
* For formation, the business data the target state requires.
* For EIN, an existing business record with the required fields populated.

<Note>
  **Capability enablement.** The capabilities that act on a business — formation, EIN, and registered agent — are enabled per account rather than on by default, because they file real records with government authorities. [Contact us](mailto:support@getpalm.com) and tell us about your use case.
</Note>

## Next steps

<div className="grid lg:grid-cols-2 gap-6 mt-6">
  <PalmCard variant="navigation" title="Form a business" description="Register a new LLC or C-Corp with any US state." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/comply/form-a-business" />

  <PalmCard variant="navigation" title="Apply for an EIN" description="Get an EIN from the IRS, standalone or bundled with formation." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/comply/apply-for-an-ein" />

  <PalmCard variant="navigation" title="Registered agent" description="Provision the service, receive forwarded mail, and manage changes." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/comply/registered-agent" />

  <PalmCard variant="navigation" title="Cases" description="Respond to information requests Palm raises on a filing." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/comply/cases" />

  <PalmCard variant="navigation" title="Webhooks" description="Receive real-time status updates as filings progress." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/developer-guide/webhooks" />

  <PalmCard variant="navigation" title="Filing API reference" description="Full reference for the formation, EIN, and filing endpoints." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/api-reference/v1/filing/list-filings" />
</div>


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