Won Deals: what moves them on
Won Deals: the first paid Order, the handoff to Onboarding, and the call that starts the Customer.
A won Deal is a buyer who said yes. It becomes a Customer when the first Order is paid, and Onboarding takes it from there.
It moves on when
| To | When | The call | Event |
|---|---|---|---|
| A paying Customer | the first Order is paid | POST /{namespace}/orders/{order}/pay | Order.paid |
| Onboarding | the Won Deal starts the hub Workflow onboard-customer | POST /{namespace}/customers/{customer}/activate | Customer.activated |
Who owns it
| Title | What it does here |
|---|---|
| AE | hands over the Quote’s promises in the brief |
| Onboarding | gets the Customer to its first outcome by day 14 |
How long it sits
| Deals | Window | Median days to get here | Stall line |
|---|---|---|---|
9 | 90 days | sales cycle, Not live yet, gaps #2 | none: it is a final Deal status |
The stall line is twice the median, read from each Deal’s statusSince · sample
The call that moves it
You, to your agent
Maple Street Homes signed. Take their first payment and start onboarding. Charge nothing in this run.
curl "https://api.sb/leaseline.app/deals?where=status%20%3D%20%22Won%22%20and%20statusSince%20%3E%3D%20%222026-07-21%22&total=true" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
curl -X POST "https://api.sb/leaseline.app/orders/order_21/pay?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"
curl -X POST "https://api.sb/leaseline.app/customers/customer_47/activate?mode=try" \
-H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
-H "Content-Type: application/json" \
-d '{"offer":"offer_1"}'import { $ } from 'startup-builder'
const { deals } = await $.Deal.list({ where: 'status = "Won" and statusSince >= "2026-07-21"', total: true }) // 9 won in 90 days
await $.Order.pay({ order: 'order_21' }, { mode: 'try' }) // the first $29
return await $.Customer.activate({ customer: 'customer_47', offer: 'offer_1' }, { mode: 'try' }) // Onboarding takes it from here, by day 14
npx startup-builder do Deal.list --json '{"where":"status = \"Won\" and statusSince >= \"2026-07-21\"","total":true}'
npx startup-builder do Order.pay --json '{"order":"order_21"}' --try
npx startup-builder do Customer.activate --json '{"customer":"customer_47","offer":"offer_1"}' --try{
"name": "do",
"arguments": {
"code": "const { deals } = await $.Deal.list({ where: 'status = \"Won\" and statusSince >= \"2026-07-21\"', total: true }) // 9 won in 90 days\nawait $.Order.pay({ order: 'order_21' }, { mode: 'try' }) // the first $29\nreturn await $.Customer.activate({ customer: 'customer_47', offer: 'offer_1' }, { mode: 'try' }) // Onboarding takes it from here, by day 14",
"mode": "try"
}
}Response200
application/json{
"customer": {
"$id": "https: //api.sb/ leaseline.app/ customers/ customer_47",
"$type": "Customer",
"status": "activated",
"since": "2026-10-19T10: 12: 00Z",
"outside": true
},
"action": {
"$id": "https: //api.sb/ leaseline.app/ actions/ action_23",
"operation": "Customer.activate",
"status": "done",
"mode": "try"
}
}
samplePreviewPlays that unstick it
| Play | What it does |
|---|---|
| Run it beside the old tool | Runs a new Customer’s work beside their old tool every day, fixes each difference you caused, and books the switch when the report reads zero. |
| Product-led growth | Gives free Customers enough to reach the result twice, then shows the upgrade inside the task at the Limit, with the real Price. |
| Waitlist interviews | Interviews each Waitlist signup with your disclosed agent, admits by fit under a published cap, and sends a result built on their company. |
Compiled, not written: edit its page, then regenerate. Every step runs from a sentence or a line of code. In your words: the CRM words you know, and where each lives here.