{
  "openapi": "3.2.0",
  "info": {
    "x-metadata": {
      "apiId": "Class Partner v1",
      "tags": [
        "Class Partner"
      ]
    },
    "title": "Asset Strategy",
    "version": "1.0",
    "description": "An **asset strategy** sets how a fund's assets should be allocated across the Class asset\nclasses, using a minimum, a maximum and an optional target percentage for each one.\n\nAsset strategies are date effective. Creating a strategy with a new effective date adds a\nstrategy and does not replace the existing ones. Only one strategy can exist for each\neffective date.\n\n---\n\n**Allocation rules**\n\n**New asset strategy** rejects a strategy with `400` unless:\n\n- each asset class is one of the supported Class asset classes and appears only once\n- for each asset class, the minimum is less than the maximum, and the maximum is no more\n  than 100\n- each target, if supplied, is between the minimum and maximum for its asset class\n- the targets, if supplied, total exactly 100%\n- the minimums total less than 100%\n- the maximums total 100% or more\n- the effective date is a valid calendar date.\n\n\n<div class=\"env-panel\" data-component-name=\"EnvPanel\"><div class=\"env-panel__header\">Servers</div><div class=\"env-panel__body\"><div class=\"env-row\"><div class=\"env-name\">Partner Integration Environment (Sandbox)</div><div class=\"env-url-row\"><span class=\"env-url\">https://api.class-pie.com.au/api/1.0</span><button type=\"button\" class=\"copy-btn\" data-copy=\"https://api.class-pie.com.au/api/1.0\" aria-label=\"Copy\"><svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.16667 2.66667C5.16667 2.57462 5.24129 2.5 5.33333 2.5H12C12.092 2.5 12.1667 2.57462 12.1667 2.66667V10.6667C12.1667 10.7587 12.092 10.8333 12 10.8333H10H5.33333C5.24129 10.8333 5.16667 10.7587 5.16667 10.6667V4.66667V2.66667ZM4.16667 4.16667V2.66667C4.16667 2.02233 4.689 1.5 5.33333 1.5H12C12.6443 1.5 13.1667 2.02233 13.1667 2.66667V10.6667C13.1667 11.311 12.6443 11.8333 12 11.8333H10.5V13.3333C10.5 13.6428 10.3771 13.9395 10.1583 14.1583C9.9395 14.3771 9.64275 14.5 9.33333 14.5H2.66667C2.35725 14.5 2.0605 14.3771 1.84171 14.1583C1.62292 13.9395 1.5 13.6428 1.5 13.3333V5.33333C1.5 5.02391 1.62292 4.72717 1.84171 4.50838C2.0605 4.28958 2.35725 4.16667 2.66667 4.16667H4.16667ZM9.5 11.8333V13.3333C9.5 13.3775 9.48244 13.4199 9.45118 13.4512C9.41993 13.4824 9.37754 13.5 9.33333 13.5H2.66667C2.62246 13.5 2.58007 13.4824 2.54882 13.4512C2.51756 13.4199 2.5 13.3775 2.5 13.3333V5.33333C2.5 5.28913 2.51756 5.24674 2.54882 5.21548C2.58007 5.18423 2.62246 5.16667 2.66667 5.16667H4.16667V10.6667C4.16667 11.311 4.689 11.8333 5.33333 11.8333H9.5Z\" fill=\"currentColor\"/></svg></button></div></div><div class=\"env-row\"><div class=\"env-name\">Production Environment</div><div class=\"env-url-row\"><span class=\"env-url\">https://api.class.com.au/api/1.0</span><button type=\"button\" class=\"copy-btn\" data-copy=\"https://api.class.com.au/api/1.0\" aria-label=\"Copy\"><svg viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" aria-hidden=\"true\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M5.16667 2.66667C5.16667 2.57462 5.24129 2.5 5.33333 2.5H12C12.092 2.5 12.1667 2.57462 12.1667 2.66667V10.6667C12.1667 10.7587 12.092 10.8333 12 10.8333H10H5.33333C5.24129 10.8333 5.16667 10.7587 5.16667 10.6667V4.66667V2.66667ZM4.16667 4.16667V2.66667C4.16667 2.02233 4.689 1.5 5.33333 1.5H12C12.6443 1.5 13.1667 2.02233 13.1667 2.66667V10.6667C13.1667 11.311 12.6443 11.8333 12 11.8333H10.5V13.3333C10.5 13.6428 10.3771 13.9395 10.1583 14.1583C9.9395 14.3771 9.64275 14.5 9.33333 14.5H2.66667C2.35725 14.5 2.0605 14.3771 1.84171 14.1583C1.62292 13.9395 1.5 13.6428 1.5 13.3333V5.33333C1.5 5.02391 1.62292 4.72717 1.84171 4.50838C2.0605 4.28958 2.35725 4.16667 2.66667 4.16667H4.16667ZM9.5 11.8333V13.3333C9.5 13.3775 9.48244 13.4199 9.45118 13.4512C9.41993 13.4824 9.37754 13.5 9.33333 13.5H2.66667C2.62246 13.5 2.58007 13.4824 2.54882 13.4512C2.51756 13.4199 2.5 13.3775 2.5 13.3333V5.33333C2.5 5.28913 2.51756 5.24674 2.54882 5.21548C2.58007 5.18423 2.62246 5.16667 2.66667 5.16667H4.16667V10.6667C4.16667 11.311 4.689 11.8333 5.33333 11.8333H9.5Z\" fill=\"currentColor\"/></svg></button></div></div></div></div>"
  },
  "tags": [
    {
      "name": "Fund",
      "description": "Asset strategy operations within a fund (`/f/`).\n"
    },
    {
      "name": "Errors",
      "x-displayName": "Errors",
      "x-traitTag": true,
      "description": "Every response carries an `Errors` array. An error means the request was rejected and\nnothing was created.\n\n**New asset strategy** can return these validation codes with `400`:\n\n| Code | Raised when |\n|------|-------------|\n| `PORTFOLIO_ASSET_STRATEGY_ASSET_STRATEGY_COUNT` | `Allocations` is missing or empty. |\n| `ASSET_STRATEGY_SELECT` | An allocation has no `AssetClass`. |\n| `ASSET_STRATEGY_INVALID_ASSET_CLASS` | An `AssetClass` is not one of the supported Class asset classes. |\n| `PORTFOLIO_ASSET_STRATEGY_ASSET_CLASS_NOT_UNIQUE` | The same `AssetClass` appears more than once. |\n| `ASSET_STRATEGY_MINGTRMAX` | An allocation's `LowerRange` is not less than its `HigherRange`. |\n| `ASSET_STRATEGY_MAX_OUT_OF_RANGE` | An allocation's `HigherRange` is more than 100. |\n| `PORTFOLIO_ASSET_STRATEGY_TARGETRANGE` | An allocation's `TargetRange` is outside its `LowerRange` and `HigherRange`. |\n| `PORTFOLIO_ASSET_STRATEGY_TARGET` | Targets are supplied and do not total exactly 100%. |\n| `PORTFOLIO_ASSET_STRATEGY_PERCENTAGE` | The `LowerRange` values total 100% or more, or the `HigherRange` values total less than 100%. One code covers both. |\n| `PORTFOLIO_ASSET_ALREADY_EXIST` | The fund already has a strategy for the same effective date. |\n| `API_MODEL_BINDING` | `EffectiveDate` is not a valid calendar date, such as 29 February in a non-leap year. |\n\nEvery operation can also return `API_NOT_AUTHORISED` (401), `FORBIDDEN` (403),\n`API_NOT_FOUND` (404) and `API_INTERNAL_ERROR` (500).\n"
    }
  ],
  "servers": [
    {
      "url": "https://api.class-pie.com.au/api/1.0",
      "description": "Partner Integration Environment (Sandbox)"
    },
    {
      "url": "https://api.class.com.au/api/1.0",
      "description": "Production Environment"
    }
  ],
  "paths": {
    "/f/{businessCode}/{fundCode}/asset-strategies": {
      "get": {
        "tags": [
          "Fund"
        ],
        "summary": "Asset strategies",
        "operationId": "GetAllAssetStrategies",
        "description": "Returns the asset strategies recorded for the fund, each with its effective date, name and allocations. A fund can have several strategies, one for each effective date.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "$ref": "#/components/parameters/fundCodeParam"
          }
        ],
        "responses": {
          "200": {
            "description": "Success (Ok)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetAssetStrategiesResponse"
                },
                "example": {
                  "Data": [
                    {
                      "EffectiveDate": "2025-07-01",
                      "StrategyName": "Default",
                      "Allocations": [
                        {
                          "AssetClass": "Cash",
                          "LowerRange": 0,
                          "HigherRange": 20,
                          "TargetRange": null
                        },
                        {
                          "AssetClass": "Australian Equities",
                          "LowerRange": 30,
                          "HigherRange": 70,
                          "TargetRange": null
                        },
                        {
                          "AssetClass": "International Equities",
                          "LowerRange": 20,
                          "HigherRange": 60,
                          "TargetRange": null
                        }
                      ]
                    },
                    {
                      "EffectiveDate": "2026-08-21",
                      "StrategyName": "Example Strategy",
                      "Allocations": [
                        {
                          "AssetClass": "Cash",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "Foreign Cash",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "Australian Equities",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "International Equities",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "Australian Fixed Interest",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "International Fixed Interest",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "Direct Property",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "Listed Property",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "Mortgages",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        },
                        {
                          "AssetClass": "Other",
                          "LowerRange": 0,
                          "HigherRange": 100,
                          "TargetRange": 10
                        }
                      ]
                    }
                  ],
                  "Errors": []
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Fund"
        ],
        "summary": "New asset strategy",
        "operationId": "CreateAssetStrategy",
        "description": "Creates an asset strategy for the fund. Send one strategy per request. To create strategies for several effective dates, send a request for each.\n\nThe allocations must meet the **allocation rules** in the overview. A strategy for an effective date that already has one is rejected with `PORTFOLIO_ASSET_ALREADY_EXIST`.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "$ref": "#/components/parameters/fundCodeParam"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The asset strategy to create.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssetStrategyRequest"
              },
              "example": {
                "StrategyName": "Example Strategy",
                "EffectiveDate": "2026-08-21",
                "Allocations": [
                  {
                    "AssetClass": "Cash",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "Foreign Cash",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "Australian Equities",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "International Equities",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "Australian Fixed Interest",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "International Fixed Interest",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "Direct Property",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "Listed Property",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "Mortgages",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  },
                  {
                    "AssetClass": "Other",
                    "LowerRange": 0,
                    "HigherRange": 100,
                    "TargetRange": 10
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success (Ok). The asset strategy was created.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreateAssetStrategyResponse"
                },
                "example": {
                  "Data": {
                    "Success": true,
                    "Id": "89b21116-fc71-4320-8cf1-90ed39e315d1"
                  },
                  "Errors": []
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/CreateBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalServerError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.maintain"
            ]
          }
        ]
      }
    }
  },
  "components": {
    "parameters": {
      "businessCodeParam": {
        "name": "businessCode",
        "in": "path",
        "description": "The unique identifier code for the Class business.",
        "required": true,
        "schema": {
          "type": "string",
          "example": "demo-business"
        }
      },
      "fundCodeParam": {
        "name": "fundCode",
        "in": "path",
        "description": "The unique identifier code for the Class fund.",
        "required": true,
        "schema": {
          "type": "string",
          "example": "demo-fund"
        }
      }
    },
    "schemas": {
      "AssetStrategyRequest": {
        "type": "object",
        "description": "An asset strategy to create for a fund.",
        "required": [
          "Allocations"
        ],
        "properties": {
          "StrategyName": {
            "type": "string",
            "default": "Default",
            "description": "A name for the strategy. When omitted, the strategy is named `Default`.",
            "example": "Example Strategy"
          },
          "EffectiveDate": {
            "type": "string",
            "format": "date",
            "description": "The date the strategy takes effect, in `YYYY-MM-DD` format. It must be a real calendar date; for example, 29 February in a non-leap year returns `API_MODEL_BINDING`. When omitted, the API uses the current date and time.\n\nA strategy cannot be created for an effective date that already has one. Strategies with different effective dates are stored separately and do not replace one another.\n",
            "example": "2026-08-21"
          },
          "Allocations": {
            "type": "array",
            "minItems": 1,
            "description": "The allocation for each asset class in the strategy. At least one is required; an omitted or empty array returns `PORTFOLIO_ASSET_STRATEGY_ASSET_STRATEGY_COUNT`.\n",
            "items": {
              "$ref": "#/components/schemas/AssetAllocationRequest"
            }
          }
        }
      },
      "AssetAllocationRequest": {
        "type": "object",
        "description": "The allocation range for one asset class.",
        "required": [
          "AssetClass"
        ],
        "properties": {
          "AssetClass": {
            "type": "string",
            "description": "The Class asset class the allocation applies to. Each asset class can appear only once in a strategy. An omitted value returns `ASSET_STRATEGY_SELECT`, and an unsupported value returns `ASSET_STRATEGY_INVALID_ASSET_CLASS`.\n",
            "enum": [
              "Cash",
              "Foreign Cash",
              "Australian Equities",
              "International Equities",
              "Australian Fixed Interest",
              "International Fixed Interest",
              "Direct Property",
              "Listed Property",
              "Mortgages",
              "Other"
            ],
            "example": "Cash"
          },
          "LowerRange": {
            "type": "number",
            "default": 0,
            "description": "The minimum allocation percentage. Defaults to 0 when omitted. Must be less than `HigherRange`.\n",
            "example": 10
          },
          "HigherRange": {
            "type": "number",
            "maximum": 100,
            "description": "The maximum allocation percentage, no more than 100. Across the strategy, the maximums must total 100% or more.\n",
            "example": 30
          },
          "TargetRange": {
            "type": "number",
            "maximum": 100,
            "description": "The target allocation percentage. Optional. When supplied, it must be between `LowerRange` and `HigherRange`, and the targets across the strategy must total exactly 100%.\n",
            "example": 20
          }
        }
      },
      "GetAssetStrategiesResponse": {
        "type": "object",
        "properties": {
          "Data": {
            "type": "array",
            "description": "The fund's asset strategies, one for each effective date.",
            "items": {
              "$ref": "#/components/schemas/AssetStrategy"
            }
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "AssetStrategy": {
        "type": "object",
        "description": "An asset strategy recorded for a fund.",
        "properties": {
          "EffectiveDate": {
            "type": "string",
            "description": "The date the strategy takes effect. Returned as `YYYY-MM-DD` when an effective date was supplied at creation, or as a date and time (`YYYY-MM-DDTHH:mm:ss`) when the API assigned it.\n",
            "example": "2026-08-21"
          },
          "StrategyName": {
            "type": "string",
            "description": "The name of the strategy. `Default` when no name was given at creation.",
            "example": "Default"
          },
          "Allocations": {
            "type": "array",
            "description": "The allocation for each asset class in the strategy.",
            "items": {
              "$ref": "#/components/schemas/AssetAllocation"
            }
          }
        }
      },
      "AssetAllocation": {
        "type": "object",
        "description": "The allocation range for one asset class.",
        "properties": {
          "AssetClass": {
            "type": "string",
            "description": "The Class asset class the allocation applies to.",
            "enum": [
              "Cash",
              "Foreign Cash",
              "Australian Equities",
              "International Equities",
              "Australian Fixed Interest",
              "International Fixed Interest",
              "Direct Property",
              "Listed Property",
              "Mortgages",
              "Other"
            ],
            "example": "Cash"
          },
          "LowerRange": {
            "type": "number",
            "description": "The minimum allocation percentage. 0 when no minimum was given at creation.",
            "example": 10
          },
          "HigherRange": {
            "type": "number",
            "description": "The maximum allocation percentage.",
            "example": 30
          },
          "TargetRange": {
            "type": [
              "number",
              "null"
            ],
            "description": "The target allocation percentage. Null when no target was given at creation.",
            "example": 20
          }
        }
      },
      "CreateAssetStrategyResponse": {
        "type": "object",
        "properties": {
          "Data": {
            "$ref": "#/components/schemas/AssetStrategyResult"
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "AssetStrategyResult": {
        "type": "object",
        "description": "The result of creating an asset strategy.",
        "properties": {
          "Success": {
            "type": "boolean",
            "description": "Whether the asset strategy was created. `true` on a `200`, `false` on a `400`.",
            "example": true
          },
          "Id": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The unique identifier of the new asset strategy. Null when it was not created.",
            "example": "89b21116-fc71-4320-8cf1-90ed39e315d1"
          }
        }
      },
      "ApiError": {
        "type": "object",
        "properties": {
          "Code": {
            "type": "string",
            "description": "The unique error code identifier."
          },
          "Message": {
            "type": "string",
            "description": "A detailed human-readable message explaining the error."
          }
        }
      },
      "ErrorResponse": {
        "type": "object",
        "properties": {
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "The request is invalid. `Errors` explains why.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            }
          }
        }
      },
      "CreateBadRequest": {
        "description": "The strategy was rejected and nothing was created. `Data.Success` is `false`, `Data.Id` is null and `Errors` explains why. See **Errors** for the codes this operation returns.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/CreateAssetStrategyResponse"
            },
            "examples": {
              "minNotLessThanMax": {
                "summary": "Minimum not less than maximum",
                "value": {
                  "Data": {
                    "Success": false,
                    "Id": null
                  },
                  "Errors": [
                    {
                      "Code": "ASSET_STRATEGY_MINGTRMAX",
                      "Message": "Please enter a Min% less than Max%"
                    }
                  ]
                }
              },
              "totals": {
                "summary": "Minimum or maximum totals out of range",
                "value": {
                  "Data": {
                    "Success": false,
                    "Id": null
                  },
                  "Errors": [
                    {
                      "Code": "PORTFOLIO_ASSET_STRATEGY_PERCENTAGE",
                      "Message": "Asset Strategy total Min must be less than 100%, total Max must be greater than or equal to 100%"
                    }
                  ]
                }
              },
              "duplicateAssetClass": {
                "summary": "Asset class listed twice",
                "value": {
                  "Data": {
                    "Success": false,
                    "Id": null
                  },
                  "Errors": [
                    {
                      "Code": "PORTFOLIO_ASSET_STRATEGY_ASSET_CLASS_NOT_UNIQUE",
                      "Message": "Each Asset Class may only appear once in a Portfolio Asset Strategy"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Unauthorized",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "Errors": [
                {
                  "Code": "API_NOT_AUTHORISED",
                  "Message": "Not authorised"
                }
              ]
            }
          }
        }
      },
      "Forbidden": {
        "description": "Forbidden",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "Errors": [
                {
                  "Code": "FORBIDDEN",
                  "Message": "You do not have permission to access this resource."
                }
              ]
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not available or user does not have access to the fund",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "Errors": [
                {
                  "Code": "API_NOT_FOUND",
                  "Message": "Resource not available or user does not have access to the fund."
                }
              ]
            }
          }
        }
      },
      "InternalServerError": {
        "description": "Internal Server Error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "Errors": [
                {
                  "Code": "API_INTERNAL_ERROR",
                  "Message": "An unexpected error occurred on the server. Please try again later."
                }
              ]
            }
          }
        }
      },
      "UnexpectedError": {
        "description": "Unexpected error",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ErrorResponse"
            },
            "example": {
              "Errors": [
                {
                  "Code": "API_INTERNAL_ERROR",
                  "Message": "An unexpected error occurred on the server. Please try again later."
                }
              ]
            }
          }
        }
      }
    },
    "securitySchemes": {
      "Class_oAuth": {
        "type": "oauth2",
        "description": "Class uses OAuth2 and OpenID for authentication and authorisation. The resource owner password credentials and authorization code flows are supported.",
        "flows": {
          "password": {
            "tokenUrl": "https://app.class-pie.com.au/connect/token",
            "scopes": {
              "fund.read": "View all fund information",
              "fund.maintain": "View and maintain all fund information"
            }
          },
          "authorizationCode": {
            "authorizationUrl": "https://app.class-pie.com.au/connect/authorize",
            "tokenUrl": "https://app.class-pie.com.au/connect/token",
            "scopes": {
              "fund.read": "View all fund information",
              "fund.maintain": "View and maintain all fund information"
            }
          }
        }
      }
    }
  }
}