@volter/twin-stripe 2.0.38 → 3.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -207
- package/dist/generated/pack-facts.json +94 -0
- package/dist/journeys/coverage.json +596 -0
- package/dist/journeys/customer-life.json +6108 -0
- package/dist/journeys/customer-life.outline.md +371 -0
- package/dist/journeys/decisions.json +677 -0
- package/dist/journeys/demand.json +706 -0
- package/dist/journeys/score.json +853 -0
- package/dist/journeys/unreachable.json +102 -0
- package/dist/journeys/vendor-examples.json +8010 -0
- package/dist/spec/SOURCE.md +18 -0
- package/dist/spec/doc-examples.json +445 -0
- package/dist/spec/fixtures3.json.gz +0 -0
- package/dist/spec/openapi.json.gz +0 -0
- package/dist/spec/patches.json +34 -0
- package/dist/spec/sources.json +306 -0
- package/dist/src/cli.d.ts +0 -1
- package/dist/src/cli.js +11 -31
- package/dist/src/engine/after-payment.d.ts +8 -0
- package/dist/src/engine/after-payment.js +27 -0
- package/dist/src/engine/apps-secrets.d.ts +1 -0
- package/dist/src/engine/apps-secrets.js +3 -0
- package/dist/src/engine/balance.d.ts +5 -0
- package/dist/src/engine/balance.js +15 -0
- package/dist/src/engine/checkout.d.ts +24 -0
- package/dist/src/engine/checkout.js +30 -0
- package/dist/src/engine/common.d.ts +19 -0
- package/dist/src/engine/common.js +34 -0
- package/dist/src/engine/connect.d.ts +45 -0
- package/dist/src/engine/connect.js +108 -0
- package/dist/src/engine/customers.d.ts +4 -0
- package/dist/src/engine/customers.js +8 -0
- package/dist/src/engine/display.d.ts +11 -0
- package/dist/src/engine/display.js +13 -0
- package/dist/src/engine/files.d.ts +11 -0
- package/dist/src/engine/files.js +23 -0
- package/dist/src/engine/invoices.d.ts +21 -0
- package/dist/src/engine/invoices.js +84 -0
- package/dist/src/engine/issuing.d.ts +33 -0
- package/dist/src/engine/issuing.js +54 -0
- package/dist/src/engine/ledger.d.ts +8 -0
- package/dist/src/engine/ledger.js +8 -0
- package/dist/src/engine/oauth.d.ts +4 -0
- package/dist/src/engine/oauth.js +24 -0
- package/dist/src/engine/onboarding.d.ts +13 -0
- package/dist/src/engine/onboarding.js +42 -0
- package/dist/src/{stripe-params.d.ts → engine/params.d.ts} +20 -3
- package/dist/src/{stripe-params.js → engine/params.js} +7 -60
- package/dist/src/engine/payment-intents.d.ts +10 -0
- package/dist/src/engine/payment-intents.js +27 -0
- package/dist/src/engine/payment-methods.d.ts +16 -0
- package/dist/src/engine/payment-methods.js +22 -0
- package/dist/src/engine/radar.d.ts +2 -0
- package/dist/src/engine/radar.js +5 -0
- package/dist/src/engine/refunds.d.ts +1 -0
- package/dist/src/engine/refunds.js +3 -0
- package/dist/src/engine/renewals.d.ts +36 -0
- package/dist/src/engine/renewals.js +65 -0
- package/dist/src/{stripe-twin.d.ts → engine/stripe.d.ts} +12 -45
- package/dist/src/{stripe-twin.js → engine/stripe.js} +53 -387
- package/dist/src/engine/subscriptions.d.ts +11 -0
- package/dist/src/engine/subscriptions.js +30 -0
- package/dist/src/engine/transfers.d.ts +2 -0
- package/dist/src/engine/transfers.js +1 -0
- package/dist/src/{stripe-version.d.ts → engine/version.d.ts} +0 -2
- package/dist/src/{stripe-version.js → engine/version.js} +21 -9
- package/dist/src/engine/webhook-endpoints.d.ts +1 -0
- package/dist/src/engine/webhook-endpoints.js +12 -0
- package/dist/src/engine/webhooks.d.ts +31 -0
- package/dist/src/engine/webhooks.js +68 -0
- package/dist/src/fetch.d.ts +2 -0
- package/dist/src/fetch.js +26 -0
- package/dist/src/generated/surface.gen.json +1 -1
- package/dist/src/generated/ui.gen.json +1 -1
- package/dist/src/index.d.ts +5 -14
- package/dist/src/index.js +10 -75
- package/dist/src/manifest.js +478 -876
- package/dist/src/screens/billing-portal.d.ts +3 -0
- package/dist/src/screens/{portal.js → billing-portal.js} +32 -58
- package/dist/src/screens/checkout-js.d.ts +2 -0
- package/dist/src/screens/checkout-js.js +84 -0
- package/dist/src/screens/checkout.d.ts +2 -31
- package/dist/src/screens/checkout.js +32 -121
- package/dist/src/screens/connect-onboarding.d.ts +3 -0
- package/dist/src/screens/{onboarding.js → connect-onboarding.js} +38 -104
- package/dist/src/screens/dashboard.d.ts +3 -0
- package/dist/src/screens/dashboard.js +116 -0
- package/dist/src/screens/shared.d.ts +27 -0
- package/dist/src/screens/shared.js +87 -0
- package/dist/src/screens/stripe-js.d.ts +3 -0
- package/dist/src/screens/stripe-js.js +95 -0
- package/dist/src/semantics/account.d.ts +2 -0
- package/dist/src/semantics/account.js +8 -0
- package/dist/src/semantics/account_links.d.ts +2 -0
- package/dist/src/semantics/account_links.js +22 -0
- package/dist/src/semantics/accounts.d.ts +4 -0
- package/dist/src/semantics/accounts.js +40 -0
- package/dist/src/semantics/apps.d.ts +4 -0
- package/dist/src/semantics/{apps-secrets.js → apps.js} +14 -26
- package/dist/src/semantics/around.d.ts +2 -0
- package/dist/src/semantics/around.js +13 -0
- package/dist/src/semantics/balance.d.ts +2 -11
- package/dist/src/semantics/balance.js +3 -194
- package/dist/src/semantics/balance_transactions.d.ts +2 -0
- package/dist/src/semantics/balance_transactions.js +15 -0
- package/dist/src/semantics/billing_portal.d.ts +4 -0
- package/dist/src/semantics/billing_portal.js +36 -0
- package/dist/src/semantics/charges.d.ts +3 -28
- package/dist/src/semantics/charges.js +5 -202
- package/dist/src/semantics/checkout.d.ts +3 -20
- package/dist/src/semantics/checkout.js +21 -271
- package/dist/src/semantics/clock.d.ts +2 -0
- package/dist/src/semantics/clock.js +15 -0
- package/dist/src/semantics/coupons.d.ts +2 -6
- package/dist/src/semantics/coupons.js +2 -60
- package/dist/src/semantics/customers.d.ts +5 -6
- package/dist/src/semantics/customers.js +47 -413
- package/dist/src/semantics/doors.d.ts +23 -0
- package/dist/src/semantics/doors.js +73 -0
- package/dist/src/semantics/entitlements.d.ts +0 -2
- package/dist/src/semantics/entitlements.js +4 -95
- package/dist/src/semantics/events.d.ts +11 -0
- package/dist/src/semantics/events.js +31 -0
- package/dist/src/semantics/index.d.ts +2 -0
- package/dist/src/semantics/index.js +85 -0
- package/dist/src/semantics/invoice_payments.d.ts +2 -0
- package/dist/src/semantics/invoice_payments.js +12 -0
- package/dist/src/semantics/invoices.d.ts +11 -18
- package/dist/src/semantics/invoices.js +121 -440
- package/dist/src/semantics/issuing.d.ts +6 -13
- package/dist/src/semantics/issuing.js +58 -556
- package/dist/src/semantics/payment_intents.d.ts +3 -0
- package/dist/src/semantics/payment_intents.js +71 -0
- package/dist/src/semantics/payment_methods.d.ts +3 -0
- package/dist/src/semantics/payment_methods.js +15 -0
- package/dist/src/semantics/payouts.d.ts +3 -0
- package/dist/src/semantics/payouts.js +28 -0
- package/dist/src/semantics/prices.d.ts +4 -0
- package/dist/src/semantics/prices.js +37 -0
- package/dist/src/semantics/products.d.ts +4 -2
- package/dist/src/semantics/products.js +12 -138
- package/dist/src/semantics/promotion_codes.d.ts +3 -0
- package/dist/src/semantics/promotion_codes.js +35 -0
- package/dist/src/semantics/radar.d.ts +2 -2
- package/dist/src/semantics/radar.js +5 -74
- package/dist/src/semantics/refunds.d.ts +2 -9
- package/dist/src/semantics/refunds.js +3 -193
- package/dist/src/semantics/shared.d.ts +558 -55
- package/dist/src/semantics/shared.js +2070 -114
- package/dist/src/semantics/states.d.ts +462 -0
- package/dist/src/semantics/states.js +634 -0
- package/dist/src/semantics/subscriptions.d.ts +6 -11
- package/dist/src/semantics/subscriptions.js +37 -530
- package/dist/src/semantics/test_helpers.d.ts +3 -0
- package/dist/src/semantics/test_helpers.js +125 -0
- package/dist/src/semantics/transfers.d.ts +2 -2
- package/dist/src/semantics/transfers.js +6 -101
- package/dist/src/semantics/webhook_endpoints.d.ts +2 -0
- package/dist/src/semantics/webhook_endpoints.js +26 -0
- package/dist/src/server.d.ts +7 -0
- package/dist/src/server.js +7 -0
- package/generated/pack-facts.json +94 -0
- package/journeys/coverage.json +596 -0
- package/journeys/customer-life.json +6108 -0
- package/journeys/customer-life.outline.md +371 -0
- package/journeys/decisions.json +677 -0
- package/journeys/demand.json +706 -0
- package/journeys/score.json +853 -0
- package/journeys/unreachable.json +102 -0
- package/journeys/vendor-examples.json +8010 -0
- package/package.json +11 -20
- package/spec/SOURCE.md +18 -0
- package/spec/doc-examples.json +445 -0
- package/spec/fixtures3.json.gz +0 -0
- package/spec/openapi.json.gz +0 -0
- package/spec/patches.json +34 -0
- package/spec/sources.json +306 -0
- package/src/cli.ts +11 -28
- package/src/engine/after-payment.ts +29 -0
- package/src/engine/apps-secrets.ts +4 -0
- package/src/engine/balance.ts +32 -0
- package/src/engine/checkout.ts +39 -0
- package/src/engine/common.ts +49 -0
- package/src/engine/connect.ts +106 -0
- package/src/engine/customers.ts +10 -0
- package/src/engine/display.ts +18 -0
- package/src/engine/files.ts +28 -0
- package/src/engine/invoices.ts +102 -0
- package/src/engine/issuing.ts +66 -0
- package/src/engine/ledger.ts +48 -0
- package/src/engine/oauth.ts +18 -0
- package/src/engine/onboarding.ts +53 -0
- package/src/{stripe-params.ts → engine/params.ts} +7 -56
- package/src/engine/payment-intents.ts +32 -0
- package/src/engine/payment-methods.ts +24 -0
- package/src/engine/radar.ts +6 -0
- package/src/engine/refunds.ts +3 -0
- package/src/engine/renewals.ts +72 -0
- package/src/{stripe-twin.ts → engine/stripe.ts} +57 -400
- package/src/engine/subscriptions.ts +37 -0
- package/src/engine/transfers.ts +22 -0
- package/src/{stripe-version.ts → engine/version.ts} +19 -10
- package/src/engine/webhook-endpoints.ts +14 -0
- package/src/engine/webhooks.ts +70 -0
- package/src/fetch.ts +27 -0
- package/src/generated/surface.gen.json +1 -1
- package/src/generated/ui.gen.json +1 -1
- package/src/index.ts +10 -116
- package/src/manifest.ts +480 -904
- package/src/screens/{portal.tsx → billing-portal.tsx} +35 -42
- package/src/screens/checkout-js.ts +80 -0
- package/src/screens/checkout.tsx +32 -96
- package/src/screens/{onboarding.tsx → connect-onboarding.tsx} +39 -85
- package/src/screens/dashboard.tsx +178 -0
- package/src/screens/shared.tsx +84 -0
- package/src/screens/stripe-js.ts +102 -0
- package/src/semantics/account.ts +10 -0
- package/src/semantics/account_links.ts +20 -0
- package/src/semantics/accounts.ts +44 -0
- package/src/semantics/{apps-secrets.ts → apps.ts} +17 -33
- package/src/semantics/around.ts +17 -0
- package/src/semantics/balance.ts +6 -208
- package/src/semantics/balance_transactions.ts +18 -0
- package/src/semantics/billing_portal.ts +45 -0
- package/src/semantics/charges.ts +8 -212
- package/src/semantics/checkout.ts +25 -276
- package/src/semantics/clock.ts +19 -0
- package/src/semantics/coupons.ts +5 -68
- package/src/semantics/customers.ts +48 -414
- package/src/semantics/doors.ts +79 -0
- package/src/semantics/entitlements.ts +3 -94
- package/src/semantics/events.ts +37 -0
- package/src/semantics/index.ts +89 -0
- package/src/semantics/invoice_payments.ts +16 -0
- package/src/semantics/invoices.ts +112 -441
- package/src/semantics/issuing.ts +57 -573
- package/src/semantics/payment_intents.ts +76 -0
- package/src/semantics/payment_methods.ts +20 -0
- package/src/semantics/payouts.ts +29 -0
- package/src/semantics/prices.ts +41 -0
- package/src/semantics/products.ts +12 -146
- package/src/semantics/promotion_codes.ts +38 -0
- package/src/semantics/radar.ts +8 -79
- package/src/semantics/refunds.ts +4 -216
- package/src/semantics/shared.ts +2089 -135
- package/src/semantics/states.ts +662 -0
- package/src/semantics/subscriptions.ts +39 -542
- package/src/semantics/test_helpers.ts +119 -0
- package/src/semantics/transfers.ts +10 -132
- package/src/semantics/webhook_endpoints.ts +27 -0
- package/src/server.ts +7 -0
- package/client/dashboard-api.ts +0 -286
- package/client/stripe-mirror.css +0 -277
- package/client/stripe-mirror.tsx +0 -1559
- package/dist/client/dashboard-api.d.ts +0 -107
- package/dist/client/dashboard-api.js +0 -238
- package/dist/client/dashboard-api.ts +0 -286
- package/dist/client/stripe-mirror.bundle.js +0 -236
- package/dist/client/stripe-mirror.css +0 -277
- package/dist/client/stripe-mirror.d.ts +0 -134
- package/dist/client/stripe-mirror.js +0 -859
- package/dist/client/stripe-mirror.tsx +0 -1559
- package/dist/src/screens/connect-oauth.d.ts +0 -27
- package/dist/src/screens/connect-oauth.js +0 -414
- package/dist/src/screens/connect-settings.d.ts +0 -22
- package/dist/src/screens/connect-settings.js +0 -103
- package/dist/src/screens/consent-skin.d.ts +0 -4
- package/dist/src/screens/consent-skin.js +0 -18
- package/dist/src/screens/financial-connections.d.ts +0 -5
- package/dist/src/screens/financial-connections.js +0 -90
- package/dist/src/screens/identity.d.ts +0 -5
- package/dist/src/screens/identity.js +0 -86
- package/dist/src/screens/onboarding.d.ts +0 -13
- package/dist/src/screens/portal.d.ts +0 -5
- package/dist/src/screens/public-details.d.ts +0 -5
- package/dist/src/screens/public-details.js +0 -90
- package/dist/src/semantics/after-payment.d.ts +0 -22
- package/dist/src/semantics/after-payment.js +0 -99
- package/dist/src/semantics/apps-secrets.d.ts +0 -2
- package/dist/src/semantics/billing.d.ts +0 -2
- package/dist/src/semantics/billing.js +0 -220
- package/dist/src/semantics/connect.d.ts +0 -5
- package/dist/src/semantics/connect.js +0 -493
- package/dist/src/semantics/credit-notes.d.ts +0 -2
- package/dist/src/semantics/credit-notes.js +0 -172
- package/dist/src/semantics/disputes.d.ts +0 -2
- package/dist/src/semantics/disputes.js +0 -51
- package/dist/src/semantics/ephemeral-keys.d.ts +0 -2
- package/dist/src/semantics/ephemeral-keys.js +0 -34
- package/dist/src/semantics/files.d.ts +0 -2
- package/dist/src/semantics/files.js +0 -125
- package/dist/src/semantics/ledger.d.ts +0 -59
- package/dist/src/semantics/ledger.js +0 -200
- package/dist/src/semantics/payment-intents.d.ts +0 -18
- package/dist/src/semantics/payment-intents.js +0 -452
- package/dist/src/semantics/payment-links.d.ts +0 -2
- package/dist/src/semantics/payment-links.js +0 -133
- package/dist/src/semantics/payment-methods.d.ts +0 -20
- package/dist/src/semantics/payment-methods.js +0 -140
- package/dist/src/semantics/plans.d.ts +0 -5
- package/dist/src/semantics/plans.js +0 -121
- package/dist/src/semantics/platform.d.ts +0 -9
- package/dist/src/semantics/platform.js +0 -206
- package/dist/src/semantics/renewals.d.ts +0 -47
- package/dist/src/semantics/renewals.js +0 -281
- package/dist/src/semantics/setup-intents.d.ts +0 -2
- package/dist/src/semantics/setup-intents.js +0 -84
- package/dist/src/semantics/subscription-schedules.d.ts +0 -2
- package/dist/src/semantics/subscription-schedules.js +0 -119
- package/dist/src/semantics/tax.d.ts +0 -2
- package/dist/src/semantics/tax.js +0 -197
- package/dist/src/semantics/terminal.d.ts +0 -5
- package/dist/src/semantics/terminal.js +0 -182
- package/dist/src/semantics/test-clocks.d.ts +0 -6
- package/dist/src/semantics/test-clocks.js +0 -73
- package/dist/src/semantics/tokens.d.ts +0 -4
- package/dist/src/semantics/tokens.js +0 -44
- package/dist/src/semantics/treasury.d.ts +0 -2
- package/dist/src/semantics/treasury.js +0 -377
- package/dist/src/semantics/webhook-endpoints.d.ts +0 -3
- package/dist/src/semantics/webhook-endpoints.js +0 -85
- package/dist/src/stripe-budget.d.ts +0 -55
- package/dist/src/stripe-budget.js +0 -155
- package/dist/src/stripe-capabilities.d.ts +0 -3
- package/dist/src/stripe-capabilities.js +0 -5836
- package/dist/src/stripe-conformance.d.ts +0 -43
- package/dist/src/stripe-conformance.js +0 -105
- package/dist/src/stripe-connector.d.ts +0 -161
- package/dist/src/stripe-connector.js +0 -414
- package/dist/src/stripe-emit.d.ts +0 -2
- package/dist/src/stripe-emit.js +0 -145
- package/dist/src/stripe-events.d.ts +0 -93
- package/dist/src/stripe-events.js +0 -392
- package/dist/src/stripe-js.d.ts +0 -4
- package/dist/src/stripe-js.js +0 -70
- package/dist/src/stripe-mirror-ui.d.ts +0 -15
- package/dist/src/stripe-mirror-ui.js +0 -87
- package/dist/src/stripe-perform-harness.d.ts +0 -9
- package/dist/src/stripe-perform-harness.js +0 -26
- package/dist/src/stripe-server.d.ts +0 -33
- package/dist/src/stripe-server.js +0 -429
- package/dist/src/stripe-shared.d.ts +0 -109
- package/dist/src/stripe-shared.js +0 -276
- package/dist/src/stripe-ui-conformance.d.ts +0 -5
- package/dist/src/stripe-ui-conformance.js +0 -79
- package/dist/src/stripe-ui-structure.d.ts +0 -3
- package/dist/src/stripe-ui-structure.js +0 -168
- package/dist/test-fixtures/stripe-known-deviations.json +0 -110
- package/dist/test-fixtures/stripe-openapi-operations.SOURCE.md +0 -14
- package/dist/test-fixtures/stripe-openapi-operations.json +0 -4717
- package/dist/test-fixtures/stripe-schemas.SOURCE.md +0 -35
- package/dist/test-fixtures/stripe-schemas.json +0 -3813
- package/src/screens/connect-oauth.tsx +0 -400
- package/src/screens/connect-settings.tsx +0 -121
- package/src/screens/consent-skin.ts +0 -20
- package/src/screens/financial-connections.tsx +0 -101
- package/src/screens/identity.tsx +0 -96
- package/src/screens/public-details.tsx +0 -105
- package/src/semantics/after-payment.ts +0 -118
- package/src/semantics/billing.ts +0 -216
- package/src/semantics/connect.ts +0 -487
- package/src/semantics/credit-notes.ts +0 -168
- package/src/semantics/disputes.ts +0 -62
- package/src/semantics/ephemeral-keys.ts +0 -34
- package/src/semantics/files.ts +0 -143
- package/src/semantics/ledger.ts +0 -253
- package/src/semantics/payment-intents.ts +0 -463
- package/src/semantics/payment-links.ts +0 -148
- package/src/semantics/payment-methods.ts +0 -145
- package/src/semantics/plans.ts +0 -131
- package/src/semantics/platform.ts +0 -220
- package/src/semantics/renewals.ts +0 -279
- package/src/semantics/setup-intents.ts +0 -87
- package/src/semantics/subscription-schedules.ts +0 -129
- package/src/semantics/tax.ts +0 -220
- package/src/semantics/terminal.ts +0 -195
- package/src/semantics/test-clocks.ts +0 -77
- package/src/semantics/tokens.ts +0 -52
- package/src/semantics/treasury.ts +0 -383
- package/src/semantics/webhook-endpoints.ts +0 -87
- package/src/stripe-budget.ts +0 -181
- package/src/stripe-capabilities.ts +0 -5651
- package/src/stripe-conformance.ts +0 -124
- package/src/stripe-connector.ts +0 -462
- package/src/stripe-emit.ts +0 -157
- package/src/stripe-events.ts +0 -434
- package/src/stripe-js.ts +0 -70
- package/src/stripe-mirror-ui.ts +0 -90
- package/src/stripe-perform-harness.ts +0 -29
- package/src/stripe-server.ts +0 -393
- package/src/stripe-shared.ts +0 -297
- package/src/stripe-ui-conformance.ts +0 -88
- package/src/stripe-ui-structure.ts +0 -182
- package/test-fixtures/stripe-known-deviations.json +0 -110
- package/test-fixtures/stripe-openapi-operations.json +0 -4717
- package/test-fixtures/stripe-schemas.json +0 -3813
- /package/dist/src/{screens → engine}/industries.d.ts +0 -0
- /package/dist/src/{screens → engine}/industries.js +0 -0
- /package/dist/src/{semantics → engine}/test-cards.d.ts +0 -0
- /package/dist/src/{semantics → engine}/test-cards.js +0 -0
- /package/src/{screens → engine}/industries.ts +0 -0
- /package/src/{semantics → engine}/test-cards.ts +0 -0
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
# Kestrel Labs bills customers and pays partners with Stripe
|
|
2
|
+
|
|
3
|
+
Author: Contributor 88
|
|
4
|
+
|
|
5
|
+
Twenty’s workflow HTTP action creates a customer invoice with its user-supplied Stripe key. Postiz’s custom Checkout delegates loadActions, PaymentElement, promotion changes and confirmation to Stripe.js, and reads the stored subscription back. Kestrel runs the shipped Dub, Rallly and Postiz billing paths, the Twin sample shop, the Harness billing dashboard and Open Autonomy’s card rail. Its operators set up catalog prices, public details, Radar lists and sandbox funding through Stripe’s API or hosted controls. Subscribers pay in Checkout, change plans, try and end trials, settle overdue invoices, and cancel through the portal. Company and individual partners complete onboarding and receive commissions.
|
|
6
|
+
|
|
7
|
+
The December agent-card create follows Open Autonomy rails.ts:40 without a status, so Stripe’s inactive default declines the first unattended purchase. A treasurer then activates a replacement, pauses it during a credential check, and exercises the domain purchase’s approval, decline and partial capture flows. The application replies use rails.ts:109’s approved boolean. Delayed replies leave pending requests for the API decision inside the real-time window.
|
|
8
|
+
|
|
9
|
+
Later billing work uses the documented options of those served operations: negotiated and tiered prices, fixed and percentage discounts, trial changes, customer invoice defaults, payment methods, and history pagination. The story shows configuration errors where a catalog upload, issuer-policy import, stale account, method name or credential needs correction; no stored mutation is supplied by a scenario handler. Install-only and disabled feature paths are recorded in demand.optional.
|
|
10
|
+
|
|
11
|
+
## Acts in order
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Monday 5 January, 09:00: Kestrel Labs sets up Stripe
|
|
15
|
+
|
|
16
|
+
Elapsed: 6300m.
|
|
17
|
+
|
|
18
|
+
- The World: the platform's keys, as the Dashboard's API keys page shows them — POST /_twin/app-credentials. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
19
|
+
- The World operator retains the platform balance for monthly partner commissions (Dashboard manual payouts) — POST /_twin/account. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
20
|
+
- Femke sets the business name on Public details — POST https://dashboard.stripe.com/settings/public. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
21
|
+
- Femke follows Save and sees Kestrel’s public business name — GET https://dashboard.stripe.com/settings/public?saved=1. Stripe: https://docs.stripe.com/payments/checkout/customization/appearance
|
|
22
|
+
- The World: Tallyforge's webhook endpoint, added on the Dashboard's Webhooks page — POST /_twin/webhook-endpoints. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
23
|
+
- The product Tallyforge — POST /v1/products. Twin: apps/platform/src/sample.ts:44; Stripe operator catalog setup, spec:PostProducts
|
|
24
|
+
- Femke seeds the monthly price and Dub lookup key through Stripe’s Prices API — POST /v1/prices. Stripe operator: https://docs.stripe.com/products-prices/manage-prices#lookup-keys (create a price with lookup_key); spec:PostPrices
|
|
25
|
+
- Femke adds the upgraded monthly plan at $98 — POST /v1/prices. Stripe operator: https://docs.stripe.com/products-prices/manage-prices#lookup-keys (create a price with lookup_key); spec:PostPrices
|
|
26
|
+
- and yearly, $490 — POST /v1/prices. Twin: apps/platform/src/sample.ts:45; Stripe operator catalog setup, spec:PostPrices
|
|
27
|
+
- The Add-on seats product — POST /v1/products. Twin: apps/platform/src/sample.ts:44; Stripe operator catalog setup, spec:PostProducts
|
|
28
|
+
- its per-seat price, $8 a month — POST /v1/prices. Twin: apps/platform/src/sample.ts:45; Stripe operator catalog setup, spec:PostPrices
|
|
29
|
+
- Tallyforge lists its prices — GET /v1/prices?lookup_keys[]=pro_monthly. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:37
|
|
30
|
+
- Tallyforge reads its monthly price by id — GET /v1/prices/{monthly}. Rallly: apps/web/src/features/billing/mutations.ts:58
|
|
31
|
+
|
|
32
|
+
### Tuesday 6 January: the first subscriber
|
|
33
|
+
|
|
34
|
+
Elapsed: 1440m.
|
|
35
|
+
|
|
36
|
+
- Dub’s upgrade page loads its pinned Stripe.js release train — GET https://js.stripe.com/basil/stripe.js. Dub: apps/web/package.json:49, pnpm-lock.yaml @stripe/stripe-js@7.3.1; pinned SDK dist/index.mjs loadScript
|
|
37
|
+
- Ravel Agency starts Checkout for the monthly plan — POST /v1/checkout/sessions. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:141; apps/web/lib/stripe/index.ts:5
|
|
38
|
+
- Stripe's payment page shows the business name — GET {cs1_url}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
39
|
+
- Ravel pays with a card — POST {cs1_url}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
40
|
+
- Tallyforge reads the completed session and its subscription — GET /v1/checkout/sessions/{cs1}. Rallly: apps/web/src/app/api/stripe/portal/route.ts:34; spec:GetCheckoutSessionsSession
|
|
41
|
+
- and the session's line items — GET /v1/checkout/sessions/{cs1}/line_items?expand[]=data.price.product&limit=10. Dub: apps/web/app/(ee)/api/stripe/integration/webhook/utils/get-checkout-session-products.ts:47
|
|
42
|
+
|
|
43
|
+
### two hours later
|
|
44
|
+
|
|
45
|
+
Elapsed: 120m.
|
|
46
|
+
|
|
47
|
+
- Nordlicht Studio starts Checkout — POST /v1/checkout/sessions. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:141; apps/web/lib/stripe/index.ts:5
|
|
48
|
+
- Nordlicht's first card is declined — POST {cs2_url}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
49
|
+
- its second card works — POST {cs2_url}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
50
|
+
- Tallyforge reads the session — GET /v1/checkout/sessions/{cs2}. Rallly: apps/web/src/app/api/stripe/portal/route.ts:34; spec:GetCheckoutSessionsSession
|
|
51
|
+
- Tallyforge finds Ravel by email — GET /v1/customers/search?query=email~%22billing%40ravel.test%22&limit=100&expand[]=data.subscriptions. Dub: apps/web/app/(ee)/api/customers/search-stripe/route.ts:53
|
|
52
|
+
- and lists customers — GET /v1/customers?email=billing%40ravel.test&limit=1. Twin: apps/platform/src/sample.ts:40
|
|
53
|
+
- and Ravel's subscriptions — GET /v1/subscriptions?customer={ravel}&status=all. Volter Harness: container/retake/stack/app/src/app.py:115 (status=all)
|
|
54
|
+
- The operations dashboard counts every subscription, canceled ones too — GET /v1/subscriptions?limit=100&status=all. Volter Harness: container/retake/stack/app/src/app.py:115
|
|
55
|
+
- and every customer — GET /v1/customers?limit=100. Volter Harness: container/retake/stack/app/src/app.py:116
|
|
56
|
+
- The sample shop's seeder looks its first customer up by email before seeding — GET /v1/customers?email=billing%40ravel.test. Twin: apps/platform/src/sample.ts:40
|
|
57
|
+
- Dub reads Ravel’s billing customer — GET /v1/customers/{ravel}. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/payment-methods/route.ts:66
|
|
58
|
+
- Twenty’s app health check reads its Stripe account with the user-supplied key — GET /v1/account. Twenty: packages/twenty-docs/developers/extend/apps/logic/logic-functions.mdx:850 (GET, Authorization only)
|
|
59
|
+
- Twenty’s invoice workflow creates the quote invoice for Ravel — POST /v1/invoices. Twenty: packages/twenty-docs/user-guide/workflows/how-tos/connect-to-other-tools/generate-quote-or-invoice-from-twenty.mdx:101; packages/twenty-server/src/modules/workflow/workflow-executor/workflow-actions/http-request/http-request.workflow-action.ts:28
|
|
60
|
+
- The invoice workflow reads the saved draft — GET /v1/invoices/{workflow_invoice}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
61
|
+
- An uninstalled payment app’s setup request receives Stripe’s unknown-URL answer — POST /v1/setup_intents. Stripe: https://github.com/stripe/stripe-mock/issues/31; Cal payment app requires an app-store install (demand.optional)
|
|
62
|
+
|
|
63
|
+
### Monday 2 February: launch pricing
|
|
64
|
+
|
|
65
|
+
Elapsed: 38760m.
|
|
66
|
+
|
|
67
|
+
- Femke makes a coupon: 20% off for three months — POST /v1/coupons. Dub: apps/web/lib/discounts/discount-provider-stripe.ts:136
|
|
68
|
+
- and reads it — GET /v1/coupons/{coupon}. Dub: apps/web/lib/rewardful/import-campaigns.ts:184; apps/web/lib/discounts/discount-provider-stripe.ts:87
|
|
69
|
+
- and its promotion code LAUNCH20 — POST /v1/promotion_codes. Dub: apps/web/lib/discounts/discount-provider-stripe.ts:184; apps/web/lib/stripe/index.ts:23
|
|
70
|
+
- Tallyforge finds the code by its text — GET /v1/promotion_codes?code=LAUNCH20&limit=1. Dub: apps/web/lib/discounts/discount-provider-stripe.ts:275
|
|
71
|
+
- and reads the code it names — GET /v1/promotion_codes/{promo}. Dub: apps/web/app/(ee)/api/stripe/integration/webhook/utils/get-promotion-code.ts:18
|
|
72
|
+
- Veldkamp starts Checkout with the code — POST /v1/checkout/sessions. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:141; apps/web/lib/stripe/index.ts:5
|
|
73
|
+
- and pays — POST {cs4_url}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
74
|
+
- The session's discount — GET /v1/checkout/sessions/{cs4}. Rallly: apps/web/src/app/api/stripe/portal/route.ts:34; spec:GetCheckoutSessionsSession
|
|
75
|
+
- Postiz’s subscription screen loads its pinned Stripe.js script — GET https://js.stripe.com/clover/stripe.js. Postiz package.json @stripe/stripe-js ^8.6.0; CheckoutProvider delegates initCheckout/loadActions
|
|
76
|
+
- Postiz starts its default web billing with a seven-day custom Checkout trial — POST /v1/checkout/sessions. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
77
|
+
- CheckoutProvider loads actions and the subscription summary — POST https://api.stripe.com/v1/payment_pages/{postiz_cs}/init. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
78
|
+
- The subscriber’s mistyped promotion receives its refusal — POST https://api.stripe.com/v1/payment_pages/{postiz_cs}/apply_promotion_code. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
79
|
+
- The subscriber applies Postiz’s campaign promotion — POST https://api.stripe.com/v1/payment_pages/{postiz_cs}/apply_promotion_code. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
80
|
+
- The subscriber removes the campaign promotion — POST https://api.stripe.com/v1/payment_pages/{postiz_cs}/remove_promotion_code. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
81
|
+
- The PaymentElement refuses an incomplete card — POST https://api.stripe.com/v1/payment_pages/{postiz_cs}/confirm. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
82
|
+
- The subscriber confirms through CheckoutProvider’s PaymentElement — POST https://api.stripe.com/v1/payment_pages/{postiz_cs}/confirm. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
83
|
+
- Postiz reads the completed session and resulting trial subscription — GET /v1/checkout/sessions/{postiz_cs}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
84
|
+
- Postiz previews the next subscription invoice — POST /v1/invoices/create_preview. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:1126-1129 (customer, subscription)
|
|
85
|
+
- Postiz reads the trial’s current line before showing a plan-change quote — GET /v1/subscriptions/{postiz_sub}. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
86
|
+
- Postiz reads the active subscription item for the plan-change quote — GET /v1/subscriptions/{veld_sub}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:950 (retrieve(id))
|
|
87
|
+
- Postiz quotes a plan change while the current subscription discount applies — POST /v1/invoices/create_preview. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:343-355; Stripe: https://docs.stripe.com/billing/subscriptions/prorations
|
|
88
|
+
- Postiz removes the applied subscription discount before the next billing period — DELETE /v1/subscriptions/{veld_sub}/discount. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:1230 (deleteDiscount(id), no parameters)
|
|
89
|
+
- Postiz reads the active subscription item for the plan-change quote — GET /v1/subscriptions/{veld_sub}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:950 (retrieve(id))
|
|
90
|
+
- Postiz quotes its plan change at the current time without supplying proration_date — POST /v1/invoices/create_preview. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:343-355; Stripe: https://docs.stripe.com/billing/subscriptions/prorations
|
|
91
|
+
- The documented quote option create_prorations previews the next invoice — POST /v1/invoices/create_preview. Stripe: https://docs.stripe.com/api/invoices/create_preview?query=subscription_details
|
|
92
|
+
- The documented quote option none previews the next invoice — POST /v1/invoices/create_preview. Stripe: https://docs.stripe.com/api/invoices/create_preview?query=subscription_details
|
|
93
|
+
- An unchanged plan creates no proration even with always_invoice — POST /v1/invoices/create_preview. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:343-355; Stripe: https://docs.stripe.com/billing/subscriptions/prorations
|
|
94
|
+
- The documented preview credits unused time when removing a paid subscription item — POST /v1/invoices/create_preview. Stripe: https://docs.stripe.com/api/invoices/create_preview.md?query=subscription_details
|
|
95
|
+
- The documented preview charges remaining time when adding a subscription item — POST /v1/invoices/create_preview. Stripe: https://docs.stripe.com/api/invoices/create_preview.md?query=subscription_details
|
|
96
|
+
- At the billing boundary there is no unused time to prorate — POST /v1/invoices/create_preview. Stripe: https://docs.stripe.com/api/invoices/create_preview.md?query=subscription_details
|
|
97
|
+
- The preview refuses a proration time outside the current billing period — POST /v1/invoices/create_preview. Stripe: https://docs.stripe.com/api/invoices/create_preview.md?query=subscription_details
|
|
98
|
+
- The quoted subscription still has one monthly unit — GET /v1/subscriptions/{veld_sub}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:343-355; Stripe preview leaves the subscription unchanged
|
|
99
|
+
- The quote removes its existing monthly line — POST /v1/invoices/create_preview. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
100
|
+
- The quote finds the customer’s first current subscription when its id is omitted — POST /v1/invoices/create_preview. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
101
|
+
- A stale subscription id is refused in the quote — POST /v1/invoices/create_preview. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
102
|
+
- The admin recovers the current subscription from its saved Checkout session — GET /v1/checkout/sessions/{postiz_cs}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:261,950; Stripe catalog and saved Checkout recovery
|
|
103
|
+
- A stale subscription line is refused in a plan-change quote — POST /v1/invoices/create_preview. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
104
|
+
- A stale catalog price is refused in a plan-change quote — POST /v1/invoices/create_preview. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
105
|
+
- The admin reloads the current monthly catalog price before repairing the quote — GET /v1/prices/{monthly}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:261,950; Stripe catalog and saved Checkout recovery
|
|
106
|
+
- A workflow’s incomplete quote configuration requires a customer — POST /v1/invoices/create_preview. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
107
|
+
- The quote refuses a deleted customer id — POST /v1/invoices/create_preview. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
108
|
+
- The workflow asks to include its customer’s pending items in a new draft — POST /v1/invoices. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
109
|
+
- After launch week the code is switched off — POST /v1/promotion_codes/{promo}. Dub: apps/web/lib/discounts/discount-provider-stripe.ts:294
|
|
110
|
+
- Rallly configures billing details and card updates — POST /v1/billing_portal/configurations. Rallly: apps/web/src/features/billing/mutations.ts:103
|
|
111
|
+
- Tallyforge lists the portal's configurations — GET /v1/billing_portal/configurations?active=true&limit=100. Rallly: apps/web/src/features/billing/mutations.ts:35
|
|
112
|
+
- Nordlicht opens the portal — POST /v1/billing_portal/sessions. Rallly: apps/web/src/features/billing/mutations.ts:22
|
|
113
|
+
- The portal page — GET {portal_url}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
114
|
+
- Nordlicht adds a new card — POST https://billing.stripe.com/p/session/{portal}/payment_method. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
115
|
+
|
|
116
|
+
### Monday 2 March: the monthly subscriptions renew
|
|
117
|
+
|
|
118
|
+
Elapsed: 40320m.
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
### Wednesday 1 April: the launch promotion closes
|
|
122
|
+
|
|
123
|
+
Elapsed: 43200m.
|
|
124
|
+
|
|
125
|
+
- The webinar long over, Femke switches LAUNCH20 off again — POST /v1/promotion_codes/{promo}. Dub: apps/web/lib/discounts/discount-provider-stripe.ts:294
|
|
126
|
+
|
|
127
|
+
### Monday 4 May: a storage add-on and fraud investigation
|
|
128
|
+
|
|
129
|
+
Elapsed: 47520m.
|
|
130
|
+
|
|
131
|
+
- A storage add-on charged on the server at once, with Stripe's test card — POST /v1/payment_intents. Twin: apps/platform/src/sample.ts:47
|
|
132
|
+
- Kestrel reads the receipt for its storage add-on — GET /v1/charges/{shop_charge}. Dub: apps/web/app/(ee)/api/cron/payouts/charge-succeeded/utils.ts:78; spec:GetChargesCharge
|
|
133
|
+
- Postiz refunds the canceled storage add-on — POST /v1/refunds. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:1027 (refunds.create({charge}))
|
|
134
|
+
- Tallyforge lists Nordlicht's cards — GET /v1/payment_methods?customer={nordlicht}&type=card. Dub: apps/web/lib/stripe/create-payment-intent.ts:20
|
|
135
|
+
- Femke opens the Radar Lists page before entering the fraud lists — GET https://dashboard.stripe.com/radar/lists. Stripe: https://docs.stripe.com/radar/lists
|
|
136
|
+
- The fraud operator creates Fraud customers in Radar Lists — POST https://dashboard.stripe.com/radar/lists. Dub: apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:3-7; https://docs.stripe.com/radar/lists#create-and-edit-lists
|
|
137
|
+
- The fraud operator creates Fraud emails in Radar Lists — POST https://dashboard.stripe.com/radar/lists. Dub: apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:3-7; https://docs.stripe.com/radar/lists#create-and-edit-lists
|
|
138
|
+
- The fraud operator creates Fraud card fingerprints in Radar Lists — POST https://dashboard.stripe.com/radar/lists. Dub: apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:3-7; https://docs.stripe.com/radar/lists#create-and-edit-lists
|
|
139
|
+
- Dub adds the flagged customer to its configured Radar list — POST /v1/radar/value_list_items. Dub: apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:28
|
|
140
|
+
- Dub adds the flagged email to its configured Radar list — POST /v1/radar/value_list_items. Dub: apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:28
|
|
141
|
+
- Dub adds the flagged fingerprint to its configured Radar list — POST /v1/radar/value_list_items. Dub: apps/web/app/(ee)/api/stripe/webhook/utils/add-to-stripe-fraud-value-lists.ts:28
|
|
142
|
+
|
|
143
|
+
### Wednesday 1 July: the partner program
|
|
144
|
+
|
|
145
|
+
Elapsed: 83520m.
|
|
146
|
+
|
|
147
|
+
- A partner agency: an Express account — POST /v1/accounts. Dub: apps/web/lib/stripe/create-connected-account.ts:13
|
|
148
|
+
- An onboarding link — POST /v1/account_links. Dub: apps/web/lib/actions/partners/generate-stripe-account-link.ts:71
|
|
149
|
+
- The partner opens it — GET {link_url}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
150
|
+
- The onboarding page — GET {onb}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
151
|
+
- and submits it — POST {onb}. World operator or vendor-hosted browser continuation of the application call named in this act (customer-life.outline.md)
|
|
152
|
+
- The account, read — GET /v1/accounts/{partner}. Dub: apps/web/lib/actions/partners/generate-stripe-account-link.ts:66
|
|
153
|
+
- its bank account — GET /v1/accounts/{partner}/external_accounts?object=bank_account. Dub: apps/web/lib/partners/get-partner-bank-account.ts:25
|
|
154
|
+
- a login link to its Express dashboard — POST /v1/accounts/{partner}/login_links. Dub: apps/web/lib/actions/partners/generate-stripe-account-link.ts:70
|
|
155
|
+
- Kestrel's balance — GET /v1/balance. Dub: apps/web/app/(ee)/api/cron/trigger-withdrawal/route.ts:14
|
|
156
|
+
|
|
157
|
+
### Monday 3 August: July commissions
|
|
158
|
+
|
|
159
|
+
Elapsed: 47520m.
|
|
160
|
+
|
|
161
|
+
- The partner's commission transferred — POST /v1/transfers. Dub: apps/web/lib/partners/create-stripe-transfer.ts:203
|
|
162
|
+
- Transfers to the partner — GET /v1/transfers?destination={partner}&limit=100. Dub: apps/web/app/(ee)/api/cron/payouts/balance-available/route.ts:151
|
|
163
|
+
- The partner is paid out from their balance — POST /v1/payouts. Dub: apps/web/app/(ee)/api/cron/payouts/balance-available/route.ts:134
|
|
164
|
+
- Dub checks when the platform's add-on charge settles — GET /v1/balance_transactions?source={shop_charge}. Dub: apps/web/app/(ee)/api/cron/payouts/charge-succeeded/utils.ts:78
|
|
165
|
+
- The partner program keeps its integration secret in the secret store — POST /v1/apps/secrets. Dub: packages/stripe-app/src/utils/secrets.ts:20
|
|
166
|
+
- and finds it — GET /v1/apps/secrets/find?name=dub_token&scope[type]=account&expand[]=payload. Dub: packages/stripe-app/src/utils/secrets.ts:36
|
|
167
|
+
- and deletes it at the rotation — POST /v1/apps/secrets/delete. Dub: packages/stripe-app/src/utils/secrets.ts:60
|
|
168
|
+
|
|
169
|
+
### Monday 31 August: a partner leaves
|
|
170
|
+
|
|
171
|
+
Elapsed: 40320m.
|
|
172
|
+
|
|
173
|
+
- A second partner, who leaves before onboarding — POST /v1/accounts. Dub: apps/web/lib/stripe/create-connected-account.ts:13
|
|
174
|
+
- is deleted — DELETE /v1/accounts/{partner2}. Dub: apps/web/app/(ee)/api/admin/partners/delete-account/route.ts:64
|
|
175
|
+
|
|
176
|
+
### Monday 2 November: cancellations
|
|
177
|
+
|
|
178
|
+
Elapsed: 90720m.
|
|
179
|
+
|
|
180
|
+
- Veldkamp cancels at once — DELETE /v1/subscriptions/{veld_sub}. Dub: apps/web/lib/stripe/cancel-subscription.ts:20
|
|
181
|
+
- The subscription, read — GET /v1/subscriptions/{veld_sub}. Dub: apps/web/lib/stripe/cancel-subscription.ts:18
|
|
182
|
+
- Products listed — GET /v1/products?active=true&expand[]=data.prices. Stripe operator catalog read-back: spec:GetProducts
|
|
183
|
+
|
|
184
|
+
### Monday 7 December: Kestrel's agents get a card rail
|
|
185
|
+
|
|
186
|
+
Elapsed: 50400m.
|
|
187
|
+
|
|
188
|
+
- The treasurer opens Stripe’s test Issuing balance page — GET https://dashboard.stripe.com/test/issuing/balance. Stripe: https://docs.stripe.com/issuing/testing
|
|
189
|
+
- The operator funds the sandbox Issuing balance for the domain purchase — POST https://dashboard.stripe.com/test/issuing/balance. https://docs.stripe.com/issuing/testing#fund-your-test-issuing-balance
|
|
190
|
+
- Kestrel's platform enrols its webhook endpoint for the Issuing events — POST /v1/webhook_endpoints. Open Autonomy: apps/platform/world.ts:46
|
|
191
|
+
- The rail's cardholder: the account the agents spend for — POST /v1/issuing/cardholders. Open Autonomy: packages/backend/src/rails.ts:35; apps/platform/world.ts:45
|
|
192
|
+
- The treasurer obtains a single-use virtual card for the domain, at most $2.50 — POST /v1/issuing/cards. Open Autonomy: packages/backend/src/rails.ts:40
|
|
193
|
+
- The agent reads the card's number and CVC — GET /v1/issuing/cards/{ic}?expand[]=number&expand[]=cvc. Open Autonomy: packages/backend/src/rails.ts:48
|
|
194
|
+
- The product World presents the domain purchase at Namecheap — POST /v1/test_helpers/issuing/authorizations. Open Autonomy: world/model/scenario.ts:60-61; packages/backend/src/rails.ts:40 (no status); https://docs.stripe.com/api/issuing/cards/create#create_issuing_card-status (Defaults to inactive); spec:/components/schemas/issuing_authorization_request/properties/reason/enum (card_inactive)
|
|
195
|
+
- The rail retires the unused card when the issuer reports its decline — POST /v1/issuing/cards/{ic}. Open Autonomy: packages/backend/src/rails.ts:93-99
|
|
196
|
+
- Ravel’s admin reads its current monthly line before upgrading — GET /v1/subscriptions/{ravel_sub}. Stripe: spec:GetSubscriptionsSubscriptionExposedId
|
|
197
|
+
- Ravel switches its existing line to the yearly price — POST /v1/subscriptions/{ravel_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
198
|
+
- The billing admin gives Ravel a second add-on line — POST /v1/subscriptions/{ravel_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
199
|
+
- Ravel removes the extra editor line after consolidating workspaces — POST /v1/subscriptions/{ravel_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
200
|
+
- A negotiated yearly price is created inline on Ravel’s line — POST /v1/subscriptions/{ravel_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
201
|
+
- During a seasonal shutdown the admin pauses collection — POST /v1/subscriptions/{ravel_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
202
|
+
- Ravel returns and the admin resumes collection — POST /v1/subscriptions/{ravel_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
203
|
+
- The admin renews Ravel’s launch discount using the existing coupon — POST /v1/subscriptions/{ravel_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
204
|
+
- Ravel starts a two-day trial with a one-time onboarding fee — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
205
|
+
- Checkout explains the trial and the fee due today — GET {trial_cs_url}. Stripe: https://docs.stripe.com/payments/checkout/free-trials
|
|
206
|
+
- The subscriber enters a card — POST {trial_cs_url}. Stripe hosted continuation: https://docs.stripe.com/payments/checkout/how-checkout-works
|
|
207
|
+
- The app reads the new trial subscription — GET /v1/checkout/sessions/{trial_cs}. Stripe: spec:GetCheckoutSessionsSession
|
|
208
|
+
- The customer’s double-click revisits its completed payment page — POST {trial_cs_url}. Stripe: spec:/components/schemas/checkout.session/properties/status
|
|
209
|
+
- Nordlicht tries a second project free for one day — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
210
|
+
- The hosted page shows when the recurring plan starts — GET {overdue_cs_url}. Stripe: https://docs.stripe.com/payments/checkout/free-trials
|
|
211
|
+
- The subscriber enters a card — POST {overdue_cs_url}. Stripe hosted continuation: https://docs.stripe.com/payments/checkout/how-checkout-works
|
|
212
|
+
- The app reads Nordlicht’s new trial — GET /v1/checkout/sessions/{overdue_cs}. Stripe: spec:GetCheckoutSessionsSession
|
|
213
|
+
- Nordlicht’s bank card is replaced before the trial ends — POST /v1/subscriptions/{overdue_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
214
|
+
|
|
215
|
+
### Two days pass; the trial ends and its renewal is attempted
|
|
216
|
+
|
|
217
|
+
Elapsed: 2d.
|
|
218
|
+
|
|
219
|
+
- The subscription is overdue after its bank decline — GET /v1/subscriptions/{overdue_sub}. Stripe: spec:GetSubscriptionsSubscriptionExposedId
|
|
220
|
+
- Nordlicht opens its billing portal to settle the invoice — POST /v1/billing_portal/sessions. Rallly: apps/web/src/features/billing/mutations.ts:22
|
|
221
|
+
- The portal shows the unpaid invoice — GET {overdue_portal_url}. Stripe: https://docs.stripe.com/customer-management
|
|
222
|
+
- Nordlicht tries its declined card on the unpaid invoice — POST https://billing.stripe.com/p/session/{overdue_portal}/pay. Stripe: https://docs.stripe.com/customer-management
|
|
223
|
+
- Nordlicht updates its billing card — POST https://billing.stripe.com/p/session/{overdue_portal}/payment_method. Stripe hosted continuation: https://docs.stripe.com/payments/checkout/how-checkout-works
|
|
224
|
+
- Nordlicht pays the overdue invoice with the new card — POST https://billing.stripe.com/p/session/{overdue_portal}/pay. Stripe: https://docs.stripe.com/customer-management
|
|
225
|
+
- Its subscription is active again — GET /v1/subscriptions/{overdue_sub}. Stripe: spec:GetSubscriptionsSubscriptionExposedId
|
|
226
|
+
- A queued collection job reaches the invoice after the customer paid — POST /v1/invoices/{overdue_inv}/pay. Stripe: spec:PostInvoicesInvoicePay
|
|
227
|
+
- Nordlicht schedules the new project to end at renewal — POST https://billing.stripe.com/p/session/{overdue_portal}/cancel. Stripe: https://docs.stripe.com/customer-management
|
|
228
|
+
- The project is renewed after its owner changes their mind — POST https://billing.stripe.com/p/session/{overdue_portal}/renew. Stripe: https://docs.stripe.com/customer-management
|
|
229
|
+
- The owner schedules it to end after all — POST https://billing.stripe.com/p/session/{overdue_portal}/cancel. Stripe: https://docs.stripe.com/customer-management
|
|
230
|
+
|
|
231
|
+
### One billing period passes; the canceled project is not renewed
|
|
232
|
+
|
|
233
|
+
Elapsed: 32d.
|
|
234
|
+
|
|
235
|
+
- The scheduled cancellation has completed — GET /v1/subscriptions/{overdue_sub}. Stripe: spec:GetSubscriptionsSubscriptionExposedId
|
|
236
|
+
- Ravel buys a lifetime upgrade in Checkout — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
237
|
+
- The subscriber enters a card — POST {lifetime_cs_url}. Stripe hosted continuation: https://docs.stripe.com/payments/checkout/how-checkout-works
|
|
238
|
+
- The completed lifetime checkout names its payment — GET /v1/checkout/sessions/{lifetime_cs}. Stripe: spec:GetCheckoutSessionsSession
|
|
239
|
+
- Femke reopens the launch promotion for an alumni webinar — POST /v1/promotion_codes/{promo}. Dub: apps/web/lib/discounts/discount-provider-stripe.ts:294
|
|
240
|
+
- Ravel buys a third workspace with the reopened promotion — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
241
|
+
- The subscriber enters a card — POST {promo_cs_url}. Stripe hosted continuation: https://docs.stripe.com/payments/checkout/how-checkout-works
|
|
242
|
+
- The discounted checkout is complete — GET /v1/checkout/sessions/{promo_cs}. Stripe: spec:GetCheckoutSessionsSession
|
|
243
|
+
- Postiz verifies the customer’s card with a one-dollar manual authorization — POST /v1/payment_intents. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:115-123
|
|
244
|
+
- Postiz releases its card-verification authorization — POST /v1/payment_intents/{hold_pi}/cancel. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts:133 (cancel(id), no parameters)
|
|
245
|
+
- The collection job meets a bank account waiting for micro-deposits — POST /v1/payment_intents. Dub: apps/web/lib/stripe/microdeposits.ts:99; Stripe: spec:PostPaymentIntents
|
|
246
|
+
- A saved test card is declined during automatic collection — POST /v1/payment_intents. Stripe: https://docs.stripe.com/testing#declined-payments
|
|
247
|
+
- An admin creates a billing customer with a saved test card and launch coupon — POST /v1/customers. Stripe: spec:PostCustomers; https://docs.stripe.com/api/customers/create
|
|
248
|
+
- Ravel’s subscription falls back to its customer invoice default — POST /v1/subscriptions/{ravel_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
249
|
+
- Dub schedules Ravel’s cancellation at the end of its period — POST /v1/subscriptions/{ravel_sub}. Dub: apps/web/lib/stripe/cancel-subscription.ts:23
|
|
250
|
+
- Ravel changes its mind before the period ends — POST /v1/subscriptions/{ravel_sub}. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/cancel/route.ts:56
|
|
251
|
+
- Maren takes a one-day trial of a new workspace — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
252
|
+
- The subscriber enters a card — POST {draft_cs_url}. Stripe hosted continuation: https://docs.stripe.com/payments/checkout/how-checkout-works
|
|
253
|
+
- The app retains the trial subscription — GET /v1/checkout/sessions/{draft_cs}. Stripe: spec:GetCheckoutSessionsSession
|
|
254
|
+
|
|
255
|
+
### Exactly one day later, the subscription renews; its invoice is still a draft
|
|
256
|
+
|
|
257
|
+
Elapsed: 1d.
|
|
258
|
+
|
|
259
|
+
- Maren’s app reads the invoice awaiting collection — GET /v1/subscriptions/{draft_sub}. Stripe: spec:GetSubscriptionsSubscriptionExposedId
|
|
260
|
+
- Maren chooses Pay now before automatic finalization but has no invoice default — POST /v1/invoices/{draft_invoice}/pay. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/retry-payment/route.ts:44
|
|
261
|
+
- Maren sets the saved test card as her invoice default — POST /v1/customers/{maren}. Stripe: spec:PostCustomersCustomer
|
|
262
|
+
- Her retry finalizes the draft and pays the receipt — POST /v1/invoices/{draft_invoice}/pay. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/retry-payment/route.ts:44
|
|
263
|
+
- The launch catalog upload omits the tier scheme — POST /v1/prices. Stripe: spec:PostPrices
|
|
264
|
+
|
|
265
|
+
### The catalog admin consults the tier-pricing instructions and fixes its scheme
|
|
266
|
+
|
|
267
|
+
Elapsed: 5m.
|
|
268
|
+
|
|
269
|
+
- Its corrected scheme still lacks the uploaded tiers — POST /v1/prices. Stripe: spec:PostPrices
|
|
270
|
+
- The catalog admin verifies the product that will own those tiers — GET /v1/products?active=true. Stripe: spec:GetProducts
|
|
271
|
+
- A tier with neither an amount nor a flat fee is refused — POST /v1/prices. Stripe: spec:PostPrices
|
|
272
|
+
- The admin publishes volume pricing with a flat fee and an unlimited final tier — POST /v1/prices. Stripe: spec:PostPrices
|
|
273
|
+
- Harness reviews one customer per page — GET /v1/customers?limit=1. Stripe: spec:GetCustomers
|
|
274
|
+
- The admin advances to the next billing customer — GET /v1/customers?limit=1&starting_after={newest_customer}. Stripe: spec:GetCustomers
|
|
275
|
+
- The admin pages back to the customer just reviewed — GET /v1/customers?limit=1&ending_before={next_customer}. Stripe: spec:GetCustomers
|
|
276
|
+
- Dub filters its active monthly subscriptions by price — GET /v1/subscriptions?price={monthly}&status=all. Stripe: spec:GetSubscriptions
|
|
277
|
+
- The bookkeeper limits invoice history to this billing year — GET /v1/invoices?created[gte]=1798761600&created[lt]=1830297600. Stripe: spec:GetInvoices
|
|
278
|
+
- Customer search accepts a campaign tag and a numeric date range — GET /v1/customers/search?query=metadata['campaign']:'none'%20OR%20created%3E1798761600. Stripe: https://docs.stripe.com/search#search-query-language
|
|
279
|
+
- The bookkeeper finds customer records created before the cutoff — GET /v1/customers/search?query=created%3C1830297600%20AND%20created%3C%3D1830297600. Stripe: https://docs.stripe.com/search#search-query-language
|
|
280
|
+
- The search panel refuses an empty query before finding customers — GET /v1/customers/search. Stripe: spec:GetCustomersCustomer
|
|
281
|
+
- The public key cannot read the billing customer list — GET /v1/customers. Stripe: https://docs.stripe.com/error-codes
|
|
282
|
+
- The worker’s restored server key reads its billing customers — GET /v1/customers?limit=1. Stripe: spec:GetCustomers
|
|
283
|
+
- A rotated secret key fails the dashboard’s customer read — GET /v1/customers. Stripe: https://docs.stripe.com/api/authentication
|
|
284
|
+
|
|
285
|
+
### The developer checks which key the worker actually loads
|
|
286
|
+
|
|
287
|
+
Elapsed: 5m.
|
|
288
|
+
|
|
289
|
+
- A missing API key is refused before billing data is read — GET /v1/customers. Stripe: https://docs.stripe.com/api/authentication
|
|
290
|
+
- Rallly’s operator enables immediate cancellation in a second portal configuration — POST /v1/billing_portal/configurations. Stripe: spec:PostBillingPortalConfigurations
|
|
291
|
+
- Ravel opens that portal to close its trial workspace — POST /v1/billing_portal/sessions. Stripe: spec:PostBillingPortalSessions
|
|
292
|
+
- Ravel cancels the trial workspace immediately — POST https://billing.stripe.com/p/session/{instant_portal}/cancel. Stripe: https://docs.stripe.com/customer-management
|
|
293
|
+
- Kestrel adds a company partner to its payout program — POST /v1/accounts. Stripe: spec:PostAccounts
|
|
294
|
+
- The company’s owner gets its onboarding link — POST /v1/account_links. Dub: apps/web/lib/actions/partners/generate-stripe-account-link.ts:71
|
|
295
|
+
- The owner opens its company onboarding — GET {company_link}. Stripe: https://docs.stripe.com/connect/hosted-onboarding
|
|
296
|
+
- The owner starts the company form but leaves required banking details blank — POST {company_onb}. Stripe: https://docs.stripe.com/connect/hosted-onboarding
|
|
297
|
+
- The owner supplies company, representative, owner and bank details — POST {company_onb}. Stripe: https://docs.stripe.com/connect/required-verification-information
|
|
298
|
+
- The treasurer replaces the retired agent card with an active sandbox card — POST /v1/issuing/cards. Stripe: spec:PostIssuingCards
|
|
299
|
+
- The treasurer restricts the card to online purchases — POST /v1/issuing/cards/{replacement_card}. Open Autonomy card rail; Stripe: spec PostIssuingCardsCard spending_controls.allowed_card_presences
|
|
300
|
+
- The rail reads back the online-only policy and previous spending limits — GET /v1/issuing/cards/{replacement_card}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
301
|
+
- The treasurer changes the merchant country without clearing card presence — POST /v1/issuing/cards/{replacement_card}. Postiz: libraries/nestjs-libraries/src/services/stripe.service.ts; Stripe: pinned API and Stripe.js Checkout contract
|
|
302
|
+
- The treasurer pauses the replacement during a credential check — POST /v1/issuing/cards/{replacement_card}. Stripe: spec:PostIssuingCardsCard
|
|
303
|
+
- The check finishes and the card is active again — POST /v1/issuing/cards/{replacement_card}. Stripe: spec:PostIssuingCardsCard
|
|
304
|
+
- The merchant’s larger estimate exceeds the per-purchase limit — POST /v1/test_helpers/issuing/authorizations. Open Autonomy: world/model/scenario.ts:60; Stripe: spec:PostTestHelpersIssuingAuthorizations
|
|
305
|
+
- The merchant retries the $2 domain purchase — POST /v1/test_helpers/issuing/authorizations. Open Autonomy: world/model/scenario.ts:60; Stripe: spec:PostTestHelpersIssuingAuthorizations
|
|
306
|
+
- A duplicate decline callback arrives after that purchase was decided — POST /v1/issuing/authorizations/{replacement_auth}/decline. Open Autonomy: packages/backend/src/rails.ts:109; Stripe: spec:PostIssuingAuthorizationsAuthorizationDecline
|
|
307
|
+
- A duplicate approval arrives after the decision too — POST /v1/issuing/authorizations/{replacement_auth}/approve. Open Autonomy: packages/backend/src/rails.ts:109; Stripe: spec:PostIssuingAuthorizationsAuthorizationApprove
|
|
308
|
+
- Namecheap captures the first dollar and keeps the authorization open — POST /v1/test_helpers/issuing/authorizations/{replacement_auth}/capture. Stripe: spec:PostTestHelpersIssuingAuthorizationsAuthorizationCapture
|
|
309
|
+
- It captures the remaining dollar and closes the authorization — POST /v1/test_helpers/issuing/authorizations/{replacement_auth}/capture. Open Autonomy: world/model/scenario.ts:62
|
|
310
|
+
- A second purchase exceeds the remaining weekly allowance — POST /v1/test_helpers/issuing/authorizations. Open Autonomy: world/model/scenario.ts:60; Stripe: spec:PostTestHelpersIssuingAuthorizations
|
|
311
|
+
- Maren clears the subscription-specific card to use her invoice default — POST /v1/subscriptions/{draft_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
312
|
+
- A backdated extension cannot start Maren’s new trial — POST /v1/subscriptions/{draft_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
313
|
+
- The extension is corrected to a future trial — POST /v1/subscriptions/{draft_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
314
|
+
- Dub activates the paid plan early, changing its price at the same time — POST /v1/subscriptions/{draft_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
315
|
+
- An unpriced add-on submitted by the admin is refused — POST /v1/subscriptions/{draft_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
316
|
+
- The admin reads the subscription before correcting the add-on — GET /v1/subscriptions/{draft_sub}. Stripe: spec:GetSubscriptionsSubscriptionExposedId
|
|
317
|
+
- Maren’s bank card is declined before another trial would end — POST /v1/subscriptions/{draft_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
318
|
+
- Her activation asks Stripe to keep the trial if payment fails — POST /v1/subscriptions/{draft_sub}. Stripe: spec:PostSubscriptionsSubscriptionExposedId
|
|
319
|
+
- Harness pages through the newer subscription first — GET /v1/subscriptions?status=all&limit=1. Stripe: spec:GetSubscriptions
|
|
320
|
+
- The admin advances to an older subscription — GET /v1/subscriptions?status=all&limit=1&starting_after={last_subscription}. Stripe: spec:GetSubscriptions
|
|
321
|
+
- The admin returns to the newer subscription — GET /v1/subscriptions?status=all&limit=1&ending_before={previous_subscription}. Stripe: spec:GetSubscriptions
|
|
322
|
+
- Dub reconciles ledger entries created during this billing year — GET /v1/balance_transactions?created[gte]=1798761600&created[lt]=1830297600. Stripe: spec:GetBalanceTransactions
|
|
323
|
+
- A new plan cannot start Checkout before its price is entered — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
324
|
+
- The admin reads its published prices before repairing that plan — GET /v1/prices?lookup_keys[]=pro_monthly. Dub: apps/web/app/api/workspaces/[idOrSlug]/billing/upgrade/route.ts:37
|
|
325
|
+
- A partner charge template still names an account already deleted — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
326
|
+
- The configured trial interval must be at least a day — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
327
|
+
- Ravel starts a project whose trial ends at a fixed campaign date — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
328
|
+
- Checkout shows the fixed trial end to the customer — GET {dated_trial_cs_url}. Stripe: https://docs.stripe.com/payments/checkout/free-trials
|
|
329
|
+
- A European customer chooses SEPA for its first add-on collection — POST /v1/payment_intents. Stripe: spec:PostPaymentIntents
|
|
330
|
+
- Another customer chooses its Cash App wallet for an add-on — POST /v1/payment_intents. Stripe: spec:PostPaymentIntents
|
|
331
|
+
- The sample shop explicitly limits its confirmed card payment to cards — POST /v1/payment_intents. Stripe: spec:PostPaymentIntents
|
|
332
|
+
- An old Checkout method name in a deployed template is refused — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
333
|
+
- The new API version refuses the removed method parameter — POST /v1/payment_intents. Stripe: https://docs.stripe.com/changelog/clover/2026-01-28/remove-payment-method-types
|
|
334
|
+
- The partner’s billable service pays the platform its agreed application fee — POST /v1/payment_intents. Stripe: spec:PostPaymentIntents; https://docs.stripe.com/connect/direct-charges
|
|
335
|
+
- A commission uses the settled add-on’s source transaction — POST /v1/transfers. Dub: apps/web/lib/partners/create-stripe-transfer.ts:203; https://docs.stripe.com/connect/separate-charges-and-transfers
|
|
336
|
+
- A payout template names euros before this partner adds a euro bank — POST /v1/payouts. Stripe: spec:PostPayouts
|
|
337
|
+
- A company chooses platform-collected onboarding instead of Express — POST /v1/accounts. Stripe: spec:PostAccounts
|
|
338
|
+
- A UK partner begins the program but its country’s onboarding requirements remain outside the authored hosted flow — POST /v1/accounts. Stripe: spec:PostAccounts
|
|
339
|
+
- The partner receives its onboarding link — POST /v1/account_links. Stripe: spec:PostAccountLinks
|
|
340
|
+
- The link redirects to its hosted setup page — GET {uk_link}. Stripe: https://docs.stripe.com/connect/hosted-onboarding
|
|
341
|
+
- The hosted page explains the documented coverage gap — GET {uk_onb}. Stripe: https://docs.stripe.com/connect/required-verification-information; manifest.todo hosted requirements scope
|
|
342
|
+
|
|
343
|
+
### A week passes before the next domain renewal purchase
|
|
344
|
+
|
|
345
|
+
Elapsed: 7d.
|
|
346
|
+
|
|
347
|
+
- Open Autonomy refuses a purchase its treasurer did not authorize — POST /v1/test_helpers/issuing/authorizations. Open Autonomy: world/model/scenario.ts:60; Stripe: spec:PostTestHelpersIssuingAuthorizations
|
|
348
|
+
- The imported card controls must be a dictionary — POST /v1/issuing/cards. Stripe: spec:PostIssuingCards; pinned SDK Issuing/Cards.d.ts SpendingControls
|
|
349
|
+
- The imported category policy cannot both allow and block a category — POST /v1/issuing/cards. Stripe: spec:PostIssuingCards; pinned SDK Issuing/Cards.d.ts SpendingControls
|
|
350
|
+
- The treasurer compares the stored card with the rejected import — GET /v1/issuing/cards/{replacement_card}. Stripe: spec:GetIssuingCardsCard
|
|
351
|
+
- The imported country policy cannot both allow and block a country — POST /v1/issuing/cards. Stripe: spec:PostIssuingCards; pinned SDK Issuing/Cards.d.ts SpendingControls
|
|
352
|
+
- Every imported spending limit must be a dictionary — POST /v1/issuing/cards. Stripe: spec:PostIssuingCards; pinned SDK Issuing/Cards.d.ts SpendingControls
|
|
353
|
+
- The treasurer compares the stored card with the rejected import — GET /v1/issuing/cards/{replacement_card}. Stripe: spec:GetIssuingCardsCard
|
|
354
|
+
- The imported zero-dollar limit must be positive — POST /v1/issuing/cards. Stripe: spec:PostIssuingCards; pinned SDK Issuing/Cards.d.ts SpendingControls
|
|
355
|
+
- The imported fortnight interval must use Stripe’s named intervals — POST /v1/issuing/cards. Stripe: spec:PostIssuingCards; pinned SDK Issuing/Cards.d.ts SpendingControls
|
|
356
|
+
- The treasurer compares the stored card with the rejected import — GET /v1/issuing/cards/{replacement_card}. Stripe: spec:GetIssuingCardsCard
|
|
357
|
+
- An imported suspended status is replaced by Stripe’s inactive status — POST /v1/issuing/cards/{replacement_card}. Stripe: spec:PostIssuingCardsCard
|
|
358
|
+
- The issuer does not recognize the imported authorization method — POST /v1/test_helpers/issuing/authorizations. Stripe: spec:PostTestHelpersIssuingAuthorizations
|
|
359
|
+
- The treasurer reads the card after correcting the imported method name — GET /v1/issuing/cards/{replacement_card}. Stripe: spec:GetIssuingCardsCard
|
|
360
|
+
- A delayed product reply leaves a renewal request pending — POST /v1/test_helpers/issuing/authorizations. Open Autonomy: world/model/scenario.ts:60; Stripe: spec:PostTestHelpersIssuingAuthorizations
|
|
361
|
+
- The treasurer’s zero-dollar approval is refused — POST /v1/issuing/authorizations/{pending_partial}/approve. Stripe: spec:PostIssuingAuthorizationsAuthorizationApprove
|
|
362
|
+
- The treasurer approves only the $0.75 domain charge — POST /v1/issuing/authorizations/{pending_partial}/approve. Stripe: spec:PostIssuingAuthorizationsAuthorizationApprove
|
|
363
|
+
- A fixed-amount domain request waits on a delayed reply — POST /v1/test_helpers/issuing/authorizations. Open Autonomy: world/model/scenario.ts:60; Stripe: spec:PostTestHelpersIssuingAuthorizations
|
|
364
|
+
- The treasurer cannot override a fixed-amount request — POST /v1/issuing/authorizations/{pending_fixed}/approve. Stripe: spec:PostIssuingAuthorizationsAuthorizationApprove
|
|
365
|
+
- It approves the request’s fixed amount instead — POST /v1/issuing/authorizations/{pending_fixed}/approve. Open Autonomy: packages/backend/src/rails.ts:109
|
|
366
|
+
- A deployed payment template names an obsolete payment method — POST /v1/payment_intents. Stripe: spec:PostPaymentIntents
|
|
367
|
+
- Femke creates a fixed $5 alumni coupon for the next workspace — POST /v1/coupons. Dub: apps/web/lib/discounts/discount-provider-stripe.ts:136; Stripe: spec:PostCoupons
|
|
368
|
+
- Ravel starts its alumni workspace with $5 off the first month — POST /v1/checkout/sessions. Stripe: spec:PostCheckoutSessions
|
|
369
|
+
- Checkout deducts the fixed amount from the first bill — GET /v1/checkout/sessions/{alumni_cs}. Stripe: spec:GetCheckoutSessionsSession
|
|
370
|
+
- A new subscriber opens custom Checkout before a customer exists — POST /v1/checkout/sessions. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|
|
371
|
+
- The new subscriber supplies its contact and card in PaymentElement — POST https://api.stripe.com/v1/payment_pages/{anonymous_cs}/confirm. Stripe: spec PostInvoicesCreatePreview and PostInvoices documented options of Twenty workflow and Postiz billing calls
|