Day-1 nudge email to stalled sign-ups, dry run by default (POST) — cronstalledsignupnudgepost
const url = 'https://example.com/api/cron/stalled-signup-nudge';const options = {method: 'POST'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://example.com/api/cron/stalled-signup-nudgeSame as GET. A JSON body dry_run is read only when the query string has
none. Protected by CRON_SECRET via the x-cron-secret header.
Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”0 runs live; anything else, or absent, is a dry run.
Responses
Section titled “ Responses ”Nudge run counts
object
False on any error.
True unless the caller sent dry_run=0.
Dry run only — users a live tick would claim now; null on a live run or a failed preview.
Users claimed by this run.
Nudges accepted by Mailgun.
Claimed users deliberately not emailed (E2E identities, or no longer eligible at send time).
Definite pre-delivery failures; retried after the lease until the attempt ceiling.
Sends whose delivery is unknown (timeout/abort); terminal, never retried.
Claimed users not attempted this run (the circuit breaker after a failed or unknown send, or the 90s send deadline); left pending and re-claimed after the lease.
Failures of any kind (preview, claim, send, or outcome bookkeeping).
Missing or invalid CRON_SECRET