Revenue Recovery

List the cancellation screens

curl "https://api.subscriby.net/v1/projects/7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13/retention/cancellations?reason=too_expensive&per_page=25" \
  -H "Authorization: Bearer sbt_..."

Every cancellation screen a member reached, newest first: the member, the plan, the reason they picked, their own words, the offer shown and whether they took it, where they answered, and the pause's dates where they took one. reason and surface narrow the page; sort_by takes created_at, reason, surface or offer_taken.

get/v1/projects/{project}/retention/cancellations

Request

  • Base URL: https://api.subscriby.net
  • URL: https://api.subscriby.net/v1/projects/{project}/retention/cancellations
  • Auth: HTTP bearer

Path parameters

projectstring uuid required

The project, resolved by the route binder.

Query parameters

reason'too_expensive' | 'not_using_enough' | 'not_enough_content' | 'content_not_expected' | 'found_another_community' | 'not_the_right_fit' | 'taking_a_break' | 'got_what_i_needed' | 'technical_problems' | 'signed_up_by_mistake' | 'other'

Why a member said they were cancelling. A fixed list rather than a free field, because a creator reads the breakdown on the dashboard and a free answer cannot be counted; the optional sentence a member adds travels beside the case. The same ten reasons and "Other" show on the portal and in a connector's bot, in the member's own language, and the backing values are what the webhook and the API carry; each stays short enough to ride in a bot's callback data beside the action that carries it.

Keep only the records whose member gave this reason: too_expensive, not_using_enough, not_enough_content, content_not_expected, found_another_community, not_the_right_fit, taking_a_break, got_what_i_needed, technical_problems, signed_up_by_mistake or other.

surface'portal' | 'bot'

Where a member answered the cancellation screen. Recorded so the creator can tell whether members leave from the portal or from a connector's bot, and so a bot's answer, which has no free text, is read for what it is.

Keep only the records made on the portal or in a connector chat (bot).

pageinteger

The 1-based page to return. A page past the last answers an empty data array with meta.total still filled, so a loop can stop without guessing.

per_pageinteger

Rows per page, 1 to 100. A higher value clamps to the cap silently. Defaults to 25.

sort_bystring

The column to order by. Defaults to created_at; a column the endpoint does not offer falls back to the default rather than failing.

sort_direction'asc' | 'desc'

asc or desc. Defaults to desc.

limitinteger

Legacy alias of per_page, kept for clients that predate it. per_page wins when both are sent.

Response

The page of cancellation screens, newest first, each with its member and plan.

Changes

No recorded changes to this operation across all 1 revision of this API.