Retention Management
A project's Revenue Recovery settings as a connector's creator surface runs them — the grace window with its ladder in words, the question, the digest and the three offers with the coupons a creator may pick, read whole and saved one field at a time.
Subscriby\Connector\Core\RetentionManagement. Where Retention is
the cancellation screen as a member meets it, this is the programme's settings as the creator runs
them, for a platform that has a conversation with creators. Every call takes the CreatorRef of the
account that is talking and the ProjectRef of the project, and runs as that creator: the owner,
or a teammate under the same team permissions, with the same bounds and the same coupon rule the
dashboard applies. The details answer whether the owner's plan includes the offers, so a connector
hides what a save would not honour, and every refusal reaches you as RetentionRefused with a
stable reason.
settingsOf()
$settings = $this->retention->settingsOf($creator, $project);
$settings->projectName;
$settings->graceDays; // 7
$settings->maxGraceDays; // 30, the ceiling a window may be set to
$settings->ladderSentence; // the window and its notices in one sentence, in the creator's language
$settings->digestEnabled; // one message a day, on the days something happened
$settings->feedbackEnabled; // whether a cancelling member is asked why
$settings->offersAvailable; // false when the owner's plan lacks the offers
$settings->pauseOffered; // whether a pause is offered where the gateway can hold the charge
$settings->discountCoupon?->code; // the coupon applied to the renewals, or null
$settings->returnCoupon?->code; // the coupon handed over on the way out, or null
foreach ($settings->coupons as $coupon) { // the project's live coupons a creator may pick
$coupon->id; $coupon->code; $coupon->discount; // "20% off"
}RetentionSettingsDetails carries every setting twice over: as the stored value a settings question
edits (the days, the switch, the coupon's id) and as the sentence the core phrases from it, which a
screen prints. offersAvailable is the owner's plan speaking: the three offer settings are stored
on every plan, and a connector shows them only while it is true.
saveSettings()
use Subscriby\Connector\Data\RetentionSettingsDraft;
$settings = $this->retention->saveSettings($creator, $project, new RetentionSettingsDraft(graceDays: 10));
$settings = $this->retention->saveSettings($creator, $project, new RetentionSettingsDraft(digestEnabled: false));
$settings = $this->retention->saveSettings($creator, $project, new RetentionSettingsDraft(returnCouponId: $couponId));
$settings = $this->retention->saveSettings($creator, $project, new RetentionSettingsDraft(discountCouponId: RetentionSettingsDraft::NONE));A draft names only the fields you answered: null means "leave it as it is", so a bot that flips one
switch sends one field, and a coupon is cleared with RetentionSettingsDraft::NONE, since null
cannot mean both. The core checks the window against its bounds (invalid_settings) and the coupon
against the project's own (coupon_unknown), writes the row and answers the settings as written,
the ladder sentence re-phrased for the new window.
Refusals
Both methods throw Subscriby\Connector\Exceptions\RetentionRefused. getMessage() is the core's
sentence in the creator's language; reason is stable and yours to branch on: project_unknown
(the creator cannot manage the project, or no such project or creator exists), forbidden (a
teammate without the permission to change the project's subscriptions), invalid_settings and
coupon_unknown. A surface treats project_unknown as missing information and relays the rest.
What is not here
The win-back sequences, the figures, the cancellation screens and the activity ledger stay the
dashboard's, the REST API's and the MCP tools'; a conversation has no screen for them. Nothing here
reads as nobody: a creator surface reads what the creator may read, and a member surface uses
Retention.
Read it fresh
Details are computed when you ask; park nothing across two taps but the project ref. The dashboard, the REST API and another connector may change the settings between them.
How is this guide?
Last updated on
Retention
Revenue Recovery's cancellation screen as a connector's member surface runs it — the question and the one offer in the core's words, the reason and the note written down, the offer taken or passed on, and every refusal with a stable reason.
Partner Program
The platform's Partner Program as a connector's creator surface shows it — where a creator stands with the programme in the core's words, their referrals, commissions and payouts paged, their commitments with a proof sent and one added later, the payout rails and how they want to be paid, and the terms accepted.