list_retention_activity
List a project's Revenue Recovery ledger — one row per notice, offer, feedback and win-back message, with the member, the channel, and whether a charge settled afterwards. Read-only. Paginated, narrowed by kind.
Read the ledger every figure of get_retention_stats
is counted from: each notice of the grace ladder, each offer shown and taken, each answer to the
cancellation question and each win-back step sent, with the member it reached, the channel that
carried it, when it went out and, once a charge settled for the member after it, converted_at and
the payment_id that counted it. Narrow to one kind.
Read-only. Never mutates anything.
A converted row preceded a payment; it did not cause it
converted_at is stamped on every open row of a member when their next charge settles. It is how
the figures count a recovery and a member won back, not a claim that the notice worked on its
own.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
project_id*stringUUID of the project whose ledger to list.
kindstringoptionalOptional: keep one kind of row, such as "payment_recovered" or "sequence_step".
limitintegeroptionalMaximum rows to return per page (1..100).
1max100pageintegeroptional1-indexed page number.
1What it returns
{ "data": [ { "id": "8f0a2b4c-6d8e-4f1a-9b2c-3d4e5f6a7b8c", "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "subscription_id": null, "member": { "id": "a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d", "name": "Ada Lovelace" }, "kind": "sequence_step", "channel": "chat", "sent_at": "2026-10-10T09:00:00+00:00", "converted_at": "2026-10-12T09:00:00+00:00", "payment_id": "c3d4e5f6-a7b8-4c9d-8e0f-1a2b3c4d5e6f", "coupon": { "id": "3b7c9d1e-5f24-4a86-9c0b-2d4e6f8a1b3c", "code": "COMEBACK20" }, "step": { "id": "b1c7e9f3-2a4d-4e86-9b0c-5d7f8a2e1c43", "sequence_id": "9d2f4b6a-1c3e-4f58-8a7b-6e5d4c3b2a19", "position": 2 }, "meta": { "sequence_id": "9d2f4b6a-1c3e-4f58-8a7b-6e5d4c3b2a19", "enrollment_id": "d4e5f6a7-b8c9-4d0e-8f1a-2b3c4d5e6f7a" } } ], "meta": { "page": 1, "limit": 25, "total": 1, "has_more": false }}kind is one of payment_failed_notice, grace_reminder, grace_final_warning,
access_suspended, access_restored, payment_recovered, offer_shown, offer_taken, feedback
or sequence_step. coupon and step are set on a win-back message; meta carries what else the
row knows by kind, or null.
How it fails
VALIDATION_FAILEDa kind that is not one of the values, or limit outside 1..100.
RESOURCE_NOT_FOUNDunknown project_id, or the project is outside the token's scope.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-subscription:view-any.
How is this guide?
Last updated on
list_cancellation_feedback
List the cancellation screens a project's members reached — the reason they gave, their own words, the offer shown and whether they took it, and where they answered. Read-only. Paginated, narrowed by reason or surface.
update_retention_settings
Change a project's Revenue Recovery settings — the grace window, the daily digest, the cancellation question and the three offers. Only the arguments present move; null clears an offer. Emits nothing.