{
  "openapi": "3.2.0",
  "info": {
    "x-metadata": {
      "tags": [
        "Class Partner"
      ]
    },
    "title": "Feeds",
    "version": "1.0",
    "description": "A **feed** (in Class, a *fund holding reference*) links a bank account, or a broker or\nplatform account and the holdings within it, in a Class fund to the source of its\ntransaction data: usually an automated feed from the provider, or manual import where\nno feed is available.\n\n**Why set up a data feed?**\n\nClass receives electronic data directly from more than 220 banks, stockbrokers and\nwrap providers, as well as employer contributions. Linking a feed to a fund replaces\nmanual transaction and holding entry. Once the feed is authorised and the provider has\nactivated it, data updates overnight.\n\nAuthority to share that data is granted in one of two ways:\n\n- **By the account holder**, who either signs an authority form that is uploaded to\n  Class, or activates the feed online with the provider.\n- **By a third party (adviser)**, whose credentials are recorded in Class for each\n  provider, and who is linked to each feed that data should flow to.\n\nFor the full product explanation, see\n[Introduction to Data Feeds](https://support.class.com.au/hc/en-au/articles/360001383056-Introduction-to-Data-Feeds).\n\n**Creating a feed, in this order**\n\n1. **Feed products** — list the products available for a feed type (`Cash`, `Broker`\n   or `Platform`) and read their authorisation, managed-account and linked-holding\n   capabilities. For cash, supply a `bsb` to resolve the financial institution and its\n   bank products. Each product lists the authorisation types its provider supports,\n   and only those can be used.\n2. **New feed** — create the feed against the chosen product. Supply exactly one of\n   the `Cash`, `Broker` or `Platform` blocks, matching `FeedType`, and choose an\n   `AuthorisationType` from the product's `SupportedAuthorisationTypes`.\n3. **Complete authorisation**, depending on the authorisation type:\n   - `AccountHolder` — upload the signed form with **Upload authority form**. These\n     feeds start at `AuthorityNotRequested` and do not progress until a signed form is\n     supplied.\n   - `AdviserOrDealer` — supply the adviser's `AuthorityId` when creating the feed.\n     Without it, the feed is created on `NoAuthoritySet` and receives no data.\n   - `Online` — the account holder activates the feed online with the provider. Where\n     the provider uses token activation, **New feed** returns an\n     `AuthorityActivationNumber` for the account holder to enter. Confirm that your\n     business is authorised either by sending `AuthorisationVerified: true` on\n     **New feed**, or later with **Update feed status**, moving the feed to\n     `WaitingOnProvider`.\n4. **Feeds** and **Feed detail** — read the feed and track its status until the\n   provider activates it and data begins to load.\n\n**Changing a feed**\n\n- **Update feed** replaces a feed's configuration. It is a full replacement, so read\n  the feed with **Feed detail** first and send everything you want to keep.\n- **Update feed status** requests a status transition, such as confirming\n  authorisation on an online feed.\n\nDeleting a feed is not currently supported through this API.\n\n---\n\n**A `200` does not always mean nothing needs your attention.** Four operations return `200`\nalongside a populated `Warnings` array, and the meaning is different in each:\n\n| Operation | What a warning means | Warning shape |\n|-----------|----------------------|---------------|\n| **New feed** | The feed **was** created. `FeedId` is returned as normal and the warning is advisory. | `{ Code, Message }` objects |\n| **Update feed** | The feed **was** updated. Warnings can report authority changes or a missing adviser authority. | `{ Code, Message }` objects |\n| **Update feed status** | The request was processed. The effective status may differ from the requested status, or confirming authorisation may produce a warning. | `{ Code, Message }` objects |\n| **Upload authority form** | The file was stored but **was not recognised**. The feed will not progress until the form is verified. | Plain strings |\n\nAlways inspect `Warnings`, not just the status code. See **Errors and warnings** for the\nfull reference.\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": "Feed operations within a fund (`/f/`). A feed links a cash, broker or platform account within a fund to its data source and tracks its authorisation and activation status.\n"
    },
    {
      "name": "Business",
      "description": "Feed product discovery. Returns the products available for a given feed type, along with the authorisation, managed-account and linked-holding capabilities that determine which optional fields to send when creating a feed. These operations sit at the business level (`/b/`) rather than under a fund.\n"
    },
    {
      "name": "Errors and warnings",
      "x-displayName": "Errors and warnings",
      "x-traitTag": true,
      "description": "Every response carries an `Errors` array. **New feed**, **Update feed**,\n**Update feed status**, **Upload authority form** and **Feed products** also carry a\n`Warnings` array.\n\nAn **error** means the request was rejected and nothing was created or changed. A\n**warning** does not reject the request, but it does mean something needs attention.\n\n`Errors` frequently contains more than one entry, particularly for linked holdings,\nwhere each invalid entry is reported separately. Surface all of them, not just the\nfirst.\n\n---\n\n**Which operation returns what**\n\nThe `DATA_FEED_*` codes in the New feed tables below come from request validation on\n**New feed**. **Update feed** runs much of the same validation, plus the update-only\nchecks in its own table. **Feed products** validates its own query parameters and\nshares four of the New feed codes. The other read operations validate only their\nparameters.\n\n| Operation | Can return |\n|-----------|------------|\n| **New feed** | Every `DATA_FEED_*` code in the New feed tables below. Warnings as `{ Code, Message }` objects. |\n| **Update feed** | The codes in the **Update feed** table, plus these New feed codes: `DATA_FEED_FIELD_REQUIRED`, `DATA_FEED_INVALID_VALUE`, `DATA_FEED_PRODUCT_NOT_FOUND`, `DATA_FEED_PRODUCT_KIND_MISMATCH`, `DATA_FEED_INVALID_DATE_RANGE`, `DATA_FEED_AUTHORISATION_TYPE_UNSUPPORTED`, `DATA_FEED_INVALID_DATA_SOURCE_TYPE`, `DATA_FEED_UNSUPPORTED_PROPERTY`, `DATA_FEED_INVALID_BSB`, `DATA_FEED_PRODUCT_BSB_MISMATCH`, `DATA_FEED_INVALID_CLASSIFICATION_CODE`, `DATA_FEED_FOREIGN_CASH_NOT_SUPPORTED`, `DATA_FEED_LINKED_HOLDINGS_NOT_ALLOWED`, `DATA_FEED_LINKED_TO_HOLDING_NOT_FOUND`, `DATA_FEED_INVALID_NPP_METHOD`, `DATA_FEED_NPP_PAYID_NOT_ALLOWED`, `DATA_FEED_INVALID_NPP_PAYID`, `DATA_FEED_INVALID_IDENTIFIER`, `DATA_FEED_LINKED_HOLDING_NOT_FOUND`, `DATA_FEED_LINKED_HOLDING_FIELD_MISMATCH`, `DATA_FEED_DUPLICATE_ACCOUNT` and `DATA_FEED_DUPLICATE_IDENTIFIER`. Warnings as `{ Code, Message }` objects. |\n| **Update feed status** | `DATA_FEED_FIELD_REQUIRED`, `DATA_FEED_STATUS_TRANSITION_NOT_ALLOWED`, `API_INVALID_PARAMETER`, `API_MODEL_BINDING`. Warnings as `{ Code, Message }` objects. |\n| **Upload authority form** | `REQUIRED`, `API_INVALID_PARAMETER`. Warnings as plain strings. |\n| **Feeds** | `API_MODEL_BINDING` |\n| **Feed detail** | `API_INVALID_PARAMETER`, `API_MODEL_BINDING` |\n| **Feed products** | `DATA_FEED_INVALID_KIND`, `DATA_FEED_FIELD_REQUIRED`, `DATA_FEED_INVALID_BSB`, `DATA_FEED_UNSUPPORTED_PROPERTY`, `API_MODEL_BINDING` |\n\nEvery operation can also return `API_NOT_AUTHORISED` (401), `FORBIDDEN` (403),\n`API_NOT_FOUND` (404) and `API_INTERNAL_ERROR` (500).\n\n---\n\n**Request and common field validation** — New feed\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `DATA_FEED_INVALID_KIND` | Error | The feed object is missing, or `FeedType` is absent, blank or not one of `Broker`, `Platform`, `Cash`. Validation stops here, because every later rule depends on a valid `FeedType`. |\n| `DATA_FEED_INVALID_VALUE` | Error | A field that must be a GUID is not one — `ProductId`, `DataSource.ContainingFeedId`, `DataSource.AuthorityId`, `Cash.LinkedToHoldingAccountId` — or `DataSource.AuthorisationType` cannot be parsed, or a `LinkedHoldings` array contains a null item. Validation stops here on a malformed GUID. |\n| `DATA_FEED_FIELD_REQUIRED` | Error | A required field is missing or blank. Can name any of `AccountName`, `DisplayName`, `ProductId`, `DataSource.DataSourceType`, `DataSource.ContainingFeedId`, `Cash.AccountNumber`, `Cash.Code`, `Cash.BsbCode`, `Cash.NewPaymentsPlatform`, `Cash.NewPaymentsPlatform.NPPMethod`, `Cash.NewPaymentsPlatform.PayID`, `Broker.AccountNumber`, `Broker.Hin`, `Platform.AccountNumber` or `Platform.Hin`. |\n| `DATA_FEED_KIND_MISMATCH` | Error | The type-specific block does not match `FeedType` — the matching block is absent, or more than one of `Cash`/`Broker`/`Platform` is present. Also raised when `DataSourceType` is `IncludeInBrokerOrPlatformAccount` on a non-cash feed. |\n\nTwo required-field rules are easy to miss. `ProductId` is required for Broker and\nPlatform feeds. On a cash feed, `ProductId` and `Cash.BsbCode` go together: send both\nor neither. Sending only one fails with `DATA_FEED_FIELD_REQUIRED` naming the other.\n\n---\n\n**Product validation** — New feed\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `DATA_FEED_PRODUCT_NOT_FOUND` | Error | A non-empty `ProductId` does not resolve to an existing product. |\n| `DATA_FEED_PRODUCT_NOT_ALLOWED` | Error | The product is a placeholder such as Directly Held or No Product Required, or its product type is `TermDeposit`. |\n| `DATA_FEED_PRODUCT_KIND_MISMATCH` | Error | The product type is incompatible with `FeedType`. |\n| `DATA_FEED_UNSUPPORTED_SOURCE_TYPE` | Error | The product is the Open Banking product, or `DataSourceType` is `UseOpenBanking`. Open Banking feeds are not supported. |\n| `DATA_FEED_OBSOLETE_PRODUCT` | Warning | The selected product is marked obsolete. The product is still valid and the feed is created. |\n\nEach feed type accepts only certain product types.\n\n| Feed type | Accepted product types |\n|-----------|------------------------|\n| Cash | `BankAccount` |\n| Broker | `BrokerAccount`, `Other` |\n| Platform | `WrapAccount` |\n\n`TermDeposit` products and the placeholders Directly Held and No Product Required are\nrejected on create. **Feed products** already excludes them, so this only applies when\npassing a product ID obtained elsewhere.\n\n---\n\n**Data source and authorisation** — New feed\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `DATA_FEED_AUTHORISATION_TYPE_UNSUPPORTED` | Error | On an automated feed, the chosen `AuthorisationType` is not supported by the product's provider. Check `Authorisation.SupportedAuthorisationTypes` on **Feed products** first. |\n| `DATA_FEED_UNSUPPORTED_PROPERTY` | Error | `DataSource.ContainingFeedId` was supplied when `DataSourceType` is not `IncludeInBrokerOrPlatformAccount`. |\n| `DATA_FEED_INVALID_DATE_RANGE` | Error | `DoNotLoadAfter` is earlier than `DoNotLoadBefore`. Not checked for cash feeds using `ImportManually` or `IncludeInBrokerOrPlatformAccount`. |\n| `DATA_FEED_INVALID_DATA_SOURCE_TYPE` | Error | `FeedType` is `Broker` and `DataSourceType` is neither `UseAutomatedFeed` nor `ImportManually`. |\n\nSome providers attach an advisory warning to every automated feed created against their\nproducts, covering things like restricted eligibility or an activation route that is\ntemporarily unavailable. These are provider-specific and do not prevent the feed being\ncreated. See the warnings table below.\n\n---\n\n**Cash feeds** — New feed\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `DATA_FEED_INVALID_BSB` | Error | `Cash.BsbCode` is not a valid BSB. Format is `XXX-XXX` or six digits. |\n| `DATA_FEED_INVALID_CLASSIFICATION_CODE` | Error | `AssetAllocation` is not `Cash` or `FixedInterest`, or a GL, tax return, CG or market type code cannot be resolved. See **Classification codes**. |\n| `DATA_FEED_FOREIGN_CASH_NOT_SUPPORTED` | Error | `Cash.IsForeign` is `true`. Foreign cash accounts are not supported. |\n| `DATA_FEED_LINKED_HOLDINGS_NOT_ALLOWED` | Error | Linked holdings were supplied on a cash feed. An empty array counts — omit the property entirely. |\n| `DATA_FEED_CONTAINING_FEED_NOT_FOUND` | Error | `ContainingFeedId` does not reference an active broker or platform feed in the same fund. |\n| `DATA_FEED_PRODUCT_BSB_MISMATCH` | Error | The product and BSB do not belong to the same financial institution. |\n| `DATA_FEED_INVALID_ACCOUNT` | Error | The account fails bank account or BSB-to-institution rules. |\n| `DATA_FEED_DEFAULT_ACCOUNT_FORBIDDEN` | Error | `DefaultAccount: true` was sent, but the business restricts who may set a default account and the caller is not permitted to. |\n| `DATA_FEED_LINKED_TO_HOLDING_NOT_FOUND` | Error | `Cash.LinkedToHoldingAccountId` does not reference a holding account in the same fund. Distinct from `DATA_FEED_LINKED_HOLDING_NOT_FOUND`, which applies to broker and platform linked holdings. |\n| `DATA_FEED_INVALID_NPP_METHOD` | Error | `NPPMethod` is not `Disabled`, `PayId`, `PayTo` or `Osko`. |\n| `DATA_FEED_NPP_PAYID_NOT_ALLOWED` | Error | `PayID` was supplied while `NPPMethod` is not `PayId`. |\n| `DATA_FEED_INVALID_NPP_PAYID` | Error | `NPPMethod` is `PayId` and `PayID` is over 256 characters, contains a space, or does not match the permitted format. |\n\n---\n\n**Linked holdings** — New feed\n\nThese apply to `Broker.LinkedHoldings` and `Platform.LinkedHoldings`. Comparisons are\ncase-insensitive.\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `DATA_FEED_LINKED_HOLDING_NOT_FOUND` | Error | `HoldingAccountId` is missing, or does not resolve to an active holding account in the same fund. |\n| `DATA_FEED_LINKED_HOLDING_FIELD_MISMATCH` | Error | `InvestmentCode` and `InstalmentReceiptNumber` are inconsistent with the product. Covers supplying both, supplying either where the product does not accept it, and omitting `InstalmentReceiptNumber` where the product requires it. Check `LinkedHoldings.AcceptsInvestmentCode` and `LinkedHoldings.RequiresInstalmentReceiptNumber` on **Feed products**. |\n| `DATA_FEED_LINKED_HOLDING_IR_NON_UNIQUE` | Error | The same `InstalmentReceiptNumber` appears twice among linked holdings of the same type. |\n| `DATA_FEED_LINKED_HOLDING_TD_NON_UNIQUE` | Error | Two linked holding accounts that are term deposits have the same account code. |\n| `DATA_FEED_LINKED_HOLDING_CODE_NON_UNIQUE` | Error | Two eligible linked holdings are for the same security and have the same `InvestmentCode` and `ManagedAccountCode`. Bank accounts, foreign bank accounts, term deposits and holdings with an `InstalmentReceiptNumber` are excluded. |\n| `DATA_FEED_LINKED_HOLDING_TOO_MANY_BANKS` | Error | More than one bank account with the same currency was linked, and the product does not support multiple cash accounts. |\n\n---\n\n**Duplicates and identifiers** — New feed\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `DATA_FEED_DUPLICATE_ACCOUNT` | Error | The account code (`Cash.Code`), or the BSB and account number pair, is already used within the fund. |\n| `DATA_FEED_DUPLICATE_IDENTIFIER` | Error | The HIN or account number is already used by another feed. The message names the conflicting feed. |\n| `DATA_FEED_INVALID_IDENTIFIER` | Error | The HIN or account number contains characters outside the permitted format. |\n\n---\n\n**Update feed**\n\nThese are specific to **Update feed**, which also returns many of the New feed codes\nabove.\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `DATA_FEED_FIELD_NOT_ALLOWED` | Error | `Status`, top-level `AuthorisationVerified` or `DataSource.AuthorisationVerified` was supplied. These cannot be changed through **Update feed**. Use **Update feed status** to request a status transition. |\n| `DATA_FEED_FIELD_IMMUTABLE` | Error | A value that cannot be changed on an existing feed was changed, such as `Cash.ManagedAccountCode`. |\n| `DATA_FEED_KIND_MISMATCH` | Error | `FeedType` differs from the existing feed's type, is not a valid feed type, or does not match the type-specific block supplied. On this operation an invalid `FeedType` returns this code, not `DATA_FEED_INVALID_KIND`. |\n| `PRODUCT_NOT_ALLOWED_IN_NON_DEMO_FUND` | Error | The selected product can only be used in a demo fund. |\n\n---\n\n**Update feed status**\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `DATA_FEED_FIELD_REQUIRED` | Error | `Status` is missing, null or blank. |\n| `DATA_FEED_STATUS_TRANSITION_NOT_ALLOWED` | Error | The feed cannot move from its current status to the requested status. |\n\n---\n\n**Request-level errors.** Raised before feed validation runs.\n\n| Code | Severity | Raised when |\n|------|----------|-------------|\n| `API_INVALID_PARAMETER` | Error | A path parameter is not in the expected format, such as a `feedId` that is not a GUID. |\n| `API_MODEL_BINDING` | Error | A query parameter or the request body cannot be bound to its type, such as a non-boolean `includeHoldingAccounts` or malformed JSON. |\n| `API_INVALID_FUND_TYPE` | Error | The fund is not eligible. A fund must be Active and must not be a Consolidated entity. |\n| `REQUIRED` | Error | A required part of the request is absent. Returned by **Upload authority form** when no file name is supplied. |\n| `API_NOT_AUTHORISED` | Error | The token is missing, expired or does not carry the required scope. |\n| `FORBIDDEN` | Error | The token is valid but lacks permission for this resource. |\n| `API_NOT_FOUND` | Error | The resource does not exist, or the user has no access to the fund. |\n| `API_INTERNAL_ERROR` | Error | An unexpected server error. |\n| `DATA_FEED_VALIDATION_FAILED` | Error | A downstream validation failure with no more specific code. Treat as a generic rejection and read `Message`. |\n\n---\n\n**Warnings on a successful create**\n\nThese are returned in `Warnings` on a `200`. The feed **was** created — check\n`Data.FeedId`. They never appear in `Errors`.\n\n| Code | Raised when |\n|------|-------------|\n| `DATA_FEED_NO_AUTHORITY_SET` | `AdviserOrDealer` was used without a linked authority. The feed is created with status `NoAuthoritySet` and will not receive data until an authority is attached. Expect this whenever `AuthorisationType` is `AdviserOrDealer` and `AuthorityId` is omitted. |\n| `DATA_FEED_OBSOLETE_PRODUCT` | The selected product is marked obsolete. The product still works. |\n| `DATA_FEED_HOLDING_CODE_REGENERATED` | Saving linked holdings caused one or more holding account codes to be regenerated. If you store holding account codes, read them again with **Feed detail** and `includeHoldingAccounts=true`. |\n| Provider advisories | Certain providers attach a standing advisory to every automated feed created against their products. |\n\n---\n\n**Warnings on a successful update**\n\nThese are returned in `Warnings` on a `200`. The change **was** applied, and\n`Data.Status` holds the feed's effective status. They never appear in `Errors`.\n\n| Code | Operation | Raised when |\n|------|-----------|-------------|\n| `DATA_FEED_NO_AUTHORITY_SET` | **Update feed** | `AdviserOrDealer` was used without a linked authority. The feed is updated with status `NoAuthoritySet` and will not receive data until an authority is attached. |\n| `DATA_FEED_AUTHORITY_CLEARED` | **Update feed** | `AuthorisationType` was changed without a replacement `AuthorityId`, so the previously linked authority was cleared. |\n| `DATA_FEED_STATUS_ADJUSTED` | **Update feed status** | The system adjusted the requested status. `Data.Status.Status` holds the effective status, which differs from the one requested. |\n| `DATA_FEED_AUTHORISATION_CONFIRMED` | **Update feed status** | An online feed was moved to `WaitingOnProvider`, confirming that your business is authorised to receive its data. |\n\n---\n\n**Warning shapes differ between operations.** Handle both.\n\n**New feed**, **Update feed** and **Update feed status** return objects at the top\nlevel of the envelope:\n\n```json\n\"Warnings\": [\n  { \"Code\": \"DATA_FEED_OBSOLETE_PRODUCT\", \"Message\": \"The selected product is obsolete.\" }\n]\n```\n\n**Upload authority form** returns plain strings, nested inside `Data`:\n\n```json\n\"Data\": {\n  \"Warnings\": [\n    \"Verification Required: The uploaded authority form for this account was not recognised...\"\n  ]\n}\n```\n\n---\n\n**Feed status codes and labels**\n\n**New feed**, **Update feed** and **Update feed status** return the status **code**.\n**Feeds** and **Feed detail** return the **label** for the same state. `Category` is\nreturned by all of them and has the same meaning in each, so use it to decide how to\nhandle a feed. **Update feed status** also takes a status code, never a label.\n\n| Code (write) | Label (read) | Category |\n|---------------|--------------|----------|\n| `Bonza` | OK | `Working` |\n| `ManuallyImported` | Manually imported data | `Manual` |\n| `FeedNotAvailable` | Feed not supported | `NoFeed` |\n| `AuthoriserDeclined` | Declined by authoriser | `NoFeed` |\n| `WaitingForVerification` | Waiting for verification | `ActionRequired` |\n| `WaitingOnAuthoriser` | Waiting on authoriser | `Waiting` |\n| `WaitingOnProvider` | Waiting on provider | `Waiting` |\n| `FollowUpRequested` | Follow-up requested | `Waiting` |\n| `ReceivedByProvider` | Received by provider | `Waiting` |\n| `ActivatedByProvider` | Activated by provider | `Waiting` |\n| `ActivationOverdue` | Activation Overdue | `Waiting` |\n| `NoProductSet` | Product not set | `ActionRequired` |\n| `AuthorityNotRequested` | Authority not sent | `ActionRequired` |\n| `NoAuthoritySet` | Adviser not set | `ActionRequired` |\n| `NoHoldingReferenceSet` | Platform/Broker account not set | `ActionRequired` |\n| `AccountNumberNotSet` | Account Number not set | `ActionRequired` |\n| `BsbNotValid` | BSB not valid | `ActionRequired` |\n| `RejectedByProvider` | Rejected by provider | `ActionRequired` |\n| `UnlinkedAssets` | Unlinked holdings | `ActionRequired` |\n| `FeedNoLongerActive` | Feed no longer active | `Error` |\n| `AccountSuspended` | Account suspended | `Error` |\n| `Srn` | SRN not supported | `NoFeed` |\n| `AccountClosed` | Account Closed | `NoFeed` |\n| `NonBankAccount` | Non-bank account | |\n| `LinkedToWrapOrBroker` | Linked to platform/broker account | |\n"
    },
    {
      "name": "Classification codes",
      "x-displayName": "Classification codes",
      "x-traitTag": true,
      "description": "The `Cash.AssetClassification` block on **New feed** and **Update feed** accepts four\nclassification codes.\nEach is validated against the Class classification tables at request time. Send the code\nexactly as listed below — `BK`, not `Bank`. An unrecognised code fails the request with\n`DATA_FEED_INVALID_CLASSIFICATION_CODE`.\n\nWhen `AssetClassification` is omitted entirely, these defaults apply.\n\n| Field | Default code |\n|-------|--------------|\n| `GlClassificationCode` | `OtherAssets.CashAtBank` |\n| `TaxReturnClassificationCode` | `AustDirectCash` |\n| `CgClassificationCode` | `NonCGTAsset` |\n| `MarketTypeCode` | `BK` |\n\n---\n\n**General ledger (GL) investment classification** — `GlClassificationCode`\n\n| Code | Description |\n|------|-------------|\n| `Borrowings.LimitedRecourse` | Limited Recourse Borrowing Arrangement |\n| `Borrowings.OtherLoans` | Other Loans |\n| `Cash` | Cash and Cash Equivalents |\n| `Collectibles` | Collectibles |\n| `Equity.Equity` | Equity |\n| `Foreign` | Foreign Assets |\n| `ForeignListedShares` | Shares in Listed Companies - Foreign |\n| `ForeignManagedInvestments` | Foreign Managed Investments |\n| `GovSecurities` | Government Securities |\n| `InstalmentWarrants` | Instalment Warrants |\n| `InsurancePolicies` | Insurance Policies |\n| `Liabilities.SundryLiabilities` | Sundry Liabilities |\n| `ListedShares` | Shares in Listed Companies |\n| `Loans` | Loans |\n| `ManagedInvestments` | Managed Investments |\n| `OtherAssets` | Other Assets |\n| `OtherAssets.CashAtBank` | Cash At Bank |\n| `OtherAssets.ForeignCashAtBank` | Foreign Cash At Bank |\n| `OtherAssets.SundryAsset` | Sundry Assets |\n| `OtherFixedInterest` | Other Fixed Interest Securities |\n| `Platform` | Wrap/Platform Assets |\n| `Property` | Direct Property |\n| `Stapled` | Stapled Securities |\n| `UnitsInUnlistedUnitTrusts` | Units In Unlisted Unit Trusts |\n| `UnitTrusts` | Units In Listed Unit Trusts |\n| `UnlistedShares` | Shares in Unlisted Companies |\n| `Warrants` | Derivative Investments |\n\n**Tax return classification** — `TaxReturnClassificationCode`\n\n| Code | Description |\n|------|-------------|\n| `AustDirectCash` | Cash and Term Deposits |\n| `AustDirectCollectables` | Collectables and personal use assets |\n| `AustDirectDebtSecurities` | Debt securities |\n| `AustDirectDerivatives` | Derivatives |\n| `AustDirectInstalmentsLRBA` | Aust Direct Instalments/LRBA |\n| `AustDirectListedShares` | Listed shares |\n| `AustDirectLoans` | Loans (Asset) |\n| `AustDirectNonResidentialProperty` | Non-residential real property |\n| `AustDirectOther` | Other assets |\n| `AustDirectResidentialProperty` | Residential real property |\n| `AustDirectUnlistedShares` | Unlisted shares |\n| `AustLRBAShares` | LRBA - Australian shares |\n| `AustLRBNonResRealProperty` | LRBA - Australian non-residential real property |\n| `AustLRBResRealProperty` | LRBA - Australian residential real property |\n| `AustManagedFundsInsurance` | Insurance policy |\n| `AustManagedFundsListedTrusts` | Listed trusts |\n| `AustManagedFundsOther` | Other managed investments |\n| `AustManagedFundsUnlistedTrusts` | Unlisted trusts |\n| `BorrowingsLRBA` | Borrowings - LRBA |\n| `BorrowingsOther` | Borrowings - Other Borrowings |\n| `BorrowingsPermissible` | Borrowings - Permissible temporary borrowings |\n| `CryptoCurrency` | Crypto-assets |\n| `IntlLRBRealProperty` | LRBA - Overseas real property |\n| `IntlLRBShares` | LRBA - Overseas shares |\n| `IntlManagedInvestments` | Overseas managed investments |\n| `IntlNonResidentialProperty` | Overseas non-residential real property |\n| `IntlOther` | Other overseas assets |\n| `IntlResidentialProperty` | Overseas residential real property |\n| `IntlShares` | Overseas shares |\n| `LRBOther` | LRBA - Other |\n| `NotDefined` | Not Mapped into the Tax Return |\n| `OtherLiabilities` | Other Liabilities |\n\n**Capital gains (CG) classification** — `CgClassificationCode`\n\n| Code | Description |\n|------|-------------|\n| `AustRealEstate` | Australian Real Estate |\n| `Collectible` | Collectible |\n| `DistCapGainTrusts` | Distributed Capital Gains from Trusts |\n| `ForeignExchange` | Foreign Exchange |\n| `ForestryManagedInvestmentScheme` | Forestry Managed Investment Scheme |\n| `NonCGTAsset` | Non CGT Asset |\n| `OtherCGTAssets` | Other CGT Assets |\n| `OtherCGTAssetsEvents` | Other CGT Assets & Other CGT Events |\n| `OtherRealEstate` | Other Real Estate |\n| `RealEstate` | Real Estate |\n| `SharesAndUnits` | Shares & Units |\n| `SharesAndUnitsListed` | Shares & Units - Listed Shares |\n| `SharesAndUnitsListedTrusts` | Shares & Units - Listed Trusts |\n| `SharesAndUnitsOtherShares` | Shares & Units - Other Shares |\n| `SharesAndUnitsOtherTrusts` | Shares & Units - Other Units |\n| `TraditionalSecurity` | Traditional Security |\n\n**Market type** — `MarketTypeCode`\n\n| Code | Description |\n|------|-------------|\n| `BK` | Bank |\n| `BKFOR` | Bank - Foreign |\n| `CM` | Collectibles Market |\n| `FOR` | Foreign Investment Assets |\n| `LD` | Listed Derivatives Market |\n| `LM` | Listed Securities Market |\n| `MF` | Managed Funds Market |\n| `MM` | Money Market |\n| `NI` | Non-Investment Asset |\n| `PD` | Property Direct Market |\n| `Platform` | Wrap/Platform Market |\n| `TD` | Term Deposits |\n| `UN` | Unlisted Market |\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}/feeds": {
      "post": {
        "tags": [
          "Fund"
        ],
        "summary": "New feed",
        "operationId": "CreateFeed",
        "description": "Creates a new feed within a fund. Supply exactly one of the `Cash`, `Broker` or `Platform` blocks, matching `FeedType`. The fund must be Active and must not be a Consolidated entity. The created feed and its initial status are returned.\n\nCall **Feed products** first. The product's `FeedEnabled`, `Authorisation` and `LinkedHoldings` capabilities determine which values are valid here, and a product with `FeedEnabled: false` cannot be used at all.\n\nA `200` may carry a populated `Warnings` array. The feed was still created — check `Data.FeedId`.\n\nA feed created with `AccountHolder` authorisation starts at `AuthorityNotRequested` and does not progress until a signed authority form is supplied. See **Upload authority form**.\n\n**Properties that are not in the request schema are ignored rather than rejected.** A misspelt field name is not reported, so check field names against the schema. Invalid values on documented fields return `400`.\n\nThe `Status.Status` value in the create response is the status **code** (for example `AuthorityNotRequested`). The read operations return the status **label** (for example `Authority not sent`) for the same feed.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "$ref": "#/components/parameters/fundCodeParam"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The feed configuration.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/FeedInfo"
              },
              "examples": {
                "cash": {
                  "summary": "Cash feed",
                  "description": "Creates a cash feed for a domestic bank account. `ProductId` is paired with `Cash.BsbCode`. `NewPaymentsPlatform` is required. Cash feeds do not support linked holdings.\n",
                  "value": {
                    "FeedType": "Cash",
                    "DisplayName": "Macquarie CMA",
                    "AccountName": "Smith Family Super Fund ATF Smith Super",
                    "ProductId": "95513ad4-07f7-4a87-918b-8950fc2cbb6e",
                    "DataSource": {
                      "DataSourceType": "UseAutomatedFeed",
                      "AuthorisationType": "AccountHolder",
                      "AuthorityId": null,
                      "AuthorisationVerified": null,
                      "DoNotLoadBefore": "2025-01-07",
                      "DoNotLoadAfter": "2026-01-06"
                    },
                    "Cash": {
                      "Code": "MBL.BACCT1",
                      "BsbCode": "182-512",
                      "AccountNumber": "12345678",
                      "DefaultAccount": false,
                      "LinkedToHoldingAccountId": null,
                      "ManagedAccountCode": null,
                      "NewPaymentsPlatform": {
                        "NPPMethod": "Disabled",
                        "PayID": null
                      },
                      "AssetClassification": {
                        "AssetAllocation": "Cash",
                        "InHouseAsset": false,
                        "GlClassificationCode": "OtherAssets.CashAtBank",
                        "TaxReturnClassificationCode": "AustDirectCash",
                        "CgClassificationCode": "NonCGTAsset",
                        "MarketTypeCode": "BK",
                        "IncludeInPerformanceReports": true
                      }
                    }
                  }
                },
                "broker": {
                  "summary": "Broker feed",
                  "description": "`ProductId` is required. At least one of `Broker.AccountNumber` or `Broker.Hin` must be supplied. `LinkedHoldings` may attach existing holding accounts; `InvestmentCode` is only accepted for products whose **Feed products** entry reports `AcceptsInvestmentCode: true`. Omit `LinkedHoldings`, or send an empty array, to create the feed with no linked holdings.\n",
                  "value": {
                    "FeedType": "Broker",
                    "DisplayName": "CommSec - Main Broker",
                    "AccountName": "Smith Family Super Fund",
                    "ProductId": "f19a8549-ac61-4fb4-8b08-40074797348d",
                    "DataSource": {
                      "DataSourceType": "UseAutomatedFeed",
                      "AuthorisationType": "AccountHolder",
                      "AuthorityId": null,
                      "AuthorisationVerified": false,
                      "DoNotLoadBefore": "2025-07-01",
                      "DoNotLoadAfter": "2027-07-01"
                    },
                    "Broker": {
                      "AccountNumber": "12345678",
                      "Hin": "X1234567890",
                      "LinkedHoldings": []
                    }
                  }
                },
                "platform": {
                  "summary": "Platform feed",
                  "description": "Requires a `WrapAccount` product. This example uses an instalment-warrant product whose **Feed products** entry reports `RequiresInstalmentReceiptNumber: true`, so linked holdings carry `InstalmentReceiptNumber` instead of `InvestmentCode` (the two are mutually exclusive).\n",
                  "value": {
                    "FeedType": "Platform",
                    "DisplayName": "Bell Equity Lever",
                    "AccountName": "Smith Family Super Fund",
                    "ProductId": "bbef3acb-5ecf-4b74-966f-0b1a43f09d48",
                    "DataSource": {
                      "DataSourceType": "UseAutomatedFeed",
                      "AuthorisationType": "AdviserOrDealer",
                      "AuthorityId": "aa11bb22-cc33-4dd4-8ee5-ff6677889900",
                      "AuthorisationVerified": null,
                      "DoNotLoadBefore": "2025-08-01",
                      "DoNotLoadAfter": "2027-09-01"
                    },
                    "Platform": {
                      "AccountNumber": "98765432",
                      "Hin": null,
                      "LinkedHoldings": [
                        {
                          "HoldingAccountId": "c3d4e5f6-a7b8-4c9d-8e0f-2a3b4c5d6e7f",
                          "ManagedAccountCode": null,
                          "InvestmentCode": null,
                          "InstalmentReceiptNumber": "0000012345"
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success (Ok)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedResponseEnvelope"
                },
                "examples": {
                  "cash": {
                    "summary": "Cash feed created",
                    "value": {
                      "Data": {
                        "FeedType": "Cash",
                        "FeedId": "e0a422f3-a89c-4f8d-abb9-d1989a27c5ed",
                        "HoldingAccountId": "31bf5e54-0323-482a-914e-21e670bb975d",
                        "Status": {
                          "Status": "AuthorityNotRequested",
                          "Category": "ActionRequired",
                          "EffectiveDate": "2026-09-08T18:53:16"
                        },
                        "AuthorisationType": "AccountHolder",
                        "AuthorityActivationNumber": null
                      },
                      "Errors": [],
                      "Warnings": []
                    }
                  },
                  "brokerWithWarning": {
                    "summary": "Broker feed created, with a warning",
                    "description": "The feed **was** created — `FeedId` is returned as normal. A populated `Warnings` array on this operation is advisory, not a failure.\n",
                    "value": {
                      "Data": {
                        "FeedType": "Broker",
                        "FeedId": "86888df0-301e-4f30-af94-db85b55e6e76",
                        "HoldingAccountId": null,
                        "Status": {
                          "Status": "AuthorityNotRequested",
                          "Category": "ActionRequired",
                          "EffectiveDate": "2026-09-08T19:08:31"
                        },
                        "AuthorisationType": "AccountHolder",
                        "AuthorityActivationNumber": null
                      },
                      "Errors": [],
                      "Warnings": [
                        {
                          "Code": "DATA_FEED_OBSOLETE_PRODUCT",
                          "Message": "The selected product is obsolete."
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/CreateFeedBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.maintain"
            ]
          }
        ]
      },
      "get": {
        "tags": [
          "Fund"
        ],
        "summary": "Feeds",
        "operationId": "GetAllFeeds",
        "description": "Returns the feeds within a fund, optionally including the holding accounts linked to each feed. The response is unpaginated.\n\n**What is left out.** The list mirrors the fund's feeds console and excludes deleted feeds, unlinked holding accounts, Directly Held Investments, SRN holdings and SMSF DataFlow information. A cash feed whose bank account is suspended is not returned at all. Counts will not always match a raw view of the fund's holdings.\n\nA fund that is not active returns no feed data, and a Consolidated entity returns `200` with an empty array, since consolidated entities cannot hold feeds.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "$ref": "#/components/parameters/fundCodeParam"
          },
          {
            "name": "includeHoldingAccounts",
            "in": "query",
            "required": false,
            "description": "When true, includes the `HoldingAccounts` array on each feed; when false (default), the property is omitted entirely rather than returned empty.\n\nBroker and platform feeds return their linked holding accounts with `Status` of both `Active` and `Suspended`. A cash feed returns only its own bank account. When included, a feed with no linked holding accounts omits the property on this list. **Feed detail** returns an empty array instead.\n",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success (Ok)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedListEnvelope"
                },
                "example": {
                  "Data": [
                    {
                      "FeedId": "b69ed55d-ee44-489c-93a4-1ece5027e238",
                      "FundId": "955c83c7-0710-4fa6-a5f4-c2622db66c20",
                      "AccountName": null,
                      "FeedDescription": "Macquarie CMA",
                      "DefaultDisplayName": "Macquarie CMA - 182-512/12345678",
                      "ExternalIdentifier": "12345678",
                      "Hin": null,
                      "ProductType": "BankAccount",
                      "ProductInfo": {
                        "ProductId": "95513ad4-07f7-4a87-918b-8950fc2cbb6e",
                        "ProductName": "Macquarie Bank Account",
                        "ProviderId": "4e1fd4a9-4d1f-415f-b651-bb32872ce7ad",
                        "ProviderName": "Macquarie Cash"
                      },
                      "FeedStatus": {
                        "Status": "Authority not sent",
                        "Category": "ActionRequired",
                        "EffectiveDate": "2025-01-13T16:29:44"
                      },
                      "FirstProcessed": null,
                      "LastProcessed": null,
                      "Authorisation": {
                        "Type": "AccountHolder",
                        "Adviser": null,
                        "AuthorisationForm": {
                          "FormStatus": "Waiting",
                          "Uploaded": false
                        },
                        "AuthorityResponse": {
                          "ResponseStatus": null,
                          "ResponseDate": null,
                          "ResponseMessage": null
                        },
                        "HasAuthorityProcess": true
                      },
                      "DateCreated": "2025-01-13T16:29:44",
                      "CreatedBy": "partner@example.com.au",
                      "LastUpdated": "2025-01-13T16:29:44",
                      "LastUpdatedBy": "partner@example.com.au",
                      "HoldingAccounts": [
                        {
                          "Id": "330d09a2-24b2-4c18-bf03-ee827eaf7ab0",
                          "Type": "BankAccount",
                          "Code": "MBL.BACCT",
                          "InvestmentCode": null,
                          "ManagedAccountCode": null,
                          "Description": "Macquarie CMA",
                          "Status": "Active",
                          "BankAccountDetails": {
                            "Currency": "AUD",
                            "IsForeign": false,
                            "ForeignCashTreatment": null,
                            "BsbCode": "182-512",
                            "AccountNumber": "12345678",
                            "AccountName": null,
                            "NewPaymentsPlatform": {
                              "NPPMethod": "Disabled",
                              "PayID": null
                            }
                          },
                          "GLInvestmentClassification": {
                            "Code": "OtherAssets.CashAtBank",
                            "Description": "Cash At Bank"
                          },
                          "TaxReturnClassification": {
                            "Code": "AustDirectCash",
                            "Description": "Cash and Term Deposits"
                          }
                        }
                      ]
                    },
                    {
                      "FeedId": "86888df0-301e-4f30-af94-db85b55e6e76",
                      "FundId": "955c83c7-0710-4fa6-a5f4-c2622db66c20",
                      "AccountName": "Ellery Family Super Fund",
                      "FeedDescription": "CommSec - Main Broker",
                      "DefaultDisplayName": "CommSec - Main Broker - X1234567890",
                      "ExternalIdentifier": null,
                      "Hin": "X1234567890",
                      "ProductType": "BrokerAccount",
                      "ProductInfo": {
                        "ProductId": "fd27df5f-392d-49f7-81c6-4b799483a091",
                        "ProductName": "CommSec",
                        "ProviderId": "1c0f9a77-4b2e-4f5a-9a02-5f7d6c8e3b41",
                        "ProviderName": "CommSec"
                      },
                      "FeedStatus": {
                        "Status": "OK",
                        "Category": "Working",
                        "EffectiveDate": "2024-08-02T04:11:07"
                      },
                      "FirstProcessed": "2024-08-02T04:10:55",
                      "LastProcessed": "2026-09-08T07:01:02",
                      "Authorisation": {
                        "Type": "AdviserOrDealer",
                        "Adviser": {
                          "AdviserId": "7e48331b-8a1a-4d31-8573-c89b1d0cd1b1",
                          "AdviserName": "Example Advice Group",
                          "AdviserCode": "96642",
                          "AuthorityId": "139eccbb-2edf-4ad6-b01f-e140a3e20178"
                        },
                        "AuthorisationForm": null,
                        "AuthorityResponse": {
                          "ResponseStatus": null,
                          "ResponseDate": null,
                          "ResponseMessage": null
                        },
                        "HasAuthorityProcess": true
                      },
                      "DateCreated": "2024-08-02T04:10:31",
                      "CreatedBy": "system",
                      "LastUpdated": null,
                      "LastUpdatedBy": null,
                      "HoldingAccounts": [
                        {
                          "Id": "f95b96f9-a1f6-4493-ad07-5aee5fcb25c8",
                          "Type": "InvestmentAccount",
                          "Code": "VAS",
                          "InvestmentCode": null,
                          "ManagedAccountCode": null,
                          "Description": "Vanguard Australian Shares Index ETF",
                          "Status": "Active",
                          "AccountDetails": {
                            "SecurityIssueCode": "VAS",
                            "MarketType": "Listed Securities Market",
                            "MarketCode": "ASX",
                            "IsInhouseAsset": false
                          },
                          "GLInvestmentClassification": {
                            "Code": "UnitTrusts",
                            "Description": "Units In Listed Unit Trusts"
                          },
                          "TaxReturnClassification": {
                            "Code": "AustManagedFundsListedTrusts",
                            "Description": "Listed trusts"
                          }
                        },
                        {
                          "Id": "490933ae-f6bc-4aa8-8299-4c809f87059b",
                          "Type": "InvestmentAccount",
                          "Code": "BHP",
                          "InvestmentCode": null,
                          "ManagedAccountCode": null,
                          "Description": "BHP Group Limited",
                          "Status": "Suspended",
                          "AccountDetails": {
                            "SecurityIssueCode": "BHP",
                            "MarketType": "Listed Securities Market",
                            "MarketCode": "ASX",
                            "IsInhouseAsset": false
                          },
                          "GLInvestmentClassification": {
                            "Code": "ListedShares",
                            "Description": "Shares in Listed Companies"
                          },
                          "TaxReturnClassification": {
                            "Code": "AustDirectListedShares",
                            "Description": "Listed shares"
                          }
                        }
                      ]
                    },
                    {
                      "FeedId": "848f36a2-941f-44f5-8d47-30ca14fbd0ed",
                      "FundId": "955c83c7-0710-4fa6-a5f4-c2622db66c20",
                      "AccountName": "Ellery Family Super Fund",
                      "FeedDescription": "Crestone",
                      "DefaultDisplayName": "Crestone - 317415016",
                      "ExternalIdentifier": "317415016",
                      "Hin": null,
                      "ProductType": "WrapAccount",
                      "ProductInfo": {
                        "ProductId": "10ef2696-bc44-4761-ae93-c3eea1d84013",
                        "ProductName": "Crestone Wealth Management",
                        "ProviderId": "f57a1636-a90b-471a-9ec1-1e44f12bb1fd",
                        "ProviderName": "Crestone"
                      },
                      "FeedStatus": {
                        "Status": "Waiting on provider",
                        "Category": "Waiting",
                        "EffectiveDate": "2026-07-19T02:44:10"
                      },
                      "FirstProcessed": null,
                      "LastProcessed": null,
                      "Authorisation": {
                        "Type": "Online",
                        "Adviser": null,
                        "AuthorisationForm": null,
                        "AuthorityResponse": {
                          "ResponseStatus": null,
                          "ResponseDate": null,
                          "ResponseMessage": null
                        },
                        "HasAuthorityProcess": true
                      },
                      "DateCreated": "2026-07-19T02:44:10",
                      "CreatedBy": "partner@example.com.au",
                      "LastUpdated": null,
                      "LastUpdatedBy": null,
                      "HoldingAccounts": [
                        {
                          "Id": "39f7dd64-c924-4ed3-b6b0-c64672117877",
                          "Type": "ForeignBankAccount",
                          "Code": "Crestone.HKD",
                          "InvestmentCode": null,
                          "ManagedAccountCode": null,
                          "Description": "Crestone HKD Cash Management Account",
                          "Status": "Active",
                          "BankAccountDetails": {
                            "Currency": "HKD",
                            "IsForeign": true,
                            "ForeignCashTreatment": "Retranslation",
                            "BsbCode": null,
                            "AccountNumber": "317415016",
                            "AccountName": "Ellery Family Super Fund",
                            "NewPaymentsPlatform": {
                              "NPPMethod": "Disabled",
                              "PayID": null
                            }
                          },
                          "GLInvestmentClassification": {
                            "Code": "OtherAssets.ForeignCashAtBank",
                            "Description": "Foreign Cash At Bank"
                          },
                          "TaxReturnClassification": {
                            "Code": "IntlOther",
                            "Description": "Other overseas assets"
                          }
                        },
                        {
                          "Id": "2db7d42d-6146-4893-8b0d-1e651cbae4bc",
                          "Type": "BankAccount",
                          "Code": "Crestone.AUD",
                          "InvestmentCode": null,
                          "ManagedAccountCode": "HUB-MA-12",
                          "Description": "Crestone AUD Cash Management Account",
                          "Status": "Active",
                          "BankAccountDetails": {
                            "Currency": "AUD",
                            "IsForeign": false,
                            "ForeignCashTreatment": null,
                            "BsbCode": "067-933",
                            "AccountNumber": "317415016",
                            "AccountName": "Ellery Family Super Fund",
                            "NewPaymentsPlatform": {
                              "NPPMethod": "Disabled",
                              "PayID": null
                            }
                          },
                          "GLInvestmentClassification": {
                            "Code": "OtherAssets.CashAtBank",
                            "Description": "Cash At Bank"
                          },
                          "TaxReturnClassification": {
                            "Code": "AustDirectCash",
                            "Description": "Cash and Term Deposits"
                          }
                        }
                      ]
                    }
                  ],
                  "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/InternalError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.details.read"
            ]
          }
        ]
      }
    },
    "/f/{businessCode}/{fundCode}/feeds/{feedId}": {
      "get": {
        "tags": [
          "Fund"
        ],
        "summary": "Feed detail",
        "operationId": "GetFeedById",
        "description": "Returns a single feed. The response echoes the feed configuration (`FeedType`, `DataSource`, and the matching `Cash`/`Broker`/`Platform` block) plus an `ExtendedFeedInfo` object with product, authorisation, audit and (when requested) linked holding account details.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "$ref": "#/components/parameters/fundCodeParam"
          },
          {
            "$ref": "#/components/parameters/feedIdParam"
          },
          {
            "name": "includeHoldingAccounts",
            "in": "query",
            "required": false,
            "description": "When true, includes the `ExtendedFeedInfo.HoldingAccounts` array, which is an empty array for a feed with no linked holding accounts. When false (default), that property is omitted entirely.\n\nThis controls `HoldingAccounts` only. The `LinkedHoldings` array inside the `Broker` or `Platform` block is always returned.\n",
            "schema": {
              "type": "boolean",
              "default": false
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success (Ok)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedDetailEnvelope"
                },
                "examples": {
                  "cash": {
                    "summary": "Cash feed - automated bank feed awaiting its authority form",
                    "value": {
                      "Data": {
                        "FeedType": "Cash",
                        "DisplayName": "Macquarie CMA",
                        "ProductId": "95513ad4-07f7-4a87-918b-8950fc2cbb6e",
                        "DataSource": {
                          "DataSourceType": "UseAutomatedFeed",
                          "ContainingFeedId": null,
                          "AuthorisationType": "AccountHolder",
                          "AuthorityId": null,
                          "AuthorisationVerified": null,
                          "DoNotLoadBefore": null,
                          "DoNotLoadAfter": null
                        },
                        "Cash": {
                          "Code": "MBL.BACCT",
                          "BsbCode": "182-512",
                          "AccountNumber": "12345678",
                          "DefaultAccount": false,
                          "IsForeign": null,
                          "LinkedToHoldingAccountId": null,
                          "ManagedAccountCode": null,
                          "NewPaymentsPlatform": {
                            "NPPMethod": "Disabled",
                            "PayID": null
                          },
                          "AssetClassification": {
                            "AssetAllocation": "Cash",
                            "InHouseAsset": false,
                            "GlClassificationCode": "OtherAssets.CashAtBank",
                            "TaxReturnClassificationCode": "AustDirectCash",
                            "CgClassificationCode": "NonCGTAsset",
                            "MarketTypeCode": "BK",
                            "IncludeInPerformanceReports": true
                          }
                        },
                        "FeedId": "f069a78e-af07-461f-9e46-c8408df5c798",
                        "HoldingAccountId": "de8ee471-ea98-459e-b2ba-0d6e8e0b0059",
                        "Status": "Authority not sent",
                        "AuthorisationType": "AccountHolder",
                        "ExtendedFeedInfo": {
                          "FeedId": "f069a78e-af07-461f-9e46-c8408df5c798",
                          "FundId": "955c83c7-0710-4fa6-a5f4-c2622db66c20",
                          "AccountName": null,
                          "FeedDescription": "Macquarie CMA",
                          "DefaultDisplayName": "Macquarie CMA - 182-512/12345678",
                          "ExternalIdentifier": "12345678",
                          "Hin": null,
                          "ProductType": "BankAccount",
                          "ProductInfo": {
                            "ProductId": "95513ad4-07f7-4a87-918b-8950fc2cbb6e",
                            "ProductName": "Macquarie Bank Account",
                            "ProviderId": "4e1fd4a9-4d1f-415f-b651-bb32872ce7ad",
                            "ProviderName": "Macquarie Cash"
                          },
                          "FeedStatus": {
                            "Status": "Authority not sent",
                            "Category": "ActionRequired",
                            "EffectiveDate": "2026-09-08T18:53:16"
                          },
                          "FirstProcessed": null,
                          "LastProcessed": null,
                          "Authorisation": {
                            "Type": "AccountHolder",
                            "Adviser": null,
                            "AuthorisationForm": {
                              "FormStatus": "Waiting",
                              "Uploaded": false
                            },
                            "AuthorityResponse": {
                              "ResponseStatus": null,
                              "ResponseDate": null,
                              "ResponseMessage": null
                            },
                            "HasAuthorityProcess": true
                          },
                          "DateCreated": "2026-09-08T18:53:16",
                          "CreatedBy": "system",
                          "LastUpdated": "2026-09-08T18:53:16",
                          "LastUpdatedBy": "partner@example.com.au",
                          "HoldingAccounts": [
                            {
                              "Id": "de8ee471-ea98-459e-b2ba-0d6e8e0b0059",
                              "Type": "BankAccount",
                              "Code": "MBL.BACCT",
                              "InvestmentCode": null,
                              "ManagedAccountCode": null,
                              "Description": "Macquarie CMA",
                              "Status": "Active",
                              "BankAccountDetails": {
                                "Currency": "AUD",
                                "IsForeign": false,
                                "ForeignCashTreatment": null,
                                "BsbCode": "182-512",
                                "AccountNumber": "12345678",
                                "AccountName": null,
                                "NewPaymentsPlatform": {
                                  "NPPMethod": "Disabled",
                                  "PayID": null
                                }
                              },
                              "GLInvestmentClassification": {
                                "Code": "OtherAssets.CashAtBank",
                                "Description": "Cash At Bank"
                              },
                              "TaxReturnClassification": {
                                "Code": "AustDirectCash",
                                "Description": "Cash and Term Deposits"
                              }
                            }
                          ]
                        }
                      },
                      "Errors": []
                    }
                  },
                  "broker": {
                    "summary": "Broker feed - working, adviser authority, two linked holdings",
                    "value": {
                      "Data": {
                        "FeedType": "Broker",
                        "DisplayName": "CommSec - Main Broker",
                        "AccountName": "Ellery Family Super Fund",
                        "ProductId": "fd27df5f-392d-49f7-81c6-4b799483a091",
                        "DataSource": {
                          "DataSourceType": "UseAutomatedFeed",
                          "ContainingFeedId": null,
                          "AuthorisationType": "AdviserOrDealer",
                          "AuthorityId": "139eccbb-2edf-4ad6-b01f-e140a3e20178",
                          "AuthorisationVerified": null,
                          "DoNotLoadBefore": "2024-07-01",
                          "DoNotLoadAfter": null
                        },
                        "Broker": {
                          "AccountNumber": null,
                          "Hin": "X1234567890",
                          "LinkedHoldings": [
                            {
                              "HoldingAccountId": "f95b96f9-a1f6-4493-ad07-5aee5fcb25c8",
                              "ManagedAccountCode": null,
                              "InvestmentCode": null,
                              "InstalmentReceiptNumber": null
                            },
                            {
                              "HoldingAccountId": "490933ae-f6bc-4aa8-8299-4c809f87059b",
                              "ManagedAccountCode": null,
                              "InvestmentCode": null,
                              "InstalmentReceiptNumber": null
                            }
                          ]
                        },
                        "FeedId": "86888df0-301e-4f30-af94-db85b55e6e76",
                        "Status": "OK",
                        "AuthorisationType": "AdviserOrDealer",
                        "ExtendedFeedInfo": {
                          "FeedId": "86888df0-301e-4f30-af94-db85b55e6e76",
                          "FundId": "955c83c7-0710-4fa6-a5f4-c2622db66c20",
                          "AccountName": "Ellery Family Super Fund",
                          "FeedDescription": "CommSec - Main Broker",
                          "DefaultDisplayName": "CommSec - Main Broker - X1234567890",
                          "ExternalIdentifier": null,
                          "Hin": "X1234567890",
                          "ProductType": "BrokerAccount",
                          "ProductInfo": {
                            "ProductId": "fd27df5f-392d-49f7-81c6-4b799483a091",
                            "ProductName": "CommSec",
                            "ProviderId": "1c0f9a77-4b2e-4f5a-9a02-5f7d6c8e3b41",
                            "ProviderName": "CommSec"
                          },
                          "FeedStatus": {
                            "Status": "OK",
                            "Category": "Working",
                            "EffectiveDate": "2024-08-02T04:11:07"
                          },
                          "FirstProcessed": "2024-08-02T04:10:55",
                          "LastProcessed": "2026-09-08T07:01:02",
                          "Authorisation": {
                            "Type": "AdviserOrDealer",
                            "Adviser": {
                              "AdviserId": "7e48331b-8a1a-4d31-8573-c89b1d0cd1b1",
                              "AdviserName": "Example Advice Group",
                              "AdviserCode": "96642",
                              "AuthorityId": "139eccbb-2edf-4ad6-b01f-e140a3e20178"
                            },
                            "AuthorisationForm": null,
                            "AuthorityResponse": {
                              "ResponseStatus": null,
                              "ResponseDate": null,
                              "ResponseMessage": null
                            },
                            "HasAuthorityProcess": true
                          },
                          "DateCreated": "2024-08-02T04:10:31",
                          "CreatedBy": "system",
                          "LastUpdated": null,
                          "LastUpdatedBy": null,
                          "HoldingAccounts": [
                            {
                              "Id": "f95b96f9-a1f6-4493-ad07-5aee5fcb25c8",
                              "Type": "InvestmentAccount",
                              "Code": "VAS",
                              "InvestmentCode": null,
                              "ManagedAccountCode": null,
                              "Description": "Vanguard Australian Shares Index ETF",
                              "Status": "Active",
                              "AccountDetails": {
                                "SecurityIssueCode": "VAS",
                                "MarketType": "Listed Securities Market",
                                "MarketCode": "ASX",
                                "IsInhouseAsset": false
                              },
                              "GLInvestmentClassification": {
                                "Code": "UnitTrusts",
                                "Description": "Units In Listed Unit Trusts"
                              },
                              "TaxReturnClassification": {
                                "Code": "AustManagedFundsListedTrusts",
                                "Description": "Listed trusts"
                              }
                            },
                            {
                              "Id": "490933ae-f6bc-4aa8-8299-4c809f87059b",
                              "Type": "InvestmentAccount",
                              "Code": "BHP",
                              "InvestmentCode": null,
                              "ManagedAccountCode": null,
                              "Description": "BHP Group Limited",
                              "Status": "Suspended",
                              "AccountDetails": {
                                "SecurityIssueCode": "BHP",
                                "MarketType": "Listed Securities Market",
                                "MarketCode": "ASX",
                                "IsInhouseAsset": false
                              },
                              "GLInvestmentClassification": {
                                "Code": "ListedShares",
                                "Description": "Shares in Listed Companies"
                              },
                              "TaxReturnClassification": {
                                "Code": "AustDirectListedShares",
                                "Description": "Listed shares"
                              }
                            }
                          ]
                        }
                      },
                      "Errors": []
                    }
                  },
                  "platform": {
                    "summary": "Platform feed - online authorisation, foreign and domestic cash linked",
                    "value": {
                      "Data": {
                        "FeedType": "Platform",
                        "DisplayName": "Crestone",
                        "AccountName": "Ellery Family Super Fund",
                        "ProductId": "10ef2696-bc44-4761-ae93-c3eea1d84013",
                        "DataSource": {
                          "DataSourceType": "UseAutomatedFeed",
                          "ContainingFeedId": null,
                          "AuthorisationType": "Online",
                          "AuthorityId": null,
                          "AuthorisationVerified": true,
                          "DoNotLoadBefore": null,
                          "DoNotLoadAfter": null
                        },
                        "Platform": {
                          "AccountNumber": "317415016",
                          "Hin": null,
                          "LinkedHoldings": [
                            {
                              "HoldingAccountId": "39f7dd64-c924-4ed3-b6b0-c64672117877",
                              "ManagedAccountCode": null,
                              "InvestmentCode": null,
                              "InstalmentReceiptNumber": null
                            },
                            {
                              "HoldingAccountId": "2db7d42d-6146-4893-8b0d-1e651cbae4bc",
                              "ManagedAccountCode": "HUB-MA-12",
                              "InvestmentCode": null,
                              "InstalmentReceiptNumber": null
                            }
                          ]
                        },
                        "FeedId": "848f36a2-941f-44f5-8d47-30ca14fbd0ed",
                        "Status": "Waiting on provider",
                        "AuthorisationType": "Online",
                        "ExtendedFeedInfo": {
                          "FeedId": "848f36a2-941f-44f5-8d47-30ca14fbd0ed",
                          "FundId": "955c83c7-0710-4fa6-a5f4-c2622db66c20",
                          "AccountName": "Ellery Family Super Fund",
                          "FeedDescription": "Crestone",
                          "DefaultDisplayName": "Crestone - 317415016",
                          "ExternalIdentifier": "317415016",
                          "Hin": null,
                          "ProductType": "WrapAccount",
                          "ProductInfo": {
                            "ProductId": "10ef2696-bc44-4761-ae93-c3eea1d84013",
                            "ProductName": "Crestone Wealth Management",
                            "ProviderId": "f57a1636-a90b-471a-9ec1-1e44f12bb1fd",
                            "ProviderName": "Crestone"
                          },
                          "FeedStatus": {
                            "Status": "Waiting on provider",
                            "Category": "Waiting",
                            "EffectiveDate": "2026-07-19T02:44:10"
                          },
                          "FirstProcessed": null,
                          "LastProcessed": null,
                          "Authorisation": {
                            "Type": "Online",
                            "Adviser": null,
                            "AuthorisationForm": null,
                            "AuthorityResponse": {
                              "ResponseStatus": null,
                              "ResponseDate": null,
                              "ResponseMessage": null
                            },
                            "HasAuthorityProcess": true
                          },
                          "DateCreated": "2026-07-19T02:44:10",
                          "CreatedBy": "partner@example.com.au",
                          "LastUpdated": null,
                          "LastUpdatedBy": null,
                          "HoldingAccounts": [
                            {
                              "Id": "39f7dd64-c924-4ed3-b6b0-c64672117877",
                              "Type": "ForeignBankAccount",
                              "Code": "Crestone.HKD",
                              "InvestmentCode": null,
                              "ManagedAccountCode": null,
                              "Description": "Crestone HKD Cash Management Account",
                              "Status": "Active",
                              "BankAccountDetails": {
                                "Currency": "HKD",
                                "IsForeign": true,
                                "ForeignCashTreatment": "Retranslation",
                                "BsbCode": null,
                                "AccountNumber": "317415016",
                                "AccountName": "Ellery Family Super Fund",
                                "NewPaymentsPlatform": {
                                  "NPPMethod": "Disabled",
                                  "PayID": null
                                }
                              },
                              "GLInvestmentClassification": {
                                "Code": "OtherAssets.ForeignCashAtBank",
                                "Description": "Foreign Cash At Bank"
                              },
                              "TaxReturnClassification": {
                                "Code": "IntlOther",
                                "Description": "Other overseas assets"
                              }
                            },
                            {
                              "Id": "2db7d42d-6146-4893-8b0d-1e651cbae4bc",
                              "Type": "BankAccount",
                              "Code": "Crestone.AUD",
                              "InvestmentCode": null,
                              "ManagedAccountCode": "HUB-MA-12",
                              "Description": "Crestone AUD Cash Management Account",
                              "Status": "Active",
                              "BankAccountDetails": {
                                "Currency": "AUD",
                                "IsForeign": false,
                                "ForeignCashTreatment": null,
                                "BsbCode": "067-933",
                                "AccountNumber": "317415016",
                                "AccountName": "Ellery Family Super Fund",
                                "NewPaymentsPlatform": {
                                  "NPPMethod": "Disabled",
                                  "PayID": null
                                }
                              },
                              "GLInvestmentClassification": {
                                "Code": "OtherAssets.CashAtBank",
                                "Description": "Cash At Bank"
                              },
                              "TaxReturnClassification": {
                                "Code": "AustDirectCash",
                                "Description": "Cash and Term Deposits"
                              }
                            }
                          ]
                        }
                      },
                      "Errors": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/FeedDetailBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.details.read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Fund"
        ],
        "summary": "Update feed",
        "operationId": "UpdateFeed",
        "description": "Fully replaces an existing Cash, Broker or Platform feed with the configuration supplied in the request. Omitted optional values are reset to their defaults; for example, omitting `Cash.DefaultAccount` resets it to `false`, and omitting the `DoNotLoadBefore` date clears it. Read the current feed with **Feed detail** before making a partial change, then send the complete configuration you want to keep. The exception is `AuthorisationType`: sending `null` keeps the feed's existing value.\n\nAs with **New feed**, properties that are not in the request schema are ignored rather than rejected, so check field names against the schema.\n\nThe feed type cannot be changed. A different `FeedType`, an invalid `FeedType`, or a type-specific block that does not match `FeedType` is rejected with `DATA_FEED_KIND_MISMATCH`. Some values cannot be changed once set; for example, changing `Cash.ManagedAccountCode` returns `DATA_FEED_FIELD_IMMUTABLE`.\n\nDo not send `Status`, top-level `AuthorisationVerified` or `DataSource.AuthorisationVerified`. They cannot be changed through this operation and are rejected with `DATA_FEED_FIELD_NOT_ALLOWED`. Use **Update feed status** to request a status transition.\n\nChanging `AuthorisationType` without supplying a replacement `AuthorityId` can clear a linked authority and return `DATA_FEED_AUTHORITY_CLEARED`. `AdviserOrDealer` without an authority returns `DATA_FEED_NO_AUTHORITY_SET` and the update still succeeds.\n\nAn update that keeps the same `AuthorisationType`, such as a rename, leaves the feed's status unchanged. Changing an online feed to another authorisation type and back to `Online` returns it to `WaitingForVerification`, so confirm it again with **Update feed status**.\n\nA `200` may carry a populated `Warnings` array. The update was still applied — check `Data.Status` for the feed's effective status.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "$ref": "#/components/parameters/fundCodeParam"
          },
          {
            "$ref": "#/components/parameters/feedIdParam"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The complete replacement configuration for the feed.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFeedInfo"
              },
              "examples": {
                "cash": {
                  "summary": "Cash feed - rename and set a load-from date",
                  "description": "Updates the Macquarie CMA feed shown in **Feed detail**. Every value the feed should keep is sent again, including the asset classification. `ManagedAccountCode` is sent unchanged, since it cannot be changed.\n",
                  "value": {
                    "FeedType": "Cash",
                    "DisplayName": "Macquarie CMA - Operating",
                    "AccountName": "Ellery Family Super Fund",
                    "ProductId": "95513ad4-07f7-4a87-918b-8950fc2cbb6e",
                    "DataSource": {
                      "DataSourceType": "UseAutomatedFeed",
                      "AuthorisationType": "AccountHolder",
                      "AuthorityId": null,
                      "DoNotLoadBefore": "2025-07-01",
                      "DoNotLoadAfter": null
                    },
                    "Cash": {
                      "Code": "MBL.BACCT",
                      "BsbCode": "182-512",
                      "AccountNumber": "12345678",
                      "DefaultAccount": false,
                      "LinkedToHoldingAccountId": null,
                      "ManagedAccountCode": null,
                      "NewPaymentsPlatform": {
                        "NPPMethod": "Disabled",
                        "PayID": null
                      },
                      "AssetClassification": {
                        "AssetAllocation": "Cash",
                        "InHouseAsset": false,
                        "GlClassificationCode": "OtherAssets.CashAtBank",
                        "TaxReturnClassificationCode": "AustDirectCash",
                        "CgClassificationCode": "NonCGTAsset",
                        "MarketTypeCode": "BK",
                        "IncludeInPerformanceReports": true
                      }
                    }
                  }
                },
                "broker": {
                  "summary": "Broker feed - rename and drop a linked holding",
                  "description": "Updates the CommSec feed shown in **Feed detail**. The adviser authority is sent again so it is kept. Only the VAS holding is sent in `LinkedHoldings`, so the BHP holding is no longer linked to this feed.\n",
                  "value": {
                    "FeedType": "Broker",
                    "DisplayName": "CommSec - Core Portfolio",
                    "AccountName": "Ellery Family Super Fund",
                    "ProductId": "fd27df5f-392d-49f7-81c6-4b799483a091",
                    "DataSource": {
                      "DataSourceType": "UseAutomatedFeed",
                      "AuthorisationType": "AdviserOrDealer",
                      "AuthorityId": "139eccbb-2edf-4ad6-b01f-e140a3e20178",
                      "DoNotLoadBefore": "2024-07-01",
                      "DoNotLoadAfter": null
                    },
                    "Broker": {
                      "AccountNumber": null,
                      "Hin": "X1234567890",
                      "LinkedHoldings": [
                        {
                          "HoldingAccountId": "f95b96f9-a1f6-4493-ad07-5aee5fcb25c8",
                          "ManagedAccountCode": null,
                          "InvestmentCode": null,
                          "InstalmentReceiptNumber": null
                        }
                      ]
                    }
                  }
                },
                "platform": {
                  "summary": "Platform feed - rename",
                  "description": "Updates the Crestone feed shown in **Feed detail**. Both linked cash accounts are sent again so they stay linked. `AuthorisationVerified` is not sent; it cannot be changed through this operation.\n",
                  "value": {
                    "FeedType": "Platform",
                    "DisplayName": "Crestone - Global Cash",
                    "AccountName": "Ellery Family Super Fund",
                    "ProductId": "10ef2696-bc44-4761-ae93-c3eea1d84013",
                    "DataSource": {
                      "DataSourceType": "UseAutomatedFeed",
                      "AuthorisationType": "Online",
                      "AuthorityId": null,
                      "DoNotLoadBefore": null,
                      "DoNotLoadAfter": null
                    },
                    "Platform": {
                      "AccountNumber": "317415016",
                      "Hin": null,
                      "LinkedHoldings": [
                        {
                          "HoldingAccountId": "39f7dd64-c924-4ed3-b6b0-c64672117877",
                          "ManagedAccountCode": null,
                          "InvestmentCode": null,
                          "InstalmentReceiptNumber": null
                        },
                        {
                          "HoldingAccountId": "2db7d42d-6146-4893-8b0d-1e651cbae4bc",
                          "ManagedAccountCode": "HUB-MA-12",
                          "InvestmentCode": null,
                          "InstalmentReceiptNumber": null
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The feed was updated. `Data.Status` holds the feed's effective status. Warnings may be returned even when the update succeeds.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedResponseEnvelope"
                },
                "examples": {
                  "cash": {
                    "summary": "Cash feed updated",
                    "value": {
                      "Data": {
                        "FeedType": "Cash",
                        "FeedId": "f069a78e-af07-461f-9e46-c8408df5c798",
                        "HoldingAccountId": "de8ee471-ea98-459e-b2ba-0d6e8e0b0059",
                        "Status": {
                          "Status": "AuthorityNotRequested",
                          "Category": "ActionRequired",
                          "EffectiveDate": "2026-09-08T18:53:16"
                        },
                        "AuthorisationType": "AccountHolder",
                        "AuthorityActivationNumber": null
                      },
                      "Errors": [],
                      "Warnings": []
                    }
                  },
                  "broker": {
                    "summary": "Broker feed updated",
                    "value": {
                      "Data": {
                        "FeedType": "Broker",
                        "FeedId": "86888df0-301e-4f30-af94-db85b55e6e76",
                        "HoldingAccountId": null,
                        "Status": {
                          "Status": "Bonza",
                          "Category": "Working",
                          "EffectiveDate": "2024-08-02T04:11:07"
                        },
                        "AuthorisationType": "AdviserOrDealer",
                        "AuthorityActivationNumber": null
                      },
                      "Errors": [],
                      "Warnings": []
                    }
                  },
                  "platform": {
                    "summary": "Platform feed updated",
                    "description": "The Crestone feed keeps `AuthorisationType: Online`, so it stays in `WaitingOnProvider`.\n",
                    "value": {
                      "Data": {
                        "FeedType": "Platform",
                        "FeedId": "848f36a2-941f-44f5-8d47-30ca14fbd0ed",
                        "HoldingAccountId": null,
                        "Status": {
                          "Status": "WaitingOnProvider",
                          "Category": "Waiting",
                          "EffectiveDate": "2026-08-19T01:26:38"
                        },
                        "AuthorisationType": "Online",
                        "AuthorityActivationNumber": null
                      },
                      "Errors": [],
                      "Warnings": []
                    }
                  },
                  "brokerNoAuthority": {
                    "summary": "Broker feed updated, with an authority warning",
                    "description": "`AdviserOrDealer` was sent without an `AuthorityId`. The feed **was** updated, but it moves to `NoAuthoritySet` and receives no data until an authority is attached.\n",
                    "value": {
                      "Data": {
                        "FeedType": "Broker",
                        "FeedId": "86888df0-301e-4f30-af94-db85b55e6e76",
                        "HoldingAccountId": null,
                        "Status": {
                          "Status": "NoAuthoritySet",
                          "Category": "ActionRequired",
                          "EffectiveDate": "2026-10-23T09:14:52"
                        },
                        "AuthorisationType": "AdviserOrDealer",
                        "AuthorityActivationNumber": null
                      },
                      "Errors": [],
                      "Warnings": [
                        {
                          "Code": "DATA_FEED_NO_AUTHORITY_SET",
                          "Message": "An authority is required for this holding reference to receive automated feeds data"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/UpdateFeedBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.maintain"
            ]
          }
        ]
      }
    },
    "/f/{businessCode}/{fundCode}/feeds/{feedId}/status": {
      "put": {
        "tags": [
          "Fund"
        ],
        "summary": "Update feed status",
        "operationId": "UpdateFeedStatus",
        "description": "Requests a status transition for a feed, such as confirming that your business is authorised to receive data for an online feed.\n\nSend a status **code**, not the label returned by **Feeds** and **Feed detail**. Codes are matched case-insensitively. A missing, null or blank `Status` is rejected with `DATA_FEED_FIELD_REQUIRED`, and a transition that is not allowed from the feed's current status is rejected with `DATA_FEED_STATUS_TRANSITION_NOT_ALLOWED`.\n\n**The effective status may differ from the one requested.** `Data.Status.Status` is the status after processing. When the system adjusts the request, the operation returns `200` with `DATA_FEED_STATUS_ADJUSTED`. Moving an online feed to `WaitingOnProvider` returns `DATA_FEED_AUTHORISATION_CONFIRMED`. Requesting the feed's current status is accepted without a warning.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "$ref": "#/components/parameters/fundCodeParam"
          },
          {
            "$ref": "#/components/parameters/feedIdParam"
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The requested status.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateFeedStatusRequest"
              },
              "examples": {
                "confirmAuthorisation": {
                  "summary": "Confirm authorisation on an online feed",
                  "value": {
                    "Status": "WaitingOnProvider"
                  }
                },
                "resetAuthority": {
                  "summary": "Return a feed to authority not sent",
                  "value": {
                    "Status": "AuthorityNotRequested"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The request was processed. The effective status may differ from the requested status, so read `Data.Status` and `Warnings` to see the result.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedResponseEnvelope"
                },
                "examples": {
                  "authorisationConfirmed": {
                    "summary": "Online feed authorisation confirmed",
                    "value": {
                      "Data": {
                        "FeedType": "Platform",
                        "FeedId": "848f36a2-941f-44f5-8d47-30ca14fbd0ed",
                        "HoldingAccountId": null,
                        "Status": {
                          "Status": "WaitingOnProvider",
                          "Category": "Waiting",
                          "EffectiveDate": "2026-08-19T01:26:38"
                        },
                        "AuthorisationType": "Online",
                        "AuthorityActivationNumber": null
                      },
                      "Errors": [],
                      "Warnings": [
                        {
                          "Code": "DATA_FEED_AUTHORISATION_CONFIRMED",
                          "Message": "You have confirmed your Business is authorised to receive the feed for this account."
                        }
                      ]
                    }
                  },
                  "adjusted": {
                    "summary": "Requested status adjusted by the system",
                    "description": "`AuthorityNotRequested` was requested for an online feed. The system applied `WaitingForVerification` instead.\n",
                    "value": {
                      "Data": {
                        "FeedType": "Platform",
                        "FeedId": "848f36a2-941f-44f5-8d47-30ca14fbd0ed",
                        "HoldingAccountId": null,
                        "Status": {
                          "Status": "WaitingForVerification",
                          "Category": "ActionRequired",
                          "EffectiveDate": "2026-08-19T01:26:38"
                        },
                        "AuthorisationType": "Online",
                        "AuthorityActivationNumber": null
                      },
                      "Errors": [],
                      "Warnings": [
                        {
                          "Code": "DATA_FEED_STATUS_ADJUSTED",
                          "Message": "The requested status 'AuthorityNotRequested' was adjusted by the system. Effective status is 'WaitingForVerification'."
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/UpdateFeedStatusBadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.maintain"
            ]
          }
        ]
      }
    },
    "/f/{businessCode}/{fundCode}/feeds/{feedId}/upload-authority-form": {
      "post": {
        "tags": [
          "Fund"
        ],
        "summary": "Upload authority form",
        "operationId": "UploadAuthorityForm",
        "description": "Uploads a signed authority form for a feed that uses `AccountHolder` authorisation. A feed created with that authorisation type starts at `AuthorityNotRequested` (`Authority not sent` on read) and does not progress until a signed form has been uploaded and either recognised or verified.\n\nSend the PDF as the raw request body with `Content-Type: application/pdf`. The file name must be supplied in a `Content-Disposition` header; without it the request fails with `400 REQUIRED`.\n\n**A 200 does not mean the form was accepted.** Class reads a barcode from the uploaded form and matches it against the feed. If the barcode does not match, or the file has no barcode at all, the upload still returns `200` with a warning in `Warnings` and the form is held for manual verification. Only an empty `Warnings` array means the form was recognised.\n\nWarning messages are written for the Class web app and may refer to its screens. Track the form's progress through `Authorisation.AuthorisationForm.FormStatus` on **Feed detail**.\n\nWarnings on this operation are **plain strings**, unlike **New feed**, which returns objects with a `Code` and a `Message`.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "$ref": "#/components/parameters/fundCodeParam"
          },
          {
            "$ref": "#/components/parameters/feedIdParam"
          },
          {
            "name": "Content-Disposition",
            "in": "header",
            "required": true,
            "description": "Carries the file name, which is required. For example `attachment; filename=\"authority-form.pdf\"`.\n",
            "schema": {
              "type": "string",
              "example": "attachment; filename=\"authority-form.pdf\""
            }
          }
        ],
        "requestBody": {
          "required": true,
          "description": "The signed authority form, as a raw PDF body.",
          "content": {
            "application/pdf": {
              "schema": {
                "type": "string",
                "format": "binary"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The file was received. An empty `Warnings` array means the form was recognised and matched to the feed. A populated `Warnings` array means it was not, and the form is held for manual verification.\n",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UploadAuthorityFormEnvelope"
                },
                "examples": {
                  "accepted": {
                    "summary": "Form recognised",
                    "value": {
                      "Data": {
                        "Warnings": []
                      },
                      "Errors": []
                    }
                  },
                  "barcodeMismatch": {
                    "summary": "Barcode did not match this feed",
                    "description": "The form was stored but not matched. The feed does not progress until the form is verified.\n",
                    "value": {
                      "Data": {
                        "Warnings": [
                          "Verification Required: The uploaded authority form barcode for this account was not recognised or it doesn't match the expected barcode: 87000099DA. If the form has been appropriately completed and signed, please verify below."
                        ]
                      },
                      "Errors": []
                    }
                  },
                  "noBarcode": {
                    "summary": "File had no recognisable barcode",
                    "value": {
                      "Data": {
                        "Warnings": [
                          "Verification Required: The uploaded authority form for this account was not recognised or does not contain a barcode. If the form has been appropriately completed and signed, please verify below."
                        ]
                      },
                      "Errors": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "The request is invalid. Returned when no file name was supplied, or when `feedId` is not a GUID.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "Data": {
                      "type": "object",
                      "properties": {
                        "Warnings": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    },
                    "Errors": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ApiError"
                      }
                    }
                  }
                },
                "examples": {
                  "missingFileName": {
                    "summary": "No file name supplied",
                    "value": {
                      "Data": {
                        "Warnings": []
                      },
                      "Errors": [
                        {
                          "Code": "REQUIRED",
                          "Message": "File name is required"
                        }
                      ]
                    }
                  },
                  "invalidFeedId": {
                    "summary": "feedId is not a GUID",
                    "value": {
                      "Data": {
                        "Warnings": []
                      },
                      "Errors": [
                        {
                          "Code": "API_INVALID_PARAMETER",
                          "Message": "The feedId parameter is invalid"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.maintain"
            ]
          }
        ]
      }
    },
    "/b/{businessCode}/feeds/products": {
      "get": {
        "tags": [
          "Business"
        ],
        "summary": "Feed products",
        "operationId": "GetFeedProducts",
        "description": "Returns the products available for a feed type, along with per-product authorisation, managed-account and linked-holding capabilities. Call this before **New feed**. For cash, supply a `bsb` to resolve the financial institution and its bank products.\n\n**The list is large and unpaginated.** Broker and Platform each return hundreds of entries in a single response, and a substantial share have `FeedEnabled: false` and cannot be used to create a feed. There is no query parameter for `FeedEnabled`, so exclude those products on your side before offering a list for selection. To reduce the size of the response itself, use the `name` parameter to filter the results.\n\n**Some products are never returned.** Obsolete products, the `TermDeposit` and `Other` product types, placeholders such as Directly Held and No Product Required, and products your business is not entitled to are excluded from the list. A product may therefore be absent even though it exists. This is separate from the `FeedEnabled: false` products described above, which are returned.\n\n**Open Banking.** A product named Open Banking may be returned with `FeedEnabled: true` and `SupportsOpenBanking: true`. Open Banking feeds cannot be created through this API, and **New feed** rejects it with `DATA_FEED_UNSUPPORTED_SOURCE_TYPE`. Exclude it from selection.\n\nBusiness-level flags and product-level flags are independent. A product flag being `true` does not mean the feature is enabled for your business, so check both.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/businessCodeParam"
          },
          {
            "name": "feedType",
            "in": "query",
            "required": true,
            "description": "The feed type to list products for.",
            "schema": {
              "type": "string",
              "enum": [
                "Cash",
                "Broker",
                "Platform"
              ]
            }
          },
          {
            "name": "name",
            "in": "query",
            "required": false,
            "description": "Case-insensitive fragment match on the product name, for Broker and Platform. Passing `Bell` returns every product whose name contains it. Omitted or empty returns all products for the feed type. Ignored for Cash, where the BSB resolves the products instead.\n",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bsb",
            "in": "query",
            "required": false,
            "description": "**Required when `feedType` is `Cash`** and rejected for Broker or Platform. Format `XXX-XXX` or six digits.\n\nA malformed BSB returns `400 DATA_FEED_INVALID_BSB` with no lookup performed and no payload. A well-formed BSB always returns `200` with a `BsbAvailability` object, even when the BSB cannot be used for a feed.\n",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success (Ok)",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FeedProductListEnvelope"
                },
                "examples": {
                  "broker": {
                    "summary": "Broker - a slice of the product list",
                    "description": "Shows an enabled product, one requiring an instalment receipt number, one accepting an investment code, and a disabled product with its authorisation block emptied out.",
                    "value": {
                      "Data": {
                        "FeedType": "Broker",
                        "BsbAvailability": null,
                        "FinancialInstitution": null,
                        "OpenBankingEnabledForBusiness": false,
                        "ManagedAccountSupportEnabledForBusiness": true,
                        "Items": [
                          {
                            "ProductId": "fd27df5f-392d-49f7-81c6-4b799483a091",
                            "Name": "CommSec",
                            "ProductType": "BrokerAccount",
                            "ProviderId": "1c0f9a77-4b2e-4f5a-9a02-5f7d6c8e3b41",
                            "ProviderName": "CommSec",
                            "FeedEnabled": true,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": false,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": false,
                              "RequiresInstalmentReceiptNumber": false
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [
                                "AccountHolder",
                                "AdviserOrDealer"
                              ],
                              "RequiresAuthority": true,
                              "AuthorityTypeConfigured": true,
                              "IsOnlineAuthorityTokenEnabled": false,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": "AccountHolder"
                            }
                          },
                          {
                            "ProductId": "3b8e1f60-5a94-4c27-b0d3-9f61ca24e8b5",
                            "Name": "Bell Potter Online",
                            "ProductType": "BrokerAccount",
                            "ProviderId": "d51a7c34-6e08-42b9-8f77-1b3c05de92a6",
                            "ProviderName": "Bell Potter",
                            "FeedEnabled": true,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": false,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": true,
                              "RequiresInstalmentReceiptNumber": false
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [
                                "AdviserOrDealer"
                              ],
                              "RequiresAuthority": true,
                              "AuthorityTypeConfigured": true,
                              "IsOnlineAuthorityTokenEnabled": false,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": "AdviserOrDealer"
                            }
                          },
                          {
                            "ProductId": "9a5c2d18-7b41-4e36-95af-3c8072be14d9",
                            "Name": "SelfWealth",
                            "ProductType": "BrokerAccount",
                            "ProviderId": "c47f0b25-8d13-49a0-b6e2-7a95f31cd806",
                            "ProviderName": "SelfWealth",
                            "FeedEnabled": true,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": false,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": false,
                              "RequiresInstalmentReceiptNumber": false
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [
                                "Online"
                              ],
                              "RequiresAuthority": true,
                              "AuthorityTypeConfigured": true,
                              "IsOnlineAuthorityTokenEnabled": true,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": "Online"
                            }
                          },
                          {
                            "ProductId": "e2704f83-1c69-4d5b-8a34-b7f1d09e6c52",
                            "Name": "Legacy Broking Services",
                            "ProductType": "BrokerAccount",
                            "ProviderId": null,
                            "ProviderName": null,
                            "FeedEnabled": false,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": false,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": false,
                              "RequiresInstalmentReceiptNumber": false
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [],
                              "RequiresAuthority": false,
                              "AuthorityTypeConfigured": false,
                              "IsOnlineAuthorityTokenEnabled": false,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": null
                            }
                          }
                        ]
                      },
                      "Errors": [],
                      "Warnings": []
                    }
                  },
                  "platform": {
                    "summary": "Platform - two wrap products",
                    "value": {
                      "Data": {
                        "FeedType": "Platform",
                        "BsbAvailability": null,
                        "FinancialInstitution": null,
                        "OpenBankingEnabledForBusiness": false,
                        "ManagedAccountSupportEnabledForBusiness": true,
                        "Items": [
                          {
                            "ProductId": "bbef3acb-5ecf-4b74-966f-0b1a43f09d48",
                            "Name": "Bell Equity Lever",
                            "ProductType": "WrapAccount",
                            "ProviderId": "26898a1b-434d-4847-a27c-e9b5be4aa9d3",
                            "ProviderName": "Bell Equity Lever",
                            "FeedEnabled": true,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": false,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": false,
                              "RequiresInstalmentReceiptNumber": true
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [
                                "AdviserOrDealer"
                              ],
                              "RequiresAuthority": false,
                              "AuthorityTypeConfigured": true,
                              "IsOnlineAuthorityTokenEnabled": false,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": "AdviserOrDealer"
                            }
                          },
                          {
                            "ProductId": "10ef2696-bc44-4761-ae93-c3eea1d84013",
                            "Name": "Crestone Wealth Management",
                            "ProductType": "WrapAccount",
                            "ProviderId": "f57a1636-a90b-471a-9ec1-1e44f12bb1fd",
                            "ProviderName": "Crestone",
                            "FeedEnabled": true,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": true,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": false,
                              "RequiresInstalmentReceiptNumber": false
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [
                                "AccountHolder",
                                "Online"
                              ],
                              "RequiresAuthority": true,
                              "AuthorityTypeConfigured": true,
                              "IsOnlineAuthorityTokenEnabled": false,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": "AccountHolder"
                            }
                          }
                        ]
                      },
                      "Errors": [],
                      "Warnings": []
                    }
                  },
                  "cash": {
                    "summary": "Cash - BSB resolved, three bank products",
                    "value": {
                      "Data": {
                        "FeedType": "Cash",
                        "BsbAvailability": {
                          "Bsb": "182-512",
                          "Status": "Available",
                          "UnsupportedBsb": false,
                          "HasFinancialInstitution": true,
                          "HasFeedProducts": true,
                          "Message": null
                        },
                        "FinancialInstitution": {
                          "Id": "f9638409-4f7e-418e-97fa-357d11dc20e2",
                          "Code": "MBL",
                          "Name": "Macquarie Bank Limited",
                          "BranchName": "Macquarie Bank Limited"
                        },
                        "OpenBankingEnabledForBusiness": false,
                        "ManagedAccountSupportEnabledForBusiness": true,
                        "Items": [
                          {
                            "ProductId": "95513ad4-07f7-4a87-918b-8950fc2cbb6e",
                            "Name": "Macquarie Bank Account",
                            "ProductType": "BankAccount",
                            "ProviderId": "4e1fd4a9-4d1f-415f-b651-bb32872ce7ad",
                            "ProviderName": "Macquarie Cash",
                            "FeedEnabled": true,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": false,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": false,
                              "RequiresInstalmentReceiptNumber": false
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [
                                "AccountHolder",
                                "AdviserOrDealer"
                              ],
                              "RequiresAuthority": true,
                              "AuthorityTypeConfigured": true,
                              "IsOnlineAuthorityTokenEnabled": false,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": "AccountHolder"
                            }
                          },
                          {
                            "ProductId": "6c0d5b91-2f47-4a63-9e18-84b0f2c7d5aa",
                            "Name": "Macquarie Cash Management Account",
                            "ProductType": "BankAccount",
                            "ProviderId": "4e1fd4a9-4d1f-415f-b651-bb32872ce7ad",
                            "ProviderName": "Macquarie Cash",
                            "FeedEnabled": true,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": false,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": false,
                              "RequiresInstalmentReceiptNumber": false
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [
                                "AccountHolder",
                                "AdviserOrDealer"
                              ],
                              "RequiresAuthority": true,
                              "AuthorityTypeConfigured": true,
                              "IsOnlineAuthorityTokenEnabled": false,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": "AccountHolder"
                            }
                          },
                          {
                            "ProductId": "b7412e08-9c3d-4f52-8a71-6d90e35c1f24",
                            "Name": "Macquarie Accelerator Account",
                            "ProductType": "BankAccount",
                            "ProviderId": "4e1fd4a9-4d1f-415f-b651-bb32872ce7ad",
                            "ProviderName": "Macquarie Cash",
                            "FeedEnabled": false,
                            "SupportsOpenBanking": false,
                            "SupportsManagedAccount": false,
                            "LinkedHoldings": {
                              "AcceptsInvestmentCode": false,
                              "RequiresInstalmentReceiptNumber": false
                            },
                            "Authorisation": {
                              "SupportedAuthorisationTypes": [],
                              "RequiresAuthority": false,
                              "AuthorityTypeConfigured": false,
                              "IsOnlineAuthorityTokenEnabled": false,
                              "IsSupportedForAllAuthorizationType": false,
                              "DefaultAuthorisationType": null
                            }
                          }
                        ]
                      },
                      "Errors": [],
                      "Warnings": []
                    }
                  },
                  "cashNoProducts": {
                    "summary": "Cash - BSB resolved, no feed products",
                    "value": {
                      "Data": {
                        "FeedType": "Cash",
                        "BsbAvailability": {
                          "Bsb": "012-345",
                          "Status": "NoFeedProducts",
                          "UnsupportedBsb": false,
                          "HasFinancialInstitution": true,
                          "HasFeedProducts": false,
                          "Message": "No feed products available for this financial institution."
                        },
                        "FinancialInstitution": {
                          "Id": "3f9b1c02-7e64-4d18-9a55-2c6d81f4ab37",
                          "Code": "EXBNK",
                          "Name": "Example Bank Limited",
                          "BranchName": "Example Bank Limited"
                        },
                        "OpenBankingEnabledForBusiness": false,
                        "ManagedAccountSupportEnabledForBusiness": true,
                        "Items": []
                      },
                      "Errors": [],
                      "Warnings": []
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "The request is invalid. A well-formed BSB that cannot be used is **not** an error — that returns `200` with a `BsbAvailability` status.\n",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "Errors": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ApiError"
                      }
                    },
                    "Warnings": {
                      "type": "array",
                      "items": {
                        "$ref": "#/components/schemas/ApiWarning"
                      }
                    }
                  }
                },
                "examples": {
                  "invalidFeedType": {
                    "summary": "feedType missing or unrecognised",
                    "value": {
                      "Errors": [
                        {
                          "Code": "DATA_FEED_INVALID_KIND",
                          "Message": "FeedType is required and must equal Broker, Platform or Cash."
                        }
                      ],
                      "Warnings": []
                    }
                  },
                  "cashWithoutBsb": {
                    "summary": "Cash request with no bsb",
                    "value": {
                      "Errors": [
                        {
                          "Code": "DATA_FEED_FIELD_REQUIRED",
                          "Message": "Field 'bsb' is required."
                        }
                      ],
                      "Warnings": []
                    }
                  },
                  "malformedBsb": {
                    "summary": "bsb is not a valid BSB",
                    "value": {
                      "Errors": [
                        {
                          "Code": "DATA_FEED_INVALID_BSB",
                          "Message": "BSB must be in format XXX-XXX or XXXXXX (6 digits)."
                        }
                      ],
                      "Warnings": []
                    }
                  },
                  "bsbNotAllowed": {
                    "summary": "bsb supplied for Broker or Platform",
                    "value": {
                      "Errors": [
                        {
                          "Code": "DATA_FEED_UNSUPPORTED_PROPERTY",
                          "Message": "Query parameter 'bsb' is not allowed when feedType is 'Broker'."
                        }
                      ],
                      "Warnings": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "500": {
            "$ref": "#/components/responses/InternalError"
          },
          "default": {
            "$ref": "#/components/responses/UnexpectedError"
          }
        },
        "security": [
          {
            "Class_oAuth": [
              "fund.details.read"
            ]
          }
        ]
      }
    }
  },
  "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"
        }
      },
      "feedIdParam": {
        "name": "feedId",
        "in": "path",
        "description": "The unique identifier (`FeedId`) of the feed, as returned by **New feed** or **Feeds**.",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uuid"
        }
      }
    },
    "responses": {
      "BadRequest": {
        "description": "The request is invalid. For example, `API_MODEL_BINDING` when a query parameter cannot be bound (such as a non-boolean `includeHoldingAccounts`). Note that quote characters in this message are HTML-escaped in the actual response.\n",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApiError"
                  }
                }
              }
            },
            "example": {
              "Errors": [
                {
                  "Code": "API_MODEL_BINDING",
                  "Message": "The request failed due to a model binding error. Field: includeHoldingAccounts. Error: The value 'good' is not valid for Boolean."
                }
              ]
            }
          }
        }
      },
      "CreateFeedBadRequest": {
        "description": "The request was rejected and no feed was created. `Data` is null and `Errors` lists the failures found, which is often more than one. An invalid `FeedType` or a malformed GUID stops validation at that point, so correct those and resubmit to see any remaining errors. Every `DATA_FEED_*` code in the **Errors and warnings** reference can be returned here.\n",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Data": {
                  "type": "null"
                },
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApiError"
                  }
                },
                "Warnings": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApiWarning"
                  }
                }
              }
            },
            "examples": {
              "invalidKind": {
                "summary": "FeedType invalid",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "DATA_FEED_INVALID_KIND",
                      "Message": "FeedType is required and must equal Broker, Platform or Cash."
                    }
                  ],
                  "Warnings": []
                }
              },
              "linkedHolding": {
                "summary": "Linked holdings — two failures in one response",
                "description": "Each invalid linked holding is reported separately. Surface all entries in `Errors`, not just the first.\n",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "DATA_FEED_LINKED_HOLDING_FIELD_MISMATCH",
                      "Message": "The supplied InvestmentCode or InstalmentReceiptNumber is not valid for the selected product in linked holding 'ab40091d-03bf-4b8b-b6f6-0e9f8c1ec837'."
                    },
                    {
                      "Code": "DATA_FEED_LINKED_HOLDING_NOT_FOUND",
                      "Message": "HoldingAccountId '8c277db3-3ef9-4a59-b9a6-5e761229b5b6' must reference an active holding account in the same fund."
                    }
                  ],
                  "Warnings": []
                }
              }
            }
          }
        }
      },
      "FeedDetailBadRequest": {
        "description": "The request is invalid. `feedId` must be a GUID, and `includeHoldingAccounts` must be a boolean. Quote characters in the model binding message are HTML-escaped in the actual response.\n",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Data": {
                  "type": "null"
                },
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApiError"
                  }
                }
              }
            },
            "examples": {
              "invalidFeedId": {
                "summary": "feedId is not a GUID",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "API_INVALID_PARAMETER",
                      "Message": "The feedId parameter is invalid"
                    }
                  ]
                }
              },
              "modelBinding": {
                "summary": "includeHoldingAccounts is not a boolean",
                "value": {
                  "Errors": [
                    {
                      "Code": "API_MODEL_BINDING",
                      "Message": "The request failed due to a model binding error. Field: includeHoldingAccounts. Error: The value 'good' is not valid for Boolean."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "UpdateFeedBadRequest": {
        "description": "The replacement configuration was rejected and the feed was not changed. `Data` is null and `Errors` lists the failures found, which is often more than one.\n",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Data": {
                  "type": "null"
                },
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApiError"
                  }
                },
                "Warnings": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApiWarning"
                  }
                }
              }
            },
            "examples": {
              "fieldNotAllowed": {
                "summary": "Read-only and immutable fields supplied",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "DATA_FEED_FIELD_NOT_ALLOWED",
                      "Message": "Field 'dataSource.authorisationVerified' is not allowed on this endpoint."
                    },
                    {
                      "Code": "DATA_FEED_FIELD_IMMUTABLE",
                      "Message": "Field 'cash.managedAccountCode' cannot be changed for this feed."
                    }
                  ],
                  "Warnings": []
                }
              },
              "requiredFieldsMissing": {
                "summary": "Required fields missing",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "DATA_FEED_FIELD_REQUIRED",
                      "Message": "Field 'AccountName' is required."
                    },
                    {
                      "Code": "DATA_FEED_FIELD_REQUIRED",
                      "Message": "Field 'DisplayName' is required."
                    }
                  ],
                  "Warnings": []
                }
              },
              "feedTypeMismatch": {
                "summary": "Feed type cannot be changed",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "DATA_FEED_KIND_MISMATCH",
                      "Message": "The supplied feed configuration does not match the declared FeedType."
                    }
                  ],
                  "Warnings": []
                }
              },
              "nonDemoProduct": {
                "summary": "Demo-only product in a non-demo fund",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "PRODUCT_NOT_ALLOWED_IN_NON_DEMO_FUND",
                      "Message": "The selected product is only allowed in demo funds."
                    }
                  ],
                  "Warnings": []
                }
              }
            }
          }
        }
      },
      "UpdateFeedStatusBadRequest": {
        "description": "The status request was rejected and the feed was not changed.\n",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Data": {
                  "type": "null"
                },
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApiError"
                  }
                },
                "Warnings": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ApiWarning"
                  }
                }
              }
            },
            "examples": {
              "transitionNotAllowed": {
                "summary": "Transition not allowed from the current status",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "DATA_FEED_STATUS_TRANSITION_NOT_ALLOWED",
                      "Message": "The requested feed status transition is not allowed."
                    }
                  ],
                  "Warnings": []
                }
              },
              "statusRequired": {
                "summary": "Status missing, null or blank",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "DATA_FEED_FIELD_REQUIRED",
                      "Message": "Field 'status' is required."
                    }
                  ],
                  "Warnings": []
                }
              },
              "invalidFeedId": {
                "summary": "feedId is not a GUID",
                "value": {
                  "Data": null,
                  "Errors": [
                    {
                      "Code": "API_INVALID_PARAMETER",
                      "Message": "The feedId parameter is invalid"
                    }
                  ],
                  "Warnings": []
                }
              },
              "modelBinding": {
                "summary": "Request body is malformed",
                "value": {
                  "Errors": [
                    {
                      "Code": "API_MODEL_BINDING",
                      "Message": "The request failed due to a model binding error. Field: request.Status."
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "Unauthorized": {
        "description": "Unauthorized",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UnauthorizedErrorCommon"
                  }
                }
              }
            }
          }
        }
      },
      "Forbidden": {
        "description": "Forbidden",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ForbiddenErrorCommon"
                  }
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not available or user does not have access to the fund",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResourceUnavailableErrorCommon"
                  }
                }
              }
            }
          }
        }
      },
      "InternalError": {
        "description": "Internal Server Error",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InternalErrorCommon"
                  }
                }
              }
            }
          }
        }
      },
      "UnexpectedError": {
        "description": "Unexpected error",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "Errors": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InternalErrorCommon"
                  }
                }
              }
            }
          }
        }
      }
    },
    "schemas": {
      "FeedInfo": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/CashFeedInfo"
          },
          {
            "$ref": "#/components/schemas/BrokerFeedInfo"
          },
          {
            "$ref": "#/components/schemas/PlatformFeedInfo"
          }
        ],
        "discriminator": {
          "propertyName": "FeedType",
          "mapping": {
            "Cash": "#/components/schemas/CashFeedInfo",
            "Broker": "#/components/schemas/BrokerFeedInfo",
            "Platform": "#/components/schemas/PlatformFeedInfo"
          }
        }
      },
      "FeedInfoBase": {
        "type": "object",
        "required": [
          "FeedType",
          "DisplayName",
          "AccountName",
          "DataSource"
        ],
        "properties": {
          "FeedType": {
            "type": "string",
            "enum": [
              "Cash",
              "Broker",
              "Platform"
            ]
          },
          "DisplayName": {
            "type": "string",
            "description": "A display name for the feed."
          },
          "AccountName": {
            "type": "string",
            "description": "The full account name (max 200 characters)."
          },
          "ProductId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The product identifier from **Feed products**. Required for Broker and Platform. On a cash feed, send it together with `Cash.BsbCode`, or omit both.\n"
          },
          "DataSource": {
            "$ref": "#/components/schemas/DataSource"
          }
        }
      },
      "CashFeedInfo": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FeedInfoBase"
          },
          {
            "type": "object",
            "required": [
              "Cash"
            ],
            "properties": {
              "FeedType": {
                "type": "string",
                "enum": [
                  "Cash"
                ]
              },
              "Cash": {
                "$ref": "#/components/schemas/CashFeed"
              }
            }
          }
        ]
      },
      "BrokerFeedInfo": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FeedInfoBase"
          },
          {
            "type": "object",
            "required": [
              "Broker",
              "ProductId"
            ],
            "properties": {
              "FeedType": {
                "type": "string",
                "enum": [
                  "Broker"
                ]
              },
              "Broker": {
                "$ref": "#/components/schemas/BrokerFeed"
              }
            }
          }
        ]
      },
      "PlatformFeedInfo": {
        "allOf": [
          {
            "$ref": "#/components/schemas/FeedInfoBase"
          },
          {
            "type": "object",
            "required": [
              "Platform",
              "ProductId"
            ],
            "properties": {
              "FeedType": {
                "type": "string",
                "enum": [
                  "Platform"
                ]
              },
              "Platform": {
                "$ref": "#/components/schemas/PlatformFeed"
              }
            }
          }
        ]
      },
      "UpdateFeedInfo": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/UpdateCashFeedInfo"
          },
          {
            "$ref": "#/components/schemas/UpdateBrokerFeedInfo"
          },
          {
            "$ref": "#/components/schemas/UpdatePlatformFeedInfo"
          }
        ],
        "discriminator": {
          "propertyName": "FeedType",
          "mapping": {
            "Cash": "#/components/schemas/UpdateCashFeedInfo",
            "Broker": "#/components/schemas/UpdateBrokerFeedInfo",
            "Platform": "#/components/schemas/UpdatePlatformFeedInfo"
          }
        }
      },
      "UpdateFeedInfoBase": {
        "type": "object",
        "description": "The complete replacement configuration for a feed. Same shape as **New feed**, except that `DataSource.AuthorisationVerified` is not accepted.\n",
        "required": [
          "FeedType",
          "DisplayName",
          "AccountName",
          "DataSource"
        ],
        "properties": {
          "FeedType": {
            "type": "string",
            "description": "Must match the existing feed's type. The feed type cannot be changed.",
            "enum": [
              "Cash",
              "Broker",
              "Platform"
            ]
          },
          "DisplayName": {
            "type": "string",
            "description": "A display name for the feed."
          },
          "AccountName": {
            "type": "string",
            "description": "The full account name (max 200 characters)."
          },
          "ProductId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The product identifier from **Feed products**. Required for Broker and Platform. On a cash feed, send it together with `Cash.BsbCode`, or omit both.\n"
          },
          "DataSource": {
            "$ref": "#/components/schemas/UpdateFeedDataSource"
          }
        }
      },
      "UpdateCashFeedInfo": {
        "allOf": [
          {
            "$ref": "#/components/schemas/UpdateFeedInfoBase"
          },
          {
            "type": "object",
            "required": [
              "Cash"
            ],
            "properties": {
              "FeedType": {
                "type": "string",
                "enum": [
                  "Cash"
                ]
              },
              "Cash": {
                "$ref": "#/components/schemas/CashFeed"
              }
            }
          }
        ]
      },
      "UpdateBrokerFeedInfo": {
        "allOf": [
          {
            "$ref": "#/components/schemas/UpdateFeedInfoBase"
          },
          {
            "type": "object",
            "required": [
              "Broker",
              "ProductId"
            ],
            "properties": {
              "FeedType": {
                "type": "string",
                "enum": [
                  "Broker"
                ]
              },
              "Broker": {
                "$ref": "#/components/schemas/BrokerFeed"
              }
            }
          }
        ]
      },
      "UpdatePlatformFeedInfo": {
        "allOf": [
          {
            "$ref": "#/components/schemas/UpdateFeedInfoBase"
          },
          {
            "type": "object",
            "required": [
              "Platform",
              "ProductId"
            ],
            "properties": {
              "FeedType": {
                "type": "string",
                "enum": [
                  "Platform"
                ]
              },
              "Platform": {
                "$ref": "#/components/schemas/PlatformFeed"
              }
            }
          }
        ]
      },
      "DataSource": {
        "type": "object",
        "required": [
          "DataSourceType"
        ],
        "properties": {
          "DataSourceType": {
            "type": "string",
            "description": "How the feed is sourced. Broker and Platform feeds accept only `UseAutomatedFeed` or `ImportManually`; `IncludeInBrokerOrPlatformAccount` is cash-only and requires `ContainingFeedId`. `UseOpenBanking` and any other value are rejected with `DATA_FEED_UNSUPPORTED_SOURCE_TYPE`.\n\n`UseAutomatedFeed` takes data from the provider. `ImportManually` creates the account with no feed attached, landing on status `ManuallyImported`, for accounts Class has no feed for. `IncludeInBrokerOrPlatformAccount` is for a cash account whose transactions arrive as part of a parent broker or platform feed, and lands on `LinkedToWrapOrBroker`.\n",
            "enum": [
              "UseAutomatedFeed",
              "ImportManually",
              "IncludeInBrokerOrPlatformAccount"
            ]
          },
          "ContainingFeedId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The parent broker or platform feed id. Required when `DataSourceType` is `IncludeInBrokerOrPlatformAccount` (cash only), and rejected with `DATA_FEED_UNSUPPORTED_PROPERTY` when it is not. Must reference an active broker or platform feed in the same fund.\n"
          },
          "AuthorisationType": {
            "type": [
              "string",
              "null"
            ],
            "description": "On an automated feed, omit this to let the server apply the product's default. If sent, it must be one of the product's `SupportedAuthorisationTypes`.\n",
            "enum": [
              "None",
              "AccountHolder",
              "AdviserOrDealer",
              "Online",
              null
            ]
          },
          "AuthorityId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "Only applicable when `AuthorisationType` is `AdviserOrDealer`. The identifier is not discoverable through this API and must be obtained separately. Omitting it still creates the feed, on status `NoAuthoritySet` with a `DATA_FEED_NO_AUTHORITY_SET` warning.\n"
          },
          "AuthorisationVerified": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Only meaningful when `AuthorisationType` is `Online` on an automated feed. `false` or omitted lands the feed in `WaitingForVerification`; `true` attests verification and lands it in `WaitingOnProvider`. Accepted on **New feed** only. To confirm authorisation later, use **Update feed status**.\n"
          },
          "DoNotLoadBefore": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date-only. Data before this date is not loaded."
          },
          "DoNotLoadAfter": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date-only. Must not be before `DoNotLoadBefore`."
          }
        }
      },
      "UpdateFeedDataSource": {
        "type": "object",
        "description": "The data source on **Update feed**. `AuthorisationVerified` is not accepted here and is rejected with `DATA_FEED_FIELD_NOT_ALLOWED`; use **Update feed status** instead.\n",
        "required": [
          "DataSourceType"
        ],
        "properties": {
          "DataSourceType": {
            "type": "string",
            "description": "How the feed is sourced. Broker and Platform feeds accept only `UseAutomatedFeed` or `ImportManually`. `IncludeInBrokerOrPlatformAccount` is cash-only and requires `ContainingFeedId`.\n",
            "enum": [
              "UseAutomatedFeed",
              "ImportManually",
              "IncludeInBrokerOrPlatformAccount"
            ]
          },
          "ContainingFeedId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The parent broker or platform feed id. Required when `DataSourceType` is `IncludeInBrokerOrPlatformAccount` (cash only), and rejected with `DATA_FEED_UNSUPPORTED_PROPERTY` when it is not.\n"
          },
          "AuthorisationType": {
            "type": [
              "string",
              "null"
            ],
            "description": "If sent, it must be one of the product's `SupportedAuthorisationTypes`. Sending `null` keeps the feed's existing authorisation type. Unlike **New feed**, the product default is not applied. Changing it without a replacement `AuthorityId` can clear a linked authority and return `DATA_FEED_AUTHORITY_CLEARED`.\n",
            "enum": [
              "None",
              "AccountHolder",
              "AdviserOrDealer",
              "Online",
              null
            ]
          },
          "AuthorityId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "Only applicable when `AuthorisationType` is `AdviserOrDealer`. Send the existing value again to keep the linked authority. Omitting it still updates the feed, on status `NoAuthoritySet` with a `DATA_FEED_NO_AUTHORITY_SET` warning.\n"
          },
          "DoNotLoadBefore": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date-only. Data before this date is not loaded."
          },
          "DoNotLoadAfter": {
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "description": "Date-only. Must not be before `DoNotLoadBefore`."
          }
        }
      },
      "CashFeed": {
        "type": "object",
        "description": "Cash feeds have no `InvestmentCode`; one sent in this block is ignored.\n",
        "required": [
          "Code",
          "AccountNumber",
          "NewPaymentsPlatform"
        ],
        "properties": {
          "Code": {
            "type": "string"
          },
          "BsbCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "`ProductId` and `BsbCode` are paired. Send both, or neither. Supplying one alone fails with `DATA_FEED_FIELD_REQUIRED` naming the missing half. Sending neither is valid and creates the feed in an initial setup state (`NoProductSet` or `BsbNotValid`), to be completed later in Class. Format `XXX-XXX` or `XXXXXX`.\n"
          },
          "AccountNumber": {
            "type": "string"
          },
          "DefaultAccount": {
            "type": "boolean",
            "description": "Defaults to `false`. Where the business restricts who may set a default account, an unauthorised caller sending `true` fails with `DATA_FEED_DEFAULT_ACCOUNT_FORBIDDEN`.\n"
          },
          "IsForeign": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Omit it or send `false`. Foreign cash accounts are not supported, and `true` fails with `DATA_FEED_FOREIGN_CASH_NOT_SUPPORTED`. Returned on read.\n"
          },
          "LinkedToHoldingAccountId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "Points the new cash account at another holding account in the same fund so it inherits reporting and asset allocation. This is a reporting link, not feed membership — it does not attach the account to a feed.\n"
          },
          "ManagedAccountCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Intended for a cash feed included in a broker or platform account, where it appears on the parent feed's linked accounts. It is saved whenever it is sent, even when the feed is not included in a broker or platform account.\n"
          },
          "NewPaymentsPlatform": {
            "$ref": "#/components/schemas/NewPaymentsPlatform"
          },
          "AssetClassification": {
            "$ref": "#/components/schemas/AssetClassification"
          }
        }
      },
      "BrokerFeed": {
        "type": "object",
        "description": "At least one of `AccountNumber` or `Hin` is required.",
        "properties": {
          "AccountNumber": {
            "type": [
              "string",
              "null"
            ]
          },
          "Hin": {
            "type": [
              "string",
              "null"
            ]
          },
          "LinkedHoldings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinkedHolding"
            }
          }
        }
      },
      "PlatformFeed": {
        "type": "object",
        "description": "At least one of `AccountNumber` or `Hin` is required.",
        "properties": {
          "AccountNumber": {
            "type": [
              "string",
              "null"
            ]
          },
          "Hin": {
            "type": [
              "string",
              "null"
            ]
          },
          "LinkedHoldings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LinkedHolding"
            }
          }
        }
      },
      "LinkedHolding": {
        "type": "object",
        "required": [
          "HoldingAccountId"
        ],
        "description": "Links an existing holding account to the feed. If the account is already linked to another feed, it is moved to this one. `InvestmentCode` and `InstalmentReceiptNumber` are mutually exclusive, and which one applies depends on the product; check its `LinkedHoldings` flags on **Feed products** before sending either.\n",
        "properties": {
          "HoldingAccountId": {
            "type": "string",
            "format": "uuid"
          },
          "ManagedAccountCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Ignored when managed accounts are switched off for the fund or the product.\n"
          },
          "InvestmentCode": {
            "type": [
              "string",
              "null"
            ],
            "description": "Allowed only when the product's `LinkedHoldings.AcceptsInvestmentCode` is `true`."
          },
          "InstalmentReceiptNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "Required when the product's `LinkedHoldings.RequiresInstalmentReceiptNumber` is `true`, and not allowed otherwise.\n"
          }
        }
      },
      "NewPaymentsPlatform": {
        "type": "object",
        "required": [
          "NPPMethod"
        ],
        "properties": {
          "NPPMethod": {
            "type": "string",
            "enum": [
              "Disabled",
              "PayId",
              "PayTo",
              "Osko"
            ]
          },
          "PayID": {
            "type": [
              "string",
              "null"
            ],
            "description": "Required (and only allowed) when `NPPMethod` is `PayId`. Max 256 chars, no spaces."
          }
        }
      },
      "AssetClassification": {
        "type": "object",
        "description": "Cash asset classification. Codes are validated against the Class classification tables; unknown values return `DATA_FEED_INVALID_CLASSIFICATION_CODE`. See the **Classification codes** reference for the full list.\n",
        "properties": {
          "AssetAllocation": {
            "type": "string",
            "enum": [
              "Cash",
              "FixedInterest"
            ]
          },
          "InHouseAsset": {
            "type": "boolean"
          },
          "GlClassificationCode": {
            "type": "string",
            "description": "GL investment classification code. Default `OtherAssets.CashAtBank`."
          },
          "TaxReturnClassificationCode": {
            "type": "string",
            "description": "Tax return classification code. Default `AustDirectCash`."
          },
          "CgClassificationCode": {
            "type": "string",
            "description": "CG classification code. Default `NonCGTAsset`."
          },
          "MarketTypeCode": {
            "type": "string",
            "description": "Market type code. Default `BK`."
          },
          "IncludeInPerformanceReports": {
            "type": "boolean"
          }
        }
      },
      "UpdateFeedStatusRequest": {
        "type": "object",
        "required": [
          "Status"
        ],
        "properties": {
          "Status": {
            "type": "string",
            "description": "The requested target status code. Values are matched case-insensitively; use the canonical codes shown below. Human-readable labels returned by read operations, such as `Waiting for verification`, are not accepted. The effective status returned by the API may differ if the system adjusts the transition.\n",
            "enum": [
              "AuthorityNotRequested",
              "WaitingForVerification",
              "WaitingOnAuthoriser",
              "WaitingOnProvider",
              "AuthoriserDeclined"
            ]
          }
        }
      },
      "FeedStatusCreate": {
        "type": "object",
        "description": "The feed status as returned by **New feed**, **Update feed** and **Update feed status**. `Status` is the status **code**.\n",
        "properties": {
          "Status": {
            "$ref": "#/components/schemas/FeedStatusCode"
          },
          "Category": {
            "$ref": "#/components/schemas/FeedStatusCategory"
          },
          "EffectiveDate": {
            "type": "string",
            "description": "When the feed entered its current status. In Australian Eastern time (Sydney), formatted `YYYY-MM-DDTHH:mm:ss` with no UTC offset."
          }
        }
      },
      "FeedStatusRead": {
        "type": "object",
        "description": "The feed status as returned by **Feeds** and **Feed detail**. `Status` is the status **label**.",
        "properties": {
          "Status": {
            "$ref": "#/components/schemas/FeedStatusLabel"
          },
          "Category": {
            "$ref": "#/components/schemas/FeedStatusCategory"
          },
          "EffectiveDate": {
            "type": "string",
            "description": "When the feed entered its current status. In Australian Eastern time (Sydney), formatted `YYYY-MM-DDTHH:mm:ss` with no UTC offset."
          }
        }
      },
      "FeedStatusCode": {
        "type": "string",
        "description": "The feed status code, returned by the write operations.",
        "enum": [
          "Bonza",
          "ManuallyImported",
          "FeedNotAvailable",
          "AuthoriserDeclined",
          "Srn",
          "AccountClosed",
          "WaitingForVerification",
          "WaitingOnAuthoriser",
          "WaitingOnProvider",
          "FollowUpRequested",
          "ReceivedByProvider",
          "ActivatedByProvider",
          "ActivationOverdue",
          "NoProductSet",
          "AuthorityNotRequested",
          "NoAuthoritySet",
          "NoHoldingReferenceSet",
          "AccountNumberNotSet",
          "BsbNotValid",
          "RejectedByProvider",
          "UnlinkedAssets",
          "FeedNoLongerActive",
          "AccountSuspended",
          "NonBankAccount",
          "LinkedToWrapOrBroker"
        ]
      },
      "FeedStatusLabel": {
        "type": "string",
        "description": "The feed status label, returned by **Feeds** and **Feed detail**. See **Feed status codes and labels** for the matching code and category.\n",
        "enum": [
          "OK",
          "Manually imported data",
          "Feed not supported",
          "Declined by authoriser",
          "SRN not supported",
          "Account Closed",
          "Waiting for verification",
          "Waiting on authoriser",
          "Waiting on provider",
          "Follow-up requested",
          "Received by provider",
          "Activated by provider",
          "Activation Overdue",
          "Product not set",
          "Authority not sent",
          "Adviser not set",
          "Platform/Broker account not set",
          "Account Number not set",
          "BSB not valid",
          "Rejected by provider",
          "Unlinked holdings",
          "Feed no longer active",
          "Account suspended",
          "Non-bank account",
          "Linked to platform/broker account"
        ]
      },
      "FeedStatusCategory": {
        "type": "string",
        "description": "The high-level status category.",
        "enum": [
          "Working",
          "Manual",
          "NoFeed",
          "Waiting",
          "ActionRequired",
          "Error",
          "Disabled"
        ]
      },
      "FeedResponseEnvelope": {
        "type": "object",
        "description": "Returned by **New feed**, **Update feed** and **Update feed status**.\n",
        "properties": {
          "Data": {
            "$ref": "#/components/schemas/FeedResponse"
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          },
          "Warnings": {
            "type": "array",
            "description": "Advisory warnings. A populated array does **not** mean the request failed. The feed was created or changed, and `Data` describes it.\n",
            "items": {
              "$ref": "#/components/schemas/ApiWarning"
            }
          }
        }
      },
      "FeedResponse": {
        "type": "object",
        "properties": {
          "FeedType": {
            "type": "string",
            "enum": [
              "Cash",
              "Broker",
              "Platform"
            ]
          },
          "FeedId": {
            "type": "string",
            "format": "uuid"
          },
          "HoldingAccountId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The ID of the feed's bank account. Populated for cash feeds; otherwise null."
          },
          "Status": {
            "$ref": "#/components/schemas/FeedStatusCreate"
          },
          "AuthorisationType": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "None",
              "AccountHolder",
              "AdviserOrDealer",
              "Online",
              null
            ]
          },
          "AuthorityActivationNumber": {
            "type": [
              "string",
              "null"
            ],
            "description": "Generated by Class when an `Online` feed is created against a provider with token activation enabled. Null otherwise.\n"
          }
        }
      },
      "FeedListEnvelope": {
        "type": "object",
        "required": [
          "Data"
        ],
        "properties": {
          "Data": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExtendedFeedInfo"
            }
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "FeedDetailEnvelope": {
        "type": "object",
        "required": [
          "Data"
        ],
        "properties": {
          "Data": {
            "$ref": "#/components/schemas/FeedDetail"
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "FeedDetail": {
        "type": "object",
        "description": "A single feed. Echoes the feed configuration (`FeedType`, `DataSource`, and the matching `Cash`/`Broker`/`Platform` block) plus read-only fields and an `ExtendedFeedInfo` object.\n\n**Null top-level properties are omitted, not returned as null.** If a feed has no `AccountName`, `HoldingAccountId` or `AuthorisationType`, those keys are absent from `Data` entirely. This applies only at this level — inside `DataSource` and `ExtendedFeedInfo`, nulls are returned explicitly. Test for absence, not for `null`.\n",
        "properties": {
          "FeedType": {
            "type": "string",
            "enum": [
              "Cash",
              "Broker",
              "Platform"
            ]
          },
          "DisplayName": {
            "type": "string"
          },
          "AccountName": {
            "type": [
              "string",
              "null"
            ]
          },
          "ProductId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "DataSource": {
            "$ref": "#/components/schemas/DataSource"
          },
          "Cash": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/CashFeed"
              },
              {
                "type": "null"
              }
            ],
            "description": "Present when `FeedType` is `Cash`."
          },
          "Broker": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/BrokerFeed"
              },
              {
                "type": "null"
              }
            ],
            "description": "Present when `FeedType` is `Broker`."
          },
          "Platform": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PlatformFeed"
              },
              {
                "type": "null"
              }
            ],
            "description": "Present when `FeedType` is `Platform`."
          },
          "FeedId": {
            "type": "string",
            "format": "uuid"
          },
          "HoldingAccountId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "The ID of the bank account. Populated for cash feeds; otherwise absent."
          },
          "Status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FeedStatusLabel"
              }
            ],
            "description": "The status label only. `ExtendedFeedInfo.FeedStatus` carries the same label with its `Category` and `EffectiveDate`.\n"
          },
          "AuthorisationType": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "None",
              "AccountHolder",
              "AdviserOrDealer",
              "Online",
              null
            ]
          },
          "ExtendedFeedInfo": {
            "$ref": "#/components/schemas/ExtendedFeedInfo"
          }
        }
      },
      "ExtendedFeedInfo": {
        "type": "object",
        "description": "The full feed record. This is the shape of each element returned by **Feeds**, and is nested under `ExtendedFeedInfo` in **Feed detail**.\n",
        "properties": {
          "FeedId": {
            "type": "string",
            "format": "uuid"
          },
          "FundId": {
            "type": "string",
            "format": "uuid"
          },
          "AccountName": {
            "type": [
              "string",
              "null"
            ]
          },
          "FeedDescription": {
            "type": [
              "string",
              "null"
            ]
          },
          "DefaultDisplayName": {
            "type": [
              "string",
              "null"
            ]
          },
          "ExternalIdentifier": {
            "type": [
              "string",
              "null"
            ]
          },
          "Hin": {
            "type": [
              "string",
              "null"
            ]
          },
          "ProductType": {
            "type": "string",
            "description": "`Other` is returned for feeds that have no product set. Feed products never returns `Other` or `TermDeposit`.\n",
            "enum": [
              "BankAccount",
              "BrokerAccount",
              "WrapAccount",
              "TermDeposit",
              "Other"
            ]
          },
          "ProductInfo": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/ProductInfo"
              },
              {
                "type": "null"
              }
            ],
            "description": "Null for feeds that have no product set, which are returned with `ProductType: Other`.\n"
          },
          "FeedStatus": {
            "$ref": "#/components/schemas/FeedStatusRead"
          },
          "FirstProcessed": {
            "type": [
              "string",
              "null"
            ],
            "description": "When feed data was first processed. Null until then. In Australian Eastern time (Sydney), formatted `YYYY-MM-DDTHH:mm:ss` with no UTC offset."
          },
          "LastProcessed": {
            "type": [
              "string",
              "null"
            ],
            "description": "When feed data was last processed. Null until then. In Australian Eastern time (Sydney), formatted `YYYY-MM-DDTHH:mm:ss` with no UTC offset."
          },
          "Authorisation": {
            "$ref": "#/components/schemas/FeedAuthorisation"
          },
          "DateCreated": {
            "type": [
              "string",
              "null"
            ],
            "description": "When the feed was created. In Australian Eastern time (Sydney), formatted `YYYY-MM-DDTHH:mm:ss` with no UTC offset."
          },
          "CreatedBy": {
            "type": [
              "string",
              "null"
            ],
            "description": "Either `system` or the email address of the user who created the feed. Unlike `LastUpdated`, this includes changes made by the system.\n"
          },
          "LastUpdated": {
            "type": [
              "string",
              "null"
            ],
            "description": "The time of the most recent user change recorded by the feed audit data, in Australian Eastern time (Sydney), formatted `YYYY-MM-DDTHH:mm:ss` with no UTC offset. Null if no such change has been recorded. **Update feed** and **Update feed status** do not update this value.\n"
          },
          "LastUpdatedBy": {
            "type": [
              "string",
              "null"
            ],
            "description": "The user who made the change recorded in `LastUpdated`. Null when `LastUpdated` is null."
          },
          "HoldingAccounts": {
            "type": "array",
            "description": "Present only when `includeHoldingAccounts=true`. Omitted otherwise.",
            "items": {
              "$ref": "#/components/schemas/HoldingAccount"
            }
          }
        }
      },
      "ProductInfo": {
        "type": "object",
        "properties": {
          "ProductId": {
            "type": "string",
            "format": "uuid"
          },
          "ProductName": {
            "type": "string"
          },
          "ProviderId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "ProviderName": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "FeedAuthorisation": {
        "type": "object",
        "properties": {
          "Type": {
            "type": "string",
            "enum": [
              "None",
              "AccountHolder",
              "AdviserOrDealer",
              "Online"
            ]
          },
          "Adviser": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/Adviser"
              },
              {
                "type": "null"
              }
            ],
            "description": "Chiefly populated for `AdviserOrDealer` authorisation, but may be present with null members on other authorisation types. Test each member rather than assuming the object's presence implies a linked adviser.\n"
          },
          "AuthorisationForm": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/AuthorisationForm"
              },
              {
                "type": "null"
              }
            ],
            "description": "Present for `AccountHolder` authorisation; otherwise null."
          },
          "AuthorityResponse": {
            "$ref": "#/components/schemas/AuthorityResponse"
          },
          "HasAuthorityProcess": {
            "type": "boolean"
          }
        }
      },
      "Adviser": {
        "type": "object",
        "properties": {
          "AdviserId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "AdviserName": {
            "type": [
              "string",
              "null"
            ]
          },
          "AdviserCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "AuthorityId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          }
        }
      },
      "AuthorisationForm": {
        "type": "object",
        "properties": {
          "FormStatus": {
            "type": "string",
            "description": "The state of the signed authority form. Anything other than `Waiting` or `Received` means the uploaded form was not recognised and needs verification.\n",
            "enum": [
              "Waiting",
              "Received",
              "ReceivedBarcodeUnrecognised",
              "ReceivedIncorrectPageCount",
              "ReceivedBarcodeMismatch"
            ]
          },
          "Uploaded": {
            "type": "boolean"
          }
        }
      },
      "AuthorityResponse": {
        "type": "object",
        "description": "Reserved for future use. All three fields currently return null.\n",
        "properties": {
          "ResponseStatus": {
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "InvalidSignature",
              "IncorrectBsb",
              "IncorrectAccountIdentifier",
              "IncorrectAccountName",
              "AccountClosed",
              "AccountTypeNotSupported",
              "IncorrectForm",
              "IncompleteForm",
              "RejectedOther",
              "AwaitingSignatureVerification",
              "PendingOther",
              "Activated",
              "WaitingForVerification",
              null
            ]
          },
          "ResponseDate": {
            "type": [
              "string",
              "null"
            ]
          },
          "ResponseMessage": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "HoldingAccount": {
        "type": "object",
        "description": "A holding account linked to the feed. `Type` discriminates the detail block: `BankAccount` and `ForeignBankAccount` populate `BankAccountDetails`; `InvestmentAccount` populates `AccountDetails`.\n\n`ForeignBankAccount` carries `IsForeign: true` and a null `BsbCode`, and appears under platform feeds that hold foreign currency accounts.\n",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "Type": {
            "type": "string",
            "enum": [
              "BankAccount",
              "ForeignBankAccount",
              "InvestmentAccount"
            ]
          },
          "Code": {
            "type": [
              "string",
              "null"
            ]
          },
          "InvestmentCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "ManagedAccountCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "Description": {
            "type": [
              "string",
              "null"
            ]
          },
          "Status": {
            "type": "string",
            "description": "The holding account status. Suspended accounts are returned for broker and platform feeds.\n",
            "enum": [
              "Active",
              "Suspended"
            ]
          },
          "BankAccountDetails": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/BankAccountDetails"
              },
              {
                "type": "null"
              }
            ],
            "description": "Present when `Type` is `BankAccount` or `ForeignBankAccount`."
          },
          "AccountDetails": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/InvestmentAccountDetails"
              },
              {
                "type": "null"
              }
            ],
            "description": "Present when `Type` is `InvestmentAccount`."
          },
          "GLInvestmentClassification": {
            "$ref": "#/components/schemas/ClassificationRef"
          },
          "TaxReturnClassification": {
            "$ref": "#/components/schemas/ClassificationRef"
          }
        }
      },
      "BankAccountDetails": {
        "type": "object",
        "properties": {
          "Currency": {
            "type": [
              "string",
              "null"
            ]
          },
          "IsForeign": {
            "type": "boolean"
          },
          "ForeignCashTreatment": {
            "type": [
              "string",
              "null"
            ],
            "description": "The foreign cash tax treatment. Null on domestic accounts.\n",
            "enum": [
              "Election250k",
              "Retranslation",
              "FIFOParcelMatching",
              "Unset",
              null
            ]
          },
          "BsbCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "AccountNumber": {
            "type": [
              "string",
              "null"
            ]
          },
          "AccountName": {
            "type": [
              "string",
              "null"
            ]
          },
          "NewPaymentsPlatform": {
            "$ref": "#/components/schemas/NewPaymentsPlatform"
          }
        }
      },
      "InvestmentAccountDetails": {
        "type": "object",
        "properties": {
          "SecurityIssueCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "MarketType": {
            "type": [
              "string",
              "null"
            ]
          },
          "MarketCode": {
            "type": [
              "string",
              "null"
            ]
          },
          "IsInhouseAsset": {
            "type": "boolean"
          }
        }
      },
      "ClassificationRef": {
        "type": "object",
        "properties": {
          "Code": {
            "type": [
              "string",
              "null"
            ]
          },
          "Description": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "UploadAuthorityFormEnvelope": {
        "type": "object",
        "required": [
          "Data"
        ],
        "description": "`Warnings` is nested inside `Data` on this operation, and its entries are plain strings. **New feed** returns `Warnings` at the top level as objects.\n",
        "properties": {
          "Data": {
            "type": "object",
            "properties": {
              "Warnings": {
                "type": "array",
                "description": "Empty when the form was recognised. Populated when it was not, in which case the form is held for manual verification.\n",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "FeedProductListEnvelope": {
        "type": "object",
        "required": [
          "Data"
        ],
        "properties": {
          "Data": {
            "$ref": "#/components/schemas/FeedProductList"
          },
          "Errors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiError"
            }
          },
          "Warnings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ApiWarning"
            }
          }
        }
      },
      "FeedProductList": {
        "type": "object",
        "properties": {
          "FeedType": {
            "type": "string",
            "enum": [
              "Cash",
              "Broker",
              "Platform"
            ]
          },
          "BsbAvailability": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/BsbAvailability"
              },
              {
                "type": "null"
              }
            ],
            "description": "Cash only. Null for Broker and Platform."
          },
          "FinancialInstitution": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/FinancialInstitution"
              },
              {
                "type": "null"
              }
            ],
            "description": "Cash only. Null for Broker and Platform."
          },
          "OpenBankingEnabledForBusiness": {
            "type": "boolean"
          },
          "ManagedAccountSupportEnabledForBusiness": {
            "type": "boolean"
          },
          "Items": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FeedProduct"
            }
          }
        }
      },
      "BsbAvailability": {
        "type": "object",
        "properties": {
          "Bsb": {
            "type": [
              "string",
              "null"
            ]
          },
          "Status": {
            "type": "string",
            "description": "`Available` — the BSB resolves to an institution with at least one eligible product. `Unsupported` — the BSB exists but is not supported for feeds. `NotFound` — no BSB record exists. `NoFinancialInstitution` — the BSB record exists but has no institution linked. `NoFeedProducts` — the institution has no eligible products, either because it has none at all or because none of them are selectable for feed creation.\n",
            "enum": [
              "Available",
              "NotFound",
              "Unsupported",
              "NoFinancialInstitution",
              "NoFeedProducts"
            ]
          },
          "UnsupportedBsb": {
            "type": "boolean"
          },
          "HasFinancialInstitution": {
            "type": "boolean"
          },
          "HasFeedProducts": {
            "type": "boolean"
          },
          "Message": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "FinancialInstitution": {
        "type": "object",
        "properties": {
          "Id": {
            "type": "string",
            "format": "uuid"
          },
          "Code": {
            "type": [
              "string",
              "null"
            ]
          },
          "Name": {
            "type": [
              "string",
              "null"
            ]
          },
          "BranchName": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "FeedProduct": {
        "type": "object",
        "description": "A product available for the requested feed type.\n\n**Products with `FeedEnabled: false` cannot be used to create a feed**, and they make up a large share of the list. When `FeedEnabled` is `false`, `ProviderId` and `ProviderName` are null, `Authorisation.SupportedAuthorisationTypes` is empty and `Authorisation.DefaultAuthorisationType` is null. Exclude these products before offering a list for selection.\n",
        "properties": {
          "ProductId": {
            "type": "string",
            "format": "uuid"
          },
          "Name": {
            "type": "string"
          },
          "ProductType": {
            "type": "string",
            "description": "Determined by the requested `feedType`.",
            "enum": [
              "BankAccount",
              "BrokerAccount",
              "WrapAccount"
            ]
          },
          "ProviderId": {
            "type": [
              "string",
              "null"
            ],
            "format": "uuid",
            "description": "Null when `FeedEnabled` is `false`."
          },
          "ProviderName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Null when `FeedEnabled` is `false`."
          },
          "FeedEnabled": {
            "type": "boolean",
            "description": "Only `true` products can be used to create a feed."
          },
          "SupportsOpenBanking": {
            "type": "boolean"
          },
          "SupportsManagedAccount": {
            "type": "boolean"
          },
          "LinkedHoldings": {
            "$ref": "#/components/schemas/FeedProductLinkedHoldings"
          },
          "Authorisation": {
            "$ref": "#/components/schemas/FeedProductAuthorisation"
          }
        }
      },
      "FeedProductLinkedHoldings": {
        "type": "object",
        "description": "`AcceptsInvestmentCode` and `RequiresInstalmentReceiptNumber` are mutually exclusive — they are never both true on the same product.\n",
        "properties": {
          "AcceptsInvestmentCode": {
            "type": "boolean"
          },
          "RequiresInstalmentReceiptNumber": {
            "type": "boolean"
          }
        }
      },
      "FeedProductAuthorisation": {
        "type": "object",
        "description": "Empty and null throughout when `FeedEnabled` is `false`.\n",
        "properties": {
          "SupportedAuthorisationTypes": {
            "type": "array",
            "description": "Empty array when `FeedEnabled` is `false`.",
            "items": {
              "type": "string",
              "enum": [
                "None",
                "AccountHolder",
                "AdviserOrDealer",
                "Online"
              ]
            }
          },
          "RequiresAuthority": {
            "type": "boolean"
          },
          "AuthorityTypeConfigured": {
            "type": "boolean"
          },
          "IsOnlineAuthorityTokenEnabled": {
            "type": "boolean"
          },
          "IsSupportedForAllAuthorizationType": {
            "type": "boolean"
          },
          "DefaultAuthorisationType": {
            "type": [
              "string",
              "null"
            ],
            "description": "Null when `FeedEnabled` is `false`.",
            "enum": [
              "None",
              "AccountHolder",
              "AdviserOrDealer",
              "Online",
              null
            ]
          }
        }
      },
      "ApiError": {
        "type": "object",
        "required": [
          "Code",
          "Message"
        ],
        "properties": {
          "Code": {
            "type": "string",
            "description": "The unique error code identifier."
          },
          "Message": {
            "type": "string",
            "description": "A detailed human-readable message explaining the error."
          }
        }
      },
      "ApiWarning": {
        "type": "object",
        "required": [
          "Code",
          "Message"
        ],
        "description": "An advisory warning returned alongside a successful response. The operation completed; the warning describes something that needs attention. Note that **Upload authority form** returns warnings as plain strings rather than objects — see the Errors and warnings reference.\n",
        "properties": {
          "Code": {
            "type": "string",
            "description": "The unique warning code identifier."
          },
          "Message": {
            "type": "string",
            "description": "A detailed human-readable message explaining the warning."
          }
        }
      },
      "InternalErrorCommon": {
        "type": "object",
        "properties": {
          "Code": {
            "type": "string",
            "example": "API_INTERNAL_ERROR"
          },
          "Message": {
            "type": "string",
            "example": "An unexpected error occurred on the server. Please try again later."
          }
        }
      },
      "ForbiddenErrorCommon": {
        "type": "object",
        "properties": {
          "Code": {
            "type": "string",
            "example": "FORBIDDEN"
          },
          "Message": {
            "type": "string",
            "example": "You do not have permission to access this resource."
          }
        }
      },
      "ResourceUnavailableErrorCommon": {
        "type": "object",
        "properties": {
          "Code": {
            "type": "string",
            "example": "API_NOT_FOUND"
          },
          "Message": {
            "type": "string",
            "example": "Resource not available or user does not have access to the fund."
          }
        }
      },
      "UnauthorizedErrorCommon": {
        "type": "object",
        "properties": {
          "Code": {
            "type": "string",
            "example": "API_NOT_AUTHORISED"
          },
          "Message": {
            "type": "string",
            "example": "Not authorised"
          }
        }
      }
    },
    "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.details.read": "View basic fund details",
              "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.details.read": "View basic fund details",
              "fund.maintain": "View and maintain all fund information"
            }
          }
        }
      }
    }
  }
}