Skip to content

Downgrades: what moves it

Downgrades is the ARR lost from Customers who still pay, but less than in the last window.

No Play moves this yet. Today the hub runs change-plan; the proposed Play is downgrade-save (Not live yet, gaps #4).

The number

Downgrades
You, to your agent

What moved downgrades this week, and which Play moved it?

curl "https://api.sb/leaseline.app/events?where=name%20%3D%20%22Subscription.resized%22%20and%20at%20%3E%3D%20%222026-10-12%22&total=true" \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY"

# Not live yet (gaps #4)
curl -X POST https://api.sb/leaseline.app/metrics/query \
  -H "Authorization: Bearer $STARTUP_BUILDER_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"metric":"contraction-arr","shape":"trend","breakdown":"play","window":"7d"}'
import { $ } from 'startup-builder'

const { total } = await $.Event.list({ where: 'name = "Subscription.resized" and at >= "2026-10-12"', total: true })   // seat and plan changes down; Willow Park’s 10 to 6 lands Nov 1
return await $.Metric.query({ metric: 'contraction-arr', shape: 'trend', breakdown: 'play', window: '7d' })   // by the Play credited · Not live yet, gaps #4
npx startup-builder do Event.list --json '{"where":"name = \"Subscription.resized\" and at >= \"2026-10-12\"","total":true}'
npx startup-builder do Metric.query --json '{"metric":"contraction-arr","shape":"trend","breakdown":"play","window":"7d"}'   # Not live yet (gaps #4)
{
  "name": "do",
  "arguments": {
    "code": "const { total } = await $.Event.list({ where: 'name = \"Subscription.resized\" and at >= \"2026-10-12\"', total: true })   // seat and plan changes down; Willow Park’s 10 to 6 lands Nov 1\nreturn await $.Metric.query({ metric: 'contraction-arr', shape: 'trend', breakdown: 'play', window: '7d' })   // by the Play credited · Not live yet, gaps #4"
  }
}
Response200application/json
{
  "metric": {
    "$id": "https://api.sb/leaseline.app/metrics/contraction-arr",
    "$type": "Metric",
    "name": "Contraction ARR"
  },
  "week": "2026-10-19",
  "value": 0,
  "rows": [],
  "pending": [
    {
      "customer": "customers/customer_12",
      "from": 10,
      "to": 6,
      "on": "2026-11-01",
      "value": -1388
    }
  ]
}
sample · 1 Not live yetPreview

$0 ARR from downgrades · ■■■■ Clear · n 0 · next: −$1,388 ARR on Nov 1

$.Metric.query({ metric: 'contraction-arr', shape: 'trend', breakdown: 'play', window: '7d' }) · sample

Nothing moved it in the window: $0 ARR.

contraction-arr is this site’s proposal to the hub (Not live yet, gaps #4), so the figure above is a sample until the hub holds it.

Owner

AccountableFrom
customer-lead · Customer Leadthe filed bridge item, word for word

Worked by

TitleIts queue
CSMPOST /{namespace}/tasks/next on the CSM’s queue

Moved here by

HowWhere
Todaythe hub Workflow change-plan · Change a plan
Proposed Playdowngrade-save · Not live yet, gaps #4
PageMore seats and upgrades
PageWhen someone cancels
TitleCSM

The leaves

Under itMoved by
noneno leaf Metric sits under it; its Plays move it directly

Compiled, not written: edit the records it reads (metrics/bridge.ts; cap), 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.

Contents