Quickstart
Authorise once, then read the published NAV of your funds.
Get an access token
The API accepts OAuth 2.1 access tokens issued after consent in Jolv. The quickest way to obtain one by hand is any OAuth-capable client (Postman, Insomnia, Bruno):
- Discovery:
GET https://jolv-mcp.vercel.app/.well-known/oauth-protected-resourcereturns the authorisation server. - The client registers itself (dynamic client registration), then opens the authorisation URL.
- Sign in to Jolv (MFA included), review who is asking, click Authorise.
- The client receives an access token, valid for one hour.
See Authentication for the full flow and for unattended server integrations.
- Discovery:
List your funds
cURL curl "https://jolv-mcp.vercel.app/v1/get_fund_synthesis" \ -H "Authorization: Bearer $JOLV_TOKEN"Python import os, requestsr = requests.get( "https://jolv-mcp.vercel.app/v1/get_fund_synthesis", headers={"Authorization": f"Bearer {os.environ['JOLV_TOKEN']}"}, timeout=30, ) r.raise_for_status() for fund in r.json()["funds"]: print(fund["name"], fund["nav_as_of_date"], fund["nav_k_eur"], fund["tvpi"])
JavaScript const r = await fetch("https://jolv-mcp.vercel.app/v1/get_fund_synthesis", { headers: { Authorization:Bearer <span class="hljs-subst">${process.env.JOLV_TOKEN}</span>}, }); if (!r.ok) throw new Error((await r.json()).error.message); const { funds } = await r.json(); console.table(funds.map(f => ({ name: f.name, asOf: f.nav_as_of_date, navKEur: f.nav_k_eur, tvpi: f.tvpi })));The response is a JSON object with one entry per accessible fund:
Response { "funds": [ { "id": "6f1c…", "name": "Buyout I", "vintage_year": 2019, "published": true, "nav_as_of_date": "2025-12-31", "source_campaign_id": "a2d4…", "nav_k_eur": 84210.5, "distributed_k_eur": 12300, "cost_k_eur": 61500.2, "moic": 1.57, "tvpi": 1.57, "dpi": 0.2, "rvpi": 1.37, "net_irr_pct": 14.2 } ] }Walk down to a valuation sheet
A typical fund-administrator path:
GET /v1/list_campaigns?fund_id=…to find the finalised campaign of the period.GET /v1/list_portfolio?fund_id=…for the holdings and their retained fair value.GET /v1/get_valuation_fiche?company_id=…&campaign_id=…for the sheet: 100% equity, fund share, IPEV method, provision, comment.GET /v1/get_audit_thread?entity_id=…for the immutable audit trail of that valuation.
Every endpoint is documented, with a live playground, in the API reference.