> ## Documentation Index
> Fetch the complete documentation index at: https://ormaprotocol.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# GET /api/vaults/:vaultId/nav — Unit NAV for a Facility

> Returns per-unit NAV for one facility: net-of-loss held value, naive reported value, divergence in basis points, and raw source fields for recomputation.

Use this endpoint to get the current per-unit value of a lending vault's share token, keyed by vault ID. This is the stable, small document that a share token's own metadata points at. Both the naive NAV (what `AssetsTotal / sharesOutstanding` would report) and the correct NAV (net of declared loss) are returned together, so you can see exactly what the obvious computation would have told you and how far it diverges from recoverable value.

## Parameters

<ParamField path="vaultId" type="string" required>
  64-character hex object ID of the `Vault` ledger entry. Case insensitive.
</ParamField>

This route sends `Cache-Control: public, max-age=4` and `Access-Control-Allow-Origin: *`. It is designed to be called by parties with no prior relationship to Orma — any holder of vault shares can use it directly.

## Request

```bash theme={null}
curl -s http://localhost:8787/api/vaults/5763707D11EA19D1B5FF04E4EBA4F9336057955CDE65B725D1FF3EF2A96CB0E5/nav
```

## Response

```json theme={null}
{
  "serverTime": "2026-09-12T22:20:22Z",
  "ledgerIndex": 5263343,
  "schema": "orma.nav/1",
  "asOf": "2026-09-12T22:20:22Z",
  "instrument": {
    "kind": "vault-share",
    "vaultId": "5763707D11EA19D1B5FF04E4EBA4F9336057955CDE65B725D1FF3EF2A96CB0E5",
    "shareMptId": "000000014D667775372D5B78E07FFF294678C7F9CE82AFBC",
    "unitsOutstanding": "51000000",
    "asset": { "kind": "XRP", "currency": "XRP", "issuer": null, "mptIssuanceId": null },
    "vaultKind": "ClosedEnded",
    "phase": "Investment",
    "redemptionAt": "2026-09-13T15:11:47Z"
  },
  "unitValue": {
    "held": "0.803922",
    "reported": "1.000000",
    "divergenceBps": 1961,
    "basis": "assets net of recognised loss, divided by units outstanding"
  },
  "valuation": {
    "currency": "XRP",
    "scale": 6,
    "perUnitHeld": "0.803922",
    "perUnitReported": "1.000000"
  },
  "assessment": {
    "grade": "AA",
    "gradeNumeric": 89,
    "methodVersion": "1.0.0",
    "advisory": true
  },
  "provenance": {
    "network": "devnet",
    "source": "devnet",
    "assetsTotal": "51000000",
    "lossUnrealized": "10000000",
    "unitsOutstanding": "51000000",
    "recompute": "(assetsTotal - lossUnrealized) / unitsOutstanding",
    "buildVersion": "3.4.0-rc5"
  }
}
```

## Response Fields

<ResponseField name="schema" type="string">
  Document schema identifier. Currently `"orma.nav/1"`. Fields may be added in future minor versions; nothing will be renamed, retyped, or removed.
</ResponseField>

<ResponseField name="asOf" type="string">
  ISO 8601 ledger close time for this valuation. Same as `serverTime`.
</ResponseField>

<ResponseField name="instrument" type="object">
  Identifies the instrument being valued.

  <Expandable title="instrument fields">
    <ResponseField name="kind" type="string">
      Always `"vault-share"` for this route.
    </ResponseField>

    <ResponseField name="vaultId" type="string">
      64-character hex vault object ID.
    </ResponseField>

    <ResponseField name="shareMptId" type="string">
      48-character hex MPT issuance ID of the share token.
    </ResponseField>

    <ResponseField name="unitsOutstanding" type="string">
      Total share units in circulation, in drops.
    </ResponseField>

    <ResponseField name="vaultKind" type="string">
      `"OpenEnded"` or `"ClosedEnded"`.
    </ResponseField>

    <ResponseField name="phase" type="string">
      Current vault lifecycle phase.
    </ResponseField>

    <ResponseField name="redemptionAt" type="string">
      Scheduled redemption date. `null` for open-ended vaults.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="unitValue" type="object">
  The two NAV readings and the gap between them.

  <Expandable title="unitValue fields">
    <ResponseField name="held" type="string">
      Correct per-unit value: `(assetsTotal - lossUnrealized) / unitsOutstanding`.
    </ResponseField>

    <ResponseField name="reported" type="string">
      Naive per-unit value: `assetsTotal / unitsOutstanding`. What a tool reading only `AssetsTotal` would report.
    </ResponseField>

    <ResponseField name="divergenceBps" type="number">
      Basis-point gap between `reported` and `held`, rounded half-up. Zero until a loss is declared.
    </ResponseField>

    <ResponseField name="basis" type="string">
      Plain-English description of the computation method.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="valuation" type="object">
  Same values as `unitValue`, presented with explicit currency and scale metadata for machine consumption.
</ResponseField>

<ResponseField name="assessment" type="object">
  Credit grade for this facility.

  <Expandable title="assessment fields">
    <ResponseField name="grade" type="string">
      Letter grade from `"AAA"` to `"D"`.
    </ResponseField>

    <ResponseField name="gradeNumeric" type="number">
      Integer mapping of the grade.
    </ResponseField>

    <ResponseField name="advisory" type="boolean">
      Always `true`. The valuation is a measurement; the grade is an opinion. A grade computation failure must never suppress the valuation.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="provenance" type="object">
  The three ledger fields used to compute `held`, so you can recompute it without trusting Orma, plus network context fields.

  <Expandable title="provenance fields">
    <ResponseField name="network" type="string">
      Network identifier, currently always `"devnet"`.
    </ResponseField>

    <ResponseField name="source" type="string">
      Data source: `"devnet"` for live reads, `"fixtures"` for the recorded ring.
    </ResponseField>

    <ResponseField name="assetsTotal" type="string">
      `Vault.AssetsTotal` in drops.
    </ResponseField>

    <ResponseField name="lossUnrealized" type="string">
      `Vault.LossUnrealized` in drops. `"0"` when the ledger omits the field.
    </ResponseField>

    <ResponseField name="unitsOutstanding" type="string">
      `MPTokenIssuance.OutstandingAmount` in drops.
    </ResponseField>

    <ResponseField name="recompute" type="string">
      The formula as a string: `"(assetsTotal - lossUnrealized) / unitsOutstanding"`.
    </ResponseField>

    <ResponseField name="buildVersion" type="string | null">
      Reported `rippled` build version. Informational only — never asserted by consumers. `null` when not available.
    </ResponseField>
  </Expandable>
</ResponseField>

<Note>
  Both readings are returned on purpose. Handing over only the honest number asks you to take Orma's word for it. Handing over both — with the gap named in basis points and all three source fields in `provenance` — lets you verify the computation yourself from publicly readable ledger state.
</Note>
