internal

Weekly sweep: send win-back emails to inactive Basic/Pro orgs (30-90d stale)

Weekly cron targeting paid orgs whose most-recent api_keys.last_used_at is between 30 and 90 days ago.

Audience (audit R15):

  • status='active' (skip canceled / past_due / payment_at_risk)
  • tier IN ('basic', 'pro') — free-tier excluded: free cooling-off is evaluation behavior, not churn, and over-emailing degrades sender reputation.
  • max(api_keys.last_used_at) between 30 and 90 days ago.

Upper bound (90d) prevents cold-contacting fully abandoned trials indefinitely. Frequency cap (30d) in send.py means a user stuck in the 30-90 band gets at most one win-back every 30 days, not once per weekly cron fire.

post/internal/cron/winback

Headers

x-internal-secretstring nullable

Response

Successful Response

object required

Changes

Changed in 1 of the 7 revisions of this API.13

  • b7c4b36e1fa113See the full diff
    • removed the optional property detail from the response with the 422 status

      response-optional-property-removed

    • added the required property details to the response with the 422 status

      response-required-property-added

    • added the required property error to the response with the 422 status

      response-required-property-added

    • added the required property message to the response with the 422 status

      response-required-property-added

    This revision also has 4 changes that name no endpoint, such as unreferenced schemas being removed. See the revision's changelog