Skip to content

Take a payment

Say "take a $29 payment" and get checkout on your domain, an Order and receipt per buyer, sales tax and every payment in your books.

For developers

Take a one-time payment for an Offer at a fixed Price: each buyer pays at checkout on your domain, and Stripe collects it.

For developers

Needs Startup

What you get

  • 1Offer at a one-time $29 PriceOffer
  • 1product and price on StripePrice
  • 1checkout page on your domain, card and walletsOffer
  • 1Order for each buyer, placed and paidOrder
  • 1card or wallet payment for each OrderTransaction
  • 1receipt emailed from your domainMessage
  • 1sales tax on every chargeOrder
  • 2lines in your books per charge: cash in and revenue earnedEntry

Your agent does

Offer.create → Offer.publish
You, to your agent

Take a $29 payment for setup.

Send me a link a customer can pay $29 with.

Charge $29 once for onboarding.

# 1. Offer.create
OFFER=$(curl -X POST https://api.sb/leaseline.app/offers \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"price":{"amount":29,"currency":"USD"},"interval":"once","terms":"One-time setup fee, refundable within 14 days."}' | jq -r '.offer["$id"] | split("/") | last')

# 2. Offer.publish
curl -X POST https://api.sb/leaseline.app/offers/$OFFER/publish \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'

const offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'once', terms: 'One-time setup fee, refundable within 14 days.' })
await $.Offer.publish({ offer: offer.$id })
OFFER=$(npx startup-builder do Offer.create --json '{"price":{"amount":29,"currency":"USD"},"interval":"once","terms":"One-time setup fee, refundable within 14 days."}' | jq -r '.offer["$id"] | split("/") | last')
npx startup-builder do Offer.publish --json '{"offer":"'"$OFFER"'"}'
{
  "name": "do",
  "arguments": {
    "code": "const offer = await $.Offer.create({ price: { amount: 29, currency: 'USD' }, interval: 'once', terms: 'One-time setup fee, refundable within 14 days.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
  }
}

Change it

  • Make it $49 for new buyers.
  • Refund the last payment.
  • Ask buyers for a company name at checkout.
  • Make it a refundable deposit instead.

Under the hood

Systems
Billing, Ledger, Tax
Nouns
Offer, Price, Order, Entry
Events
Offer.created, Offer.published, Order.placed, Order.paid
Stripe objects
Product, Price, Checkout Session, PaymentIntent, Charge, Tax Calculation

Each buyer's checkout places an Order, and Order.pay settles it on the Startup's own Stripe account. The charge lands in the payments balance, pending until it settles, then pays out to your bank.