Benchmarks

Benchmarks are standards for measuring portfolio performance. A benchmark can be a market index, a fixed return, a blend of other benchmarks, or the performance of a specific security or portfolio.

Use this API to create, read, update, and delete benchmarks.

Overview

Base route/v1/benchmarks
ProducesJSON
Pagination500 records per page
OAuth scopesBENCHMARKS_READ or BENCHMARKS_WRITE

📘

Access requirements

  • "API Access: Create, edit, and delete"
  • "Portfolio Access" determines which entities are accessible
  • "Benchmark library"

Benchmark types

TypeDescriptionCreated via API?
blendedWeighted combination of other benchmarks. Rebalanced on a configurable interval.Yes
importedCustom daily returns provided by the firm.Yes
fixed_returnFixed annual return (e.g., 15% year-over-year).Yes
portfolio_benchmarkBased on the performance of a specific portfolio entity.Yes
security_benchmarkBased on the performance of a specific investment entity.Yes
indexVendor-provided market index. Only the display name can be updated.No

Resource attributes

AttributeTypeDescription
idNumberUnique benchmark identifier.
benchmark_typeStringOne of: blended, imported, fixed_return, portfolio_benchmark, security_benchmark, INDEX. Immutable after creation.
nameStringDisplay name. Required for all types except fixed_return (auto-generated).

Blended-specific:

AttributeTypeDescription
rebalance_intervalStringNone, ONE_DAY, ONE_WEEK, ONE_MONTH, THREE_MONTHS, SIX_MONTHS, ONE_YEAR. Required.
benchmark_composition_idNumberLinks to the composition resource. Always equals the benchmark's own ID. Read-only.

Fixed return-specific:

AttributeTypeDescription
fixed_returnNumberAnnual return as a decimal (e.g., 0.15 = 15%). Up to 17 decimal places. Required.
is_compoundedBooleanWhether the return compounds. Required.

Portfolio and security-specific:

AttributeTypeDescription
entity_idNumberEntity ID the benchmark tracks. Portfolio: must be Household, Client, Holding Company, Trust, Fund, Holding Account, Managed Fund, or Sleeve. Security: must be an investment type (Stock, ETF, Mutual Fund, Bond, etc.). Immutable.

Index-specific (read-only except name):

AttributeTypeDescription
vendor_idNumberVendor identifier for the index.
index_typeStringIndex Return, Index Return (Estimated), Index Return (Preliminary), Total Return, Net Return, Hedged Return, Total Return - MTD.
index_nameStringOriginal index name from vendor.
start_dateStringEarliest date with returns data (YYYY-MM-DD).
end_dateStringMost recent date with returns data (YYYY-MM-DD).

Get all benchmarks

Returns a paginated list of all active benchmarks.

GET /v1/benchmarks

curl -X GET "https://{firm}.addepar.com/api/v1/benchmarks" \
  -H "Accept: application/vnd.api+json" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1"
{
  "data": [
    {
      "id": "421",
      "type": "benchmarks",
      "attributes": {
        "benchmark_type": "INDEX",
        "name": "tr USNTBIROR",
        "index": {
          "vendor": "tr",
          "vendor_id": "USNTBIROR",
          "index_type": "INDEX",
          "index_name": "tr USNTBIROR",
          "start_date": null,
          "end_date": null
        }
      },
      "links": { "self": "/v1/benchmarks/421" }
    },
    {
      "id": "571",
      "type": "benchmarks",
      "attributes": {
        "blended": {
          "rebalance_interval": "ONE_DAY",
          "benchmark_composition_id": 571
        },
        "benchmark_type": "BLENDED",
        "name": "Default-BB"
      },
      "links": { "self": "/v1/benchmarks/571" }
    }
  ],
  "included": [],
  "links": { "prev": null, "next": null }
}

Response codes:

  • 200 OK -- Success
  • 403 Forbidden -- No permission to view benchmarks

Get a benchmark

GET /v1/benchmarks/:id

Response codes:

  • 200 OK -- Success
  • 404 Not Found -- No benchmark with this ID

Create a benchmark

Creates a new benchmark. Index benchmarks cannot be created via the API.

POST /v1/benchmarks

All types require benchmark_type and name (except fixed_return, which auto-generates the name). Type-specific fields are listed below.

TypeRequired fields
blendedblended.rebalance_interval
fixed_returnfixed_return.fixed_return, fixed_return.is_compounded
portfolio_benchmarkportfolio.entity_id (must be Household, Client, Holding Company, Trust, Fund, Holding Account, Managed Fund, or Sleeve)
security_benchmarksecurity.entity_id (must be an investment type)
importedNo additional fields
curl -X POST "https://{firm}.addepar.com/api/v1/benchmarks" \
  -H "Accept: application/vnd.api+json" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -d '{
    "data": [
      {
        "type": "benchmarks",
        "attributes": {
          "benchmark_type": "blended",
          "name": "60/40 Equity-Fixed",
          "blended": {
            "rebalance_interval": "three_months"
          }
        }
      }
    ]
  }'
{
  "data": {
    "id": "571",
    "type": "benchmarks",
    "attributes": {
      "blended": {
        "rebalance_interval": "THREE_MONTHS",
        "benchmark_composition_id": 571
      },
      "benchmark_type": "BLENDED",
      "name": "60/40 Equity-Fixed"
    },
    "links": { "self": "/v1/benchmarks/571" }
  },
  "included": []
}

📘

Blended benchmark compositions

The benchmark_composition_id always equals the benchmark's own ID. Use it with the Benchmark Compositions endpoint to define or update the underlying weighted components.

Response codes:

  • 200 OK -- Success
  • 400 Bad Request -- Invalid payload or missing required field
  • 403 Forbidden -- No permission to create benchmarks
  • 409 Conflict -- A benchmark with the same name already exists

Edit benchmarks

Updates one or more existing benchmarks. Single: /v1/benchmarks/:id. Bulk: /v1/benchmarks with an array body.

PATCH /v1/benchmarks/:id or PATCH /v1/benchmarks

Immutable fields (cannot be updated):

TypeImmutable fields
Allbenchmark_type
Blendedbenchmark_composition_id
Portfolio / Securityentity_id
IndexAll fields except name (vendor, vendor_id, index_type, index_name, start_date, end_date)
curl -X PATCH "https://{firm}.addepar.com/api/v1/benchmarks/739" \
  -H "Accept: application/vnd.api+json" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -d '{
    "data": {
      "id": "739",
      "type": "benchmarks",
      "attributes": {
        "fixed_return": {
          "fixed_return": 0.15,
          "is_compounded": false
        }
      }
    }
  }'
curl -X PATCH "https://{firm}.addepar.com/api/v1/benchmarks" \
  -H "Accept: application/vnd.api+json" \
  -H "Content-Type: application/vnd.api+json" \
  -H "Authorization: Basic {credentials}" \
  -H "Addepar-Firm: 1" \
  -d '{
    "data": [
      {
        "id": "739",
        "type": "benchmarks",
        "attributes": {
          "fixed_return": { "fixed_return": 0.17, "is_compounded": true }
        }
      },
      {
        "id": "571",
        "type": "benchmarks",
        "attributes": {
          "blended": { "rebalance_interval": "six_months" }
        }
      }
    ]
  }'

Response codes:

  • 200 OK -- Success
  • 400 Bad Request -- Invalid payload
  • 403 Forbidden -- No permission to update benchmarks
  • 404 Not Found -- Benchmark does not exist
  • 409 Conflict -- A benchmark with the same name already exists

Delete a benchmark

Deletes a user-created benchmark. Fixed return and index benchmarks cannot be deleted.

DELETE /v1/benchmarks/:id

⚠️

Warning

Deleting a benchmark breaks downstream references (reports, compositions, associations). This action cannot be undone.

Response codes:

  • 204 No Content -- Deleted
  • 400 Bad Request -- Benchmark type cannot be deleted (fixed return or index)
  • 403 Forbidden -- No permission to delete benchmarks
  • 404 Not Found -- Benchmark does not exist

📘

Related


Did this page help you?