Fee Schedules

A fee schedule defines billing timing, interval, and period for a set of fees. Every fee schedule must be associated with at least one fee. Use this API to create, retrieve, edit, and delete fee schedules, and manage their fee relationships.

Overview

Base route/v1/fee_schedules
ProducesJSON
PaginationYes
Bulk operationsCreate, edit, delete (array body)
OAuth scopesGET BILLING_READ; POST, PUT, DELETE BILLING_WRITE

📘

Access requirements

GET requires "View-only access to Billing" permission.
POST, PUT, and DELETE require "Run and manage bills, include fee adjustment and payment tracking" or "Full access to Billing and billing data" permission.

Resource attributes

AttributeTypeDescription
nameStringRequired. The fee schedule name. Must be unique.
descriptionStringOptional description.
currencyStringRequired. A valid currency code (e.g., "USD", "EUR", "GBP").
intervalStringRequired. Billing frequency. Values: MONTHLY, QUARTERLY, SEMIANNUALLY, ANNUALLY.
billing_period_cycle_start_monthIntegerRequired. Cycle start month offset. Valid range depends on interval: MONTHLY allows 1; QUARTERLY allows 1-3; SEMIANNUALLY allows 1-6; ANNUALLY allows 1-12.
timingStringRequired. When billing occurs. Values: IN_ARREARS, IN_ADVANCE.
minimum_feeNumberOptional. Must be positive and less than maximum_fee. Max: 1000000000000000.
maximum_feeNumberOptional. Must be positive. Max: 1000000000000000.
roundingStringRequired. Rounding strategy. Values: NONE, USE_FIRM_DEFAULT, HALF_EVEN (Banker's rounding).
min_max_fee_proration_enabledStringOptional boolean value indicating if minimum and maximum fee should be prorated for closing and opening portfolios. Defaulted to False. It requires at least once of minimum_feeand maximum_feeto be set.
last_modifiedStringRead-only. ISO 8601 timestamp.

Relationships

RelationshipDescription
feesRequired. At least one fee must be associated with a fee schedule.

Get all fee schedules

Returns all fee schedules. Results are paginated with page[limit] (max 500) and page[cursor].

Append ?include=fees to include associated fee objects in the response.

GET /v1/fee_schedules

curl -X GET "https://{firm}.addepar.com/api/v1/fee_schedules" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Accept: application/vnd.api+json"
{
  "meta": {
    "page": {
      "total": 10,
      "offset": 0,
      "limit": 500,
      "cursor": null
    }
  },
  "data": [
    {
      "id": "6",
      "type": "fee_schedules",
      "attributes": {
        "billing_period_cycle_start_month": 1,
        "timing": "IN_ARREARS",
        "name": "Monthly AUM Schedule",
        "minimum_fee": 100.0,
        "maximum_fee": 100.0,
        "rounding": "USE_FIRM_DEFAULT",
        "currency": "USD",
        "interval": "MONTHLY",
				"min_max_fee_proration_enabled": "false",
        "last_modified": "2023-12-28T22:42:00Z"
      },
      "relationships": {
        "fees": {
          "data": [
            { "type": "fees", "id": "3" }
          ]
        }
      },
      "links": { "self": "/v1/fee_schedules/6" }
    }
  ],
  "included": [],
  "links": {
    "prev": null,
    "next": null
  }
}

Response codes:

  • 200 OK -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions

Get a fee schedule

Returns a single fee schedule by ID. Append ?include=fees to include fee objects.

GET /v1/fee_schedules/:id

curl -X GET "https://{firm}.addepar.com/api/v1/fee_schedules/1" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Accept: application/vnd.api+json"
{
  "data": {
    "id": "1",
    "type": "fee_schedules",
    "attributes": {
      "billing_period_cycle_start_month": 1,
      "timing": "IN_ADVANCE",
      "name": "Quarterly Advisory",
      "minimum_fee": 500.0,
      "description": "Standard quarterly schedule",
      "maximum_fee": 10000.0,
      "rounding": "NONE",
      "currency": "USD",
      "interval": "QUARTERLY",
			"min_max_fee_proration_enabled": "false",
      "last_modified": "2026-04-06T12:37:40Z"
    },
    "relationships": {
      "fees": {
        "data": [
          { "type": "fees", "id": "2" },
          { "type": "fees", "id": "3" }
        ]
      }
    },
    "links": { "self": "/v1/fee_schedules/1" }
  },
  "included": []
}

Response codes:

  • 200 OK -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 404 Not Found -- Fee schedule not found

Get fee relationships

Returns the fee IDs associated with a fee schedule.

GET /v1/fee_schedules/:id/relationships/fees

curl -X GET "https://{firm}.addepar.com/api/v1/fee_schedules/1/relationships/fees" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Accept: application/vnd.api+json"
{
  "data": [
    { "id": "2", "type": "fees" },
    { "id": "3", "type": "fees" }
  ]
}

Response codes:

  • 200 OK -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 404 Not Found -- Fee schedule not found

Get fees by fee schedule

Returns full fee objects associated with a fee schedule.

GET /v1/fee_schedules/:id/fees

curl -X GET "https://{firm}.addepar.com/api/v1/fee_schedules/1/fees" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Accept: application/vnd.api+json"
HTTP/1.1 200

{
    "data": [
        {
            "id": "1",
            "type": "fees",
            "attributes": {
                "scaling": "DAYS_IN_PERIOD",
                "rate_tiers": [
                    {
                        "id": 1,
                        "rate": 0.015,
                        "lower_bound": 0
                    }
                ],
                "margin_handling_method": "USE_VALUE",
                "rate_calculation": "MARGINAL",
                "name": "Fee name",
                "description": "Fee description",
                "asset_valuation": {
                    "method": "AVERAGE_DAILY",
                    "adjustment_type": "ADJUSTED_VALUE",
                    "accrual_type": "NONE"
                },
                "fee_structure": "AUM",
                "scaling_for_average_asset_valuation": "AVERAGE_ACROSS_ENTIRE_PERIOD",
                "advance_adjustment": {
                    "rate_type": "TOP",
                    "accounts_to_evaluate": "ALL_ACCOUNTS"
                },
                "proration": {
                    "new_and_closed_accounts": {
                        "method": "NET",
                        "threshold": {
                            "monetary_value": 0,
                            "percentage": 0
                        },
                        "rate_calculation": "TOP_WITH_MARGINAL_ON_OPEN_CLOSE"
                    },
                    "existing_accounts": {
                        "method": "NET",
                        "threshold": {
                            "monetary_value": 0,
                            "percentage": 0
                        },
                        "rate_calculation": "TOP"
                    }
                },
                "rate_asset_valuation": "ASSETS_BILLED_ON"
            },
            "relationships": {
                "fee_schedules": {
                    "links": {
                        "self": "/v1/fees/1/relationships/fee_schedules",
                        "related": "/v1/fees/1/fee_schedules"
                    },
                    "data": [
                        {
                            "type": "fee_schedules",
                            "id": "1"
                        },
                        {
                            "type": "fee_schedules",
                            "id": "5"
                        },
                        {
                            "type": "fee_schedules",
                            "id": "8"
                        },
                        {
                            "type": "fee_schedules",
                            "id": "9"
                        },
                        {
                            "type": "fee_schedules",
                            "id": "10"
                        }
                    ]
                }
            },
            "links": {
                "self": "/v1/fees/1"
            }
        }
    ],
    "included": [],
    "links": {
        "prev": null,
        "next": null
    }
}

Response codes:

  • 200 OK -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 404 Not Found -- Fee schedule not found

Create fee schedules

Creates one or more fee schedules. Pass a single object or an array for bulk creation. If any validation fails, none are created.

All required attributes must be provided: name, currency, interval, billing_period_cycle_start_month, timing, rounding, and at least one fee relationship.

POST /v1/fee_schedules

curl -X POST "https://{firm}.addepar.com/api/v1/fee_schedules" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "data": [
      {
        "type": "fee_schedules",
        "attributes": {
          "name": "Quarterly Fee Schedule",
          "description": "Standard quarterly billing",
          "currency": "USD",
          "interval": "QUARTERLY",
          "billing_period_cycle_start_month": 1,
          "timing": "IN_ADVANCE",
          "minimum_fee": 500.00,
          "maximum_fee": 10000.00,
          "rounding": "NONE"
        },
        "relationships": {
          "fees": {
            "data": [
              { "type": "fees", "id": "1" }
            ]
          }
        }
      }
    ]
  }'
{
  "data": [
    {
      "id": "10",
      "type": "fee_schedules",
      "links": { "self": "/v1/fee_schedules/10" }
    }
  ]
}

Response codes:

  • 201 Created -- Success
  • 400 Bad Request -- Missing required fields, invalid values, or validation error
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 409 Conflict -- Duplicate name or type mismatch

Add fee associations

Appends fees to a fee schedule's existing fee list.

POST /v1/fee_schedules/:id/relationships/fees

curl -X POST "https://{firm}.addepar.com/api/v1/fee_schedules/1/relationships/fees" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "data": [
      { "type": "fees", "id": "2" },
      { "type": "fees", "id": "3" }
    ]
  }'
{
  "data": [
    { "id": "1", "type": "fees" },
    { "id": "2", "type": "fees" },
    { "id": "3", "type": "fees" }
  ]
}

Response codes:

  • 201 Created -- Success
  • 400 Bad Request -- Invalid payload
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 404 Not Found -- Fee schedule or fee not found

Edit fee schedules

Replaces a fee schedule entirely. The request body must include all required attributes and fee relationships. This API uses PUT (full replacement), not PATCH.

PUT /v1/fee_schedules/:id (single) or PUT /v1/fee_schedules (bulk, array body)

For bulk edits, if any validation fails, none are updated.

curl -X PUT "https://{firm}.addepar.com/api/v1/fee_schedules/1" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "data": {
      "type": "fee_schedules",
      "id": "1",
      "attributes": {
        "name": "Updated Fee Schedule",
        "description": "Updated description",
        "currency": "USD",
        "interval": "MONTHLY",
        "billing_period_cycle_start_month": 1,
        "timing": "IN_ARREARS",
        "minimum_fee": 1000.00,
        "maximum_fee": 20000.00,
				"min_max_fee_proration_enabled": "true",
        "rounding": "HALF_EVEN"
      },
      "relationships": {
        "fees": {
          "data": [
            { "type": "fees", "id": "1" }
          ]
        }
      }
    }
  }'
{
  "data": [
    {
      "id": "1",
      "type": "fee_schedules",
      "links": { "self": "/v1/fee_schedules/1" }
    }
  ]
}

Response codes:

  • 200 OK -- Success
  • 400 Bad Request -- Missing required fields, invalid values, or validation error
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 404 Not Found -- Fee schedule not found
  • 409 Conflict -- ID mismatch between URL and body, or duplicate name

Replace fee associations

Replaces all fees associated with a fee schedule.

PUT /v1/fee_schedules/:id/relationships/fees

curl -X PUT "https://{firm}.addepar.com/api/v1/fee_schedules/1/relationships/fees" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "data": [
      { "type": "fees", "id": "2" },
      { "type": "fees", "id": "3" }
    ]
  }'
{
  "data": [
    { "id": "2", "type": "fees" },
    { "id": "3", "type": "fees" }
  ]
}

Response codes:

  • 200 OK -- Success
  • 400 Bad Request -- Invalid payload
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 404 Not Found -- Fee schedule or fee not found

Delete fee schedules

Deletes one or more fee schedules. For bulk deletion, pass an array body. If any deletion fails, none are deleted.

DELETE /v1/fee_schedules/:id (single) or DELETE /v1/fee_schedules (bulk)

curl -X DELETE "https://{firm}.addepar.com/api/v1/fee_schedules/1" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Accept: application/vnd.api+json"
curl -X DELETE "https://{firm}.addepar.com/api/v1/fee_schedules" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Accept: application/vnd.api+json" \
  -d '{
    "data": [
      { "type": "fee_schedules", "id": "11" },
      { "type": "fee_schedules", "id": "12" }
    ]
  }'

Response: 204 No Content on success.

Response codes:

  • 204 No Content -- Success
  • 400 Bad Request -- Invalid payload
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 404 Not Found -- Fee schedule not found

Remove fee associations

Removes all fee associations from a fee schedule.

DELETE /v1/fee_schedules/:id/relationships/fees

curl -X DELETE "https://{firm}.addepar.com/api/v1/fee_schedules/1/relationships/fees" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -H "Accept: application/vnd.api+json"

Response: 204 No Content on success.

Response codes:

  • 204 No Content -- Success
  • 401 Unauthorized -- Missing or invalid authentication
  • 403 Forbidden -- Insufficient permissions
  • 404 Not Found -- Fee schedule or fee not found

Validation errors

409 Conflict

ErrorCause
IDs do not match.The fee schedule ID in the URL and request body are different (PUT only).
Schedule name already exists: {name}A fee schedule with this name already exists.
All types in a given relationship should be identicalMixed types in an array body.
type must be feesWrong type used in a fee relationship endpoint.
type must be fee_schedulesWrong type used in a fee schedule endpoint.

400 Bad Request

ErrorCause
POST requires the following attribute(s): [...]Missing required field(s). Also applies to PUT.
The following keys do not link to valid attribute(s): [...]Unknown attributes in the request body.
Missing data fieldRequest body has no data field.
The following attribute(s) contain invalid values: [...]Invalid value type or format.
Minimum fee cannot exceed maximum feeminimum_fee is greater than maximum_fee.
Minimum fee must be greater than 0minimum_fee is zero or negative.
Maximum fee must be greater than 0maximum_fee is zero or negative.
Maximum fee must be less than 1000000000000000Fee exceeds the max limit. Also applies to minimum_fee.
Cycle Start Month is invalid for this interval: {value}billing_period_cycle_start_month is out of range for the interval.

📘

Related


Did this page help you?