---
title: "Sync From Schwab"
method: POST
path: "/api/admin/owner-portfolio/sync"
tags: ["admin-owner-portfolio"]
---

# Sync From Schwab

`POST /api/admin/owner-portfolio/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/api/admin/owner-portfolio/sync`
- Auth: HTTP bearer

Mirror the owner's live Schwab equity positions into owner_portfolio.

Read-only against Schwab (positions only — never places orders). Upserts by
symbol (preserving last_signal) and prunes holdings no longer held. JWT or
X-Cron-Secret. Used for initial population + manual refresh; the daily email
also auto-syncs before sending.

## Response `200`

Successful Response

- object

---

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