Skip to main content
A concrete payload for every webhook event Palm delivers. Every payload shares the same envelope — id, object: "event", type, created_at, and an event-specific data object. For the concepts (setup, signing, retries, idempotency), see the Webhooks overview.

Verification events

user.verification.completed

Fires when a user verification finishes. This example is a flagged applicant (risk.level: high), so risk.reasons, mismatched match values, and a watchlist hit are all populated. On a clean pass, reasons and matches are empty and match values are all match.
JSON

business.verification.completed

Fires when a business verification finishes. Includes the full user-verification result for each associate. This example is a critical-risk outcome: the EIN does not match IRS records, the business is no longer in good standing, and an associate failed verification.
JSON

Monitoring events

business.registration.updated

Fires when Palm detects a change to a monitored business in the authoritative record. data.business is a lightweight reference; data.changes carries one entry per field that moved. Values mirror the source record (typically uppercase).
JSON

business.filing.due

Fires when a compliance filing deadline is approaching.
JSON

business.filing.overdue

Fires when a compliance filing deadline has passed. Identical structure to business.filing.due; only the event type differs.
JSON

Filing events

All filing.* events carry the same filing object on data.object. Across the lifecycle only status changes; result, documents, and fee populate on completion. Route on data.object.type (formation, ein). A formation bundles its obligations under related_items — each with its own object, id, and status. The registered agent is one such item and is not a filing: it never emits filing.* events, only its own registered_agent.* events (see below).

filing.queued

Fires when a filing is received and validated (preparing for submission). result and fee are null and no documents exist yet.
JSON

filing.ready_to_file

Fires when Palm is ready to submit the filing to the authority.
JSON

filing.processing

Fires when Palm has submitted the filing and the authority is processing it.
JSON

filing.filed

Fires when the authority has accepted the filing; final confirmation is pending.
JSON

filing.completed (formation)

Fires when the filing is done and the result is available. For a formation, result holds the registration number and formation date, the certificate appears under documents, and fee carries the finalized breakdown (including total).
JSON

filing.completed (EIN)

Same filing.completed event for an EIN filing — a different type and result (issued EIN and entity name), no state fee, and the bundled child of the formation above (parent_filing_id points back to it).
JSON

filing.canceled

Fires when a filing is canceled. status_reason, canceled_by, and canceled_at are populated.
JSON

Case events

All case.* events carry the same case object on data.object; status, response, resolved_at, and resolution_reason evolve as the case progresses.

case.opened

Fires when Palm opens a case and needs your response. For missing_information cases, request.fields describes exactly what to supply.
JSON

case.updated

Fires when an open case changes — for example, your response is received and the case moves to under_review. response.fields now carries what you submitted.
JSON

case.resolved

Fires when the case closes (resolved or superseded). resolved_at is set and resolution_reason is one of response_received, no_response_needed, parent_canceled, parent_completed, or parent_failed.
JSON

Platform events

Platform events deliver the full resource object. PII stays in the vault, so payloads expose only fingerprints and non-encrypted cached vault fields.

user.created

Fires when a person is created through the API.
JSON

user.removed

Fires when a person is removed. Same object as user.created with status: deleted.
JSON

business.created

Fires when a business is created through the API. This is the canonical business object — the same shape returned by GET /business/{id}. The EIN is encrypted (surfaced only via ein_fingerprint); the non-encrypted fields you set are echoed under vault by field ID.
JSON
Field notes:
  • ein_fingerprint — SHA-256 fingerprint of the EIN, for duplicate detection and search without exposing the value. business.ein is encrypted and is not echoed in vault.
  • palm_id — Palm’s identifier for the business; null until the business is matched to a registry record.
  • verificationnull until the business is verified, then a summary: { "id": "...", "risk_level": "low", "workflow": { "name": "Business Verification", "version": 1 }, "executed_at": "..." }. The full result arrives on business.verification.completed.
  • vault — cached non-encrypted business fields you supplied, keyed by field ID. Valid keys: business.legal_name, business.dba_name, business.entity_type, business.formation_date, business.formation_jurisdiction, business.registration_jurisdiction, business.address_line_1, business.address_line_2, business.city, business.region, business.postal_code, business.country, business.phone_number, business.email, business.website, business.naics_code.
  • metadata — up to 50 of your own key-value pairs, returned on every event for this business.

business.removed

Fires when a business is removed. Same object as business.created with status: deleted.
JSON

Document events

document.created (filing artifact)

Fires when Palm attaches a document on its own initiative. Route on data.object.type. Here, the certificate produced by a completed formation.
JSON

document.created (forwarded mail)

The same event for forwarded registered-agent mailtype is mail (or notice) instead of a filing artifact.
JSON

Registered agent events

Registered agent (RA) is a standalone resource, not a filing — it never emits filing.* events. On a formation it appears in related_items as a registered_agent item (status pending until it goes active), and it has its own resource at GET /v1/business/:business_id/registered-agent. Every lifecycle transition delivers the RA snapshot on data.object:
  • statuspending, active, termination_requested, terminated, or failed.
  • providerpalm while Palm is the agent (active / termination_requested), external after a change-away or termination.
  • rejection_reason — present only on the failure events (failed, change_failed, termination_failed).
RA payloads do not carry the agent’s name or address; the concrete provider Palm uses is server-side and never exposed.

registered_agent.activated

Fires when Palm becomes the registered agent — formation provisioning completing, or a change into Palm. status is active, provider is palm.
JSON

registered_agent.failed

Fires when RA provisioning (or a required state submission) fails on the assignment path — there was no prior RA to fall back to. status is failed and rejection_reason explains the blocker.
JSON

registered_agent.change_failed

Fires when a partner-requested RA change cannot be completed. Unlike an assignment failure, the change never took effect, so status reverts from the transient pending back to active — Palm remains the RA of record. rejection_reason explains the blocker.
JSON

registered_agent.changed

Fires when an RA change moves the business to another provider. provider becomes external, status is terminated, and ended_at is set.
JSON

registered_agent.termination_requested

Fires when you ask Palm to resign via PATCH /v1/business/:business_id/registered-agent. status moves to termination_requested; Palm stays the RA on file and keeps forwarding mail until operations completes the work.
JSON

registered_agent.terminated

Fires when operations completes the termination and Palm is no longer the RA on file. status is terminated, provider flips to external, and ended_at carries the close timestamp.
JSON

registered_agent.termination_failed

Fires when a termination cannot be completed (state refused the resignation, a successor RA is required and none was supplied, etc.). status reverts to active, rejection_reason explains the blocker, and Palm keeps serving as RA. You can re-submit once it is resolved.
JSON