Make a custom plan for one customer
Say "make this customer a custom plan at $24,000 a year" and get a private Offer, a Quote with an accept link and an invoice on their terms.
For developers
A custom plan is a private Offer that one buyer sees, sent as a Quote. The buyer accepts it, and the Agreement and invoice follow from the same terms.
For developers
Needs Charge monthly · Open a bank account
What you get
- 1private Offer at $24,000 a year that only Harbor Residential seesOffer
- 1Quote with its own accept link, valid until November 30Quote
- 1order form the Contracts Manager signs, within the amount it may sign forAgreement
- 1yearly invoice due in 30 days, with their purchase order numberInvoice
Your agent does
You, to your agent
Make Harbor Residential a custom plan at $24,000 a year.
Quote an enterprise deal.
Give one buyer its own private price.
# 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": 24000, "currency": "USD"}, "interval": "year", "privateTo": "organization_harbor", "terms": "Yearly, invoiced net 30. Up to 4, 000 units, single sign-on and 99.9% monthly uptime."}' | jq -r '.offer["$id"] | split("/ ") | last')
# 2. Quote.create
QUOTE= $(curl -X POST https: //api.sb/ leaseline.app/ quotes \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/ json" \
-d '{"total": {"amount": 24000, "currency": "USD"}, "validUntil": "2026-11-30", "lines": [{"offer": "'"$OFFER"'", "quantity": 1}], "paymentTerms": {"collection": "send", "terms": 30, "purchaseOrder": "PO-2291"}}' | jq -r '.quote["$id"] | split("/ ") | last')
# 3. Quote.send
curl -X POST https: //api.sb/ leaseline.app/ quotes/ $QUOTE/ send \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
import { $ } from 'startup-builder'
const offer = await $.Offer.create({ price: { amount: 24000, currency: 'USD' }, interval: 'year', privateTo: 'organization_harbor', terms: 'Yearly, invoiced net 30. Up to 4, 000 units, single sign-on and 99.9% monthly uptime.' })
const quote = await $.Quote.create({ total: { amount: 24000, currency: 'USD' }, validUntil: '2026-11-30', lines: [{ offer: offer.$id, quantity: 1 }], paymentTerms: { collection: 'send', terms: 30, purchaseOrder: 'PO-2291' } })
await $.Quote.send({ quote: quote.$id })
OFFER= $(npx startup-builder do Offer.create --json '{"price": {"amount": 24000, "currency": "USD"}, "interval": "year", "privateTo": "organization_harbor", "terms": "Yearly, invoiced net 30. Up to 4, 000 units, single sign-on and 99.9% monthly uptime."}' | jq -r '.offer["$id"] | split("/ ") | last')
QUOTE= $(npx startup-builder do Quote.create --json '{"total": {"amount": 24000, "currency": "USD"}, "validUntil": "2026-11-30", "lines": [{"offer": "'"$OFFER"'", "quantity": 1}], "paymentTerms": {"collection": "send", "terms": 30, "purchaseOrder": "PO-2291"}}' | jq -r '.quote["$id"] | split("/ ") | last')
npx startup-builder do Quote.send --json '{"quote": "'"$QUOTE"'"}'
{
"name": "do",
"arguments": {
"code": "const offer = await $.Offer.create({ price: { amount: 24000, currency: 'USD' }, interval: 'year', privateTo: 'organization_harbor', terms: 'Yearly, invoiced net 30. Up to 4, 000 units, single sign-on and 99.9% monthly uptime.' })\nconst quote = await $.Quote.create({ total: { amount: 24000, currency: 'USD' }, validUntil: '2026-11-30', lines: [{ offer: offer.$id, quantity: 1 }], paymentTerms: { collection: 'send', terms: 30, purchaseOrder: 'PO-2291' } })\nreturn await $.Quote.send({ quote: quote.$id })"
}
}
Change it
- Give them 10% off if they sign by Friday.
- Split it into two years at $22,000 and $26,000.
- Let them pay by card instead.
Under the hood
- Systems
- CRM, Billing
- Nouns
- Offer, Quote, Agreement, Invoice
- Events
Offer.created,Quote.sent,Quote.accepted- Stripe objects
Quote,Invoice