Version
READ

get_retention_stats

Read what Revenue Recovery did on a project over a window — failed renewals, reminders, pauses, recoveries with their US dollars, win-back messages and members won back, the cancellation screens with their offers, and why members cancelled. Read-only.

Judge whether the grace window, the offers or a sequence are earning their keep before changing them: the figures the dashboard card shows, over a period preset, counted from the same ledger list_retention_activity pages. The reasons block says why members cancelled, the most given reason first with its share.

Read-only. Never mutates anything.

Two figures ignore the window

in_grace_now (members who keep access on an unpaid renewal right now) and paused_now (members paused for non-payment, waiting for a charge to settle) are the moment's figures, whatever period says.

The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.

The REST endpoint and this tool share one action, so validation, permissions and events are identical.

Annotations

Read-only

It reads and never changes anything.

Arguments

project_id*string

UUID of the project whose Revenue Recovery figures to read.

periodstringoptional

Window preset: 7d, 14d, 30d, 60d, 90d, 1y, mtd, qtd, ytd or all. Defaults to 30d. The two "right now" figures ignore it.

What it returns

{  "data": {    "period": "30d",    "range": { "from": "2026-09-12", "to": "2026-10-12" },    "failed_renewals": 14,    "reminders_sent": 9,    "access_paused": 3,    "payments_recovered": 8,    "recovered_usd": "212.00",    "access_restored": 2,    "in_grace_now": 2,    "paused_now": 1,    "winback_sent": 11,    "won_back": 2,    "cancellations": 6,    "offers_shown": 4,    "offers_taken": 1,    "reasons": [      { "reason": "too_expensive", "label": "Too expensive", "count": 3, "share_percent": 50 },      { "reason": "taking_a_break", "label": "Taking a break", "count": 2, "share_percent": 33.3 },      { "reason": "other", "label": "Other", "count": 1, "share_percent": 16.7 }    ]  }}

recovered_usd is a decimal string with two places, every recovered renewal restated in US dollars at the current rates. won_back counts passages through a sequence that ended because the member paid again; payments_recovered counts failed renewals that settled later.

How it fails

VALIDATION_FAILED

a period that is not one of the presets.

RESOURCE_NOT_FOUND

unknown project_id, or the project is outside the token's scope.

AUTHENTICATION_REQUIRED

no authenticated user on the request.

TOKEN_MISSING_ABILITY

token lacks project-subscription:view-any.

How is this guide?

Last updated on