---
title: "The full portfolio snapshot"
method: GET
path: "/api/v1/portfolio"
tags: ["Portfolio"]
---

# The full portfolio snapshot

`GET /api/v1/portfolio`

## Request

- Base URL: `http://localhost:5180`
- URL: `http://localhost:5180/api/v1/portfolio`
- Auth: API key in cookie `better-auth.session_token`

Everything the client store holds. A first visit provisions a fresh demo portfolio under the signed-in owner, so this never answers empty. A read that sends back the `ETag` of an earlier one as `If-None-Match` is answered 304 with no body when nothing it holds has changed.

## Response `200`

The signed-in owner’s whole portfolio, with an `ETag` over what it holds.

- object
  - `ok` unknown, required
  - `data` object, required
    - `schemaVersion` number, required: Bumped when a collection is added. The store migrates on read.
    - `today` string, required: A calendar date, `YYYY-MM-DD`.
    - `generatedAt` string, required: ISO 8601 timestamp.
    - `messagesCursor` string, required: Send it as `after` to `GET /messages/since` to hear of every message filed after this read, and none it already holds.
    - `historyFrom` string, required: The first day `db` holds every invoice, payment, bank line and match from. Anything older is read from `/portfolio/history`, except what is still open, which is always here.
    - `db` unknown, required
  - `meta` object, required
    - `requestId` string, required: Echoed in the x-request-id header. Quote it in a bug report.

## Other responses

- `304`: Sent `If-None-Match` with the tag of the last read, and nothing it holds has changed since. No body.

---

[API](https://skmtc.dev/dardaris/apis/dardaris-api.md) · [All operations](https://skmtc.dev/dardaris/apis/dardaris-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dardaris/apis/dardaris-api/revisions/4aff33835c73?raw)
