Version
READ

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.

Read what members said on the way out. Every cancellation screen a member reached is one record: the member, the plan they were on, the reason they picked, their sentence in feedback, the offer the screen made and whether they took it, where they answered (portal or bot), and the dates of a pause they took. Narrow by reason or surface; the counts and the shares are on get_retention_stats.

Read-only. Never mutates anything.

Only members who reached the screen are here

A member whose card lapsed, or whom a connector banned, left without a screen and has no record. reason is null for a project that switched the question off.

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 cancellation screens to list.

reasonstringoptional

Optional: keep the records whose member gave this reason, such as "too_expensive" or "other".

surfacestringoptional

Optional: "portal" for screens answered on the portal, "bot" for screens answered in a connector chat.

limitintegeroptional

Maximum records to return per page (1..100).

min1max100
pageintegeroptional

1-indexed page number.

min1

What it returns

{  "data": [    {      "id": "5c1d9e2f-7a3b-4c84-9d6e-1f2a3b4c5d6e",      "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",      "subscription_id": "2e4f6a8c-1b3d-4e5f-8a9b-0c1d2e3f4a5b",      "member": { "id": "a7b8c9d0-e1f2-4a3b-8c4d-5e6f7a8b9c0d", "name": "Ada Lovelace" },      "plan": { "id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80", "name": "Premium" },      "reason": "too_expensive",      "feedback": "Rent went up this month.",      "offer_shown": "pause",      "offer_taken": "pause",      "surface": "portal",      "offer_resumes_at": "2026-11-12T09:00:00+00:00",      "offer_resumed_at": null,      "created_at": "2026-10-12T09:00:00+00:00"    }  ],  "meta": { "page": 1, "limit": 25, "total": 1, "has_more": false }}

How it fails

VALIDATION_FAILED

a reason or surface that is not one of the values, or limit outside 1..100.

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