Fees
A fee is a reusable set of rules that define how a portfolio is charged. Use this API to create, retrieve, update, and delete fee configurations.
Overview
| Base route | /v1/fees |
| Produces | JSON |
| Pagination | Yes -- cursor-based via page[limit] (max 500) and page[cursor] |
| OAuth scopes | BILLING_READ (GET), BILLING_WRITE (POST, PUT, DELETE) |
Access requirements
GET -- "View-only access to Billing"
POST, PUT, DELETE -- "Run and manage bills, include fee adjustment and payment tracking" or "Full access to Billing and billing data"
Resource attributes
There are three variations of fee types: common fields (all fees), FLAT-only fields, and AUM-only fields.
Common fields (all fee structures)
| Attribute | Description |
|---|---|
name | String (required) -- The fee name Example: "Fee name" |
description | String -- A description of the fee Example: "This is a fee" |
fee_type | String -- A way to group similar fees Example: "Fee type" |
asset_valuation | Object (required) -- Settings that determine how billable assets are calculated |
asset_valuation.method | String (required) -- The billable value used to compute the fee. Values: ON_BILL_DATE, AVERAGE_MONTHLY, AVERAGE_DAILY Example: "AVERAGE_DAILY" |
asset_valuation.adjustment_type | String (required) -- Whether adjusted or estimated values are included in billable values. Values: NONE, ADJUSTED_VALUE, ESTIMATED_RETURNS, ADJUSTED_ESTIMATED_RETURNS Example: "NONE" |
asset_valuation.accrual_type | String (required) -- Types of accrued income/dividends included in billable values. Values: ALL, CASH_AND_DIVIDENDS, CASH_AND_INTEREST, NONE Example: "ALL" |
scaling_for_average_asset_valuation | String (required when method is AVERAGE_MONTHLY or AVERAGE_DAILY) -- Scaling method for partial periods. Values: AVERAGE_ACROSS_ENTIRE_PERIOD, AVERAGE_ACROSS_HELD_PERIOD, SCALE_RATE (AUM only) Example: "SCALE_RATE" |
fee_structure | String (required) -- Determines how a fee is computed. Values: FLAT, AUM Example: "AUM" |
scaling | String (required) -- How annual rates/flat fees scale to the billing period. Values: EVEN, DAYS_IN_PERIOD Example: "EVEN" |
margin_handling_method | String (required) -- How to treat margin positions. Values: USE_VALUE, NET_AS_ZERO, NET_ABSOLUTE, GROSS_ABSOLUTE, GROSS_AS_ZERO Example: "USE_VALUE" |
FLAT fee fields (valid only when fee_structure is FLAT)
| Attribute | Description |
|---|---|
flat_fee_amount | Double (required) -- The total annual flat fee amount, divided and billed based on billing interval Example: 100 |
flat_fee_apply_to | String (required) -- What level the fee is applied to. Values: BILLABLE_PORTFOLIO, DIRECT_OWNER, HOLDING_ACCOUNT Example: "DIRECT_OWNER" |
flat_fee_proration_method | String -- Whether and how flat fee proration is applied. Values: NONE, NEW_AND_CLOSED_BILLABLE_PORTFOLIOS Example: "NEW_AND_CLOSED_BILLABLE_PORTFOLIOS" |
AUM fee fields (valid only when fee_structure is AUM)
| Attribute | Description |
|---|---|
rate_calculation | String (required) -- Methodology for calculating the rate. TOP applies the highest-tier rate to all assets; MARGINAL applies each tier's rate to assets within that tier; MARGINAL_WITH_RANKED_ENTITIES ranks direct owners and passes them through tiers in order Example: "TOP" |
rate_tiers | Array of objects (required) -- Rate tier definitions |
rate_tiers[].rate | Double (required) -- The annual rate as a percentage, between -1.0 and 1.0 Example: 0.1 |
rate_tiers[].lower_bound | Double (required) -- Amount for the tier's lower bound. At least one tier must have a lower bound of 0 Example: 0 |
rate_tiers[].id | Integer (read-only) -- Generated ID |
AUM fields for TOP or MARGINAL rate calculations (advance_adjustment and proration are mutually exclusive)
| Attribute | Description |
|---|---|
rate_asset_valuation | String -- What the fee is charged against. Defaults to ASSETS_BILLED_ON, updatable via edit only. Values: BILLABLE_ASSETS, ASSETS_BILLED_ON, RATE_FILTERED_ASSETS Example: "ASSETS_BILLED_ON" |
advance_adjustment | Object -- Adjustment for differences between previous and current bills when billing in advance |
advance_adjustment.rate_type | String (required) -- Rate calculation type. Values: TOP, MARGINAL Example: "TOP" |
advance_adjustment.accounts_to_evaluate | String (required) -- Which accounts to include. Values: ALL_ACCOUNTS, ONLY_NEW_AND_CLOSED_ACCOUNTS, ONLY_NEW_AND_CLOSED_PORTFOLIOS Example: "ALL_ACCOUNTS" |
proration | Object -- Proration for billing only the time assets were officially billable. At least one sub-type must be set. |
proration.new_and_closed_accounts | Object -- Proration config for new and closed accounts |
proration.new_and_closed_accounts.method | String (required) -- GROSS excludes fees, NET includes fees as flows. Values: GROSS, NET, USING_VALUE_ON_START_OR_END_DATE, USING_VALUE_ON_BILL_DATE Example: "NET" |
proration.new_and_closed_accounts.rate_calculation | String (required) -- Values: TOP, MARGINAL Example: "TOP" |
proration.new_and_closed_accounts.threshold | Object -- Proration applies only if net cash flow exceeds these values |
proration.new_and_closed_accounts.threshold.monetary_value | Double -- Monetary value threshold. Defaults to 0 Example: 100.0 |
proration.new_and_closed_accounts.threshold.percentage | Double -- Percentage of total portfolio value. Defaults to 0 Example: 10.0 |
proration.existing_accounts | Object -- Proration config for existing accounts based on flow |
proration.existing_accounts.method | String (required) -- GROSS excludes fees, NET includes fees as flows. Values: GROSS, NET Example: "NET" |
proration.existing_accounts.rate_calculation | String (required) -- Values: TOP, MARGINAL Example: "TOP" |
proration.existing_accounts.threshold | Object -- Proration applies only if net cash flow exceeds these values |
proration.existing_accounts.threshold.monetary_value | Double -- Monetary value threshold. Defaults to 0 Example: 100.0 |
proration.existing_accounts.threshold.percentage | Double -- Percentage of total portfolio value. Defaults to 0 Example: 10.0 |
Relationships
| Attribute | Description |
|---|---|
fee_schedules | Array (read-only) -- The fee schedules associated with the fee |
Get all fees
Retrieves all fees. Supports cursor-based pagination via page[limit] (max 500) and page[cursor]. The response includes links.next for the next page and meta.page.total for the total count.
Append ?include=fee_schedules to include associated fee schedules in the response.
GET /v1/fees
Authentication
All requests require a base64-encoded API key pair:
Authorization: Basic {base64(key_id:key_secret)}See Access & Authentication for setup.
curl -X GET "https://{firm}.addepar.com/api/v1/fees?page[limit]=3" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}"{
"meta": {
"page": {
"total": 404,
"offset": 0,
"limit": 3,
"cursor": null
}
},
"data": [
{
"id": "1",
"type": "fees",
"attributes": {
"scaling": "EVEN",
"margin_handling_method": "USE_VALUE",
"flat_fee_amount": 2500.0,
"name": "Annual Management Fee",
"description": "Fixed annual management fee applied per household",
"asset_valuation": {
"method": "ON_BILL_DATE",
"adjustment_type": "NONE",
"accrual_type": "NONE"
},
"fee_structure": "FLAT",
"fee_type": "Management Fee",
"flat_fee_apply_to": "DIRECT_OWNER"
},
"relationships": {
"fee_schedules": {
"links": {
"self": "/public/billing/fees/1/relationships/fee_schedules",
"related": "/public/billing/fees/1/fee_schedules"
},
"data": []
}
},
"links": {
"self": "/public/billing/fees/1"
}
},
{
"id": "2",
"type": "fees",
"attributes": {
"scaling": "DAYS_IN_PERIOD",
"rate_tiers": [
{
"id": 32679,
"rate": 1.0,
"lower_bound": 0.0
},
{
"id": 32680,
"rate": 0.75,
"lower_bound": 500000.0
},
{
"id": 32681,
"rate": 0.5,
"lower_bound": 1000000.0
}
],
"margin_handling_method": "NET_AS_ZERO",
"rate_calculation": "TOP",
"name": "Standard AUM Fee",
"description": "Top-tier AUM-based advisory fee with advance adjustment",
"asset_valuation": {
"method": "AVERAGE_DAILY",
"adjustment_type": "ADJUSTED_VALUE",
"accrual_type": "ALL"
},
"fee_structure": "AUM",
"fee_type": "Advisory Fee",
"scaling_for_average_asset_valuation": "SCALE_RATE",
"advance_adjustment": {
"rate_type": "TOP",
"accounts_to_evaluate": "ONLY_NEW_AND_CLOSED_ACCOUNTS"
},
"rate_asset_valuation": "ASSETS_BILLED_ON"
},
"relationships": {
"fee_schedules": {
"links": {
"self": "/public/billing/fees/2/relationships/fee_schedules",
"related": "/public/billing/fees/2/fee_schedules"
},
"data": []
}
},
"links": {
"self": "/public/billing/fees/2"
}
}
],
"included": [],
"links": {
"prev": null,
"next": "/public/billing/fees?page[limit]=3&page[after]=2"
}
}{
"errors": [
{
"id": "a1b2c3d4",
"status": "401",
"title": "Unauthorized",
"detail": "Missing or invalid authentication credentials."
}
]
}Response codes
200 OK-- Success401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions
Get a fee
Retrieves a fee by its ID.
Append ?include=fee_schedules to include associated fee schedules in the response.
GET /v1/fees/:fee_id
curl -X GET "https://{firm}.addepar.com/api/v1/fees/1" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}"{
"data": {
"id": "1",
"type": "fees",
"attributes": {
"scaling": "EVEN",
"margin_handling_method": "USE_VALUE",
"flat_fee_amount": 2500.0,
"name": "Annual Management Fee",
"description": "Fixed annual management fee applied per household",
"asset_valuation": {
"method": "ON_BILL_DATE",
"adjustment_type": "NONE",
"accrual_type": "NONE"
},
"fee_structure": "FLAT",
"fee_type": "Management Fee",
"flat_fee_apply_to": "DIRECT_OWNER"
},
"relationships": {
"fee_schedules": {
"links": {
"self": "/public/billing/fees/1/relationships/fee_schedules",
"related": "/public/billing/fees/1/fee_schedules"
},
"data": []
}
},
"links": {
"self": "/public/billing/fees/1"
}
},
"included": []
}{
"errors": [
{
"id": "e5f6g7h8",
"status": "404",
"title": "Not Found",
"detail": "The requested fee was not found for 999."
}
]
}Response codes
200 OK-- Success401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions404 Not Found-- The requested fee was not found
Get fee schedule relationships
Retrieves the fee schedule relationships by fee ID.
GET /v1/fees/:fee_id/relationships/fee_schedules
curl -X GET "https://{firm}.addepar.com/api/v1/fees/3/relationships/fee_schedules" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}"{
"data": [
{
"id": "2",
"type": "fee_schedules"
}
],
"links": {
"self": "/public/billing/fees/3/relationships/fee_schedules"
}
}{
"errors": [
{
"id": "i9j0k1l2",
"status": "404",
"title": "Not Found",
"detail": "The requested fee was not found for 999."
}
]
}Response codes
200 OK-- Success401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions404 Not Found-- The requested fee was not found
Get fee schedules by fee
Retrieves fee schedules associated with the specified fee ID.
GET /v1/fees/:fee_id/fee_schedules
curl -X GET "https://{firm}.addepar.com/api/v1/fees/3/fee_schedules" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}"{
"data": [
{
"id": "2",
"type": "fee_schedules",
"attributes": {
"billing_period_cycle_start_month": 1,
"timing": "IN_ARREARS",
"name": "Name 10",
"minimum_fee": 1000.0,
"description": "Description 10",
"maximum_fee": 50000.0,
"rounding": "HALF_EVEN",
"currency": "GBP",
"interval": "ANNUALLY",
"last_modified": "2026-04-06T12:35:30Z"
},
"relationships": {
"fees": {
"data": [
{
"type": "fees",
"id": "3"
}
]
}
},
"links": {
"self": "/v1/fee_schedules/2"
}
}
],
"included": [],
"links": {
"prev": null,
"next": null
}
}{
"errors": [
{
"id": "m3n4o5p6",
"status": "404",
"title": "Not Found",
"detail": "The requested fee was not found for 999."
}
]
}Response codes
200 OK-- Success401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions404 Not Found-- The requested fee was not found
Create fees
Creates all fees passed in the request body as a list. If any fee fails validation, none of the fees are created.
POST /v1/fees
curl -X POST "https://{firm}.addepar.com/api/v1/fees" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Content-Type: application/vnd.api+json" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}" \
-d '{
"data": [
{
"type": "fees",
"attributes": {
"name": "Annual Management Fee",
"fee_type": "Management Fee",
"description": "Fixed annual management fee applied per household",
"fee_structure": "FLAT",
"scaling": "EVEN",
"margin_handling_method": "USE_VALUE",
"asset_valuation": {
"method": "ON_BILL_DATE",
"adjustment_type": "NONE",
"accrual_type": "NONE"
},
"flat_fee_amount": 2500.0,
"flat_fee_apply_to": "DIRECT_OWNER",
"flat_fee_proration_method": "NEW_AND_CLOSED_BILLABLE_PORTFOLIOS"
}
},
{
"type": "fees",
"attributes": {
"name": "Standard AUM Fee",
"fee_type": "Advisory Fee",
"description": "Top-tier AUM-based advisory fee with advance adjustment",
"fee_structure": "AUM",
"scaling": "DAYS_IN_PERIOD",
"margin_handling_method": "NET_AS_ZERO",
"asset_valuation": {
"method": "AVERAGE_DAILY",
"adjustment_type": "ADJUSTED_VALUE",
"accrual_type": "ALL"
},
"scaling_for_average_asset_valuation": "SCALE_RATE",
"rate_calculation": "TOP",
"rate_tiers": [
{
"rate": 1.0,
"lower_bound": 0.0
},
{
"rate": 0.75,
"lower_bound": 500000.0
}
],
"advance_adjustment": {
"rate_type": "TOP",
"accounts_to_evaluate": "ONLY_NEW_AND_CLOSED_ACCOUNTS"
}
}
}
]
}'{
"data": [
{
"id": "10",
"type": "fees",
"links": {
"self": "/v1/fees/10"
}
},
{
"id": "11",
"type": "fees",
"links": {
"self": "/v1/fees/11"
}
}
]
}{
"errors": [
{
"id": "q7r8s9t0",
"status": "400",
"title": "Bad Request",
"detail": "The following parameters are missing: [rate_calculation, rate_tiers]"
}
]
}Response codes
201 Created-- Success400 Bad Request-- Invalid request body; see Validation errors for details401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions
Edit a fee
Edits a single fee. The request body fully replaces the current version, including fee schedule relationships.
PUT /v1/fees/:fee_id
curl -X PUT "https://{firm}.addepar.com/api/v1/fees/1" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Content-Type: application/vnd.api+json" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}" \
-d '{
"data": {
"id": "1",
"type": "fees",
"attributes": {
"name": "Updated Annual Management Fee",
"fee_type": "Management Fee",
"description": "Fixed annual management fee applied per household",
"fee_structure": "FLAT",
"scaling": "EVEN",
"margin_handling_method": "USE_VALUE",
"asset_valuation": {
"method": "ON_BILL_DATE",
"adjustment_type": "NONE",
"accrual_type": "NONE"
},
"flat_fee_amount": 3000.0,
"flat_fee_apply_to": "DIRECT_OWNER",
"flat_fee_proration_method": "NEW_AND_CLOSED_BILLABLE_PORTFOLIOS"
}
}
}'{
"data": [
{
"id": "1",
"type": "fees",
"links": {
"self": "/v1/fees/1"
}
}
]
}{
"errors": [
{
"id": "u1v2w3x4",
"status": "404",
"title": "Not Found",
"detail": "The requested fee was not found for 1."
}
]
}Response codes
200 OK-- Success400 Bad Request-- Invalid request body; see Validation errors for details401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions404 Not Found-- The requested fee was not found409 Conflict-- The ID in the path does not match the ID in the body
Edit fees
Edits a list of fees. If any fee fails validation, none of the fees in the list are updated.
The request body fully replaces the current versions, including fee schedule relationships.
PUT /v1/fees
curl -X PUT "https://{firm}.addepar.com/api/v1/fees" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Content-Type: application/vnd.api+json" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}" \
-d '{
"data": [
{
"id": "1",
"type": "fees",
"attributes": {
"name": "Updated Annual Management Fee",
"fee_type": "Management Fee",
"description": "Fixed annual management fee applied per household",
"fee_structure": "FLAT",
"scaling": "EVEN",
"margin_handling_method": "USE_VALUE",
"asset_valuation": {
"method": "ON_BILL_DATE",
"adjustment_type": "NONE",
"accrual_type": "NONE"
},
"flat_fee_amount": 3000.0,
"flat_fee_apply_to": "DIRECT_OWNER",
"flat_fee_proration_method": "NEW_AND_CLOSED_BILLABLE_PORTFOLIOS"
}
},
{
"id": "2",
"type": "fees",
"attributes": {
"name": "Standard AUM Fee",
"fee_type": "Advisory Fee",
"description": "Top-tier AUM-based advisory fee with proration",
"fee_structure": "AUM",
"scaling": "DAYS_IN_PERIOD",
"margin_handling_method": "NET_AS_ZERO",
"asset_valuation": {
"method": "ON_BILL_DATE",
"adjustment_type": "ADJUSTED_VALUE",
"accrual_type": "ALL"
},
"rate_calculation": "TOP",
"rate_tiers": [
{
"rate": 1.0,
"lower_bound": 0.0
},
{
"rate": 0.75,
"lower_bound": 500000.0
}
],
"proration": {
"new_and_closed_accounts": {
"method": "NET",
"rate_calculation": "TOP",
"threshold": {
"monetary_value": 10000.0,
"percentage": 5.0
}
},
"existing_accounts": {
"method": "NET",
"rate_calculation": "TOP",
"threshold": {
"monetary_value": 25000.0,
"percentage": 10.0
}
}
}
}
}
]
}'{
"data": [
{
"id": "1",
"type": "fees",
"links": {
"self": "/v1/fees/1"
}
},
{
"id": "2",
"type": "fees",
"links": {
"self": "/v1/fees/2"
}
}
]
}{
"errors": [
{
"id": "y5z6a7b8",
"status": "400",
"title": "Bad Request",
"detail": "Failed to validate fee 'Standard AUM Fee': Advance adjustment and proration cannot be used together"
}
]
}Response codes
200 OK-- Success400 Bad Request-- Invalid request body; see Validation errors for details401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions
Delete a fee
Deletes a single fee by ID.
DELETE /v1/fees/:fee_id
Irreversible
This operation cannot be undone.
curl -X DELETE "https://{firm}.addepar.com/api/v1/fees/1" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}"HTTP/1.1 204 No Content{
"errors": [
{
"id": "c9d0e1f2",
"status": "404",
"title": "Not Found",
"detail": "The requested fee was not found for 1."
}
]
}Response codes
204 No Content-- Success400 Bad Request-- Fee is in use and cannot be deleted401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions404 Not Found-- The requested fee was not found
Delete fees
Deletes a list of fees. If any fee fails validation, none of the fees are deleted.
DELETE /v1/fees
Irreversible
This operation cannot be undone.
curl -X DELETE "https://{firm}.addepar.com/api/v1/fees" \
-H "Authorization: Basic {base64(key_id:key_secret)}" \
-H "Content-Type: application/vnd.api+json" \
-H "Accept: application/vnd.api+json" \
-H "Addepar-Firm: {firm_id}" \
-d '{
"data": [
{
"type": "fees",
"id": "2"
},
{
"type": "fees",
"id": "3"
}
]
}'HTTP/1.1 204 No Content{
"errors": [
{
"id": "g3h4i5j6",
"status": "404",
"title": "Not Found",
"detail": "The requested fee was not found for 3."
}
]
}Response codes
204 No Content-- Success400 Bad Request-- Invalid request body or fee is in use401 Unauthorized-- Missing or invalid authentication403 Forbidden-- User lacks sufficient application permissions404 Not Found-- One of the fees was not found
Request body examples
Example JSON payloads for creating individual fees with different structures.
{
"data": {
"type": "fees",
"attributes": {
"name": "Simple Flat Fee",
"fee_type": "ACCOUNT_FEE",
"description": "Basic flat fee with minimal configuration",
"asset_valuation": {
"method": "ON_BILL_DATE",
"adjustment_type": "NONE",
"accrual_type": "NONE"
},
"fee_structure": "FLAT",
"flat_fee_amount": 500.0,
"flat_fee_apply_to": "BILLABLE_PORTFOLIO",
"scaling": "EVEN",
"margin_handling_method": "USE_VALUE",
"flat_fee_proration_method": "NEW_AND_CLOSED_BILLABLE_PORTFOLIOS"
}
}
}{
"data": {
"type": "fees",
"attributes": {
"name": "AUM Fee with TOP Rate Calculation",
"fee_type": "MANAGEMENT",
"description": "AUM fee using TOP rate with multiple tiers",
"asset_valuation": {
"method": "AVERAGE_DAILY",
"adjustment_type": "ADJUSTED_VALUE",
"accrual_type": "ALL"
},
"scaling_for_average_asset_valuation": "AVERAGE_ACROSS_ENTIRE_PERIOD",
"fee_structure": "AUM",
"rate_calculation": "TOP",
"rate_tiers": [
{
"rate": 0.01,
"lower_bound": 0.0
},
{
"rate": 0.0075,
"lower_bound": 500000.0
}
],
"scaling": "EVEN",
"margin_handling_method": "NET_AS_ZERO"
}
}
}{
"data": {
"type": "fees",
"attributes": {
"name": "AUM Fee with Advance Adjustment",
"fee_type": "PERFORMANCE",
"description": "AUM fee with advance adjustment configuration",
"asset_valuation": {
"method": "AVERAGE_DAILY",
"adjustment_type": "ADJUSTED_ESTIMATED_RETURNS",
"accrual_type": "CASH_AND_INTEREST"
},
"scaling_for_average_asset_valuation": "AVERAGE_ACROSS_HELD_PERIOD",
"fee_structure": "AUM",
"rate_calculation": "TOP",
"rate_tiers": [
{
"rate": 0.02,
"lower_bound": 0.0
}
],
"advance_adjustment": {
"rate_type": "MARGINAL",
"accounts_to_evaluate": "ONLY_NEW_AND_CLOSED_ACCOUNTS"
},
"scaling": "EVEN",
"margin_handling_method": "NET_ABSOLUTE"
}
}
}{
"data": {
"type": "fees",
"attributes": {
"name": "AUM Fee with Proration Settings",
"fee_type": "MANAGEMENT",
"description": "AUM fee with proration for new/closed and existing accounts",
"asset_valuation": {
"method": "ON_BILL_DATE",
"adjustment_type": "NONE",
"accrual_type": "ALL"
},
"fee_structure": "AUM",
"rate_calculation": "MARGINAL",
"rate_tiers": [
{
"rate": 0.0125,
"lower_bound": 0.0
},
{
"rate": 0.0085,
"lower_bound": 2000000.0
}
],
"proration": {
"new_and_closed_accounts": {
"method": "NET",
"threshold": {
"monetary_value": 10000.0,
"percentage": 0.5
},
"rate_calculation": "TOP"
},
"existing_accounts": {
"method": "GROSS",
"threshold": {
"monetary_value": 5000.0,
"percentage": 0.25
},
"rate_calculation": "MARGINAL"
}
},
"scaling": "DAYS_IN_PERIOD",
"margin_handling_method": "GROSS_AS_ZERO"
}
}
}{
"data": {
"type": "fees",
"attributes": {
"name": "MARGINAL_WITH_RANKED_ENTITIES AUM Fee",
"fee_type": "MANAGEMENT",
"description": "Marginal fee with ranked entities",
"asset_valuation": {
"method": "AVERAGE_DAILY",
"adjustment_type": "ADJUSTED_VALUE",
"accrual_type": "NONE"
},
"scaling_for_average_asset_valuation": "AVERAGE_ACROSS_ENTIRE_PERIOD",
"fee_structure": "AUM",
"rate_calculation": "MARGINAL_WITH_RANKED_ENTITIES",
"rate_tiers": [
{
"rate": 0.01,
"lower_bound": 0.0
},
{
"rate": 0.0075,
"lower_bound": 1000000.0
},
{
"rate": 0.005,
"lower_bound": 3000000.0
}
],
"scaling": "EVEN",
"margin_handling_method": "USE_VALUE"
}
}
}Validation errors
Common (all fee structures)
| Rule | Cause | Error Message | Status |
|---|---|---|---|
| Bulk create limit | POST with greater than 500 fees | Request payload size cannot exceed 500 items for fees | 400 |
| Bulk update limit | PUT with greater than 500 fees | Request payload size cannot exceed 500 items for fees | 400 |
| ID mismatch | PUT where path ID differs from body ID | The id field must match the id provided in the url | 409 |
| Wrong type on bulk delete | Bulk DELETE with type other than fees | type must be fees | 409 |
| Name too long | name greater than 128 characters | The following attributes contain too many characters: [name] | 400 |
| Description too long | description greater than 255 characters | The following attributes contain too many characters: [description] | 400 |
| fee_type too long | fee_type greater than 200 characters | The following attributes contain too many characters: [fee_type] | 400 |
| Missing shared fields | Any of name, fee_structure, scaling, margin_handling_method is null | The following parameters are missing: [<fields>] | 400 |
| Missing asset_valuation | asset_valuation is null | The following parameters are missing: [asset_valuation] | 400 |
| Missing valuation subfields | accrual_type, method, or adjustment_type is null | The following parameters are missing: [asset_valuation.<field>] | 400 |
| Missing scaling_for_average | Method is AVERAGE_MONTHLY/AVERAGE_DAILY and scaling_for_average_asset_valuation is null | The following parameters are missing: [scaling_for_average_asset_valuation] | 400 |
| Scaling inapplicable | Method is ON_BILL_DATE and scaling_for_average_asset_valuation is set | scaling_for_average_asset_valuation is not applicable when asset_valuation.method is ON_BILL_DATE | 400 |
| Scale rate on flat fees | Structure is FLAT and scaling_for_average_asset_valuation is SCALE_RATE | scaling_for_average_asset_valuation.SCALE_RATE is not applicable on flat fees | 400 |
| rate_asset_valuation on create | rate_asset_valuation provided on POST | The following attribute(s) cannot be included in a POST: [rate_asset_valuation] | 400 |
| Fee schedule on fee | fee_schedules relationship data is set | Fee schedule relationships cannot be set on fees. Use the fee schedule relationship endpoints to manage fee assignments. | 400 |
| Fee not found (delete) | Fee ID does not exist | The requested fee was not found for <id> | 404 |
| Cannot delete | Fee is in use | Can't delete <id>. <details> | 400 |
| Bulk validation failure | Any validation fails in a multi-fee request | Failed to validate fee '<name>': <error> or Failed to validate fee at index <i>: <error> | 400/404 |
FLAT fee validations
| Rule | Cause | Error Message | Status |
|---|---|---|---|
| Missing flat fee fields | flat_fee_amount or flat_fee_apply_to is null | The following parameters are missing: [<fields>] | 400 |
| AUM fields on FLAT | Any of rate_calculation, rate_tiers, proration, advance_adjustment, rate_asset_valuation is set | The following fields are not applicable for FLAT fee structure: [<fields>] | 400 |
AUM fee validations (all rate calculations)
| Rule | Cause | Error Message | Status |
|---|---|---|---|
| Missing AUM fields | rate_calculation or rate_tiers is null | The following parameters are missing: [<fields>] | 400 |
| FLAT fields on AUM | Any of flat_fee_amount, flat_fee_apply_to, flat_fee_proration_method is set | The following fields are not applicable for AUM fee structure: [<fields>] | 400 |
| Empty rate_tiers | rate_tiers is [] | rate_tiers must contain at least one rate tier | 400 |
| Null tier | A tier entry is null | rate_tiers[<i>] must not be null | 400 |
| Missing tier fields | Tier missing rate or lower_bound | The following parameters are missing: [rate_tiers[<i>].rate, rate_tiers[<i>].lower_bound] | 400 |
| Rate out of range | rate less than -1.0 or greater than 1.0 | rate_tiers[<i>]: Rates must be between -1.0 and 1.0! | 400 |
| Duplicate lower bounds | Two tiers share the same lower_bound value | rate_tiers[<i>]: Invalid bounds: $<x> - $<x> | 400 |
| Single tier lower != 0 | Sole tier has lower_bound other than 0 | rate_tiers: Lower Bound of sole tier must be 0 | 400 |
| First tier lower != 0 | First tier (of multiple) has lower_bound other than 0 | rate_tiers: First tier must have a lower bound of 0 | 400 |
AUM -- MARGINAL_WITH_RANKED_ENTITIES validations
| Rule | Cause | Error Message | Status |
|---|---|---|---|
| Restricted fields | Any of flat_fee_amount, flat_fee_apply_to, flat_fee_proration_method, advance_adjustment, proration, rate_asset_valuation is set | The following fields are not applicable for AUM fees with rate_calculation MARGINAL_WITH_RANKED_ENTITIES: [<fields>] | 400 |
AUM -- TOP or MARGINAL validations
| Rule | Cause | Error Message | Status |
|---|---|---|---|
| Missing advance adjustment fields | advance_adjustment present but accounts_to_evaluate or rate_type is null | The following parameters are missing: [<fields>] | 400 |
| No proration sub-objects | proration present but both sub-types are null | The following parameters are missing: [proration.new_and_closed_accounts, proration.existing_accounts] | 400 |
| Missing new/closed fields | new_and_closed_accounts present but method or rate_calculation is null | The following parameters are missing: [proration.new_and_closed_accounts.method, proration.new_and_closed_accounts.rate_calculation] | 400 |
| Missing existing fields | existing_accounts present but method or rate_calculation is null | The following parameters are missing: [proration.existing_accounts.method, proration.existing_accounts.rate_calculation] | 400 |
| Negative monetary_value (new/closed) | threshold.monetary_value less than 0 | Minimum threshold for new and closed account proration must be non-negative | 400 |
| Negative monetary_value (existing) | threshold.monetary_value less than 0 | Minimum threshold for flow proration must be non-negative | 400 |
| Negative percentage (new/closed) | threshold.percentage less than 0 | Minimum percentage threshold for new and closed account proration must be non-negative | 400 |
| Percentage > 100% (new/closed) | threshold.percentage greater than 100 | Minimum percentage threshold for new and closed account proration must be less than or equal to 100% | 400 |
| Negative percentage (existing) | threshold.percentage less than 0 | Minimum percentage threshold for flow proration must be non-negative | 400 |
| Percentage > 100% (existing) | threshold.percentage greater than 100 | Minimum percentage threshold for flow proration must be less than or equal to 100% | 400 |
| Advance adjustment + proration | Both present simultaneously | Advance adjustment and proration cannot be used together | 400 |
| Proration + valuation method | Active proration with method set to AVERAGE_MONTHLY or AVERAGE_DAILY | proration is not supported when asset_valuation.method is <METHOD>. Only ON_BILL_DATE supports proration | 400 |
Related resources
Updated 19 days ago