Portfolio & Positions
Show an account's evergreen fund holdings with market values and tax lots, its open and historical orders, and the distributions it has received.
The portfolio view answers three questions for an account: what it holds, what is in flight, and what it has been paid. Each maps to one Omnibus resource.
| Section | Resource | Shows |
|---|---|---|
| Positions | OmnibusPosition | Settled holdings, with cost basis and tax lots |
| Orders | OmnibusOrderResponse | Open and historical orders, including those placed through Model Orders |
| Distributions | OmnibusDividend | Cash and reinvested dividends |
Endpoints used
| Method | Endpoint | Purpose |
|---|---|---|
GET | /primary/v1/omnibus/positions | List positions |
GET | /primary/v1/omnibus/positions/{id} | Retrieve one position, optionally with its tax lots |
GET | /primary/v1/omnibus/nav-report | Latest NAV of each held share class, to value positions |
GET | /primary/v1/omnibus/order | List orders |
GET | /primary/v1/omnibus/model-order | List Model Orders that include the account |
GET | /primary/v1/omnibus/dividends | List dividends |
Positions
GET /primary/v1/omnibus/positions?accountId={accountId}&includeLots=true
| Query parameter | Description |
|---|---|
accountId | Positions of one account. |
financialInstitutionId | Positions for accounts held at one custodian, for a book-level view. |
omnibusFundId, omnibusShareClassId | Positions in one fund or share class. |
distributionElection | Cash or Drip. |
includeLots | true to return each position's tax lots. |
{
"items": [
{
"positionId": "9a8b7c6d-0000-4000-8000-0000000000b1",
"accountId": "b2d4e6f8-0000-4000-8000-000000000021",
"investorId": "0a4f6c1e-0000-4000-8000-000000000011",
"financialInstitutionId": "7f3c2a10-0000-4000-8000-000000000001",
"omnibusFundId": "d4f6b8c0-0000-4000-8000-0000000000f1",
"omnibusShareClassId": "e5a7c9d1-0000-4000-8000-0000000000c1",
"distributionElection": "Drip",
"totalQuantity": 1057.529611,
"totalCostBasis": 25000.00,
"averageCostPerShare": 23.64,
"currency": "USD",
"lotCount": 1,
"lots": [
{
"lotId": "3e2d1c0b-0000-4000-8000-0000000000a1",
"acquisitionDate": "2026-10-01T14:32:08Z",
"acquisitionType": "Subscription",
"originalQuantity": 1057.529611,
"currentQuantity": 1057.529611,
"costBasisPerShare": 23.64,
"totalCostBasis": 25000.00,
"remainingCostBasis": 25000.00,
"currency": "USD",
"status": "Open",
"lockedUntil": null,
"lockReason": null
}
]
}
],
"pagination": { "totalRecords": 1, "totalPages": 1, "currentPage": 1 }
}The example is trimmed: positions and lots also carry timestamps and source identifiers. A lot's acquisitionDate is when Monark processed the transfer agent's confirmation, or the payable date for a DRIP reinvestment.
A position is identified by account, fund, share class, and distribution election. An account that holds the same share class under both Cash and Drip has two positions. Show them as separate rows, because a redemption is always made from one of them.
Important: Positions reflect settled activity only. An order is not part of a position until it reaches
Settled, except that each fill in the netting queue creates its lot as it happens, even while the rest of the order is open. Until then, show it in the Orders section, so the two sections together account for everything the client has committed.
Value positions
Positions carry quantity and cost basis, but no market value. Value each position at the latest NAV of its share class - the report with the most recent reportDate:
GET /primary/v1/omnibus/nav-report?omnibusShareClassId={shareClassId}
| UI element | Source | Notes |
|---|---|---|
| Fund | Fund.name for Position.omnibusFundId | |
| Share class | ShareClass.symbol or ShareClass.series for Position.omnibusShareClassId | |
| Distributions | Position.distributionElection | Cash or Drip. |
| Shares | Position.totalQuantity | Up to 9 decimal places, from DRIP reinvestments. Sell orders accept up to 6. |
| Average cost | Position.averageCostPerShare | |
| Cost basis | Position.totalCostBasis | |
| Market value | Position.totalQuantity × latest NAVReport.nav | State the NAV date. |
| Unrealized gain / loss | Market value − Position.totalCostBasis | |
| Portfolio value | Sum of market value across positions | |
| Redeem action | Position.positionId | Opens the redemption ticket. See Redemptions (Sell Orders). |
Request the latest NAV once per distinct share class, not once per position. Market values calculated this way are indicative: they use the last reported NAV, which for many evergreen funds is struck monthly.
Tax lots
Each position is made up of tax lots. A lot is created by each settled Buy (one per Model Order line) and each DRIP reinvestment, and Sell orders relieve lots in the order set by their taxLotElection. The lot is the unit that cost basis and sale elections operate on.
| UI element | Source | Notes |
|---|---|---|
| Acquired | Lot.acquisitionDate | |
| Source | Lot.acquisitionType | Subscription, Buy, DividendReinvestment, TransferIn, or ExternalImport. |
| Shares | Lot.currentQuantity | Lot.originalQuantity is the quantity before any sales. |
| Cost per share | Lot.costBasisPerShare | |
| Remaining cost basis | Lot.remainingCostBasis | |
| Status | Lot.status | Always Open: closed lots are not returned. |
| Availability | Lot.lockedUntil, Lot.lockReason | Currently always null for evergreen fund lots. Every returned lot can be sold, less shares reserved by open Sell orders. |
Show lots in an expandable row beneath the position. They are most useful to advisors who are planning a redemption, and to operations teams reconciling cost basis against custodian records.
Orders
GET /primary/v1/omnibus/order?accountId={accountId}&statuses=Received&statuses=PendingActions&statuses=PendingExecution
| Query parameter | Description |
|---|---|
accountId | Orders of one account. |
financialInstitutionId | Orders for accounts held at one custodian. |
statuses | One or more statuses. Repeat the parameter for each value. |
side | Buy or Sell. |
omnibusFundId, omnibusShareClassId | Orders in one fund or share class. |
referenceId, externalId | Look an order up by your identifier or Monark's. |
| UI element | Source | Notes |
|---|---|---|
| Fund | Fund.name for Order.omnibusFundId | |
| Model | Order.modelId | Populated when the order was placed through a Model Order. |
| Account | Order.externalAccountNumber | Show this in book-level views. It is the custodian account number you supplied. |
| Side | Order.side | |
| Amount | Order.notionalAmount for Buy, Order.quantity for Sell | |
| Filled | Order.filledNotionalAmount or Order.filledQuantity | Populated at settlement, or as the order fills in the netting queue. For a Buy, filledNotionalAmount is net of feeAmount, so compare it to effectiveNotionalAmount. |
| Status | Order.status | See the order lifecycle in the Integration Overview. |
| Submitted | Order.submittedAtUtc | Sort newest first. |
| Complete actions | Shown when Order.status is PendingActions | See Subscriptions (Buy Orders). |
| Cancel | Shown while Order.status is Received, PendingActions or PendingExecution (until Monark's cutoff), and only when Order.modelOrderId is null. For netting orders, shown only while Order.status is PendingActions | Executed orders can't be cancelled, and nor can netting orders outside PendingActions. Orders that belong to a Model Order are cancelled through the Model Order. |
A useful default is two tabs: Open (Received, PendingActions, PendingExecution, Executed) and All. Rejected orders are worth keeping visible in history, with rejectedStatusReasonMessage, so users can see why an instruction did not go through.
Model Orders for an account
To show the Model Orders that an account took part in, filter the Model Order list by accountId. Only Model Orders that Monark has processed match, so drafts, Model Orders still Processing and Model Orders rejected while processing are not returned. The list does not include per-account amounts, so retrieve each Model Order by id when the user opens it. See Model Orders.
Distributions
GET /primary/v1/omnibus/dividends?accountId={accountId}&payableDateFrom=2026-01-01
| Query parameter | Description |
|---|---|
accountId | Dividends of one account. |
financialInstitutionId | Dividends for accounts held at one custodian. |
omnibusFundId, omnibusShareClassId | Dividends from one fund or share class. |
distributionElection | Cash or Drip. |
recordDateFrom, recordDateTo | Filter by record date. |
payableDateFrom, payableDateTo | Filter by payable date. |
Dividends are allocated per tax lot. An account that holds three lots in a fund receives three rows for the same distribution. Group rows by fund, share class, distributionElection, and recordDate before you show them to a client (payableDate can be null), and keep the lot-level rows for a drill-down.
| UI element | Source | Notes |
|---|---|---|
| Fund | Fund.name for Dividend.omnibusFundId | |
| Record date | Dividend.recordDate | |
| Payable date | Dividend.payableDate | |
| Type | Dividend.distributionElection | Cash or Drip. |
| Cash paid | Dividend.notionalAmount | For Cash elections. |
| Shares reinvested | Dividend.quantity at Dividend.pricePerShare | For Drip elections. |
| Rate | Dividend.dividendRate | |
| Resulting lot | Dividend.reinvestedLotId | For Drip, the new tax lot created by the reinvestment. |
Eligibility for a distribution is determined per lot, by acquisition date: a lot receives a distribution if Monark processed its transfer agent confirmation on or before the record date (UTC). A lot confirmed after the record date does not receive it. This matters most for clients who subscribe close to a record date, so be ready to explain it.
Monark sends one OmnibusDividendCreated webhook per dividend row (one per lot). Use it to refresh the distributions view and to notify the client. See Webhooks.
Implementation notes
- Reconcile to your books.
externalAccountNumberon orders and yourreferenceIdvalues are the join keys to your own order and account records. - Treat market value as indicative. Label it with the NAV date, and do not use it as a statement value without your firm's own pricing controls.
- Page large books. Firm-wide order and dividend queries can return many rows. Request them page by page using
pagination.totalPages.
Next steps
- Let the user sell out of a position: Redemptions (Sell Orders)
Updated 27 days ago