{"id":"bumpgrade-checkout-offer-source-data","updatedAt":"2026-05-19","status":"post-purchase-decision-ready","issue":117,"parentIssue":15,"generatedFrom":"src/lib/checkout-offers.ts","routes":["/offers/source-data","/commerce/checkout/success","/api/commerce/post-purchase-decisions","/commerce/post-purchase","/offers/indie-launch-stack"],"stableIds":["checkoutOfferStackId","offerId","orderBumpId","upsellId","downsellId","checkoutRevisionId","postPurchaseDecisionId","agentActionId"],"sandboxCheckout":{"endpoint":"/api/commerce/checkout","successPage":"/commerce/checkout/success","webhook":"/api/stripe/webhook","confirmationRequired":true,"supportsOrderBumps":true,"supportsReferralAttributionEvidence":true,"allowedOrderBumpPriceIds":["price-launch-checklist-bump-usd"],"rawStripeIdsIncluded":false,"liveModeEnabled":false},"checkoutSuccess":{"issue":133,"route":"/commerce/checkout/success","status":"webhook-gated","reads":"/api/commerce/post-purchase-decisions","opensPostPurchaseOnlyWhenEligible":true,"rawStripeIdsIncluded":false,"privateDataIncluded":false},"postPurchaseDecisions":{"id":"post-purchase-decision-contract","status":"non-billing-decision-ready","issue":117,"parentIssue":15,"relatedIssues":[34,81,99,101,111,113,115],"apiRoute":"/api/commerce/post-purchase-decisions","routePrefix":"/commerce/post-purchase","confirmationText":"Record non-billing post-purchase decision for Bumpgrade checkout","eligibleCheckoutStatuses":["paid","completed"],"allowedDecisions":[{"decisionKind":"accept_upsell_follow_up","presentedOfferId":"offer-upsell-launch-accelerator","billingMutationCreated":false},{"decisionKind":"decline_upsell","presentedOfferId":"offer-upsell-launch-accelerator","billingMutationCreated":false},{"decisionKind":"accept_downsell_follow_up","presentedOfferId":"offer-downsell-launch-review","billingMutationCreated":false},{"decisionKind":"decline_downsell","presentedOfferId":"offer-downsell-launch-review","billingMutationCreated":false}],"publicSafeFields":["decisionId","checkoutIntentId","offerStackId","presentedOfferId","decisionKind","checkoutStatus","checkoutUpdatedAt","aggregateDecisionCounts"],"serverPrivateFields":["idempotency_key","audit_correlation_id","raw Stripe identifiers","buyer email","payment method","private checkout metadata"],"writeBoundary":"Issue #117 can record non-billing post-purchase upsell/downsell decisions for trusted checkout intents. It cannot create Stripe charges, PaymentIntents, subscriptions, fulfillment, entitlement grants, payable commissions, payout state, tax records, partner notifications, or direct agent billing writes."},"writeBoundary":"Issue #99 allows a confirmed sandbox Checkout Session start with the seeded primary offer and constrained order bump. Issue #111 allows eligible referral click IDs to be attached as checkout attribution evidence. Issue #113 allows review-only commission ledger evidence from trusted checkout attribution. Issue #115 allows owner-gated review, hold, and reversal actions for that ledger evidence without payout mutation. Issue #117 allows non-billing post-purchase upsell/downsell decision evidence after trusted checkout state. Charging post-purchase upsells, changing prices, publishing offer copy, granting fulfillment, live billing, payable commission writes, payout mutation, and direct agent writes require future confirmed-write APIs with actor identity, exact confirmation, idempotency, stale-state checks, audit correlation, redaction, owner review, reversal controls, and webhook evidence.","stacks":[{"id":"checkout-stack-indie-launch-sandbox","slug":"indie-launch-stack","title":"Indie launch checkout offer stack","status":"sandbox_checkout_ready","issue":117,"parentIssue":15,"linkedFunnelId":"funnel-indie-launch-sandbox","linkedFunnelRoute":"/funnels/indie-launch-sandbox","sourceDataRoute":"/offers/source-data","previewRoute":"/offers/indie-launch-stack","checkoutContractRoute":"/commerce/source-data","checkoutEndpoint":"/api/commerce/checkout","postPurchaseDecisionEndpoint":"/api/commerce/post-purchase-decisions","postPurchaseRoutePrefix":"/commerce/post-purchase","webhookEndpoint":"/api/stripe/webhook","revisionId":"checkout-offer-revision-indie-launch-stack-2026-05-19-post-purchase-decisions","summary":"A checkout offer stack with a primary product, optional order bump, post-purchase upsell path, referral attribution, and product delivery handoff.","primaryOffer":{"id":"offer-primary-sandbox-launch-pass","kind":"primary","title":"Bumpgrade launch pass","slug":"sandbox-launch-pass","priceLabel":"$9 one-time payment","unitAmountCents":900,"currency":"usd","productId":"product-bumpgrade-sandbox-launch-pass","priceId":"price-bumpgrade-sandbox-launch-pass-usd","customerPromise":"Get the launch pass and move into the launch workspace setup path.","placement":"Primary checkout line item","copyIntent":"Explain what the launch pass gives the buyer before checkout starts.","agentEditable":true},"orderBumps":[{"id":"offer-bump-launch-checklist","kind":"order_bump","title":"Launch checklist bump","slug":"launch-checklist-bump","priceLabel":"$19 bump","unitAmountCents":1900,"currency":"usd","productId":"product-launch-checklist-bump","priceId":"price-launch-checklist-bump-usd","customerPromise":"Add a concise implementation checklist before checkout without changing the primary product.","placement":"Pre-payment order bump beside the primary checkout confirmation.","copyIntent":"Increase basket size with a relevant add-on while keeping the customer in the same checkout decision.","agentEditable":true}],"postPurchasePath":{"id":"post-purchase-path-launch-acceleration","trigger":"checkout.session.completed","startsAfter":"Primary checkout success and webhook evidence","expiresAfterMinutes":30,"offers":[{"id":"offer-upsell-launch-accelerator","kind":"upsell","title":"Launch accelerator upsell","slug":"launch-accelerator-upsell","priceLabel":"$199 upsell","unitAmountCents":19900,"currency":"usd","productId":"product-launch-accelerator-upsell","priceId":"price-launch-accelerator-upsell-usd","customerPromise":"Offer a time-boxed implementation package immediately after the first purchase.","placement":"Post-purchase upsell after completed checkout.","copyIntent":"Present a limited follow-on offer without confusing the first purchase.","agentEditable":true},{"id":"offer-downsell-launch-review","kind":"downsell","title":"Launch review downsell","slug":"launch-review-downsell","priceLabel":"$49 downsell","unitAmountCents":4900,"currency":"usd","productId":"product-launch-review-downsell","priceId":"price-launch-review-downsell-usd","customerPromise":"Offer a lighter review option if the upsell is declined.","placement":"Fallback downsell after the upsell decision.","copyIntent":"Keep the follow-up relevant and lower commitment without hidden recurring billing.","agentEditable":true}]},"confirmation":{"required":true,"checkoutText":"Create checkout for Bumpgrade launch pass at 9.00 USD"},"writeBoundary":"Issue #99 allows a confirmed sandbox Checkout Session start with the seeded primary offer and constrained order bump. Issue #111 allows eligible referral click IDs to be attached as checkout attribution evidence. Issue #113 allows review-only commission ledger evidence from trusted checkout attribution. Issue #115 allows owner-gated review, hold, and reversal actions for that ledger evidence without payout mutation. Issue #117 allows non-billing post-purchase upsell/downsell decision evidence after trusted checkout state. Charging post-purchase upsells, changing prices, publishing offer copy, granting fulfillment, live billing, payable commission writes, payout mutation, and direct agent writes require future confirmed-write APIs with actor identity, exact confirmation, idempotency, stale-state checks, audit correlation, redaction, owner review, reversal controls, and webhook evidence.","validation":["/offers/source-data returns the seeded primary offer, order bump, upsell, and downsell records.","/offers/indie-launch-stack renders the checkout-offer preview and sandbox checkout start panel.","/api/commerce/checkout accepts the seeded order bump in sandbox/test mode and returns redacted responses.","/api/commerce/checkout accepts eligible referral click IDs and returns public-safe attribution evidence.","/api/affiliates/commission-ledger can create non-payable commission evidence from trusted checkout attribution.","/api/admin/affiliates/commission-ledger/actions can apply owner-gated review/reversal actions without payout mutation.","/commerce/checkout/success polls the redacted post-purchase contract and gates its CTA on trusted webhook state.","/api/commerce/post-purchase-decisions can record non-billing upsell/downsell follow-up decisions from trusted checkout state.","/agent-docs/source-data lists the checkout-offer read contract for future MCP resources."]}],"caveat":"This contract proves offer-stack read semantics, a confirmed sandbox checkout start for the seeded primary offer plus constrained order bump, optional referral-click attribution evidence, review-only commission ledger evidence, owner-gated review/reversal actions, and non-billing post-purchase upsell/downsell decision evidence. It does not enable live billing, one-click upsell charging, fulfillment, price mutation, payable commission writes, payout mutation, partner notifications, tax records, or direct confirmed-write agent APIs.","postPurchaseDecisionSummary":{"status":"available","aggregateCounts":[{"offer_stack_id":"checkout-stack-indie-launch-sandbox","presented_offer_id":"offer-upsell-launch-accelerator","decision_kind":"accept_upsell_follow_up","total_decisions":1,"last_created_at":1779177215}],"rawRowsIncluded":false,"privateDataIncluded":false,"billingMutationsIncluded":false,"fulfillmentRowsIncluded":false,"entitlementRowsIncluded":false}}