Sell a service
Say "sell renewal outreach as a service at $199 a month" and get a Service with its promise, an Offer, and an acceptance step before each delivery bills.
A Service sells an outcome: the work done, with a remedy when it is not. Your agents deliver it, the customer accepts each delivery, and the Offer bills.
Needs Startup
What you get
- 1service with its promise and what you owe if you miss itService
- 1Offer at $199 a monthOffer
- 1Order per delivery, with an acceptance stepOrder
- 1agent that does the workRole
- 1Portal page where the customer follows each deliveryPortal
Your agent does
You, to your agent
Sell renewal outreach as a service at $199 a month.
Do the work for my customers and charge monthly?
Turn this into a done-for-you service.
# 1. Service.create
curl -X POST https: //api.sb/ leaseline.app/ services \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"name": "Renewal outreach", "promise": "Every tenant hears about their renewal 90 days ahead, or that month is free."}'
# 2. 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": 199, "currency": "USD"}, "interval": "month", "terms": "Monthly, billed in advance. A missed notice makes that month free."}' | jq -r '.offer["$id"] | split("/ ") | last')
# 3. Offer.publish
curl -X POST https: //api.sb/ leaseline.app/ offers/ $OFFER/ publish \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'
await $.Service.create({ name: 'Renewal outreach', promise: 'Every tenant hears about their renewal 90 days ahead, or that month is free.' })
const offer = await $.Offer.create({ price: { amount: 199, currency: 'USD' }, interval: 'month', terms: 'Monthly, billed in advance. A missed notice makes that month free.' })
await $.Offer.publish({ offer: offer.$id })
npx startup-builder do Service.create --json '{"name": "Renewal outreach", "promise": "Every tenant hears about their renewal 90 days ahead, or that month is free."}'
OFFER= $(npx startup-builder do Offer.create --json '{"price": {"amount": 199, "currency": "USD"}, "interval": "month", "terms": "Monthly, billed in advance. A missed notice makes that month free."}' | jq -r '.offer["$id"] | split("/ ") | last')
npx startup-builder do Offer.publish --json '{"offer": "'"$OFFER"'"}'
{
"name": "do",
"arguments": {
"code": "await $.Service.create({ name: 'Renewal outreach', promise: 'Every tenant hears about their renewal 90 days ahead, or that month is free.' })\nconst offer = await $.Offer.create({ price: { amount: 199, currency: 'USD' }, interval: 'month', terms: 'Monthly, billed in advance. A missed notice makes that month free.' })\nreturn await $.Offer.publish({ offer: offer.$id })"
}
}
Change it
- Have a person check every notice before it goes out.
- Add a $499 tier for 500 units.
- Charge per renewal signed instead.
Under the hood
- Systems
- Service delivery, Billing
- Nouns
- Service, Offer, Order, Outcome Contract
- Events
Service.created,Offer.created,Offer.published- Stripe objects
Product,Price