Platform
Payments and checkout
Kind: A platform service both lanes stand on.
Availability
Owner-gatedWaits on the platform's owner to connect a payment processor; until then checkout cannot start.
- Door
/api/checkout · /api/square/webhook · /api/stripe/webhook- Unlocks with
- Nothing: it runs for every account.
Every status follows one rule from this deployment's own configuration: a capability is marked shipped only when everything it needs is in place.
What it does
Checkout runs on the payment provider's own page, and a purchase unlocks only when the provider's signed notice arrives.
Keep in mind
Nothing unlocks on a browser's return alone, and a retired report purchase is refused before anything is charged.
What it refuses
| Answer | HTTP | Meaning |
|---|---|---|
unauthorized | 401 | No session: sign in first; nothing was read or saved. |
billing-unavailable | 503 | Checkout could not start, because no payment processor is connected or the provider did not answer; nothing is charged. |
- Answer
unauthorized- HTTP
- 401
- Meaning
- No session: sign in first; nothing was read or saved.
- Answer
billing-unavailable- HTTP
- 503
- Meaning
- Checkout could not start, because no payment processor is connected or the provider did not answer; nothing is charged.
What can leave EstateDraft
Each action that can reach outside EstateDraft is declared in one registry with the channel it uses; the outbox refuses an action that is not declared.
- Sends · email
purchase.receipt-email - Syncs · a provider
checkout.session
Evidence
src/lib/payments/webhook-guard.test.tssrc/lib/payments/grant.test.tssrc/lib/plan-catalog.test.tssrc/lib/square.tssrc/lib/payments/grant.ts
Reviewed: