Form the entity, file the EIN, register foreign qualification, generate the bank application, and adopt the equity plan — all atomically under one Idempotency-Key.
Last updated
TL;DR. One POST /v1/entities/{id}/formation_packet with every
include_* block populated returns the Delaware C-Corp, the EIN
application, the foreign qualification, the pre-filled bank application,
the equity plan, and the five compliance routines as a single
transactional cascade. One Idempotency-Key, one webhook stream, one
document vault. Either every artifact lands or none of them do.
The five-call Day-0 sequence (form → adopt plan → file EIN → qualify foreign
→ open bank) collapses into one composite endpoint. The founder picks the
package; Matter resolves the jurisdiction, signs the Action of Incorporator
under UETA §14, files the Certificate, submits Form SS-4, files the foreign
qualification, opens the Column bank account synchronously via Column's
BaaS API, and installs the five recurring routines — all atomically.
This recipe shows the comprehensive path. For the agent-led variant where
Matter signs every artifact on the founder's behalf, see
form-an-entity-with-an-agent.
A Matter API key (sk_live_… or sk_test_…) — see authentication for key types.
One Stakeholder (kind: natural_person) for the founder, with email and US residency on file.
One Intent (goal: form_startup_ready_corporation) resolved to executable state — produces the entity_id the formation packet attaches to.
Terms-of-service acceptance recorded for the calling principal (POST /v1/terms/accept). Mutating endpoints return 409 terms_acceptance_required until this exists.
Optional: a WebhookEndpoint subscribed to entity.formation_packet.step.completed and entity.formation_packet.completed so the founder UI can stream progress without polling.
The Intent resolver maps the founder's natural-language description plus
four discovery_input fields to a jurisdiction, an entity kind, and a
share-structure default. execute: false means resolve only — no entity
is created until the formation packet call.
The resolver picks Delaware (the standard default for a startup-ready
C-Corp), 10,000,000 authorized shares at $0.0001 par, and an NC foreign
qualification (because home_state differs from the formation
jurisdiction). The response includes a draft Entity — capture
entity.id as $ENTITY_ID.
One-time per (principal × terms_version). The acceptance is durable and
applies to every downstream mutating call until the published terms version
changes.
The endpoint returns 202 Accepted immediately with a request_id,
entity, formation_packet_status, and expected_steps[]. Webhooks fire
entity.formation_packet.step.completed as each artifact lands and
entity.formation_packet.completed at terminal — see the
event catalog for full payloads.
The response groups items by category (formation, compliance,
commercial, equity, public_record) with a summary block carrying
counts and the pending_signature count — useful for the founder's
"what's left for me to sign?" badge.
package_artifacts aggregates every output from the cascade. Below is the
full inventory for a standard solo-founder DE C-Corp with NC home-state
and the four include_* blocks set.
Each routine is a Routine resource (rtn_…) with a scoped Token
attached — the agent that fires the routine on its next_run_at inherits
the same scope policy as the formation packet's signing principal. See
the compliance view for the read-side surface
that aggregates upcoming routine fires.
status: submitted, expected completion within 2 weeks (1–2 weeks
additional if international: true). On acceptance, the EIN confirmation
letter lands as a Document under category: formation.
A BankAccount (ba_…) is provisioned synchronously via Column's BaaS
API in the same atomic call. The response carries provider: column,
the active account_number and routing_number, status: active, and
kyb_decision: approved for typical novice founders. KYB clears in
under 60 seconds; the rare held_for_review decision resolves via
webhook within 1–2 business days. Override processor to mercury,
brex, chase, or ramp to use a partner that requires web-based
onboarding (those flow through initiateBankAccountOpening and the
sub-agent rail).
A Filing (flg_…) submitted to NC via partner registrar, status: submitted.
Acceptance fires filing.accepted and the certificate of authority lands
in the document vault under public_record.
An EquityPlan (plan_…)
adopted by the option-plan board resolution, with 2,000,000 shares
authorised under the plan (20% of post-formation fully-diluted, derived
from option_pool_basis_points: 2000). The plan agreement is attached as
a Document with a one-paragraph plain-English terms_summary.
The whole cascade runs under a single Idempotency-Key. Either every
artifact lands or none of them do — Matter doesn't half-form an entity.
A retry with the same key returns the same request_id and the same
artifact IDs; a retry with a different key against an entity that already
has a completed formation packet returns 409 Conflict with
type: formation_packet_already_executed.
This is the atomicity guarantee the composite is for: a founder who runs
the call, loses their network, retries, and gets back the same single
entity with the same single Certificate of Incorporation — never two.
See idempotency for the full retry
semantics and the 24-hour key-retention window.
The cascade emits a complete Day-0 minute book — every document a Cooley/Orrick engagement would produce, mapped to Matter Document.kind values. Per-founder documents are repeated for each founders[] entry; per-entity documents land once.