jolvAPI
jolv.app Open Jolv
  1. 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):

    1. Discovery: GET https://jolv-mcp.vercel.app/.well-known/oauth-protected-resource returns the authorisation server.
    2. The client registers itself (dynamic client registration), then opens the authorisation URL.
    3. Sign in to Jolv (MFA included), review who is asking, click Authorise.
    4. The client receives an access token, valid for one hour.

    See Authentication for the full flow and for unattended server integrations.

  2. List your funds

    cURL
    curl "https://jolv-mcp.vercel.app/v1/get_fund_synthesis" \
      -H "Authorization: Bearer $JOLV_TOKEN"
    Python
    import os, requests

    r = 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
        }
      ]
    }
  3. Walk down to a valuation sheet

    A typical fund-administrator path:

    1. GET /v1/list_campaigns?fund_id=… to find the finalised campaign of the period.
    2. GET /v1/list_portfolio?fund_id=… for the holdings and their retained fair value.
    3. GET /v1/get_valuation_fiche?company_id=…&campaign_id=… for the sheet: 100% equity, fund share, IPEV method, provision, comment.
    4. 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.