---
title: "Cron Verdict Nudge 48H"
method: POST
path: "/cron/verdict-nudge-48h"
tags: ["cron"]
---

# Cron Verdict Nudge 48H

`POST /cron/verdict-nudge-48h`

## Request

- Base URL: `https://api.equity-rank.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.equity-rank.com/cron/verdict-nudge-48h`
- Auth: none declared

Trigger the 48h behavioral rescue email check.

Fires the "Your first model verdict is ready" email to trialing users whose
trial is ~48h old and who have NOT yet opened a stock verdict
(first_screener_run_at IS NULL). Idempotent — _claim_send_slot(uid, 48)
guarantees each user receives it at most once. Respects onboarding_opt_out.

Runs synchronously so a manual/Railway-Cron caller sees the full send result
(sent / skipped_activated / errors). Also wired into APScheduler daily at
10:00 UTC (id=verdict_nudge_48h) — this HTTP endpoint adds an out-of-process
trigger so the rescue email can be force-run, Railway-Cron-driven, and
watchdog-recoverable if in-process scheduling is interrupted by a redeploy.

Auth: X-Cron-Secret.

## Headers

- `x-cron-secret` string, nullable

## Response `200`

Successful Response

- object

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/equity-rank/apis/equity-rank-api.md) · [All operations](https://skmtc.dev/equity-rank/apis/equity-rank-api/llms.txt) · [OpenAPI document](https://skmtc.dev/equity-rank/apis/equity-rank-api/revisions/c2f2463fee33?raw)
