Positions

How Positions are created, structured, and retrieved on Monark's EFO platform, including the tax lot breakdown.

Overview

The Positions endpoint is how API Clients access Monark's sub-ledgering record: it returns each investor's settled holdings, aggregated at the position level, with the underlying tax lot breakdown available inside the response payload.
A Position is defined by account, fund, share class, and distribution election. If an investor holds both a CASH position and a DRIP position in the same fund and share class, each is returned as a separate Position, mapping to its respective CASH or DRIP Omnibus Account at the Transfer Agent.
Position data is available in real time. The Positions endpoint reflects the current state of Monark's sub-ledger and serves as the shared source of truth for the daily stock record reconciliation between EFO and Custodians (see Reconciliation, Layer 3).

When Orders Become Positions

Orders become Positions at settlement. Once the Transfer Agent returns a settlement confirmation for an Order, whether BUY or SELL , EFO marks the Order as Settled, creates a tax lot for each fill at the NAV at which the TA processed the Order, and the resulting Position becomes available through the Positions endpoint.

A Position reflects settled activity only. Orders do not appear on the Positions endpoint until the Transfer Agent's settlement confirmation is received. Pending, in-flight, and unsettled Orders are tracked on the Order object, not the Position. See Orders for detail on Order statuses.

Tax lots are created on the Position record from several sources:

  • BUY Order fills. Each fill generates its own tax lot at the fill price and fill date. For Model Orders, lots are created at the Child Order level, think of Child fills as 1:1 with lots.
  • DRIP distributions. Reinvested dividends create a new tax lot for each account that received shares, carrying the payable date as the settlement date and the reinvestment NAV as the cost basis. See Dividends for the full DRIP processing flow.

Partially Filled SELL Orders
When a SELL Order is partially filled, for example, a prorated redemption on an oversubscribed repurchase offer, the unredeemed remainder remains on the Order, tracked through the Order object's remainingQuantity counter. When the filled portion settles, EFO reduces the liquidated lots according to the Order's tax lot election (FIFO, LIFO, HCFO, or LCFO), lowering each affected lot's currentQuantity and remainingCostBasis, and the updated Position is delivered through the Positions API.

In other words, the Order object tracks what is still in flight, and the Position reflects what has settled. Shares awaiting redemption remain part of the Position until their fill settles.

Position Structure

Each Position returns the aggregate holding for the account, fund, share class, and distribution election combination, and the tax lot breakdown per Position can be delivered inside the response payload. To see the tax lot breakdown, set includeLots=true on the request. See below for an example of the payload with lots included.

{
  "positionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "investorId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "financialInstitutionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "omnibusFundId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "omnibusShareClassId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "accountId": "string",
  "distributionElection": "Cash",
  "totalQuantity": 0,
  "totalCostBasis": 0,
  "currency": "string",
  "averageCostPerShare": 0,
  "lotCount": 0,
  "createdAt": "2026-07-16T16:27:14.518Z",
  "updatedAt": "2026-07-16T16:27:14.518Z",
  "lastTransactionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "lastEventTime": "2026-07-16T16:27:14.518Z",
  "lotComputationError": "string",
  "lots": [
    {
      "lotId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "originalQuantity": 0,
      "currentQuantity": 0,
      "costBasisPerShare": 0,
      "currency": "string",
      "totalCostBasis": 0,
      "remainingCostBasis": 0,
      "acquisitionDate": "2026-07-16T16:27:14.518Z",
      "acquisitionType": "Subscription",
      "sourceTransactionId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
      "status": "Open",
      "lockedUntil": "2026-07-16T16:27:14.518Z",
      "lockReason": "PendingSettlement",
      "createdAt": "2026-07-16T16:27:14.518Z",
      "updatedAt": "2026-07-16T16:27:14.518Z"
    }
  ]
}

Dividend eligibility in particular is evaluated per lot, by settlement date: if the settlement date of a tax lot falls on or before a dividend's record date, the lot is eligible to receive the dividend. See Dividends for detail.

Worked Example

Investor A holds a DRIP position in Fund 123, Share Class I, built up over three events:

  1. Subscription: Investor A subscribes $100.00. The TA processes the subscription at a NAV of $4.00, and on settlement confirmation EFO creates a 25.000000 share tax lot with a cost basis of $4.00 per share (settlement date March 31, 2026).
  2. DRIP distribution: Fund 123 pays a $0.164 per share distribution. Investor A's 25.000000 record-date shares produce a $4.10 entitlement, reinvested at a NAV of $4.10. EFO creates a new 1.000000 share tax lot carrying the payable date, June 30, 2026, as the settlement date and the reinvestment NAV as the cost basis. Now, the Position carries a balance of 26.000000 shares.
  3. Partial redemption: Investor A submits a SELL Order for 10.000000 shares into a quarterly repurchase offer that is prorated at 50%. The Order fills 5.000000 shares, drawn from the subscription lot per the Order's FIFO tax lot election, and the remaining 5.000000 shares stay on the Order via remainingQuantity. The Position updates to reflect the redeemed shares.

After all three events settle, the Position returns 21.000000 shares across two lots. A request to the Positions endpoint with includeLots=true returns:

{
  "positionId": "7d4c9a2e-1f3b-4e8a-9c6d-2b5f8e1a0d47",
  "accountId": "3a9e6f1d-8c2b-4d7a-b5e0-6f4c1d9a8e23",
  "investorId": "b2e8d4f6-0a1c-4b3d-8e7f-9c5a2d1b4e60",
  "omnibusFundId": "f1d3b5a7-9e2c-4f6d-a8b0-1c3e5d7f9a21",
  "omnibusShareClassId": "c4a6e8d0-2b1f-4c3e-9d5a-7f0b2e4d6c18",
  "distributionElection": "Drip",
  "currency": "USD",
  "totalQuantity": 21.000000,
  "totalCostBasis": 84.10,
  "averageCostPerShare": 4.004762,
  "lotCount": 2,
  "updatedAt": "2026-07-10T21:15:04Z",
  "lots": [
    {
      "lotId": "e5b7d9f1-3a2c-4e6b-8d0f-1a4c6e8b0d35",
      "originalQuantity": 25.000000,
      "currentQuantity": 20.000000,
      "costBasisPerShare": 4.00,
      "totalCostBasis": 100.00,
      "remainingCostBasis": 80.00,
      "currency": "USD",
      "acquisitionDate": "2026-03-31",
      "acquisitionType": "Subscription",
      "status": "Open",
      "sourceTransactionId": "a8f0c2e4-6d5b-4a1c-9e3f-7b2d4f6a8c09"
    },
    {
      "lotId": "d0f2a4c6-8e7b-4d5f-a1c3-9b0e2d4f6a82",
      "originalQuantity": 1.000000,
      "currentQuantity": 1.000000,
      "costBasisPerShare": 4.10,
      "totalCostBasis": 4.10,
      "remainingCostBasis": 4.10,
      "currency": "USD",
      "acquisitionDate": "2026-06-30",
      "acquisitionType": "DividendReinvestment",
      "status": "Open",
      "sourceTransactionId": "b9a1d3f5-7c6e-4b2d-8f0a-3e5c7d9b1f64"
    }
  ]
}

A few things to note in the payload:

The aggregate balances tie exactly to the lots beneath them:

  • totalQuantity (21.000000) is the sum of each lot's currentQuantity, which in the above worked example is 20.000000 and 1.000000.
  • The subscription lot shows originalQuantity of 25.000000 and currentQuantity of 20.000000, reflecting the 5.000000 shares redeemed in the prorated repurchase. This lot
  • The DRIP lot carries the payable date as its acquisitionDate and the reinvestment NAV as its cost basis. Because its settlement date is June 30, 2026, this lot is eligible for any distribution with a record date on or after that day, and ineligible for any distribution with an earlier record date.

Fetching Positions

Positions can be fetched in real time through two endpoints:

  • Get all Positions: returns Positions with pagination (page, pageSize) and optional filtering. Use includeLots=true to return the tax lot breakdown on each Position.
  • Get a Position by ID: returns a single Position by positionId, with the same includeLots option.

See the Positions API reference for full request and response schemas.

Staying Up to Date

Positions update as Orders settle and distributions are processed. The Individual Order Events and Model Order Events webhooks notify API Clients of Order state transitions in real time, and can be used to trigger a refresh of Position data when an Order settles. Similarly, the Dividend Event webhook signals that new DRIP lots have been created and are available through the Positions endpoint. See our webhooks documentation for further detail.

IMPORTANT: Cost Basis Adjustments

Lot-level cost basis is not immutable. At the end of each fiscal year, the Transfer Agent will deliver to EFO the ICI Primary Layout file containing the final tax characterization of the year's distributions, and EFO applies the resulting cost basis adjustments at the individual tax lot level. This is typically done in mid-to-late January. Custodians should retrieve the adjusted lot data via the Positions endpoint when preparing 1099s, ensuring that investor reporting reflects the final, adjusted cost basis. See Dividends for the full tax document preparation process.
For questions on Position data or reconciliation, contact Monark's operations team at [email protected].


Did this page help you?