Skip to content

epic: API plan-limit upgrade lifecycle — detect → notify → self-serve upgrade (no auto-charge, no silent throttle) #4635

Description

@koala73

Problem

API customers who exceed their plan caps have no consent-based path today. We cannot auto-move them to a pricier plan (that charges them without consent), and there's no way to notify them or let them self-serve upgrade. So the only current outcomes are bad: silently throttle them (once #3199 enforcement flips on) or surprise-charge them. The right lifecycle: detect → notify → offer self-serve upgrade → customer upgrades OR reduces traffic (their choice).

Surfaced concretely: the #3199 shadow-audit found 3 active api_starter customers steadily over their caps (e.g. user_3CUolmnQ at 268/min·4,016/day) — Business-scale usage on a Starter plan — with no way to move them up short of a manual, non-consensual Dodo-dashboard edit.

Lifecycle / children

  1. Detect + notify (#NOTIF) — spot accounts approaching/over caps from usage telemetry (wm_api_usage / fix(api): P1 — enforce per-tier API limits (Phase 1: per-account burst + usage meter + safety ceiling) #3199 meter) and email/in-app them with an upgrade CTA. No silent throttle, no auto-charge.
  2. Self-serve upgrade mechanism (gap: no self-serve plan upgrade/change flow for existing subscribers (Starter→Business; blocks #3199 enforce + misses revenue) #4634) — the "way to upgrade" the notification points to (Dodo portal plan-switch, in-app upgrade, or checkout-upgrade).
  3. Self-limit — a first-class valid outcome; just needs honest messaging (usage vs cap), no build.

Relationship to existing work

Product decisions to resolve in planning (ce-brainstorm)

Definition of done (epic)

A customer who crosses their plan caps is notified with a clear, honest message and a working self-serve path to upgrade — and can equally choose to reduce traffic — with no auto-charge and no silent throttle. This unblocks the #3199 enforce flip.

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium priority, schedule when capacity allowsepicUmbrella tracking issue for multiple related child issues

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions