Cookbook
Form a Delaware C-Corp (sandbox)
End-to-end recipe — token → intent → entity → formation packet. Pasteable TypeScript, Python, and CLI.
Last updated
Form a Delaware C-Corp (sandbox)
The canonical onboarding recipe. Idea → registered entity in under five minutes against the sandbox; under a week against live filing.
The recipe runs against sk_sandbox_* tokens — no live filings, no
real fees, deterministic time via X-Matter-Test-Speed.
Prerequisites
- A sandbox token (
sk_sandbox_*) from the dashboard. - Either the Matter CLI (
bun add -g @matter/cli), Node SDK (bun add @matter/sdk), or any HTTP client.
Recipe
Step 1 — Resolve the intent
The intent encodes what you want (a Delaware C-Corp with two founders, 10M authorized shares). Matter resolves how: chooses the filing provider, drafts the formation packet, schedules EIN, picks registered agent.
matter intent create \
--jurisdiction US-DE \
--type c_corp \
--legal-name "Waypoint Systems, Inc." \
--founders '[{"name":"Jane Doe","role":"CEO","equity_pct":60},{"name":"Bob Smith","role":"CTO","equity_pct":40}]' \
--authorized-shares 10000000import { Matter } from "@matter/sdk";
const matter = new Matter({ apiKey: process.env.MATTER_SANDBOX_TOKEN });
const intent = await matter.intents.create({
jurisdiction: "US-DE",
type: "c_corp",
legal_name: "Waypoint Systems, Inc.",
founders: [
{ name: "Jane Doe", role: "CEO", equity_pct: 60 },
{ name: "Bob Smith", role: "CTO", equity_pct: 40 },
],
authorized_shares: 10_000_000,
});from matter import Matter
m = Matter(api_key=os.environ["MATTER_SANDBOX_TOKEN"])
intent = m.intents.create(
jurisdiction="US-DE",
type="c_corp",
legal_name="Waypoint Systems, Inc.",
founders=[
{"name": "Jane Doe", "role": "CEO", "equity_pct": 60},
{"name": "Bob Smith", "role": "CTO", "equity_pct": 40},
],
authorized_shares=10_000_000,
)The response is an Intent (int_*) with an execution_plan rendered
in plain English. Dry-run before executing:
matter intent execute --id $INTENT_ID --dry-runStep 2 — Execute the intent → Entity
matter intent execute --id $INTENT_IDReturns 202 Accepted with a Request (req_*). Subscribe to the
SSE stream to watch the formation packet land:
matter requests follow --id $REQUEST_IDYou'll see (in sandbox-fast mode, ~20 seconds total):
intent.resolvedentity.created— the Entity (ent_*) indraft.entity.submitted— filed with the Delaware SoS.entity.registered— certificate issued.tax_profile.ein_received— EIN assigned.registered_agent.attached— RA active.entity.activated— terminal state.
Step 3 — Pull the formation packet
The packet is a typed Document with both PDF and JSON representations:
matter entities documents list --id $ENTITY_IDThe customer's digital archive includes everything filed: Certificate of Incorporation, Bylaws, Action of Incorporator, Subscription Agreements, 83(b) elections (for each founder), Stock Purchase Agreements, Initial Board Resolutions.
Step 4 — Pull the cap table
matter entities captable retrieve --id $ENTITY_IDFounders' shares are registered on the ShareLedger; equity_pct from Step 1 is reified into ShareLedgerEntry rows.
What you've built
A registered (sandbox) Delaware C-Corp with:
- 10M authorized shares of Common Stock.
- Two founders with vested-on-issuance Common (subject to per-founder vesting overlay you can apply next).
- EIN attached.
- Registered Agent active.
- Full formation packet digitally archived + downloadable.
Next steps
- Issue equity to early hires. See Issue an option grant.
- Raise a SAFE round. See Run a SAFE close.
- Annual report + franchise tax. See Compliance routines.
- Convert to live mode. Apply the same recipe against an
sk_live_*token; pricing + actual filing fees apply.
Test-mode timing
In sandbox, every async step uses X-Matter-Test-Speed:
instant(default) — every webhook fires synchronously.fast— webhooks fire every 2 seconds (~30s total).real— production timeline (~3–5 business days).