Optional Performance Report Settings
The settings described on this page provide additional control over how performance data is calculated and presented. All settings are optional; when omitted, the related data is not included in reports.
Overview
| Setting | Purpose | Endpoint |
|---|---|---|
| Households | Group accounts for consolidated reporting | /v2/reporting/households |
| Index Data | Look up indexes for use in benchmarks | /v2/data/idc/indexes |
| Benchmarks | Compare performance against custom benchmarks | /v2/reporting/benchmarks |
| Classification Tags | Define custom asset class labels | /v2/reporting/class-tags |
| Asset Classifications | Assign securities to custom asset classes | /v2/reporting/asset-classifications |
| Target Allocations | Compare actual allocations against a model | /v2/reporting/target-allocations |
| PDF Report Options | Adjust calculations, layout, logo, and disclosures for a PDF report | /v2/reporting/printable-reports/create |
Setup Order
Some settings depend on others. Configure them in the following order:
- Index Data → Benchmarks. Each benchmark component references an index.
- Benchmarks → Accounts and Households. Benchmarks are assigned through the
benchmarks_idsfield. - Classification Tags → Asset Classifications and Target Allocations. A tag must exist before it can be referenced.
- Target Allocations → Accounts. Target allocations are assigned through the
target_allocation_idfield.
Report Sections Affected
| Setting | Report sections |
|---|---|
| Households | Household summary, household performance attribution, consolidated reporting |
| Benchmarks | Account summary, benchmark performance summary, consolidated summary, performance chart, risk/return chart |
| Classification Tags and Asset Classifications | Asset allocation and top holdings, appraisals by classification |
| Target Allocations | Target vs. actual allocation |
Households
A household groups related accounts, such as those belonging to a single family, so that performance can be reported on a consolidated basis. To run a consolidated report, provide a household_id in place of an account_id.
A household's inception date is the earliest inception date among its accounts.
| Field | Type | Description |
|---|---|---|
name | string | Name of the household. |
firm_id | integer | ID of the owning firm. |
benchmarks_ids | integer[] | IDs of the benchmarks assigned to the household. |
Endpoints: Create a Household · Assign Accounts to Households · Update a Household · List all Households
Index Data
Index Data provides read-only access to the market indexes available for building benchmarks. Use an index's id as the index_id when defining a benchmark component.
| Field | Type | Description |
|---|---|---|
id | integer | Unique ID of the index. |
name | string | Name of the index. |
symbol | string | Symbol of the index. |
cusip | string | CUSIP of the index. |
Endpoints: List all IDC Indexes · Filter all IDC Indexes · Retrieve an IDC Index
Benchmarks
A benchmark is a reference point against which portfolio performance is measured. A benchmark may track a single index or a weighted blend of several indexes. Benchmark returns are calculated using the same methodology as account returns, allowing for a like-for-like comparison.
| Field | Type | Description |
|---|---|---|
name | string | Name of the benchmark. |
slug | string | URL-friendly version of the name. |
coefficients | array | Index components of the benchmark. |
coefficients[].benchmark_id | integer | ID of the benchmark the component belongs to. |
coefficients[].index_id | integer | ID of the index. See Index Data. |
coefficients[].weight | number | Weight of the component, on a percentage scale (0.0 to 100.0). |
A benchmark is created with its name and slug; its components are then added with Update a Benchmark. See the example below.
Endpoints: Create a Benchmark · Update a Benchmark · List all Benchmarks · Filter all Benchmarks
Classification Tags
By default, securities are reported under the master asset class provided by the custodian. Classification tags let your firm define its own asset class labels, such as "Tech Stock" or "Alternatives," which can then be applied to securities. A single tag may be applied to any number of securities.
| Field | Type | Description |
|---|---|---|
name | string | Name of the classification tag. |
firm_id | integer | ID of the owning firm. |
Endpoints: Create a Classification Tag · Update a Classification Tag · List all Classification Tags
Asset Classifications
An asset classification assigns a security to a classification tag, replacing the custodian's default classification in reports. Each security may have only one asset classification at a time.
Asset classifications apply to reporting only. The custodian securities endpoint (/v2/data/custodian/securities) continues to return the custodian's original classification.
| Field | Type | Description |
|---|---|---|
security_id | integer | ID of the security. |
class_tag_id | integer | ID of the classification tag. |
firm_id | integer | ID of the owning firm. |
Example: classifying Apple (AAPL, security ID 62) under a "Tech Stock" tag (ID 188):
{
"firm_id": 39,
"security_id": 62,
"class_tag_id": 188
}For more detail, see Asset Classification Overlay.
Endpoints: Create an Asset Classification · Bulk Update Asset Classifications · Filter all Asset Classifications
Target Allocations
A target allocation defines the intended weighting of a portfolio across asset classes. Reports compare an account's actual allocation against its target and display the drift between the two.
Tolerances define the acceptable drift for each component as a percentage of its target weight. For example, a tolerance of 5 on a 40% target allows an actual weight between 38% and 42%.
| Field | Type | Description |
|---|---|---|
name | string | Name of the target allocation. |
slug | string | URL-friendly version of the name. |
coefficients | array | Asset class components of the target allocation. |
coefficients[].mac | string | Master asset class code. See the Data Dictionary. |
coefficients[].class_tag_id | integer | null | ID of a classification tag. |
coefficients[].weight | number | Target weight of the component. |
coefficients[].negative_tolerance | number | Allowable underweight, as a percentage of the target weight. |
coefficients[].positive_tolerance | number | Allowable overweight, as a percentage of the target weight. |
Each component is typically defined by either a master asset class (mac) or a classification tag (class_tag_id), though both may be used together.
{
"firm_id": 39,
"name": "Conservative",
"slug": "conservative",
"coefficients": [
{ "mac": "EQ", "weight": 40, "negative_tolerance": 5, "positive_tolerance": 5 },
{ "mac": "DT", "weight": 60, "negative_tolerance": 5, "positive_tolerance": 5 }
]
}Endpoints: Create a Target Allocation · Update a Target Allocation · List all Target Allocations
Assigning Settings
Benchmarks and target allocations take effect once they are assigned to an account or household.
| Setting | Account field | Household field |
|---|---|---|
| Benchmarks | benchmarks_ids | benchmarks_ids |
| Target Allocation | target_allocation_id | Not supported |
- Accounts: Update an Account · Update Accounts
- Households: Update a Household · Update Households
Important: Update an Account requires the complete account object. Retrieve the account, modify the relevant field, and send the full object back. Omitting fields may overwrite existing account data.
Bulk Operations
Each setting supports bulk endpoints, such as Create Many and Bulk Update. Use these when configuring a large number of records.
PDF Report Options
The following options are included in the request body of Start a PDF Report Job (POST /v2/reporting/printable-reports/create). They apply only to the report being generated.
Calculation and Display Options
| Field | Type | Description |
|---|---|---|
irr_performance | boolean | Calculates performance using internal rate of return (IRR) instead of time-weighted return (TWR). |
gross_fee_performance | boolean | Reports performance gross of fees instead of net of fees. |
non_inception_performance_chart | boolean | Plots the performance chart for the report period (PTD) instead of since inception (ITD). |
portrait_pdf_orientation | boolean | Renders the PDF in portrait orientation instead of landscape. |
exclude_portfolio_performance_summary | boolean | Omits the Portfolio Performance Summary section from the Asset Allocation and Performance Summary report. |
All options default to false.
Settings Overrides
The settings_overrides object replaces your firm's default logo and disclosures for the report being generated.
| Field | Type | Description |
|---|---|---|
logo_settings.logo | string | Base64-encoded PNG or JPEG image to display on the report. |
logo_settings.logo_mime_type | string | Image type of the logo: image/png or image/jpeg. |
disclosures | string | Disclosure text displayed at the end of the report. HTML may be used for formatting. |
Example request body:
{
"account_ids": [1],
"start_date": "2026-01-01",
"end_date": "2026-09-30",
"sub_reports": ["account_summary", "performance_summary", "performance_chart"],
"gross_fee_performance": true,
"portrait_pdf_orientation": true,
"settings_overrides": {
"logo_settings": {
"logo": "iVBORw0KGgoAAAANSUhEUgAA...",
"logo_mime_type": "image/jpeg"
},
"disclosures": "<p>Past performance is not indicative of future results.</p>"
}
}Example: Setting Up a Custom Benchmark
This example creates a 60/40 blended benchmark and assigns it to an account.
1. Find the index IDs
Use Filter all IDC Indexes to locate each index and note its id. The IDs in this example (101, 202, and 500) are placeholders; replace them with your own.
2. Create the benchmark
POST /v2/reporting/benchmarks
{
"firm_id": 39,
"name": "60/40 Blend",
"slug": "60-40-blend"
}The response returns the benchmark's id, for example 500.
3. Add the index components
PUT /v2/reporting/benchmarks/500
{
"id": 500,
"firm_id": 39,
"name": "60/40 Blend",
"slug": "60-40-blend",
"coefficients": [
{ "benchmark_id": 500, "index_id": 101, "weight": 60 },
{ "benchmark_id": 500, "index_id": 202, "weight": 40 }
]
}Each coefficient must include the benchmark_id. Coefficient IDs are assigned by the API and do not need to be provided.
4. Assign the benchmark to an account
Retrieve the account, add 500 to its benchmarks_ids, and send the complete account object to PUT /v2/account-management/accounts/{id}.
5. Run a report
Reports for the account now include the 60/40 Blend in benchmark-related sections. See the Reporting Engine APIs Guide for details on running reports.
Related Guides
Updated about 1 hour ago
