GET

/BizEntity/Account/Holdings

When to Use

  • Retrieve real-time account holdings with current market valuations and performance metrics
  • Generate comprehensive portfolio reports across multiple accounts and products
  • Reconcile account balances with transaction history for audit and compliance
  • Prepare regulatory reporting requiring detailed position and valuation disclosure
  • Perform historical portfolio analysis using date-specific valuations
  • Monitor investment performance and calculate unrealized gains/losses

Common Scenarios

  • Single Account Portfolio: Use AccountID.Equal=12345 for complete holdings breakdown of specific account
  • Multi-Account Consolidation: Use AccountID.In=12345,12346,12347 for household portfolio view across multiple accounts
  • Historical Valuations: Use Date=2024-06-30 for EOFY holdings valued at period-end pricing
  • Investment Exposure: Use InvestmentID.Equal=567 to monitor all accounts holding specific investment
  • Product AUM Analysis: Use ProductID=100 for total holdings across all investors in specific product

Prerequisites

  • Valid Bearer token with holdings access permissions
  • Account must exist and be accessible by the authenticated user
  • Investment pricing data should be current for accurate valuations
  • Understanding of account structure and investment products

Considerations

  • Real-Time Data: Holdings reflect current positions including pending transactions and corporate actions
  • Valuation Accuracy: Market values calculated using latest available investment prices; historical dates use price-as-of-date
  • Performance Metrics: Unrealized gains/losses calculated from cost basis to current market value
  • Pagination Strategy: Large portfolios automatically paginated - use PageNumber/PageSize for optimal performance
  • Filter Efficiency: Use native IDs (AccountID, InvestmentID) for better performance than text pattern matching
  • Date Parameter Behavior: Date parameter provides historical valuations of CURRENT positions using price-as-of-date, NOT true point-in-time holdings. Use GET /BizTransaction with date-based filtering for historical position reconstruction and audit trail analysis

Description

Retrieves comprehensive account holdings data with detailed investment information, quantities, market valuations, and performance metrics. Supports advanced filtering with dot operators for precise portfolio analysis and reporting. Essential for understanding investment positions, balance composition, and performance tracking across multiple accounts and products.

📊 Holdings Calculation Process

The 7G platform processes holdings requests through a comprehensive workflow:

  1. Access Validation: System validates account ownership and access permissions
  2. Position Aggregation: Aggregates all transactions to determine current position quantities
  3. Price Application: Applies latest investment pricing (or pricing for specified date)
  4. Performance Metrics: Calculates market values, cost basis, and unrealized gains/losses
  5. Comprehensive Response: Returns consolidated holdings with detailed breakdown

📊 Response Structure: Computed Aggregation

This endpoint returns dynamically computed data (not a stored DTO). The response aggregates data from multiple tables:

  • Source Tables: Certificate → Investment → Account → BizEntity + InvestmentPriceHistory
  • Computation: Groups certificates by account, nests investments within each account, calculates valuations using price-as-of-date
  • Response Type: Anonymous object (no predefined DTO class exists in codebase)
  • Structure: Array of account objects, each containing nested investments[] array

Why Anonymous Objects? Provides flexibility for complex aggregations that don't map to single database entities. Structure is optimized for portfolio reporting and analytics rather than simple CRUD operations.

🎯 Holdings vs. BizTransaction - Choosing the Right Endpoint

Understanding when to use each endpoint is critical for accurate portfolio analysis:

Use Holdings GET When...

Current Portfolio Snapshot: Need real-time account positions with latest valuations for investor statements or portfolio review

Period-End Reporting: EOFY/quarterly statements requiring current positions valued at historical prices (Date=2024-06-30)

Multi-Account Consolidation: Household portfolio view across multiple accounts with single efficient query

Use BizTransaction GET When...

Transaction Audit Trail: Need complete transaction history for compliance, reconciliation, or regulatory reporting

Point-in-Time Reconstruction: Calculate exact positions held on specific past date by filtering TransactionDate.LessThanOrEqual

Transaction-Level Analysis: Investigate specific deposits, redemptions, transfers, or distribution activity

Integration Pattern: Many workflows require BOTH endpoints - Holdings for current snapshot + BizTransaction for audit trail and historical context. For comprehensive portfolio reconciliation, compare current Holdings quantities against BizTransaction history to validate position accuracy.

Required Headers - See Authentication

HeaderValueDescription
Authorization{accessToken}Bearer token for API access
Version2.0API version identifier

Query Parameters

Parameter Type Required Description
ProductID
integer
Optional
Filter holdings by native product identifier for product-specific portfolio analysis and regulatory reporting. Returns all account holdings associated with specified product regardless of entity or investment mix.
ExternalProductId
string
Optional
Filter holdings by external product identifier for cross-system portfolio integration. Maintains product referential integrity with source systems for consolidated reporting and migration validation.
AccountID
FilterOfInt32
Optional
Filter holdings by native account identifier for account-specific portfolio analysis. Fastest filter option using primary index - optimal for high-frequency portfolio queries and real-time position lookups.
ExternalAccountId
FilterOfString
Optional
Filter holdings by external account identifier for cross-platform portfolio integration. Maintains account identity consistency across platforms for consolidation and migration reconciliation.
AccountNumber
FilterOfString
Optional
Filter holdings by account number pattern matching for bulk portfolio analysis. More flexible than AccountID for pattern analysis but slower performance - use AccountID when exact account known.
InvestmentID
FilterOfInt32
Optional
Filter holdings by native investment identifier for investment-specific exposure analysis and concentration risk monitoring. Essential for corporate action processing and regulatory exposure disclosure. Provides granular portfolio composition beyond product-level aggregation.
ExternalInvestmentId
FilterOfString
Optional
Filter holdings by external investment identifier for cross-platform tracking.
Date
string (date)
Optional
Retrieve holdings with historical valuations using price-as-of-date for CURRENT positions. CRITICAL BEHAVIOR: Date parameter affects 'amount' field pricing ONLY - 'currentQuantity' and 'quantity' fields ALWAYS reflect current holdings regardless of date. For TRUE point-in-time historical positions (quantities held on specific past date), use GET /BizTransaction with TransactionDate filtering to reconstruct portfolio state from transaction history. Use Date parameter for: period-end reporting (EOFY statements valued at June 30 prices), performance attribution (current holdings at multiple historical price points), or regulatory reporting requiring specific valuation dates with current position composition.
PageNumber
integer
Optional
Page number starting from 1. CRITICAL: Required when not filtering by account identifiers.
PageSize
integer
Optional
Records per page (maximum 1000). CRITICAL: Required when not filtering by account identifiers.
ProductID
integer
Optional
Filter holdings by native product identifier for product-specific portfolio analysis and regulatory reporting. Returns all account holdings associated with specified product regardless of entity or investment mix.
ExternalProductId
string
Optional
Filter holdings by external product identifier for cross-system portfolio integration. Maintains product referential integrity with source systems for consolidated reporting and migration validation.
AccountID
FilterOfInt32
Optional
Filter holdings by native account identifier for account-specific portfolio analysis. Fastest filter option using primary index - optimal for high-frequency portfolio queries and real-time position lookups.
ExternalAccountId
FilterOfString
Optional
Filter holdings by external account identifier for cross-platform portfolio integration. Maintains account identity consistency across platforms for consolidation and migration reconciliation.
AccountNumber
FilterOfString
Optional
Filter holdings by account number pattern matching for bulk portfolio analysis. More flexible than AccountID for pattern analysis but slower performance - use AccountID when exact account known.
InvestmentID
FilterOfInt32
Optional
Filter holdings by native investment identifier for investment-specific exposure analysis and concentration risk monitoring. Essential for corporate action processing and regulatory exposure disclosure. Provides granular portfolio composition beyond product-level aggregation.
ExternalInvestmentId
FilterOfString
Optional
Filter holdings by external investment identifier for cross-platform tracking.
Date
string (date)
Optional
Retrieve holdings with historical valuations using price-as-of-date for CURRENT positions. CRITICAL BEHAVIOR: Date parameter affects 'amount' field pricing ONLY - 'currentQuantity' and 'quantity' fields ALWAYS reflect current holdings regardless of date. For TRUE point-in-time historical positions (quantities held on specific past date), use GET /BizTransaction with TransactionDate filtering to reconstruct portfolio state from transaction history. Use Date parameter for: period-end reporting (EOFY statements valued at June 30 prices), performance attribution (current holdings at multiple historical price points), or regulatory reporting requiring specific valuation dates with current position composition.
PageNumber
integer
Optional
Page number starting from 1. CRITICAL: Required when not filtering by account identifiers.
PageSize
integer
Optional
Records per page (maximum 1000). CRITICAL: Required when not filtering by account identifiers.

Query & Filtering

🔍 7G Holdings Portfolio Filtering with Dot Operators

Account Holdings is 7G's comprehensive portfolio engine supporting advanced typed filtering for precise portfolio analysis, performance tracking, and multi-account reporting workflows.

FilterOfInt32 Account & Investment IDs
.Equal .In .GreaterThan .LessThan
AccountID.Equal=12345 InvestmentID.In=567,568,570
FilterOfString Account numbers & External IDs
.Equal .Contains .BeginsWith .EndsWith
AccountNumber.BeginsWith=7G- ExternalAccountId.Contains=SMSF
🎯 Key Portfolio Holdings Scenarios: Account Portfolios → AccountID.Equal=12345 (single account analysis) Multi-Account Analysis → AccountID.In=12345,12346,12347 (portfolio consolidation) SMSF Pattern Matching → AccountNumber.BeginsWith=7G-&AccountNumber.Contains=SMSF Investment Focus → InvestmentID.GreaterThan=500 (large investment classes)

Example Requests

bash
# Get holdings for specific account (fastest lookup)
curl -X GET 'https://api.7g.com.au/BizEntity/Account/Holdings?AccountID.Equal=12345' \
  -H 'Authorization: {accessToken}' \
  -H 'Version: 2.0'

# Get holdings for multiple accounts using In operator (exclude inactive accounts)
curl -X GET 'https://api.7g.com.au/BizEntity/Account/Holdings?AccountID.In=12345,12346,12347&AccountID.NotIn=12348&PageSize=50' \
  -H 'Authorization: {accessToken}' \
  -H 'Version: 2.0'

# Filter SMSF portfolios by account number pattern
curl -X GET 'https://api.7g.com.au/BizEntity/Account/Holdings?AccountNumber.BeginsWith=7G-&AccountNumber.Contains=SMSF&ProductID=100' \
  -H 'Authorization: {accessToken}' \
  -H 'Version: 2.0'

# Investment-specific holdings with external ID patterns
curl -X GET 'https://api.7g.com.au/BizEntity/Account/Holdings?InvestmentID.GreaterThan=500&ExternalInvestmentId.BeginsWith=INV-&PageNumber=1&PageSize=25' \
  -H 'Authorization: {accessToken}' \
  -H 'Version: 2.0'

# Historical portfolio analysis with date-specific pricing
curl -X GET 'https://api.7g.com.au/BizEntity/Account/Holdings?ExternalAccountId.Contains=SMSF&Date=2024-12-01&PageSize=100' \
  -H 'Authorization: {accessToken}' \
  -H 'Version: 2.0'

# Complex multi-criteria portfolio filtering
curl -X GET 'https://api.7g.com.au/BizEntity/Account/Holdings?AccountNumber.EndsWith=PENSION&ExternalInvestmentId.BeginsWith=CASH-&InvestmentID.LessThan=600' \
  -H 'Authorization: {accessToken}' \
  -H 'Version: 2.0'

Response Examples

json
{
  "result": true,
  "message": "",
  "recordCount": 1,
  "data": [
    {
      "accountID": 532562,
      "accountNumber": "100000120",
      "bizEntityID": 526452,
      "name": "A Very Schmick Superfund",
      "monetaryBalance": 11111,
      "investments": [
        {
          "investmentID": 5748,
          "name": "Ordinary",
          "quantity": 100530,
          "applicationValue": 100530,
          "redemptionValue": 100530,
          "navValue": 100530
        }
      ]
    }
  ]
}

🔄 Holdings Lifecycle Integration

Holdings update automatically through transaction and distribution workflows. Understanding these integrations is critical for portfolio accuracy and reconciliation:

Transaction Processing Impact

Holdings reflect all completed BizTransaction operations:

  • Deposits: Increase quantity and value
  • Redemptions: Decrease quantity and value
  • Transfers: Move holdings between accounts
  • Conversions: Switch holdings between investments
→ BizTransaction Operations

Distribution Allotment Updates

DRP unit allocations automatically update holdings:

  • Step 3: Distribution → Cash payments processed
  • Step 4: Allotment → Units allocated to holdings
  • Holdings reflect new unit quantities immediately
→ Allotment Processing

Investment Pricing Integration

Holdings valuations depend on Investment/Price data:

  • Current pricing: Uses latest investment price
  • Historical pricing: Uses price-as-of-Date parameter
  • Amount = Quantity × Price (dynamic calculation)
→ Pricing Management