Stripe Connect webhooks land here. The orchestrator records the event and moves the ledger. It does not move money. Live charges stay blocked.
Endpoint
POST /api/webhooks/stripe
Signature required. Secret source: sandbox (not Stripe live). Live mode blocked.
Webhook signature verification
IMPLEMENTEDSandbox secret — not Stripe live
Idempotency on event.id
IMPLEMENTEDDuplicates return 200 and do not write a second ledger row
Ledger state machine
IMPLEMENTEDCREATED → PROCESSING → SUBMITTED → SETTLED / RECONCILED
Live mode blocked
IMPLEMENTEDlivemode events are rejected
Provider sandbox account
NOT_EXECUTEDNo Stripe platform keys in this workspace
Connected-account KYC
NOT_EXECUTEDExpress onboarding is not wired
Destination charge / application fee
NOT_EXECUTEDEvents can be simulated; Stripe is not charged
Beneficiary / account-name verification
NOT_EXECUTEDRequires a licensed payout rail
Three-way bank reconciliation
NOT_EXECUTEDNo bank statement feed
Production authorization
BLOCKEDDo not move real money from this app
Empty until a signed event arrives or you run TEST 01.
No webhook events stored yet.
Stripe Dashboard → Developers → Webhooks → add this path. Signing secret stays in STRIPE_WEBHOOK_SECRET on the server. Never in the browser, never in chat.