Skip to main content
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 file a change for 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. File a registered agent change to move a business onto or off Palm. The change follows the standard filing lifecycle.
  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, 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
POST /v1/filing/formation/llc
JSON
{
  "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 for details.

For an existing business

For a business that already exists, including one not formed through Palm, file a registered agent change and omit the registered_agent block. Palm provisions the service when the change filing completes.

Track the service

Retrieve the current registered agent status for a business:
Bash
GET /v1/business/{business_id}/registered-agent
JSON
{
  "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"
  }
}
FieldDescription
providerpalm when Palm provides the service, external when the business uses a different agent, null when no agent is tracked.
statusactive, termination_requested, or terminated. null when the business uses an external agent.
jurisdictionThe state the service covers.
started_at / ended_atWhen the current service window opened and closed. ended_at is null while active.
name / addressThe 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

StatusMeaning
activePalm is the registered agent on record. Mail forwarding is active.
termination_requestedYou requested termination. Palm remains on record and continues forwarding mail until the request completes.
terminatedService has ended.
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
{
  "object": "event",
  "type": "document.created",
  "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
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

File a state change to the registered agent on record for an existing business. Use this to move a business onto Palm or off Palm.
Bash
POST /v1/filing/registered-agent-change
JSON
{
  "business_id": "987e6543-e21a-45b6-c789-012345678901",
  "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 change creates a filing in queued status and moves through the standard lifecycle (ready_to_file, processing, filed, completed), with a filing.* webhook at each step. When the filing reaches completed:
  • Switching to Palm fires registered_agent.activated. Status becomes active.
  • Switching away from Palm fires registered_agent.changed. Status becomes terminated.

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
PATCH /v1/business/{business_id}/registered-agent
JSON
{
  "status": "termination_requested",
  "reason": "switching_providers",
  "reason_detail": "Moving registered agent service in-house effective end of quarter."
}
FieldDescription
statusMust be termination_requested.
reasonOne of switching_providers, business_dissolved, business_offboarding, other.
reason_detailFree-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

EventFires when
registered_agent.activatedPalm becomes the agent, from a formation or a completed change filing.
registered_agent.changedA change filing completes and Palm is no longer the agent.
registered_agent.termination_requestedYou submit a termination request. Mail forwarding continues.
registered_agent.terminatedTermination completes. Palm is no longer the agent on record.
registered_agent.termination_failedTermination could not complete. rejection_reason carries the explanation. Status reverts to active.
document.createdPalm attaches a forwarded document to the business. Route on document type (notice or mail).
See Webhooks for delivery, retries, and signature verification.

Next steps