---
title: "Cron Free Preview Downgrade"
method: POST
path: "/cron/free-preview-downgrade"
tags: ["cron"]
---

# Cron Free Preview Downgrade

`POST /cron/free-preview-downgrade`

## 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/free-preview-downgrade`
- Auth: none declared

Sweep expired 14-day no-card previews to the Free plan.

UPDATE subscriptions SET status='free', tier='free'
WHERE tier='free_preview' AND status='trialing' AND trial_end < now().

Idempotent (the WHERE never matches an already-downgraded row). Also runs
daily via APScheduler; this HTTP trigger exists for manual sweeps and
Railway Cron. 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)
