---
title: "Cron Eod Price Sync"
method: POST
path: "/cron/eod-price-sync"
tags: ["cron"]
---

# Cron Eod Price Sync

`POST /cron/eod-price-sync`

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

Copy the latest price_history daily closes into screener_cache.

Pure DB→DB (no Schwab / yfinance / AlphaVantage): latest-date bars from
price_history → apply_intraday_prices proc (price + mos_pct recompute +
price_updated_at stamp; updated_at untouched). Sanity band 0.4x–2.5x vs
the cached price; refuses bars older than 7 days.

Runs automatically after the nightly 22:30 UTC price-history snapshot
(scheduler_setup.py) and is the self-heal sweep's recovery action when
screener prices are older than the latest close — the backstop for dead
Schwab auth freezing the intraday refresh (2026-07-31 incident).

## 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)
