---
title: "Gems Portfolio"
method: GET
path: "/api/v1/gems/portfolio"
tags: ["Gemstones"]
---

# Gems Portfolio

`GET /api/v1/gems/portfolio`

## Request

- Base URL: `https://api.gemstoneaiapp.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.gemstoneaiapp.com/api/v1/gems/portfolio`
- Auth: HTTP bearer

GET /api/v1/gems/portfolio
Portfolio summary aggregated from the persisted estimated_value JSON
({currency, best, range_min, range_max} — written by ScanService) on the
user's saved gems. Null-safe: gems without a usable value count toward
total_gems but are skipped in the sums.

Fixed 2026-06-09: previously imported app.services.valuation_service,
which was never committed — the endpoint 500'd on every call since it
shipped (2026-04-02). Valuation lives in the persisted estimated_value
JSON since the 2026-05-21 scan rewrite.

## Response `200`

Successful Response

- PortfolioSummaryResponse: GET /gems/portfolio response. Additive-only contract: feat/2026-06-09-portfolio-drift-alerts extends this schema — never rename/remove fields, only add.
  - `total_gems` integer, required
  - `valued_gems` integer, required
  - `currency` string
  - `total_value` number, required
  - `total_value_min` number, required
  - `total_value_max` number, required

---

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