DEV Community

member_5432fd74
member_5432fd74 Subscriber

Posted on

Pricing APIs That Do Not Lie: Line Items Beat Blended Rates

Blended rates are convenient and dishonest in the same move. A buyer sees $X / hour and assumes the unit is comparable across vendors. The unit usually is not.

If a service is a stack, the price should be a stack:

type PriceQuote = {
  currency: 'USD'
  lines: Array<{
    sku: 'direct_hours' | 'supervision' | 'training' | 'assessment' | 'travel' | 'fees'
    unit: 'hour' | 'session' | 'month' | 'one_time'
    quantity: number
    unitAmount: number
  }>
  assumptions: string[]  // setting, minimums, cancellation rules
}
Enter fullscreen mode Exit fullscreen mode

Without that shape, "cheaper" often means "incomplete."

What to show in the UI

Field Why
Line SKU Stops apple-to-orange rate comparisons
Unit + quantity Makes monthly math reproducible
Assumptions Surfaces travel, minimums, no-shows
What is excluded Prevents silent underquotes

Where this pattern shows up outside software

Healthcare private-pay quotes, agency retainers, and education support packages all fail the same way: the headline rate describes one labor type while the delivered program includes design, oversight, and setup fees. Buyers who only store the headline rate build budgets that break in month two.

A worked example of that failure mode for private-pay ABA is at How Much Does ABA Therapy Cost Without Insurance in 2026?.

If you ship a quoting surface, default to line items. Let users collapse to a blended rate only after they have seen the composition.

Special Needs Care Network operates a directory of special needs schools and therapy providers in the United States at specialneedsusa.com.

Top comments (0)