@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.
Files changed (402) hide show
  1. package/README.md +112 -207
  2. package/dist/generated/pack-facts.json +94 -0
  3. package/dist/journeys/coverage.json +596 -0
  4. package/dist/journeys/customer-life.json +6108 -0
  5. package/dist/journeys/customer-life.outline.md +371 -0
  6. package/dist/journeys/decisions.json +677 -0
  7. package/dist/journeys/demand.json +706 -0
  8. package/dist/journeys/score.json +853 -0
  9. package/dist/journeys/unreachable.json +102 -0
  10. package/dist/journeys/vendor-examples.json +8010 -0
  11. package/dist/spec/SOURCE.md +18 -0
  12. package/dist/spec/doc-examples.json +445 -0
  13. package/dist/spec/fixtures3.json.gz +0 -0
  14. package/dist/spec/openapi.json.gz +0 -0
  15. package/dist/spec/patches.json +34 -0
  16. package/dist/spec/sources.json +306 -0
  17. package/dist/src/cli.d.ts +0 -1
  18. package/dist/src/cli.js +11 -31
  19. package/dist/src/engine/after-payment.d.ts +8 -0
  20. package/dist/src/engine/after-payment.js +27 -0
  21. package/dist/src/engine/apps-secrets.d.ts +1 -0
  22. package/dist/src/engine/apps-secrets.js +3 -0
  23. package/dist/src/engine/balance.d.ts +5 -0
  24. package/dist/src/engine/balance.js +15 -0
  25. package/dist/src/engine/checkout.d.ts +24 -0
  26. package/dist/src/engine/checkout.js +30 -0
  27. package/dist/src/engine/common.d.ts +19 -0
  28. package/dist/src/engine/common.js +34 -0
  29. package/dist/src/engine/connect.d.ts +45 -0
  30. package/dist/src/engine/connect.js +108 -0
  31. package/dist/src/engine/customers.d.ts +4 -0
  32. package/dist/src/engine/customers.js +8 -0
  33. package/dist/src/engine/display.d.ts +11 -0
  34. package/dist/src/engine/display.js +13 -0
  35. package/dist/src/engine/files.d.ts +11 -0
  36. package/dist/src/engine/files.js +23 -0
  37. package/dist/src/engine/invoices.d.ts +21 -0
  38. package/dist/src/engine/invoices.js +84 -0
  39. package/dist/src/engine/issuing.d.ts +33 -0
  40. package/dist/src/engine/issuing.js +54 -0
  41. package/dist/src/engine/ledger.d.ts +8 -0
  42. package/dist/src/engine/ledger.js +8 -0
  43. package/dist/src/engine/oauth.d.ts +4 -0
  44. package/dist/src/engine/oauth.js +24 -0
  45. package/dist/src/engine/onboarding.d.ts +13 -0
  46. package/dist/src/engine/onboarding.js +42 -0
  47. package/dist/src/{stripe-params.d.ts → engine/params.d.ts} +20 -3
  48. package/dist/src/{stripe-params.js → engine/params.js} +7 -60
  49. package/dist/src/engine/payment-intents.d.ts +10 -0
  50. package/dist/src/engine/payment-intents.js +27 -0
  51. package/dist/src/engine/payment-methods.d.ts +16 -0
  52. package/dist/src/engine/payment-methods.js +22 -0
  53. package/dist/src/engine/radar.d.ts +2 -0
  54. package/dist/src/engine/radar.js +5 -0
  55. package/dist/src/engine/refunds.d.ts +1 -0
  56. package/dist/src/engine/refunds.js +3 -0
  57. package/dist/src/engine/renewals.d.ts +36 -0
  58. package/dist/src/engine/renewals.js +65 -0
  59. package/dist/src/{stripe-twin.d.ts → engine/stripe.d.ts} +12 -45
  60. package/dist/src/{stripe-twin.js → engine/stripe.js} +53 -387
  61. package/dist/src/engine/subscriptions.d.ts +11 -0
  62. package/dist/src/engine/subscriptions.js +30 -0
  63. package/dist/src/engine/transfers.d.ts +2 -0
  64. package/dist/src/engine/transfers.js +1 -0
  65. package/dist/src/{stripe-version.d.ts → engine/version.d.ts} +0 -2
  66. package/dist/src/{stripe-version.js → engine/version.js} +21 -9
  67. package/dist/src/engine/webhook-endpoints.d.ts +1 -0
  68. package/dist/src/engine/webhook-endpoints.js +12 -0
  69. package/dist/src/engine/webhooks.d.ts +31 -0
  70. package/dist/src/engine/webhooks.js +68 -0
  71. package/dist/src/fetch.d.ts +2 -0
  72. package/dist/src/fetch.js +26 -0
  73. package/dist/src/generated/surface.gen.json +1 -1
  74. package/dist/src/generated/ui.gen.json +1 -1
  75. package/dist/src/index.d.ts +5 -14
  76. package/dist/src/index.js +10 -75
  77. package/dist/src/manifest.js +478 -876
  78. package/dist/src/screens/billing-portal.d.ts +3 -0
  79. package/dist/src/screens/{portal.js → billing-portal.js} +32 -58
  80. package/dist/src/screens/checkout-js.d.ts +2 -0
  81. package/dist/src/screens/checkout-js.js +84 -0
  82. package/dist/src/screens/checkout.d.ts +2 -31
  83. package/dist/src/screens/checkout.js +32 -121
  84. package/dist/src/screens/connect-onboarding.d.ts +3 -0
  85. package/dist/src/screens/{onboarding.js → connect-onboarding.js} +38 -104
  86. package/dist/src/screens/dashboard.d.ts +3 -0
  87. package/dist/src/screens/dashboard.js +116 -0
  88. package/dist/src/screens/shared.d.ts +27 -0
  89. package/dist/src/screens/shared.js +87 -0
  90. package/dist/src/screens/stripe-js.d.ts +3 -0
  91. package/dist/src/screens/stripe-js.js +95 -0
  92. package/dist/src/semantics/account.d.ts +2 -0
  93. package/dist/src/semantics/account.js +8 -0
  94. package/dist/src/semantics/account_links.d.ts +2 -0
  95. package/dist/src/semantics/account_links.js +22 -0
  96. package/dist/src/semantics/accounts.d.ts +4 -0
  97. package/dist/src/semantics/accounts.js +40 -0
  98. package/dist/src/semantics/apps.d.ts +4 -0
  99. package/dist/src/semantics/{apps-secrets.js → apps.js} +14 -26
  100. package/dist/src/semantics/around.d.ts +2 -0
  101. package/dist/src/semantics/around.js +13 -0
  102. package/dist/src/semantics/balance.d.ts +2 -11
  103. package/dist/src/semantics/balance.js +3 -194
  104. package/dist/src/semantics/balance_transactions.d.ts +2 -0
  105. package/dist/src/semantics/balance_transactions.js +15 -0
  106. package/dist/src/semantics/billing_portal.d.ts +4 -0
  107. package/dist/src/semantics/billing_portal.js +36 -0
  108. package/dist/src/semantics/charges.d.ts +3 -28
  109. package/dist/src/semantics/charges.js +5 -202
  110. package/dist/src/semantics/checkout.d.ts +3 -20
  111. package/dist/src/semantics/checkout.js +21 -271
  112. package/dist/src/semantics/clock.d.ts +2 -0
  113. package/dist/src/semantics/clock.js +15 -0
  114. package/dist/src/semantics/coupons.d.ts +2 -6
  115. package/dist/src/semantics/coupons.js +2 -60
  116. package/dist/src/semantics/customers.d.ts +5 -6
  117. package/dist/src/semantics/customers.js +47 -413
  118. package/dist/src/semantics/doors.d.ts +23 -0
  119. package/dist/src/semantics/doors.js +73 -0
  120. package/dist/src/semantics/entitlements.d.ts +0 -2
  121. package/dist/src/semantics/entitlements.js +4 -95
  122. package/dist/src/semantics/events.d.ts +11 -0
  123. package/dist/src/semantics/events.js +31 -0
  124. package/dist/src/semantics/index.d.ts +2 -0
  125. package/dist/src/semantics/index.js +85 -0
  126. package/dist/src/semantics/invoice_payments.d.ts +2 -0
  127. package/dist/src/semantics/invoice_payments.js +12 -0
  128. package/dist/src/semantics/invoices.d.ts +11 -18
  129. package/dist/src/semantics/invoices.js +121 -440
  130. package/dist/src/semantics/issuing.d.ts +6 -13
  131. package/dist/src/semantics/issuing.js +58 -556
  132. package/dist/src/semantics/payment_intents.d.ts +3 -0
  133. package/dist/src/semantics/payment_intents.js +71 -0
  134. package/dist/src/semantics/payment_methods.d.ts +3 -0
  135. package/dist/src/semantics/payment_methods.js +15 -0
  136. package/dist/src/semantics/payouts.d.ts +3 -0
  137. package/dist/src/semantics/payouts.js +28 -0
  138. package/dist/src/semantics/prices.d.ts +4 -0
  139. package/dist/src/semantics/prices.js +37 -0
  140. package/dist/src/semantics/products.d.ts +4 -2
  141. package/dist/src/semantics/products.js +12 -138
  142. package/dist/src/semantics/promotion_codes.d.ts +3 -0
  143. package/dist/src/semantics/promotion_codes.js +35 -0
  144. package/dist/src/semantics/radar.d.ts +2 -2
  145. package/dist/src/semantics/radar.js +5 -74
  146. package/dist/src/semantics/refunds.d.ts +2 -9
  147. package/dist/src/semantics/refunds.js +3 -193
  148. package/dist/src/semantics/shared.d.ts +558 -55
  149. package/dist/src/semantics/shared.js +2070 -114
  150. package/dist/src/semantics/states.d.ts +462 -0
  151. package/dist/src/semantics/states.js +634 -0
  152. package/dist/src/semantics/subscriptions.d.ts +6 -11
  153. package/dist/src/semantics/subscriptions.js +37 -530
  154. package/dist/src/semantics/test_helpers.d.ts +3 -0
  155. package/dist/src/semantics/test_helpers.js +125 -0
  156. package/dist/src/semantics/transfers.d.ts +2 -2
  157. package/dist/src/semantics/transfers.js +6 -101
  158. package/dist/src/semantics/webhook_endpoints.d.ts +2 -0
  159. package/dist/src/semantics/webhook_endpoints.js +26 -0
  160. package/dist/src/server.d.ts +7 -0
  161. package/dist/src/server.js +7 -0
  162. package/generated/pack-facts.json +94 -0
  163. package/journeys/coverage.json +596 -0
  164. package/journeys/customer-life.json +6108 -0
  165. package/journeys/customer-life.outline.md +371 -0
  166. package/journeys/decisions.json +677 -0
  167. package/journeys/demand.json +706 -0
  168. package/journeys/score.json +853 -0
  169. package/journeys/unreachable.json +102 -0
  170. package/journeys/vendor-examples.json +8010 -0
  171. package/package.json +11 -20
  172. package/spec/SOURCE.md +18 -0
  173. package/spec/doc-examples.json +445 -0
  174. package/spec/fixtures3.json.gz +0 -0
  175. package/spec/openapi.json.gz +0 -0
  176. package/spec/patches.json +34 -0
  177. package/spec/sources.json +306 -0
  178. package/src/cli.ts +11 -28
  179. package/src/engine/after-payment.ts +29 -0
  180. package/src/engine/apps-secrets.ts +4 -0
  181. package/src/engine/balance.ts +32 -0
  182. package/src/engine/checkout.ts +39 -0
  183. package/src/engine/common.ts +49 -0
  184. package/src/engine/connect.ts +106 -0
  185. package/src/engine/customers.ts +10 -0
  186. package/src/engine/display.ts +18 -0
  187. package/src/engine/files.ts +28 -0
  188. package/src/engine/invoices.ts +102 -0
  189. package/src/engine/issuing.ts +66 -0
  190. package/src/engine/ledger.ts +48 -0
  191. package/src/engine/oauth.ts +18 -0
  192. package/src/engine/onboarding.ts +53 -0
  193. package/src/{stripe-params.ts → engine/params.ts} +7 -56
  194. package/src/engine/payment-intents.ts +32 -0
  195. package/src/engine/payment-methods.ts +24 -0
  196. package/src/engine/radar.ts +6 -0
  197. package/src/engine/refunds.ts +3 -0
  198. package/src/engine/renewals.ts +72 -0
  199. package/src/{stripe-twin.ts → engine/stripe.ts} +57 -400
  200. package/src/engine/subscriptions.ts +37 -0
  201. package/src/engine/transfers.ts +22 -0
  202. package/src/{stripe-version.ts → engine/version.ts} +19 -10
  203. package/src/engine/webhook-endpoints.ts +14 -0
  204. package/src/engine/webhooks.ts +70 -0
  205. package/src/fetch.ts +27 -0
  206. package/src/generated/surface.gen.json +1 -1
  207. package/src/generated/ui.gen.json +1 -1
  208. package/src/index.ts +10 -116
  209. package/src/manifest.ts +480 -904
  210. package/src/screens/{portal.tsx → billing-portal.tsx} +35 -42
  211. package/src/screens/checkout-js.ts +80 -0
  212. package/src/screens/checkout.tsx +32 -96
  213. package/src/screens/{onboarding.tsx → connect-onboarding.tsx} +39 -85
  214. package/src/screens/dashboard.tsx +178 -0
  215. package/src/screens/shared.tsx +84 -0
  216. package/src/screens/stripe-js.ts +102 -0
  217. package/src/semantics/account.ts +10 -0
  218. package/src/semantics/account_links.ts +20 -0
  219. package/src/semantics/accounts.ts +44 -0
  220. package/src/semantics/{apps-secrets.ts → apps.ts} +17 -33
  221. package/src/semantics/around.ts +17 -0
  222. package/src/semantics/balance.ts +6 -208
  223. package/src/semantics/balance_transactions.ts +18 -0
  224. package/src/semantics/billing_portal.ts +45 -0
  225. package/src/semantics/charges.ts +8 -212
  226. package/src/semantics/checkout.ts +25 -276
  227. package/src/semantics/clock.ts +19 -0
  228. package/src/semantics/coupons.ts +5 -68
  229. package/src/semantics/customers.ts +48 -414
  230. package/src/semantics/doors.ts +79 -0
  231. package/src/semantics/entitlements.ts +3 -94
  232. package/src/semantics/events.ts +37 -0
  233. package/src/semantics/index.ts +89 -0
  234. package/src/semantics/invoice_payments.ts +16 -0
  235. package/src/semantics/invoices.ts +112 -441
  236. package/src/semantics/issuing.ts +57 -573
  237. package/src/semantics/payment_intents.ts +76 -0
  238. package/src/semantics/payment_methods.ts +20 -0
  239. package/src/semantics/payouts.ts +29 -0
  240. package/src/semantics/prices.ts +41 -0
  241. package/src/semantics/products.ts +12 -146
  242. package/src/semantics/promotion_codes.ts +38 -0
  243. package/src/semantics/radar.ts +8 -79
  244. package/src/semantics/refunds.ts +4 -216
  245. package/src/semantics/shared.ts +2089 -135
  246. package/src/semantics/states.ts +662 -0
  247. package/src/semantics/subscriptions.ts +39 -542
  248. package/src/semantics/test_helpers.ts +119 -0
  249. package/src/semantics/transfers.ts +10 -132
  250. package/src/semantics/webhook_endpoints.ts +27 -0
  251. package/src/server.ts +7 -0
  252. package/client/dashboard-api.ts +0 -286
  253. package/client/stripe-mirror.css +0 -277
  254. package/client/stripe-mirror.tsx +0 -1559
  255. package/dist/client/dashboard-api.d.ts +0 -107
  256. package/dist/client/dashboard-api.js +0 -238
  257. package/dist/client/dashboard-api.ts +0 -286
  258. package/dist/client/stripe-mirror.bundle.js +0 -236
  259. package/dist/client/stripe-mirror.css +0 -277
  260. package/dist/client/stripe-mirror.d.ts +0 -134
  261. package/dist/client/stripe-mirror.js +0 -859
  262. package/dist/client/stripe-mirror.tsx +0 -1559
  263. package/dist/src/screens/connect-oauth.d.ts +0 -27
  264. package/dist/src/screens/connect-oauth.js +0 -414
  265. package/dist/src/screens/connect-settings.d.ts +0 -22
  266. package/dist/src/screens/connect-settings.js +0 -103
  267. package/dist/src/screens/consent-skin.d.ts +0 -4
  268. package/dist/src/screens/consent-skin.js +0 -18
  269. package/dist/src/screens/financial-connections.d.ts +0 -5
  270. package/dist/src/screens/financial-connections.js +0 -90
  271. package/dist/src/screens/identity.d.ts +0 -5
  272. package/dist/src/screens/identity.js +0 -86
  273. package/dist/src/screens/onboarding.d.ts +0 -13
  274. package/dist/src/screens/portal.d.ts +0 -5
  275. package/dist/src/screens/public-details.d.ts +0 -5
  276. package/dist/src/screens/public-details.js +0 -90
  277. package/dist/src/semantics/after-payment.d.ts +0 -22
  278. package/dist/src/semantics/after-payment.js +0 -99
  279. package/dist/src/semantics/apps-secrets.d.ts +0 -2
  280. package/dist/src/semantics/billing.d.ts +0 -2
  281. package/dist/src/semantics/billing.js +0 -220
  282. package/dist/src/semantics/connect.d.ts +0 -5
  283. package/dist/src/semantics/connect.js +0 -493
  284. package/dist/src/semantics/credit-notes.d.ts +0 -2
  285. package/dist/src/semantics/credit-notes.js +0 -172
  286. package/dist/src/semantics/disputes.d.ts +0 -2
  287. package/dist/src/semantics/disputes.js +0 -51
  288. package/dist/src/semantics/ephemeral-keys.d.ts +0 -2
  289. package/dist/src/semantics/ephemeral-keys.js +0 -34
  290. package/dist/src/semantics/files.d.ts +0 -2
  291. package/dist/src/semantics/files.js +0 -125
  292. package/dist/src/semantics/ledger.d.ts +0 -59
  293. package/dist/src/semantics/ledger.js +0 -200
  294. package/dist/src/semantics/payment-intents.d.ts +0 -18
  295. package/dist/src/semantics/payment-intents.js +0 -452
  296. package/dist/src/semantics/payment-links.d.ts +0 -2
  297. package/dist/src/semantics/payment-links.js +0 -133
  298. package/dist/src/semantics/payment-methods.d.ts +0 -20
  299. package/dist/src/semantics/payment-methods.js +0 -140
  300. package/dist/src/semantics/plans.d.ts +0 -5
  301. package/dist/src/semantics/plans.js +0 -121
  302. package/dist/src/semantics/platform.d.ts +0 -9
  303. package/dist/src/semantics/platform.js +0 -206
  304. package/dist/src/semantics/renewals.d.ts +0 -47
  305. package/dist/src/semantics/renewals.js +0 -281
  306. package/dist/src/semantics/setup-intents.d.ts +0 -2
  307. package/dist/src/semantics/setup-intents.js +0 -84
  308. package/dist/src/semantics/subscription-schedules.d.ts +0 -2
  309. package/dist/src/semantics/subscription-schedules.js +0 -119
  310. package/dist/src/semantics/tax.d.ts +0 -2
  311. package/dist/src/semantics/tax.js +0 -197
  312. package/dist/src/semantics/terminal.d.ts +0 -5
  313. package/dist/src/semantics/terminal.js +0 -182
  314. package/dist/src/semantics/test-clocks.d.ts +0 -6
  315. package/dist/src/semantics/test-clocks.js +0 -73
  316. package/dist/src/semantics/tokens.d.ts +0 -4
  317. package/dist/src/semantics/tokens.js +0 -44
  318. package/dist/src/semantics/treasury.d.ts +0 -2
  319. package/dist/src/semantics/treasury.js +0 -377
  320. package/dist/src/semantics/webhook-endpoints.d.ts +0 -3
  321. package/dist/src/semantics/webhook-endpoints.js +0 -85
  322. package/dist/src/stripe-budget.d.ts +0 -55
  323. package/dist/src/stripe-budget.js +0 -155
  324. package/dist/src/stripe-capabilities.d.ts +0 -3
  325. package/dist/src/stripe-capabilities.js +0 -5836
  326. package/dist/src/stripe-conformance.d.ts +0 -43
  327. package/dist/src/stripe-conformance.js +0 -105
  328. package/dist/src/stripe-connector.d.ts +0 -161
  329. package/dist/src/stripe-connector.js +0 -414
  330. package/dist/src/stripe-emit.d.ts +0 -2
  331. package/dist/src/stripe-emit.js +0 -145
  332. package/dist/src/stripe-events.d.ts +0 -93
  333. package/dist/src/stripe-events.js +0 -392
  334. package/dist/src/stripe-js.d.ts +0 -4
  335. package/dist/src/stripe-js.js +0 -70
  336. package/dist/src/stripe-mirror-ui.d.ts +0 -15
  337. package/dist/src/stripe-mirror-ui.js +0 -87
  338. package/dist/src/stripe-perform-harness.d.ts +0 -9
  339. package/dist/src/stripe-perform-harness.js +0 -26
  340. package/dist/src/stripe-server.d.ts +0 -33
  341. package/dist/src/stripe-server.js +0 -429
  342. package/dist/src/stripe-shared.d.ts +0 -109
  343. package/dist/src/stripe-shared.js +0 -276
  344. package/dist/src/stripe-ui-conformance.d.ts +0 -5
  345. package/dist/src/stripe-ui-conformance.js +0 -79
  346. package/dist/src/stripe-ui-structure.d.ts +0 -3
  347. package/dist/src/stripe-ui-structure.js +0 -168
  348. package/dist/test-fixtures/stripe-known-deviations.json +0 -110
  349. package/dist/test-fixtures/stripe-openapi-operations.SOURCE.md +0 -14
  350. package/dist/test-fixtures/stripe-openapi-operations.json +0 -4717
  351. package/dist/test-fixtures/stripe-schemas.SOURCE.md +0 -35
  352. package/dist/test-fixtures/stripe-schemas.json +0 -3813
  353. package/src/screens/connect-oauth.tsx +0 -400
  354. package/src/screens/connect-settings.tsx +0 -121
  355. package/src/screens/consent-skin.ts +0 -20
  356. package/src/screens/financial-connections.tsx +0 -101
  357. package/src/screens/identity.tsx +0 -96
  358. package/src/screens/public-details.tsx +0 -105
  359. package/src/semantics/after-payment.ts +0 -118
  360. package/src/semantics/billing.ts +0 -216
  361. package/src/semantics/connect.ts +0 -487
  362. package/src/semantics/credit-notes.ts +0 -168
  363. package/src/semantics/disputes.ts +0 -62
  364. package/src/semantics/ephemeral-keys.ts +0 -34
  365. package/src/semantics/files.ts +0 -143
  366. package/src/semantics/ledger.ts +0 -253
  367. package/src/semantics/payment-intents.ts +0 -463
  368. package/src/semantics/payment-links.ts +0 -148
  369. package/src/semantics/payment-methods.ts +0 -145
  370. package/src/semantics/plans.ts +0 -131
  371. package/src/semantics/platform.ts +0 -220
  372. package/src/semantics/renewals.ts +0 -279
  373. package/src/semantics/setup-intents.ts +0 -87
  374. package/src/semantics/subscription-schedules.ts +0 -129
  375. package/src/semantics/tax.ts +0 -220
  376. package/src/semantics/terminal.ts +0 -195
  377. package/src/semantics/test-clocks.ts +0 -77
  378. package/src/semantics/tokens.ts +0 -52
  379. package/src/semantics/treasury.ts +0 -383
  380. package/src/semantics/webhook-endpoints.ts +0 -87
  381. package/src/stripe-budget.ts +0 -181
  382. package/src/stripe-capabilities.ts +0 -5651
  383. package/src/stripe-conformance.ts +0 -124
  384. package/src/stripe-connector.ts +0 -462
  385. package/src/stripe-emit.ts +0 -157
  386. package/src/stripe-events.ts +0 -434
  387. package/src/stripe-js.ts +0 -70
  388. package/src/stripe-mirror-ui.ts +0 -90
  389. package/src/stripe-perform-harness.ts +0 -29
  390. package/src/stripe-server.ts +0 -393
  391. package/src/stripe-shared.ts +0 -297
  392. package/src/stripe-ui-conformance.ts +0 -88
  393. package/src/stripe-ui-structure.ts +0 -182
  394. package/test-fixtures/stripe-known-deviations.json +0 -110
  395. package/test-fixtures/stripe-openapi-operations.json +0 -4717
  396. package/test-fixtures/stripe-schemas.json +0 -3813
  397. /package/dist/src/{screens → engine}/industries.d.ts +0 -0
  398. /package/dist/src/{screens → engine}/industries.js +0 -0
  399. /package/dist/src/{semantics → engine}/test-cards.d.ts +0 -0
  400. /package/dist/src/{semantics → engine}/test-cards.js +0 -0
  401. /package/src/{screens → engine}/industries.ts +0 -0
  402. /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