Cookbook
Form a Delaware C-Corp with an autonomous agent
End-to-end agentic incorporation behind a tier-3 authorization gate. Claude picks a name, drafts the charter, files with Delaware, applies for an EIN, and opens a bank account.
Last updated
End-to-end agentic incorporation. Claude picks a name, drafts the charter, files with Delaware, applies for an EIN, and opens a corporate bank account — all behind a tier-3 authorization gate.
Trigger
A founder hands a copilot a one-line prompt: "form me a Delaware C-Corp called Acme, allocate 80% to me and 20% to my cofounder."
Call sequence
1. Issue an agent token
POST /v1/agent_tokens { user, scopes: ['entities.write','documents.sign'], tier: 3 }2. Plan the path
POST /v1/intents { kind: 'form_entity', state: 'DE' }3. Cycle name candidates until one clears
GET /v1/name_availability?name=…&state=DE4. Form the entity
POST /v1/entities { name, state: 'DE', founders[] }5. Request human signature on the consent
POST /v1/authorizations { resource: doc_…, tier: 3 }6. Open a bank account via partner sub-agent
POST /v1/bank_accounts/initiate { entity, partner: 'mercury' }Idempotency
The agent supplies an `Idempotency-Key` of `(agent_token, intent_id)`. The `authorizations` endpoint is single-use — replaying after approval is a no-op.
Webhooks
| Event | Description |
|---|---|
authorization.requested | Surface to the human for approval. |
authorization.approved | Resume the workflow. |
authorization.denied | Roll back and explain. |
entity.formed | Entity is real. |
bank_account.opened | Banking is live. |
Errors
| Status | Code | Description |
|---|---|---|
403 | tier_required | The agent attempted a tier-3 action without an active authorization. |
409 | authorization_pending | The human has not yet signed. |
Related
Tier-4 token with the incorporator slug
A token signing the certificate on the founder's behalf must carry
incorporator_signature_authorized as a standing acknowledgement. Tokens
created without it will be rejected at POST /v1/tokens if the policy
claims incorporator-signing capability.
curl -X POST https://api.mattermode.com/v1/tokens \
-H "Authorization: Bearer $MATTER_KEY" \
-H "Matter-Version: 2026-05-01" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"tier": "tier_4",
"principal_human_id": "usr_F0und3rCEO",
"agent_id": "agt_StudioBot",
"label": "founder-formation-bot",
"allow": ["entities.create", "entities.submit", "documents.sign"],
"acknowledgements": [
{"slug": "agent_action_binds_principal", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200},
{"slug": "tier_4_standing_authority_acknowledged", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200},
{"slug": "incorporator_signature_authorized", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200},
{"slug": "not_legal_advice", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200},
{"slug": "not_tax_advice", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200},
{"slug": "formation_is_legally_binding", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200},
{"slug": "formation_creates_tax_obligations", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200}
]
}'For long-running operations, prefer binding the token to a versioned
AgentPolicy so the slugs travel with the
policy rather than being re-affirmed per token.
The IncorporatorReceipt under Rail 2
Once Delaware accepts the filing, incorporator_receipt.issued fires.
The receipt produced under Rail 2 (agent-signed under UETA §14) has
signer_basis: "ueta_electronic_agent", consent_record: null, and a
populated agent_authority block:
{
"id": "rcp_8mY3pQrL",
"object": "incorporator_receipt",
"entity_id": "ent_Nq3KcAbc",
"filed_at": 1745684012,
"signer_stakeholder_id": "stk_jane_F0und3r",
"signer_basis": "ueta_electronic_agent",
"consent_record": null,
"agent_authority": {
"token_id": "tok_FounderFormationBot",
"principal_human_id": "usr_F0und3rCEO",
"agent_id": "agt_StudioBot",
"standing_policy_id": "pol_8mY3pQrL",
"authorization_id": null,
"acknowledgements": [
{"slug": "incorporator_signature_authorized", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200},
{"slug": "formation_is_legally_binding", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200},
{"slug": "formation_creates_tax_obligations", "version": "2026-04-01", "accepted_by_stakeholder_id": "stk_jane_F0und3r", "accepted_at": 1745683200}
]
},
"incorporator_identity": null,
"transferred_at": null,
"transferred_to_stakeholder_id": null,
"signature_algorithm": "Ed25519",
"signature": "a3f2…b9c1",
"signing_key_fingerprint": "sha256:9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08",
"livemode": false
}The deprecated fields (incorporator_identity, transferred_at,
transferred_to_stakeholder_id) are null on every new receipt — there
is no Matter-to-founder authority transfer, because the founder was
incorporator from the start. The verification chain is straightforward:
the founder signed, under UETA §14, via the named token, on this date.
Failure modes
| Code | What happened | Recovery |
|---|---|---|
422 invalid_request (acknowledgement_required) at POST /v1/tokens | Token claims entities.submit or documents.sign capability without incorporator_signature_authorized in acknowledgements[]. | Re-affirm the slug as the founder stakeholder, then retry token creation. |
422 invalid_request at POST /v1/entities | Body omits incorporator_founder_index, acknowledgements, or any required member of x-matter-customer-must-decide. | The error includes the missing pointer. Supply the field and retry with the same Idempotency-Key. |
422 incorporator_must_be_natural_person | The founder at incorporator_founder_index has kind: entity. | Pick a natural_person founder. Entities cannot be incorporators. |
403 acknowledgement_expired | A standing slug is past its 90-day window at signing time. | The named founder must re-affirm the slug via the dashboard or POST /v1/acknowledgements before the agent retries. |
409 invalid_state_transition at POST /v1/entities/{id}/submit | Entity is already submitted, registered, or rejected. | Inspect entity.status; submission is one-shot per draft. |
Full taxonomy: errors.
Related
- Incorporator protocol — full chain semantics for the founder-as-incorporator model
- Legal basis — when each
signer_basisvalue applies - Sign autonomously with a tier-4 agent — the standing-policy machinery this recipe relies on
- Form a company — the human-led variant (Rail 1)
- Verify an incorporator receipt — offline cryptographic verification of the receipt produced here