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

# Registered agent

> Provide registered agent service to your customers' businesses through Palm — at formation or after — and forward state mail through the same API.

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"
  };
  return iconVariants[variant] ?? iconVariants.default;
};

export const PalmCard = ({title, description, icon, variant = "default", href, items}) => {
  if (variant === "getStarted") {
    return <div data-card className="pc-wrapper-get-started flex flex-col gap-4 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"
    },
    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="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;
};

Every business registered with a US state must name a **registered agent** — the party that receives legal and government documents on the entity's behalf. Palm provides registered agent service through established nationwide providers, managed entirely through the API. You provision it, receive forwarded mail through webhooks, and manage changes against the same business record you already verify and monitor through Palm.

***

## How it works

1. **Provision the service.** Opt in during formation, or request a change on an existing business. Palm designates a registered agent in the business's state.
2. **Track the service.** Query the current registered agent status, agent of record, and service window for any business.
3. **Receive forwarded mail.** When the state sends correspondence, Palm attaches a digital copy to the business and fires a webhook.
4. **Manage changes.** Request a change on the registered agent resource to move a business onto or off Palm.
5. **End the service.** Request termination when a business switches providers, dissolves, or is offboarded.

## Provision the service

### At formation

When you [form a business](/comply/form-a-business), omit the `registered_agent` block from the request. Palm designates a registered agent in the formation state and activates the service when the filing completes.

```bash Bash wrap theme={null}
POST /v1/filing/formation/llc
```

```json JSON wrap theme={null}
{
  "name": "Acme Holdings LLC",
  "jurisdiction": "US-NC",
  "principal_address": { "...": "..." }
  // no registered_agent block — Palm provides the service
}
```

If you pass a `registered_agent` block, Palm uses that agent on the filing and does not provide the service. See [formation add-ons](/comply/form-a-business#add-ons) for details.

### For an existing business

For a business that already exists, including one not formed through Palm, request a [registered agent change](#file-a-change) and omit the `registered_agent` block. Palm provisions the service when the change completes.

## Track the service

Retrieve the current registered agent status for a business:

```bash Bash wrap theme={null}
GET /v1/business/{business_id}/registered-agent
```

```json JSON wrap theme={null}
{
  "object": "registered_agent",
  "business_id": "987e6543-e21a-45b6-c789-012345678901",
  "provider": "palm",
  "status": "active",
  "jurisdiction": "CA",
  "started_at": "2026-05-29T10:30:00Z",
  "ended_at": null,
  "name": "Acme Registered Agent Services, Inc.",
  "address": {
    "street_line_1": "123 Market St",
    "city": "Sacramento",
    "region": "CA",
    "postal_code": "95814",
    "country": "US"
  }
}
```

| Field                                                                                                                   | Description                                                                                                                                                                                              |
| ----------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <span className="initial-bold--success">`provider`</span>                                                               | `palm` when Palm provides the service, `external` when the business uses a different agent, `null` when no agent is tracked.                                                                             |
| <span className="initial-bold--success">`status`</span>                                                                 | `pending`, `active`, `termination_requested`, `terminated`, or `failed`. `null` when the business uses an external agent.                                                                                |
| <span className="initial-bold--success">`jurisdiction`</span>                                                           | The state the service covers.                                                                                                                                                                            |
| <span className="initial-bold--success">`started_at`</span> / <span className="initial-bold--success">`ended_at`</span> | When the current service window opened and closed. `ended_at` is `null` while active.                                                                                                                    |
| <span className="initial-bold--success">`name`</span> / <span className="initial-bold--success">`address`</span>        | The agent of record: the legal name and address on the state filing. This is the provider entity, not "Palm," and it differs by state. Read these fields per business and display them to your customer. |

### Status lifecycle

| Status                                                                 | Meaning                                                                                                      |
| ---------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| <span className="initial-bold--success">`pending`</span>               | Service requested (at formation or via a change) but not yet active — provisioning is in flight.             |
| <span className="initial-bold--success">`active`</span>                | Palm is the registered agent on record. Mail forwarding is active.                                           |
| <span className="initial-bold--success">`termination_requested`</span> | You requested termination. Palm remains on record and continues forwarding mail until the request completes. |
| <span className="initial-bold--success">`terminated`</span>            | Service has ended.                                                                                           |
| <span className="initial-bold--success">`failed`</span>                | Provisioning, or a state submission it required, could not be completed.                                     |

The endpoint returns **404** when Palm has never been the registered agent for the business. After service ends, it returns **200** with `status: terminated`, so you can distinguish "never the agent" from "service ended."

## Receive forwarded mail

When the state sends correspondence for a business where Palm is the agent, Palm attaches a digital copy to the business and fires a `document.created` webhook.

Route on the document `type` to identify registered agent mail:

* `notice` — legal and government notices, including service of process and state compliance mail.
* `mail` — general forwarded correspondence.

```json JSON wrap theme={null}
{
  "object": "event",
  "type": "document.created",
  "mode": "live",
  "data": {
    "object": {
      "id": "doc_a1b2c3",
      "object": "document",
      "type": "notice",
      "filename": "service_of_process.pdf",
      "content_type": "application/pdf",
      "status": "verified",
      "upload_date": "2026-06-20T15:04:00Z"
    }
  }
}
```

Retrieve the document:

```bash Bash wrap theme={null}
GET /v1/document/{document_id}          # metadata
GET /v1/document/{document_id}/content  # download the file
```

The download endpoint streams the file with a `Content-Disposition: attachment` header. Palm forwards mail for as long as it is the agent of record, including during the `termination_requested` window.

## File a change

Change the registered agent on record for an existing business. Use this to move a business onto Palm or off Palm. The change is expressed on the registered agent resource — not as a filing.

```bash Bash wrap theme={null}
PATCH /v1/business/{business_id}/registered-agent
```

```json JSON wrap theme={null}
{
  "status": "change_requested",
  "registered_agent": {
    "type": "organization",
    "name": { "type": "entity", "entity_name": "Northstar Agents LLC" },
    "address": {
      "street_line_1": "500 Capitol Mall",
      "city": "Sacramento",
      "region": "CA",
      "postal_code": "95814",
      "country": "US"
    }
  }
}
```

* **Pass `registered_agent`** to move the business off Palm to the agent you specify.
* **Omit `registered_agent`** to move the business onto Palm.

The business must have a `formation_jurisdiction` (the change is filed in that state). The registered agent moves to `pending` while the change is in flight; where a state requires a real change filing, Palm handles it behind the scenes and abstracts it away. When the change completes:

* Switching **to Palm** fires `registered_agent.activated`. Status becomes `active`.
* Switching **away from Palm** fires `registered_agent.changed`. Status becomes `terminated`.
* If the change **cannot be completed** (e.g. the destination agent did not confirm consent), `registered_agent.change_failed` fires, status reverts to `active` — Palm remains the agent — and `rejection_reason` explains why. You can re-submit once resolved.

## End the service

When a business switches providers, dissolves, or is offboarded, and you are not filing a registered agent change, request termination directly.

```bash Bash wrap theme={null}
PATCH /v1/business/{business_id}/registered-agent
```

```json JSON wrap theme={null}
{
  "status": "termination_requested",
  "reason": "switching_providers",
  "reason_detail": "Moving registered agent service in-house effective end of quarter."
}
```

| Field                                                          | Description                                                                          |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------ |
| <span className="initial-bold--success">`status`</span>        | Must be `termination_requested`.                                                     |
| <span className="initial-bold--success">`reason`</span>        | One of `switching_providers`, `business_dissolved`, `business_offboarding`, `other`. |
| <span className="initial-bold--success">`reason_detail`</span> | Free-text context, up to 500 characters. Required when `reason` is `other`.          |

The request returns **409** when the service is not currently `active`.

On success, Palm fires `registered_agent.termination_requested` and continues forwarding mail until the work completes. The lifecycle resolves one of two ways:

* **Completed.** Status becomes `terminated`, `ended_at` is stamped, and `registered_agent.terminated` fires.
* **Failed.** The state refused the resignation or a successor agent is required. Status reverts to `active`, `registered_agent.termination_failed` fires with a `rejection_reason`, and you can submit a new request once the blocker is resolved.

## Webhooks

| Event                                                                                   | Fires when                                                                                                                   |
| --------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| <span className="initial-bold--success">`registered_agent.activated`</span>             | Palm becomes the agent, from a formation or a completed change into Palm. Status becomes `active`.                           |
| <span className="initial-bold--success">`registered_agent.failed`</span>                | Provisioning (or a state submission it required) failed. Status becomes `failed`; `rejection_reason` explains why.           |
| <span className="initial-bold--success">`registered_agent.changed`</span>               | A change moves the business to another provider. Status becomes `terminated`, `provider` becomes `external`.                 |
| <span className="initial-bold--success">`registered_agent.change_failed`</span>         | A requested change could not complete. Status reverts to `active` (Palm remains the agent); `rejection_reason` explains why. |
| <span className="initial-bold--success">`registered_agent.termination_requested`</span> | You submit a termination request. Mail forwarding continues.                                                                 |
| <span className="initial-bold--success">`registered_agent.terminated`</span>            | Termination completes. Palm is no longer the agent on record.                                                                |
| <span className="initial-bold--success">`registered_agent.termination_failed`</span>    | Termination could not complete. `rejection_reason` carries the explanation. Status reverts to `active`.                      |
| <span className="initial-bold--success">`document.created`</span>                       | Palm attaches a forwarded document to the business. Route on document type (`notice` or `mail`).                             |

See [Webhooks](/developer-guide/webhooks) for delivery, retries, and signature verification.

## Next steps

<div className="grid lg:grid-cols-2 gap-6 mt-6">
  <PalmCard variant="navigation" title="Form a business" description="Bundle registered agent with formation." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/comply/form-a-business" />

  <PalmCard variant="navigation" title="Comply overview" description="Filing lifecycle and the filing object." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/comply/overview" />

  <PalmCard variant="navigation" title="Webhooks" description="Delivery, retries, and signature verification." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/developer-guide/webhooks" />

  <PalmCard variant="navigation" title="API Reference" description="Full reference for the registered agent and filing endpoints." icon={<Icon className={iconProps("navigation")} icon="arrow-right" />} href="/api-reference/introduction" />
</div>
