WinBackCard: {
    attribution: string;
    body: string;
    cta: string;
    endsAt?: string;
    guildId: string;
    icon: string | null;
    inviteUrl: string;
    key: string;
    leftAt: string;
    name: string;
    percentOff?: number;
    saved: {
        creators: number;
        features: string[];
    };
    startsAt?: string;
    title: string;
    trialDays?: number;
    variant: string;
}

A win-back card. Render title / body / cta (copy already filled in: {server}, {creators}), the server's icon, what is still saved (saved.creators, up to 3 saved.features names) and a button to inviteUrl (the bot invite with this server pre-selected). Send click on the button and dismiss on the X. attribution goes into a later checkout.

Type declaration

  • attribution: string
  • body: string
  • cta: string
  • OptionalendsAt?: string
  • guildId: string
  • icon: string | null
  • inviteUrl: string
  • key: string
  • leftAt: string
  • name: string
  • OptionalpercentOff?: number

    A timed discount: show "{percentOff}% off" with a countdown to endsAt (gone = window over). OR trialDays: show "start with N days free" (first subscription only - never promise it). Either way, after the re-add, keep key and send promo: key + attributionSource: attribution on that server's checkout.

  • saved: {
        creators: number;
        features: string[];
    }
    • creators: number
    • features: string[]
  • OptionalstartsAt?: string
  • title: string
  • OptionaltrialDays?: number
  • variant: string