---
title: "Api Create Paper Portfolio"
method: POST
path: "/api/paper/portfolio"
---

# Api Create Paper Portfolio

`POST /api/paper/portfolio`

## Request

- Base URL: `https://www.oxfordledge.com` (the document declares no server; this is the origin it was published from)
- URL: `https://www.oxfordledge.com/api/paper/portfolio`
- Auth: none declared

Bootstrap a paper portfolio for the authed user.

Body: {"starting_cash": 10000 | 25000 | 100000 | 1000000}
Returns: the created portfolio row, or 409 if one already exists,
         or 422 if starting_cash isn't in the preset set.

Q1 ratified 2026-05-06: starting_cash is user-selectable from a
fixed preset set; both the API + the v51 CHECK constraint enforce.

## Response `200`

Successful Response

- PaperPortfolioCreatedResponse: `POST /api/paper/portfolio` — bootstrap a paper portfolio. Returns the freshly-created `paper_portfolios` row directly (no envelope). On 409/422/503 the route raises HTTPException; the schema covers the 200 success path only. REQUIRED fields are everything the FE dashboard consumes after bootstrap (id is the primary lookup; starting_cash + current_cash drive the cash card; created_at is shown as "Opened on …"). `last_reset_at` is Optional because a freshly-created portfolio has never been reset.
  - `id` integer, required: paper_portfolios.id (primary key).
  - `user_id` integer, required: Owning user id.
  - `starting_cash` number, required: Initial cash from the preset set.
  - `current_cash` number, required: Live cash balance (== starting_cash on bootstrap).
  - `reset_count` integer, required: Lifetime reset count (0 on bootstrap).
  - `created_at` unknown, required
  - `last_reset_at` unknown

---

[API](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api.md) · [All operations](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/llms.txt) · [OpenAPI document](https://skmtc.dev/oxfordledge/apis/oxford-ledge-api/revisions/e832a1260f0b?raw)
