Skip to content

Checkout

Checkout takes payment on a Startup’s own Domain through a hosted checkout page, payment links, a pricing table and an embedded payment form.

Checkout takes payment for an Offer on the Startup’s own Domain, from a hosted page, a payment link, a pricing table or an embedded form. Each one places an Order or starts a Subscription, and Stripe moves the money.

Contract

Offer.publish puts one Offer on all of them at once. Each shows the same Price, terms, tax and renewal date, under the Startup’s Brand.

Way to buyWhere it runsBuyer’s call
Hosted checkoutA page on the Startup’s Domain, behind every buy buttonOrder.place or Offer.subscribe
Payment linkOne shareable address per Offer, for an email, a chat or an invoice reminderOrder.place or Offer.subscribe
Pricing tableThe PriceTable component on any Page of the SiteOrder.place or Offer.subscribe
Embedded formInside the Startup’s own App, for an upgrade without leaving itOffer.subscribe
Agent buyersA priced call that answers 402 with the Price, paid under a MandateMandate.spend

Hosted checkout, payment links, the pricing table and the embedded form run the same four steps, so a buyer pays the same way everywhere.

StepWhat happensCall
1. PlaceThe buyer sees the Price, terms, tax and any trial or renewal date before paying.Order.place
2. ScreenStripe scores the payment, and the risk Policy allows, authenticates, holds or blocks it.Order.screen
3. PayThe charge runs when the buyer confirms, on the Startup’s own Stripe account as seller of record.Order.pay
4. GrantThe Offer’s Entitlements turn on, and the buyer, now a Customer, can sign in to the Portal.Order.fulfill
RuleDetail
Payment detailsStripe’s embedded form takes card and bank details directly, so the Startup never holds a card number; PaymentSource.add saves one as a Payment Source.
TaxStripe Tax computes tax at Order.place from Customer.billingAddress and Customer.taxIds, on the Startup’s own account; see Tax calculation.
Promotion codesOrder.place and Offer.subscribe take a promotionCode, which applies its Coupon when the Coupon covers the Offer.
TrialsOffer.trial starts a free period of days, with or without a card up front.
QuantityOffer.subscribe takes a quantity, such as 12 members, and bills the Price per unit.
Prepaid creditAn Offer with Offer.credit issues a paid Credit Grant when Order.pay succeeds.
TermsOffer.terms, refund rights included, show before payment and stay attached to the Order.
Test environmentIn test, every way to buy takes Stripe’s test cards through Order.pay, and no money moves.

Verbs

Interfaces

Example

TypeScript
import { $ } from 'startup-builder'

// shiftnote.app sells a $99 setup pack once. `try` returns the surfaces publishing creates, and changes nothing.
await $.Offer.publish({ offer: 'offer_setup_pack' }, { mode: 'try' })
await $.Offer.publish({ offer: 'offer_setup_pack' })

// A clinic manager opens the payment link on shiftnote.app and types CLINIC20: $79.20 plus tax.
// Each paid Order turns on the pack's Entitlements.
$.on('Order.paid', async (event) => {
  await $.Order.fulfill({ order: event.data.order.$id })
})

// End of the day: every Order checkout took, largest first.
const orders = await $.Order.list({ where: "status = 'paid'", sort: '-total' })