---
title: "Cron Intraday Price Refresh"
method: POST
path: "/cron/intraday-price-refresh"
tags: ["cron"]
---

# Cron Intraday Price Refresh

`POST /cron/intraday-price-refresh`

## 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/intraday-price-refresh`
- Auth: none declared

Intraday screener_cache price refresh — Schwab batch quotes only.

Pulls real-time quotes for the full screener_cache universe from Schwab
(free, already the primary live-quote source) and applies them via the
apply_intraday_prices proc (mig 135), which recomputes mos_pct from the
stored consensus_fair_value so price and MoS stay algebraically consistent.
updated_at is untouched (batch-freshness semantics preserved); each applied
tick stamps price_updated_at.

Schedule: every 15 min, 13:30–20:00 UTC Mon–Fri (scheduler_setup.py).
Degrades gracefully — Schwab unconfigured/auth-dead → in-window top-of-hour
ticks (and in-window force=true) sweep yfinance instead (~39 chunked
yf.download calls, ~15-min-delayed quotes, same sanity band + proc); the
quarter ticks in between return status=skipped and the last applied
prices remain in place.

Isolated infrastructure: Schwab primary, yfinance fallback only (no
AlphaVantage quota, no screener batch).

Query params:
  force: bypass the market-hours window guard (manual/verification runs).

## Query parameters

- `force` boolean

## Headers

- `x-cron-secret` string, nullable

## Response `202`

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)
