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
ProducesJSON
PaginationYes -- cursor-based via page[limit] (max 500) and page[cursor]
OAuth scopesBILLING_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)

AttributeDescription
nameString (required) -- The fee name Example: "Fee name"
descriptionString -- A description of the fee Example: "This is a fee"
fee_typeString -- A way to group similar fees Example: "Fee type"
asset_valuationObject (required) -- Settings that determine how billable assets are calculated
asset_valuation.methodString (required) -- The billable value used to compute the fee. Values: ON_BILL_DATE, AVERAGE_MONTHLY, AVERAGE_DAILY Example: "AVERAGE_DAILY"
asset_valuation.adjustment_typeString (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_typeString (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_valuationString (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_structureString (required) -- Determines how a fee is computed. Values: FLAT, AUM Example: "AUM"
scalingString (required) -- How annual rates/flat fees scale to the billing period. Values: EVEN, DAYS_IN_PERIOD Example: "EVEN"
margin_handling_methodString (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)

AttributeDescription
flat_fee_amountDouble (required) -- The total annual flat fee amount, divided and billed based on billing interval Example: 100
flat_fee_apply_toString (required) -- What level the fee is applied to. Values: BILLABLE_PORTFOLIO, DIRECT_OWNER, HOLDING_ACCOUNT Example: "DIRECT_OWNER"
flat_fee_proration_methodString -- 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)

AttributeDescription
rate_calculationString (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_tiersArray of objects (required) -- Rate tier definitions
rate_tiers[].rateDouble (required) -- The annual rate as a percentage, between -1.0 and 1.0 Example: 0.1
rate_tiers[].lower_boundDouble (required) -- Amount for the tier's lower bound. At least one tier must have a lower bound of 0 Example: 0
rate_tiers[].idInteger (read-only) -- Generated ID

AUM fields for TOP or MARGINAL rate calculations (advance_adjustment and proration are mutually exclusive)

AttributeDescription
rate_asset_valuationString -- 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_adjustmentObject -- Adjustment for differences between previous and current bills when billing in advance
advance_adjustment.rate_typeString (required) -- Rate calculation type. Values: TOP, MARGINAL Example: "TOP"
advance_adjustment.accounts_to_evaluateString (required) -- Which accounts to include. Values: ALL_ACCOUNTS, ONLY_NEW_AND_CLOSED_ACCOUNTS, ONLY_NEW_AND_CLOSED_PORTFOLIOS Example: "ALL_ACCOUNTS"
prorationObject -- Proration for billing only the time assets were officially billable. At least one sub-type must be set.
proration.new_and_closed_accountsObject -- Proration config for new and closed accounts
proration.new_and_closed_accounts.methodString (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_calculationString (required) -- Values: TOP, MARGINAL Example: "TOP"
proration.new_and_closed_accounts.thresholdObject -- Proration applies only if net cash flow exceeds these values
proration.new_and_closed_accounts.threshold.monetary_valueDouble -- Monetary value threshold. Defaults to 0 Example: 100.0
proration.new_and_closed_accounts.threshold.percentageDouble -- Percentage of total portfolio value. Defaults to 0 Example: 10.0
proration.existing_accountsObject -- Proration config for existing accounts based on flow
proration.existing_accounts.methodString (required) -- GROSS excludes fees, NET includes fees as flows. Values: GROSS, NET Example: "NET"
proration.existing_accounts.rate_calculationString (required) -- Values: TOP, MARGINAL Example: "TOP"
proration.existing_accounts.thresholdObject -- Proration applies only if net cash flow exceeds these values
proration.existing_accounts.threshold.monetary_valueDouble -- Monetary value threshold. Defaults to 0 Example: 100.0
proration.existing_accounts.threshold.percentageDouble -- Percentage of total portfolio value. Defaults to 0 Example: 10.0

Relationships

AttributeDescription
fee_schedulesArray (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 -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 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 -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- User lacks sufficient application permissions
  • 404 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 -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- User lacks sufficient application permissions
  • 404 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 -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- User lacks sufficient application permissions
  • 404 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 -- Success
  • 400 Bad Request -- Invalid request body; see Validation errors for details
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 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 -- Success
  • 400 Bad Request -- Invalid request body; see Validation errors for details
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- User lacks sufficient application permissions
  • 404 Not Found -- The requested fee was not found
  • 409 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 -- Success
  • 400 Bad Request -- Invalid request body; see Validation errors for details
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 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 -- Success
  • 400 Bad Request -- Fee is in use and cannot be deleted
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- User lacks sufficient application permissions
  • 404 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 -- Success
  • 400 Bad Request -- Invalid request body or fee is in use
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- User lacks sufficient application permissions
  • 404 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)

RuleCauseError MessageStatus
Bulk create limitPOST with greater than 500 feesRequest payload size cannot exceed 500 items for fees400
Bulk update limitPUT with greater than 500 feesRequest payload size cannot exceed 500 items for fees400
ID mismatchPUT where path ID differs from body IDThe id field must match the id provided in the url409
Wrong type on bulk deleteBulk DELETE with type other than feestype must be fees409
Name too longname greater than 128 charactersThe following attributes contain too many characters: [name]400
Description too longdescription greater than 255 charactersThe following attributes contain too many characters: [description]400
fee_type too longfee_type greater than 200 charactersThe following attributes contain too many characters: [fee_type]400
Missing shared fieldsAny of name, fee_structure, scaling, margin_handling_method is nullThe following parameters are missing: [<fields>]400
Missing asset_valuationasset_valuation is nullThe following parameters are missing: [asset_valuation]400
Missing valuation subfieldsaccrual_type, method, or adjustment_type is nullThe following parameters are missing: [asset_valuation.<field>]400
Missing scaling_for_averageMethod is AVERAGE_MONTHLY/AVERAGE_DAILY and scaling_for_average_asset_valuation is nullThe following parameters are missing: [scaling_for_average_asset_valuation]400
Scaling inapplicableMethod is ON_BILL_DATE and scaling_for_average_asset_valuation is setscaling_for_average_asset_valuation is not applicable when asset_valuation.method is ON_BILL_DATE400
Scale rate on flat feesStructure is FLAT and scaling_for_average_asset_valuation is SCALE_RATEscaling_for_average_asset_valuation.SCALE_RATE is not applicable on flat fees400
rate_asset_valuation on createrate_asset_valuation provided on POSTThe following attribute(s) cannot be included in a POST: [rate_asset_valuation]400
Fee schedule on feefee_schedules relationship data is setFee 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 existThe requested fee was not found for <id>404
Cannot deleteFee is in useCan't delete <id>. <details>400
Bulk validation failureAny validation fails in a multi-fee requestFailed to validate fee '<name>': <error> or Failed to validate fee at index <i>: <error>400/404

FLAT fee validations

RuleCauseError MessageStatus
Missing flat fee fieldsflat_fee_amount or flat_fee_apply_to is nullThe following parameters are missing: [<fields>]400
AUM fields on FLATAny of rate_calculation, rate_tiers, proration, advance_adjustment, rate_asset_valuation is setThe following fields are not applicable for FLAT fee structure: [<fields>]400

AUM fee validations (all rate calculations)

RuleCauseError MessageStatus
Missing AUM fieldsrate_calculation or rate_tiers is nullThe following parameters are missing: [<fields>]400
FLAT fields on AUMAny of flat_fee_amount, flat_fee_apply_to, flat_fee_proration_method is setThe following fields are not applicable for AUM fee structure: [<fields>]400
Empty rate_tiersrate_tiers is []rate_tiers must contain at least one rate tier400
Null tierA tier entry is nullrate_tiers[<i>] must not be null400
Missing tier fieldsTier missing rate or lower_boundThe following parameters are missing: [rate_tiers[<i>].rate, rate_tiers[<i>].lower_bound]400
Rate out of rangerate less than -1.0 or greater than 1.0rate_tiers[<i>]: Rates must be between -1.0 and 1.0!400
Duplicate lower boundsTwo tiers share the same lower_bound valuerate_tiers[<i>]: Invalid bounds: $<x> - $<x>400
Single tier lower != 0Sole tier has lower_bound other than 0rate_tiers: Lower Bound of sole tier must be 0400
First tier lower != 0First tier (of multiple) has lower_bound other than 0rate_tiers: First tier must have a lower bound of 0400

AUM -- MARGINAL_WITH_RANKED_ENTITIES validations

RuleCauseError MessageStatus
Restricted fieldsAny of flat_fee_amount, flat_fee_apply_to, flat_fee_proration_method, advance_adjustment, proration, rate_asset_valuation is setThe following fields are not applicable for AUM fees with rate_calculation MARGINAL_WITH_RANKED_ENTITIES: [<fields>]400

AUM -- TOP or MARGINAL validations

RuleCauseError MessageStatus
Missing advance adjustment fieldsadvance_adjustment present but accounts_to_evaluate or rate_type is nullThe following parameters are missing: [<fields>]400
No proration sub-objectsproration present but both sub-types are nullThe following parameters are missing: [proration.new_and_closed_accounts, proration.existing_accounts]400
Missing new/closed fieldsnew_and_closed_accounts present but method or rate_calculation is nullThe following parameters are missing: [proration.new_and_closed_accounts.method, proration.new_and_closed_accounts.rate_calculation]400
Missing existing fieldsexisting_accounts present but method or rate_calculation is nullThe following parameters are missing: [proration.existing_accounts.method, proration.existing_accounts.rate_calculation]400
Negative monetary_value (new/closed)threshold.monetary_value less than 0Minimum threshold for new and closed account proration must be non-negative400
Negative monetary_value (existing)threshold.monetary_value less than 0Minimum threshold for flow proration must be non-negative400
Negative percentage (new/closed)threshold.percentage less than 0Minimum percentage threshold for new and closed account proration must be non-negative400
Percentage > 100% (new/closed)threshold.percentage greater than 100Minimum percentage threshold for new and closed account proration must be less than or equal to 100%400
Negative percentage (existing)threshold.percentage less than 0Minimum percentage threshold for flow proration must be non-negative400
Percentage > 100% (existing)threshold.percentage greater than 100Minimum percentage threshold for flow proration must be less than or equal to 100%400
Advance adjustment + prorationBoth present simultaneouslyAdvance adjustment and proration cannot be used together400
Proration + valuation methodActive proration with method set to AVERAGE_MONTHLY or AVERAGE_DAILYproration is not supported when asset_valuation.method is <METHOD>. Only ON_BILL_DATE supports proration400

Related resources


Did this page help you?