Download OpenAPI specification:Download
Cache is a white-label fund manager that launches and operates digital investment products for partner companies.
When a Fund has been established, partner companies use Cache’s API to provide instructions relating to the Fund in real time.
Cache provides seven core API services that you can use to operate your Fund:
Investment Options retrieves the investment options as part of the investment scheme
Investors manages the records relating to your investors including creating, updating and retrieving investor details and verifying an investor for KYC purposes.
Subscriptions manages the subscription details of investors and the payments and fees associated with their subscription (for products with subscription fees only).
Instructions manages the transaction instructions that have been provided including applications, redemption requests and switch requests.
Transactions manages the historical transaction information relating to your Fund and retrieve transaction fees that will apply to transaction instructions.
Invoices manages invoice details and amounts using a reference code (for products where applications are funded by invoice).
Tax manages tax statements relating to the fund
The Cache’s REST APIs have resource-oriented URLs and use HTTP response codes to indicate API errors.
Cache supports cross-origin resource sharing, allowing you to interact securely with our API from a client-side web application.
Cache APIs support token-based authorization via the Authorization request header. The Authentication endpoint is used to retrieve an access token. After the access token is obtained, it must be inserted into the Authorization header for all requests.
| apiKey required | string |
| apiSecret required | string |
{- "apiKey": "string",
- "apiSecret": "string"
}"jwt token"Endpoints to manage individual stakeholders, including personal identification details, contact information, residential addresses, tax residency status and other information. These APIs enable the complete lifecycle management of individual investors.
Updates the information of an existing individual stakeholder identified by their unique individual number
An individual can be updated either via the API or by the Operations team through the Admin portal.
When the Operations team updates an individual in the admin portal, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "individual.updated",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Individual Updated",
"body": {
"individualNumber": "I1",
"externalIndividualId": "1001",
"stakeholderType" : INDIVIDUAL,
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
| individualNumber required | string |
string | |
| phoneNumber | string |
Array of objects (CreateAddressDto) unique | |
| externalIndividualId | string |
| firstName required | string^[a-zA-Zàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýż... Letters, spaces and following characters; +@!^$&'()*-:;=?.#_,[]/\ |
| lastName required | string^[a-zA-Zàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýż... Letters, spaces and following characters; +@!^$&'()*-:;=?.#_,[]/\ |
| middleName | string^[a-zA-Zàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýż... Letters, spaces and following characters; +@!^$&'()*-:;=?.#_,[]/\ |
| tfn | string |
| status | string Enum: "ACTIVE" "INACTIVE" |
| dateOfBirth | string <date> |
| foreignTaxResident | boolean |
Array of objects (SaveForeignTaxResidentDto) unique |
{- "email": "string",
- "phoneNumber": "string",
- "addresses": [
- {
- "state": "NSW",
- "postCode": "string",
- "pinCode": "string",
- "suburb": "string",
- "city": "string",
- "country": "AU",
- "subPremise": "string",
- "streetName": "string",
- "streetNumber": "string",
- "streetType": "string",
- "unitNumber": "string",
- "postalBox": "string",
- "buildingNumber": "string",
- "locality": "string",
- "addressType": "MAIN"
}
], - "externalIndividualId": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "tfn": "string",
- "status": "ACTIVE",
- "dateOfBirth": "2019-08-24",
- "foreignTaxResident": true,
- "foreignTaxResidentDetails": [
- {
- "countryId": "st",
- "tin": "string"
}
]
}Creates a new individual stakeholder record in the system with the provided personal and identification details
An individual can be created either via the API or by the Operations team through the Admin portal.
When the Operations team creates an individual, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "individual.created",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Individual Created",
"body": {
"individualNumber": "I1",
"externalIndividualId": "1001",
"stakeholderType" : INDIVIDUAL,
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
| externalIndividualId | string |
| firstName required | string^[a-zA-Zàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýż... Letters, spaces and following characters; +@!^$&'()*-:;=?.#_,[]/\ |
| lastName required | string^[a-zA-Zàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýż... Letters, spaces and following characters; +@!^$&'()*-:;=?.#_,[]/\ |
| middleName | string^[a-zA-Zàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýż... Letters, spaces and following characters; +@!^$&'()*-:;=?.#_,[]/\ |
| tfn | string |
| dateOfBirth | string <date> |
string | |
Array of objects (CreateAddressDto) unique | |
| phoneNumber | string |
| foreignTaxResident | boolean |
Array of objects (SaveForeignTaxResidentDto) unique |
{- "externalIndividualId": "string",
- "firstName": "string",
- "lastName": "string",
- "middleName": "string",
- "tfn": "string",
- "dateOfBirth": "2019-08-24",
- "email": "string",
- "addresses": [
- {
- "state": "NSW",
- "postCode": "string",
- "pinCode": "string",
- "suburb": "string",
- "city": "string",
- "country": "AU",
- "subPremise": "string",
- "streetName": "string",
- "streetNumber": "string",
- "streetType": "string",
- "unitNumber": "string",
- "postalBox": "string",
- "buildingNumber": "string",
- "locality": "string",
- "addressType": "MAIN"
}
], - "phoneNumber": "string",
- "foreignTaxResident": true,
- "foreignTaxResidentDetails": [
- {
- "countryId": "st",
- "tin": "string"
}
]
}Endpoints for managing company stakeholders, including company registration details, business structure, registered addresses, and other information. These APIs facilitate comprehensive company entity management.
Updates the details of an existing company identified by its unique company number. Allows modification of company information such as contact details, address, and other relevant data.
A company can be updated either via the API or by the Operations team through the Admin portal.
When the Operations team updates a company, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "company.updated.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Company Updated Successfully",
"body": {
"companyId": 51,
"companyName": "Some Company",
"companyNumber": "C51",
"status": "UPDATED"
}
}
| companyNumber required | string |
string | |
| phoneNumber | string |
Array of objects (CreateAddressDto) unique | |
| externalCompanyId | string |
| companyName required | string |
| abn | string |
| acn | string |
object (ExchangeDto) | |
object (ApplicationIdDto) | |
| tfn | string |
| status | string Enum: "ACTIVE" "INACTIVE" |
| foreignTaxResident | boolean |
Array of objects (SaveForeignTaxResidentDto) unique |
{- "email": "string",
- "phoneNumber": "string",
- "addresses": [
- {
- "state": "NSW",
- "postCode": "string",
- "pinCode": "string",
- "suburb": "string",
- "city": "string",
- "country": "AU",
- "subPremise": "string",
- "streetName": "string",
- "streetNumber": "string",
- "streetType": "string",
- "unitNumber": "string",
- "postalBox": "string",
- "buildingNumber": "string",
- "locality": "string",
- "addressType": "MAIN"
}
], - "externalCompanyId": "string",
- "companyName": "string",
- "abn": "string",
- "acn": "string",
- "exchange": {
- "exchangeCode": "string",
- "tickerCode": "string"
}, - "verification": {
- "verificationId": "string"
}, - "tfn": "string",
- "status": "ACTIVE",
- "foreignTaxResident": true,
- "foreignTaxResidentDetails": [
- {
- "countryId": "st",
- "tin": "string"
}
]
}Executes an advanced search across the company database with comprehensive filtering capabilities. Supports filtering by multiple criteria including company name, verification status, registration details, and other attributes. Returns paginated results that can be sorted based on specified parameters.
required | object (CompaniesPredicate) |
Creates a new company record with fundamental details such as company name, registration number, and contact information. The company is initially created with a 'NOT_VERIFIED' status.
A company can be created either via the API or by the Operations team through the Admin portal.
When the Operations team creates a company, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "company.created.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Company Created Successfully",
"body": {
"companyId": 51,
"companyName": "Some Company",
"companyNumber": "C51",
"status": "NOT_VERIFIED"
}
}
| externalCompanyId | string |
| companyName required | string |
| acn | string[0-9]{9} |
| abn | string |
Array of objects (CreateAddressDto) unique | |
object (ExchangeDto) | |
| tfn | string |
| phoneNumber | string |
string | |
object (ApplicationIdDto) | |
| foreignTaxResident | boolean |
Array of objects (SaveForeignTaxResidentDto) unique |
{- "externalCompanyId": "string",
- "companyName": "string",
- "acn": "string",
- "abn": "string",
- "addresses": [
- {
- "state": "NSW",
- "postCode": "string",
- "pinCode": "string",
- "suburb": "string",
- "city": "string",
- "country": "AU",
- "subPremise": "string",
- "streetName": "string",
- "streetNumber": "string",
- "streetType": "string",
- "unitNumber": "string",
- "postalBox": "string",
- "buildingNumber": "string",
- "locality": "string",
- "addressType": "MAIN"
}
], - "exchange": {
- "exchangeCode": "string",
- "tickerCode": "string"
}, - "tfn": "string",
- "phoneNumber": "string",
- "email": "string",
- "verification": {
- "verificationId": "string"
}, - "foreignTaxResident": true,
- "foreignTaxResidentDetails": [
- {
- "countryId": "st",
- "tin": "string"
}
]
}Returns a complete list of all stakeholders associated with a company identified by its company number. The response provides comprehensive information for each stakeholder, including their roles (e.g., director, shareholder), ownership percentages, verification status, and other relevant details.
| companyNumber required | string |
Registers new stakeholders (directors, shareholders, or key personnel) for a company identified by its unique company number. Important: This operation is only permitted when the company's verification status is either 'NOT_VERIFIED' or 'VERIFICATION_FAILED'. To maintain data integrity, stakeholder additions are blocked once a company's status becomes 'VERIFIED'.
A company can be updated either via the API or by the Operations team through the Admin portal.
When the Operations team updates a company, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "company.updated.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Company Updated Successfully",
"body": {
"companyId": 51,
"companyName": "Some Company",
"companyNumber": "C51",
"status": "UPDATED"
}
}
| companyNumber required | string |
required | Array of objects (CreateCompanyStakeholderDto) unique |
{- "stakeholders": [
- {
- "stakeholderNumber": "string",
- "stakeholderType": "ACCOUNT",
- "role": "string",
- "holding": 0
}
]
}Permanently removes a stakeholder from a company using the company number and stakeholder ID. This operation is restricted to companies with 'NOT_VERIFIED' or 'VERIFICATION_FAILED' status. For data integrity purposes, stakeholder removal is not permitted once a company becomes 'VERIFIED'. Warning: This action is irreversible and the stakeholder's information cannot be recovered after deletion.
A company can be updated either via the API or by the Operations team through the Admin portal.
When the Operations team updates a company, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "company.updated.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Company Updated Successfully",
"body": {
"companyId": 51,
"companyName": "Some Company",
"companyNumber": "C51",
"status": "UPDATED"
}
}
| companyNumber required | string |
| companyStakeholderId required | integer <int64> |
Endpoints to manage trust entities as stakeholders, including trust deed information, trustee details (both individual and corporate),and other information. These APIs support the complete administration of trust entity management.
Updates details of an existing Trust identified by trust number. Allows modification of trust information such as name, type, and other mutable fields. Requires valid trust number for identification.
A trust can be updated either via the API or by the Operations team through the Admin portal.
When the Operations team updates a trust, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "trust.updated",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Trust Updated",
"body": {
"trustNumber": "T1",
"externalCompanyId": "1001",
"stakeholderType" : TRUST
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
}
| trustNumber required | string |
string | |
| phoneNumber | string |
Array of objects (CreateAddressDto) unique | |
| externalTrustId | string |
| trustName required | string |
| abn | string |
| tfn | string |
| status | string Enum: "ACTIVE" "INACTIVE" |
object (ApplicationIdDto) | |
| foreignTaxResident | boolean |
Array of objects (SaveForeignTaxResidentDto) unique |
{- "email": "string",
- "phoneNumber": "string",
- "addresses": [
- {
- "state": "NSW",
- "postCode": "string",
- "pinCode": "string",
- "suburb": "string",
- "city": "string",
- "country": "AU",
- "subPremise": "string",
- "streetName": "string",
- "streetNumber": "string",
- "streetType": "string",
- "unitNumber": "string",
- "postalBox": "string",
- "buildingNumber": "string",
- "locality": "string",
- "addressType": "MAIN"
}
], - "externalTrustId": "string",
- "trustName": "string",
- "abn": "string",
- "tfn": "string",
- "status": "ACTIVE",
- "verification": {
- "verificationId": "string"
}, - "foreignTaxResident": true,
- "foreignTaxResidentDetails": [
- {
- "countryId": "st",
- "tin": "string"
}
]
}Search and retrieve paginated list of trusts based on specified criteria. Supports filtering by trust name, type, status, creation date, and other attributes. Results are paginated for efficient data retrieval.
required | object (TrustsPredicate) |
Creates a new Trust record in the system with the provided trust details including name, type, and other relevant information. Returns comprehensive trust information including generated trust number.
A trust can be created either via the API or by the Operations team through the Admin portal.
When the Operations team creates a trust, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "trust.created",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Trust Created",
"body": {
"trustNumber": "T1",
"externalTrustId": "1001",
"stakeholderType" : TRUST,
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
}
| externalTrustId | string |
| trustName required | string |
| abn | string |
| tfn | string |
string | |
| phoneNumber | string |
object (ApplicationIdDto) | |
| foreignTaxResident | boolean |
Array of objects (SaveForeignTaxResidentDto) unique | |
Array of objects (CreateAddressDto) unique |
{- "externalTrustId": "string",
- "trustName": "string",
- "abn": "string",
- "tfn": "string",
- "email": "string",
- "phoneNumber": "string",
- "verification": {
- "verificationId": "string"
}, - "foreignTaxResident": true,
- "foreignTaxResidentDetails": [
- {
- "countryId": "st",
- "tin": "string"
}
], - "addresses": [
- {
- "state": "NSW",
- "postCode": "string",
- "pinCode": "string",
- "suburb": "string",
- "city": "string",
- "country": "AU",
- "subPremise": "string",
- "streetName": "string",
- "streetNumber": "string",
- "streetType": "string",
- "unitNumber": "string",
- "postalBox": "string",
- "buildingNumber": "string",
- "locality": "string",
- "addressType": "MAIN"
}
]
}Retrieves a complete list of stakeholders associated with the specified trust. The response includes detailed information about each stakeholder including their role, ownership percentage, and verification status.
| trustNumber required | string |
Register new stakeholders for a specific trust using its trust number. Allows multiple stakeholders to be added in a single request. Each stakeholder record includes their role, ownership percentage, and personal details.
A trust can be updated either via the API or by the Operations team through the Admin portal.
When the Operations team updates a trust, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "trust.updated",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Trust Updated",
"body": {
"trustNumber": "T1",
"externalCompanyId": "1001",
"stakeholderType" : TRUST
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
}
| trustNumber required | string |
required | Array of objects (CreateTrustStakeholderDto) unique |
{- "stakeholders": [
- {
- "stakeholderNumber": "string",
- "stakeholderType": "ACCOUNT",
- "role": "string",
- "holding": 0
}
]
}Removes association between a stakeholder and a Trust. Requires trust number and stakeholder ID. Operation will be rejected if the Trust has been verified to maintain data integrity.
A trust can be updated either via the API or by the Operations team through the Admin portal.
When the Operations team updates a trust, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "trust.updated",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Trust Updated",
"body": {
"trustNumber": "T1",
"externalCompanyId": "1001",
"stakeholderType" : TRUST
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
}
| trustNumber required | string |
| trustStakeholderId required | integer <int64> |
The Know Your Client (KYC) and Anti-Money Laundering (AML) process is a legal requirement to verify user identities to assess their risk factors like money laundering, terrorism financing and other illegal or criminal activity. These APIs can be used to initiate verification of stakeholders, including Individuals, Companies, and Trusts.
Initiates the verification process for a stakeholder based on their type (INDIVIDUAL, COMPANY or TRUST) and unique stakeholder number.
The verification process includes:
The process may take time to complete. The response includes the current verification status and any additional requirements.
When verification is successful, the system publishes one of the following webhook events based on stakeholder type:
kyc.trust.success → triggered when trust verification is successful See payload example:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "kyc.trust.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "KYC Trust Success",
"body": {
"trustNumber": "T1",
"externalTrustId": "1001",
"stakeholderType" : "TRUST",
"status" : "ACTIVE",
"source" : "ADMIN_PORTAL"
}
}
kyc.company.success → triggered when company verification is successful See payload example:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "kyc.company.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "KYC Company Success",
"body": {
"companyNumber": "C1",
"externalCompanyId": "1001",
"stakeholderType" : "COMPANY",
"status" : "ACTIVE",
"source" : "ADMIN_PORTAL"
}
}
kyc.individual.success → triggered when individual verification is successful See payload example:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "kyc.individual.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "KYC Individual Success",
"body": {
"individualNumber": "I1",
"externalIndividualId": "1001",
"stakeholderType" : "INDIVIDUAL",
"status" : "ACTIVE",
"source" : "ADMIN_PORTAL"
}
}
On verification failure, the system publishes one of the following webhook events:
| stakeholderNumber required | string |
| stakeholderType required | string Enum: "ACCOUNT" "INDIVIDUAL" "COMPANY" "TRUST" |
Administrative endpoint for authorized users to manually override the verification status of a stakeholder (INDIVIDUAL, COMPANY or TRUST).
This endpoint:
Note:
| stakeholderNumber required | string |
| stakeholderType required | string Enum: "ACCOUNT" "INDIVIDUAL" "COMPANY" "TRUST" |
| notes required | string |
| verifiedBy required | string |
{- "notes": "string",
- "verifiedBy": "string"
}Initiates the Know Your Customer (KYC) verification process for an individual stakeholder and returns their current verification status along with detailed results. The verification requires the following mandatory information to be previously registered: first name, last name, date of birth, and complete residential address. The process validates the individual's identity against official databases and performs Anti-Money Laundering (AML) checks. The response includes verification status, timestamp, and any additional verification requirements.
An individual can be verified either via the API or by the Operations team through the Admin portal.
When the Operations team verified an individual, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "kyc.individual.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "KYC Individual Success",
"body": {
"individualNumber": "I1",
"externalIndividualId": "1001",
"stakeholderType" : INDIVIDUAL,
"status" : ACTIVE,
"source" : KYC
}
}
| individualNumber required | string |
Uploads a document for stakeholder verification purposes as part of KYC/AML process. The system will document will be processed and verified by the system. Maximum file size: 20MB. Supported formats: PDF, JPG, PNG. The System will create a Help Centre ticket for verification tracking.
| stakeholderNumber required | string |
required | object (UploadDocumentDto) |
Retrieves and generates a comprehensive ownership structure for a company through the Simple KYC API integration. The operation returns detailed information about shareholders, directors, and beneficial owners.
Since this process takes time to complete, the system generates and stores the ownership structure asynchronously. Once the process is finished, the system publishes webhook events to notify subscribers of the result:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "kyc.simple-kyc.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Simple KYC Success",
"body": {
"companyId": 51,
"companyName": "Some Company",
"companyNumber": "C51",
"companyAcn": "647382914",
"status": "GENERATED"
}
}
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "kyc.simple-kyc.failed",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Simple KYC Failed",
"body": {
"companyId": 51,
"companyName": "Some Company",
"companyNumber": "C51",
"companyAcn": "647382914",
"status": "GENERATED_FAIL"
}
}
Notes:
| companyNumber required | string |
Performs a search in the Simple KYC database using various identifiers: company name, ABN (Australian Business Number), or ACN (Australian Company Number). The search functionality is case-insensitive and supports partial matching for company names, enabling flexible and comprehensive search results.
| companyName | string |
| acn | string |
| abn | string |
| valid | boolean |
{- "companyName": "string",
- "acn": "string",
- "abn": "string",
- "valid": true
}For legacy customers who initially used Cache APIs with an Investor ID, the Investor ID and Account ID are identical. For new customers, only the Account ID should be used.
Manually updates the verification status of an account. This endpoint should be used with caution and only in specific circumstances where automated verification processes need to be overridden. Requires appropriate authorization and will be audited for compliance purposes.
| accountId required | integer <int64> |
| notes required | string |
| verifiedBy required | string |
{- "notes": "string",
- "verifiedBy": "string"
}Updates the Distribution Reinvestment Plan (DRP) status for a specific investment option within an account. The DRP allows automatic reinvestment of distributions back into the same investment option instead of receiving cash payments. This setting can be configured independently for each investment option associated with the account.
| accountId required | integer <int64> |
| investmentOptionId required | integer <int64> |
| drpvalue required | number <double> |
{- "drpvalue": 0
}Retrieves detailed information about a specific non-individual account using its unique identifier. The response includes complete account details including stakeholders, verification status, and other relevant information.
| accountId required | integer <int64> |
This endpoint updates the details of an existing Account.
Important rules and restrictions:
If any of the above details are incorrect, a new Account must be created instead of updating the existing one.
An account can be updated either via the API or by the Operations team through the Admin portal.
When the Operations team updates an account, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "account.updated",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Account Updated",
"body": {
"accountId": "1",
"externalAccountId": "1001",
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
}
| accountId required | integer <int64> |
string | |
| phoneNumber | string |
Array of objects (CreateAddressDto) unique | |
| externalAccountId | string [ 0 .. 100 ] characters |
| tags | Array of strings unique |
{- "email": "string",
- "phoneNumber": "string",
- "addresses": [
- {
- "state": "NSW",
- "postCode": "string",
- "pinCode": "string",
- "suburb": "string",
- "city": "string",
- "country": "AU",
- "subPremise": "string",
- "streetName": "string",
- "streetNumber": "string",
- "streetType": "string",
- "unitNumber": "string",
- "postalBox": "string",
- "buildingNumber": "string",
- "locality": "string",
- "addressType": "MAIN"
}
], - "externalAccountId": "string",
- "tags": [
- "string"
]
}This endpoint initiates the verification process for an account and all its stakeholders:
The account's verification status is updated based on the collective result of all stakeholder verifications.
An account can be verified either via the API or by the Operations team through the Admin portal.
When the Operations team verifies an account, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "kyc.account.success",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Account Verified",
"body": {
"accountId": "1",
"externalAccountId": "1001",
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
}
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "kyc.account.failed",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Account Verification Failed",
"body": {
"accountId": "1",
"externalAccountId": "1001",
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
}
| accountId required | integer <int64> |
Uploads a new document for the specified account. Supported documents include bank account verification, identification documents, proof of address, and other account-related documentation. Documents must be in PDF, JPG, or PNG format with a maximum size of 20MB.
| accountId required | integer <int64> |
required | object (UploadDocumentDto) |
Creates a new non-individual account with the provided details. This endpoint allows you to set up various account types including Company, Trust, and other non-individual entities. The account types JOINT_HOLDING, INDIVIDUAL, COMPANY, TRUST, and MINOR will be automatically marked as VERIFIED if their account stakeholders are already VERIFIED
The following rules apply to Registered Holders and Beneficial Holders based on the Account Type:
An account can be created either via the API or by the Operations team through the Admin portal.
When the Operations team creates an account, the system publishes the following webhook events:
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "account.created",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Account Created",
"body": {
"accountId": "1",
"externalAccountId": "1001",
"status" : ACTIVE,
"source" : ADMIN_PORTAL
}
}
| externalAccountId | string [ 0 .. 100 ] characters |
| nonIndividualAccountType required | string Enum: "INDIVIDUAL" "COMPANY" "JOINT_HOLDING" "SUPERANNUATION_FUND" "TRUST" "GOVERNMENT_ENTITY" "INCORPORATED_ASSOC" "UNINCORPORATED_ASSOC" "PARTNERSHIP" "CHARITABLE_TRUST" "SYNDICATE" "MINOR" "SMSF" "OTHER_ENTITY" "CORPORATION" "SOLE_TRADER" |
| email required | string |
| phoneNumber required | string |
| pdsReceivedInAustralia | boolean PDS Received in Australia should be set to TRUE if a non-Australian phone number is provided in the phoneNumber field. |
required | Array of objects (CreateAddressDto) unique |
| dateTimeOfRegister required | string <date-time> pattern = 'yyyy-MM-dd HH:mm:ss' |
| tags | Array of strings unique |
required | Array of objects (CreateAccountStakeholderDto) unique |
| drpStatus | boolean |
{- "externalAccountId": "string",
- "nonIndividualAccountType": "INDIVIDUAL",
- "email": "string",
- "phoneNumber": "string",
- "pdsReceivedInAustralia": true,
- "addresses": [
- {
- "state": "NSW",
- "postCode": "string",
- "pinCode": "string",
- "suburb": "string",
- "city": "string",
- "country": "AU",
- "subPremise": "string",
- "streetName": "string",
- "streetNumber": "string",
- "streetType": "string",
- "unitNumber": "string",
- "postalBox": "string",
- "buildingNumber": "string",
- "locality": "string",
- "addressType": "MAIN"
}
], - "dateTimeOfRegister": "2019-08-24T14:15:22Z",
- "tags": [
- "string"
], - "accountStakeholders": [
- {
- "stakeholderType": "ACCOUNT",
- "role": "REGISTER_HOLDER",
- "stakeholderNumber": "string"
}
], - "drpStatus": true
}A rollover is an investment procedure where:
- An Investor redeems units from one Fund held in one Account.
- The proceeds of this redemption are used by the Investor for an application for units in either the same Fund or a different one. This application is done within another Account, which can either be a new one or an existing one.
- A significant condition to be met is that the first and second Accounts need to have the same Interested Parties.
| fromAccountId required | integer <int64> |
| toAccountId required | integer <int64> |
| idempotencyKey required | string |
| fromFundId required | integer <int64> |
| toFundId required | integer <int64> |
| fromInvestmentOptionId required | integer <int64> |
| toInvestmentOptionId required | integer <int64> |
| fullRollover | boolean Default: true |
| amount | number |
{- "idempotencyKey": "string",
- "fromFundId": 0,
- "toFundId": 0,
- "fromInvestmentOptionId": 0,
- "toInvestmentOptionId": 0,
- "fullRollover": true,
- "amount": 0
}Bank details are optional. Cloned account shall use the bank details from the request. If no bank details are provided in the request, the System shall use the bank account details from the source account. In case, source account doesn't have any bank details and no bank details are provide in the request the account shall not have any bank details
| accountId required | integer <int64> |
| externalAccountId | string |
object (ClonedBankingDetailsDto) Bank details are optional. Cloned account shall use the bank details from the request. If no bank details are provided in the request, the System shall use the bank account details from the source account. In case, source account doesn't have any bank details and no bank details are provide in the request the account shall not have any bank details |
{- "externalAccountId": "string",
- "bankingDetails": {
- "bankBsb": "string",
- "bankAccountNumber": "string",
- "bankAccountName": "string"
}
}Returns a list of distribution details for a specific account within a given date range.
The response includes distribution details like payment amount, reinvestment amounts and units, and other details.
Both fromDate and toDate parameters are required and must be in yyyy-MM-dd format.
The date range is inclusive of both start and end dates.
Following webhook is published to notify clients that the distributions are completed for a specific period :
{
"fromDate": "2025-01-01",
"toDate": "2025-01-31"
}
| investorId required | integer <int64> |
| fromDate required | string <date> |
| toDate required | string <date> |
Search for non-individual accounts using various criteria. The search can be filtered by account status, type, creation date, and other parameters defined in the NonIndividualAccountPredicate. Results are paginated for better performance and data management.
required | object (NonIndividualAccountPredicate) |
Retrieves the Distribution Reinvestment Plan (DRP) status for a specific account. The response includes information about whether distributions are currently being reinvested and the reinvestment preferences for different investment options.
| accountId required | integer <int64> |
A Stakeholder can maintain multiple accounts for different purposes (e.g., trading, investment, retirement). This endpoint allows tagging an account with a specific purpose, making it easier to distinguish between multiple accounts belonging to the same Stakeholder.
Retrieves all tags that have been assigned to a specific investor. Tags can be used to categorize and filter investors for reporting and management purposes. Returns an empty set if no tags are associated with the investor.
| investorId required | integer <int64> |
This endpoint allows you to add one or more tags to an investor's account. Tags are useful for categorizing and filtering investors. If a tag already exists for the investor, it will not be duplicated.
| investorId required | integer <int64> |
| tags | Array of strings unique |
{- "tags": [
- "string"
]
}An Account can have only one active bank account at any given time.
This set of APIs is used to manage the banking details associated with an Account.
Following webhook is published when ops team updates banking details from admin portal
.Banking Details Updated Webhook Example:
{
"webhookId": "c38a7f71-2561-42ff-b333-1ef01ad85eb4",
"type": "investor.banking.updated",
"title": "Investor Banking Updated",
"body": {
"externalAccountId": "431638446828",
"investorId": 10
},
"publishedAt": "2021-11-10T14:17:58.150330Z"
}Returns the currently linked bank account details for the specified investor. This includes account name, BSB, account number and bank name.
If no bank account has been linked yet, the API will return a 404 Not Found response.
This endpoint is commonly used to display the account's current banking details before making updates or to verify payment destination details.
| investorId required | integer <int64> |
This API allows investors to update their bank details if their current holding is $0. If their holding is >$0 then you will need to contact the Cache support via email (with a bank statement of the new account) to update their bank details.
We only support standard Australian bank account & BSB. Australian banking standards mandate a 6 digit BSB and 6-9 digit account numbers. Only digits allowed. Furthermore, certain account numbers (ex, 999999 or 802919) are reserved and cannot be used.
For security reasons, we don’t allow special characters to be used in any of the input parameters. See below the regular expression we use for validation.
ACCEPTED_CHARACTERS_REGEX = \"^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ',.'-]{0,48}+$\";| investorId required | integer <int64> |
| bank_bsb required | string |
| bank_account_number required | string[0-9]+ |
| bank_account_name required | string^[a-zA-Zàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýż... Letters, spaces and following characters; +@!^$&'()*-:;=?.#_,[]/ |
{- "bank_bsb": "string",
- "bank_account_number": "string",
- "bank_account_name": "string"
}Creates a ‘linked bank account’ for an existing investor.
All direct debit requests and withdrawal payments may only be made to a linked bank account stored for the relevant investor.
At this time, each investor may only create one linked bank account.
We only support standard Australian bank account & BSB. Australian banking standards mandate a 6 digit BSB and 6-9 digit account numbers. Only digits allowed. Furthermore, certain account numbers (ex, 999999 or 802919) are reserved and cannot be used.
For security reasons, we don’t allow special characters to be used in any of the input parameters. See below the regular expression we use for validation.
ACCEPTED_CHARACTERS_REGEX = \"^[a-zA-ZàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýżźñçčšžÀÁÂÄÃÅĄĆČĖĘÈÉÊËÌÍÎÏĮŁŃÒÓÔÖÕØÙÚÛÜŲŪŸÝŻŹÑßÇŒÆČŠŽ∂ð ',.'-]{0,48}+$\";| investorId required | integer <int64> |
| bank_bsb required | string |
| bank_account_number required | string[0-9]+ |
| bank_account_name required | string^[a-zA-Zàáâäãåąčćęèéêëėįìíîïłńòóôöõøùúûüųūÿýż... Letters, spaces and following characters; +@!^$&'()*-:;=?.#_,[]/ |
{- "bank_bsb": "string",
- "bank_account_number": "string",
- "bank_account_name": "string"
}Account Holdings represent the assets or investments currently held within an Account.
These APIs provide functionality including :
Notes:
Provides a detailed snapshot of all current investments held by an existing investor. The response includes investment options, units held, and current valuation. Use isSecondVersion parameter for enhanced holding details.
| investorId required | integer <int64> |
| isSecondVersion | boolean |
Provides historical balance of investments held by an existing investor within a specified date range. Results can be filtered by instruction tags and include daily balance snapshots between the provided from and to dates.
| investorId required | integer <int64> |
| fromDate required | string <date> |
| toDate required | string <date> |
| instructionTags required | Array of strings unique |
Provides a snapshot of investments filtered by specified instruction tags for an existing investor. Tags are case-insensitive and can be used to group or categorize holdings based on investment instructions.
| investorId required | integer <int64> |
| instructionTags required | Array of strings unique |
Provides a balance of the investments held by an existing investor. Holding Balance has following Balance Logic Types.
| logicType | Description | When commonly used |
|---|---|---|
Actual |
The sum of all units held by investors and recorded on the register. | This is the 'legal' balance used for unit pricing and audit purposes. |
Cleared |
The 'Actual Balance' less any Applications that:
|
This is the balance of all transactions that are no longer at risk of defaulting. |
Projected |
The 'Actual Balance' less any Redemptions that have the Transaction Status 'Approved'. | This is the projected balance the Investment Option will have when all pending transactions into and out of the Investment Option have been processed. |
Requested |
The sum of:
|
|
Uncleared |
The 'Actual Balance' less the 'Cleared Balance'. | |
Pending |
The 'Requested Balance' plus the 'Uncleared Balance'. |
| investorId required | integer <int64> |
| logicType | string Enum: "Actual" "Cleared" "Available" "Projected" "Requested" "Uncleared" "Pending" |
| valueType | string Enum: "Value" "Cost" "Gain" |
| calculationType | string Enum: "FIFO" "LIFO" "VWAP" |
| isSecondVersion | boolean |
Investment Options represent the financial products that an account holder can select when investing.
Notes:
Investment Option Unit Price Updated Webhook Example:
{
"webhookId": "d13f0ef5-47fd-4992-b6d1-906e6ab608d2",
"type": "client.options.unitprice.updated",
"title": "Investment option unit-price updated",
"body": {
"investmentOptionId": 2,
"unitPrice": 17.11,
"unitPriceBuy": 18.6,
"unitPriceDate": "20220610",
"unitPriceSell": 10.11
},
"publishedAt": "2022-06-10T05:51:44.760508Z"
}Update the interest rate with a specified date for an investment option.
| investmentOptionId required | integer <int64> The ID that identifies the Investment Option on the Cache stack. |
| effectiveStartDate required | string <date> The Start Date which the interest rate commences. |
| effectiveEndDate required | string <date> The End Date which the interest rate ceases (inclusive). |
| baseRate | number <double> The base interest rate is reference rate to be applied over the Start and End Date (inclusive). If the rate only applies for one day then the Start and End Date will be the same. |
| spreadRate | number <double> This is the rate that will be added to the base rate to calculate the grossRate(final interest rate) to be applied to the investor’s accrual. If the interest rate applied to calculate the accrual has no spread then the Spread should be set to 0 and the baseRate should be populated with the grossRate. |
| interestAmount | number <double> The total amount of interest that has been accrued over the Start and End Date. If the amount is to be applied for a single day then the Start and End Date will be the same and correspond to the accrual day. If the amount applies over a period (eg. weekend) then the Start and End Date should correspond to the starting and ending date for the period. |
{- "investmentOptionId": 0,
- "effectiveStartDate": "2019-08-24",
- "effectiveEndDate": "2019-08-24",
- "baseRate": 0,
- "spreadRate": 0,
- "interestAmount": 0
}Returns an array of all the unit prices determined for an investment option within a date period.
The response will not provide a unit price for days on which a unit price was not determined (e.g. on a weekend or public holiday).
The 'fromDate' must be less than the 'toDate' and the 'toDate' must be less than or equal to today's date.
| investmentOptionId required | integer <int64> |
| fromDate | string <date> |
| toDate | string <date> |
Returns an array of all the interest rates determined for an investment option within a date period.
The response will not provide a unit price for days on which a unit price was not determined (e.g. on a weekend or public holiday).
The 'fromDate' must be less than the 'toDate' and the 'toDate' must be less than or equal to today's date.
| investmentOptionId required | integer <int64> |
| fromDate | string <date> |
| toDate | string <date> |
An Instruction is a request made by an Account Holder to initiate the processing of a transaction on their account.
Instructions can be submitted either via this API or through the Help Centre.
Notes:
Returns a list of all transaction instructions for an existing investor.
You may request a filtered list by ‘date’, ‘instruction type’ or ‘transaction type’ to reduce the volume of data returned.
| investorId required | integer <int64> |
| fromDate required | string <date> |
| toDate required | string <date> |
| instructionType | string Enum: "ONE_OFF" "RECURRING" "REINVESTMENT" |
| transactionType | string Enum: "APPLICATION" "REDEMPTION" "SWITCH" "ADJUSTMENT_UP" "ADJUSTMENT_DOWN" |
| tags required | Array of strings unique |
Creates a new ‘application’ transaction instruction, being a request by the investor to invest in the Fund.
Application transaction instructions may apply to more than 1 investment option and may be set to recur weekly, fortnightly or monthly. Recurring transactions may be set to recur a specified number of iterations, until a particular date has passed or until cancelled.
In case of direct debit as funding source sum of all applications is capped by direct debit limit of client (50000 by default). If application sum is exceeding this limit error will be occurred, to find out the limit check with Cache. Manual funding source is uncapped
Following webhooks are published for application instruction.
instruction.processed → notifies when instruction has been initiated manually by Ops team via Admin Portal See payload example:
{
"externalAccountId": "nonInd1734041221",
"investorId": 423
}
instruction.failed → notifies when instruction has failed See payload example:
{
"externalAccountId": "nonInd1734041773",
"instructionId": 2650,
"instructionTags": [],
"investmentOptionIds": [
7,
1
],
"investorId": 425,
"transactionType": "APPLICATION"
}
| investorId required | integer <int64> |
| funding_source required | string Enum: "MANUAL" "DIRECT_DEBIT" |
required | Array of objects (InvestmentOptionApplicationDto) At least one is required |
object (RecurringOptionsDto) | |
| idempotency_key required | string |
| instruction_tag | string |
{- "funding_source": "MANUAL",
- "investment_options": [
- {
- "investment_option_id": 0,
- "amount": 0
}
], - "recurring_options": {
- "start_date": "2019-08-24",
- "end_date": "2019-08-24",
- "cancellation_type": "MANUAL",
- "iterations_number": 0,
- "interval": "WEEKLY"
}, - "idempotency_key": "string",
- "instruction_tag": "string"
}Use this endpoint to creates a new 'redemption' instruction, which is a request by the Investor to withdraw money from the Fund. Each redemption instruction applies to one investment option only.
"Full Redemptions" (a redemption for all the "cleared" units held by an Investor): If Full Redemption is True, then both Units and Amount must be zero. "Partial Redemptions" (a redemption for less than all remaining units held by an Investor): If Full Redemption is False, then either Units or Amount must be provided and the other must be zero.
Redemptions created using this endpoint do not follow our "real time liquidity" payment flow. Note: We do not accept redemption instructions for uncleared or pending balances. Investors should be advised to wait until all pending applications are cleared (ie they are no longer pending) before seeking to make a Full Redemption. If an investor submits a Full Redemption while they have a "pending" application and the "pending" instruction is successful, the investor will ultimately retain a residual balance.
Following webhooks are published for redemption instruction:
instruction.processed → notifies when instruction has been initiated manually by Ops team via Admin Portal See payload example:
{
"externalAccountId": "nonInd1734041221",
"investorId": 423
}
instruction.failed → notifies when instruction has failed See payload example:
{
"externalAccountId": "nonInd1734041773",
"instructionId": 2650,
"instructionTags": [],
"investmentOptionIds": [
7,
1
],
"investorId": 425,
"transactionType": "REDEMPTION"
}
| investorId required | integer <int64> |
| full_redemption required | boolean false |
| units required | number |
| amount required | number |
| investment_option_id required | integer <int64> |
| idempotency_key required | string |
{- "full_redemption": true,
- "units": 0,
- "amount": 0,
- "investment_option_id": 0,
- "idempotency_key": "string"
}Creates a new ‘switch’ transaction instruction, being a request by the investor to move money from one investment option to another.
Following webhooks are published for webhook instruction.
instruction.processed → notifies when instruction has been initiated manually by Ops team via Admin Portal See payload example:
{
"externalAccountId": "nonInd1734041221",
"investorId": 423
}
instruction.failed → notifies when instruction has failed See payload example:
{
"externalAccountId": "nonInd1734041773",
"instructionId": 2650,
"instructionTags": [],
"investmentOptionIds": [
7,
1
],
"investorId": 425,
"transactionType": "SWITCH"
}
| investorId required | integer <int64> |
| value | boolean |
| investmentOption | boolean |
| from_investment_option_id required | integer <int64> |
| to_investment_option_id required | integer <int64> |
| amount required | number |
| units required | number |
| idempotency_key required | string |
| full_switch required | boolean Default: false |
{- "value": true,
- "investmentOption": true,
- "from_investment_option_id": 0,
- "to_investment_option_id": 0,
- "amount": 0,
- "units": 0,
- "idempotency_key": "string",
- "full_switch": false
}A Transaction represents the execution and settlement of an approved Instruction.
Transactions can be only created via back-office processing of Instructions.
Notes:
Processed Transaction Webhook Example for Application(similar webhook published for Redemption and Switch):
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "transaction.processed",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Transaction Processed (Application)",
"body": {
"externalAccountId": "1001",
"instructionId": "1",
"transactionType": "APPLICATION",
"instructionTags": [
"someTag1",
"someTag2"
],
"investmentOptionIds": [
1,
2
],
"investorId": 101,
"transactionId": 202
}
}Failed Transaction Webhook Example for Application(similar webhook published for Redemption and Switch):
{
"webhookId": "5ba28486-1ece-4786-bbed-21fca2235edf",
"type": "transaction.failed",
"publishedAt": "2021-09-13T07:44:44.712943Z",
"title": "Transaction Failed (Application)",
"body": {
"externalAccountId": "1001",
"instructionId": "1",
"transactionType": "APPLICATION",
"instructionTags": [
"someTag1",
"someTag2"
],
"investmentOptionIds": [
1,
2
],
"investorId": 101,
"transactionId": 202
}
}Investment Payment Processed Webhook Example:
{
"webhookId": "be03bd99-4bf4-4b1f-bd10-92f81891573b",
"type": "payment.processed.investment",
"title": "Payment Processed",
"body": {
"externalAccountId": "431637232492",
"instructionId": 4,
"investorId": 2,
"paymentSum": 1,
"transactionId": 4
},
"publishedAt": "2021-11-18T10:50:42.615311Z"
}Investment Payment Accepted Webhook Example:
{
"webhookId": "be03bd99-4bf4-4b1f-bd10-92f81891573b",
"type": "payment.accepted.investment",
"title": "Payment Accepted",
"body": {
"externalAccountId": "431637232492",
"instructionId": 4,
"investorId": 2,
"paymentSum": 1,
"transactionId": 4
},
"publishedAt": "2021-11-18T10:50:42.615311Z"
}Investment Payment Failed Webhook Example:
{
"webhookId": "be03bd99-4bf4-4b1f-bd10-92f81891573b",
"type": "payment.failed.investment",
"title": "Payment Failed: voided (invalid_bsb_number)",
"body": {
"externalAccountId": "431637232492",
"instructionId": 4,
"investorId": 2,
"paymentSum": 1,
"transactionId": 4
},
"publishedAt": "2021-11-18T10:50:42.615311Z"
}Investment Payment Refused Webhook Example:
{
"webhookId": "be03bd99-4bf4-4b1f-bd10-92f81891573b",
"type": "payment.refused.investment",
"title": "Payment Refused: declined",
"body": {
"externalAccountId": "431637232492",
"instructionId": 4,
"investorId": 2,
"paymentSum": 1,
"transactionId": 4
},
"publishedAt": "2021-11-18T10:50:42.615311Z"
}Unitised Transaction Webhook Example for Application(similar webhook published for Redemption and Switch):
{
"webhookId": "d855a831-54af-40f4-b412-cf1755004e48",
"type": "transactions.unitised",
"publishedAt": "2023-05-25T07:34:57.631854Z",
"title": "Unitised Transactions",
"body": {
"unitisedTransactions": [
{
"amount": 10,
"units": 5.464481,
"unitPrice": 1.83,
"transactionId": 274068,
"investmentOptionName": "Cache Non-Functional Testing Growth",
"investmentOptionId": 3,
"transactionStatus": "UNITISED",
"instructionId": 277658,
"fundingStatus": "FULLY_FUNDED"
},
{
"amount": 10,
"units": 0.967118,
"unitPrice": 10.34,
"transactionId": 274068,
"investmentOptionName": "Cache Non-Functional Testing Balanced",
"investmentOptionId": 2,
"transactionStatus": "UNITISED",
"instructionId": 277658,
"fundingStatus": "FULLY_FUNDED"
}
]
}
}Returns a list transactions retrieved by their IDs. The results will not include cancelled or rejected transaction instructions.
You may request a filtered list by ‘application’, ‘redemption’ or ‘switch’.
| page | integer <int32> |
| size | integer <int32> |
| sortDirection | string Enum: "ASC" "DESC" |
| sortColumn | string Enum: "id" "instructionId" "investorId" "cxiRequestNumber" "transactionType" "fundingSource" "dateCreated" Column name to sort |
| ids | Array of integers <int64> unique [ items <int64 > ] Transaction ids |
{- "page": 0,
- "size": 0,
- "sortDirection": "ASC",
- "sortColumn": "id",
- "ids": [
- 0
]
}Returns a list of all transactions for an existing investor. This is a historic record of the actual transactions that have been processed on behalf of an investor, and will not include cancelled or rejected transaction instructions.
You may request a filtered list by ‘application’, ‘redemption’ or ‘switch’.
| investorId required | integer <int64> |
| transactionType | string Enum: "APPLICATION" "REDEMPTION" "SWITCH" "ADJUSTMENT_UP" "ADJUSTMENT_DOWN" |
| instructionType | string Enum: "ONE_OFF" "RECURRING" "REINVESTMENT" |
| fromDate required | string <date> |
| toDate required | string <date> |
| instructionTags required | Array of strings unique |
Retrieves detailed information for a specific transaction, including transaction status, amounts, dates, and associated metadata. The transaction must belong to the specified account ID.
| investorId required | integer <int64> |
| transactionId required | integer <int64> |
Returns a list of all transactions that match the specified transaction tags. Tags are case-insensitive and can be used to filter transactions based on custom categorization or grouping criteria.
| transactionTags required | Array of strings unique |
Use this API to retrieve the transaction fees that will apply to a transaction instruction.
For an application investment instruction (which may relate to multiple investment options), you can provide an array of investment options with investment amounts.
For a redemption (which only apply to a single investment option), you may provide an array of 1 investment option.
For a switch, you may provide an array of 1 investment option which relates to the option you are switching into (do not include the details of the investment option you are switching out of).
You can also provide amounts ‘inclusive’ of the transaction fee (ie the ‘gross amount’) or ‘exclusive’ of the transaction fee (ie the ‘net amount’) by selecting the appropriate ‘fee type’. Please note: this only applies to Application transaction types.
Redemption and switch transactions are always fee inclusive (fee_type parameter will be ignored for these operations).
| fee_type required | string Enum: "INCLUSIVE" "EXCLUSIVE" |
| transaction_type required | string Enum: "APPLICATION" "REDEMPTION" "SWITCH" "ADJUSTMENT_UP" "ADJUSTMENT_DOWN" |
required | Array of objects (FeeCalculationInvestmentOptionRequest) |
{- "fee_type": "INCLUSIVE",
- "transaction_type": "APPLICATION",
- "investment_options": [
- {
- "investment_option_id": 0,
- "amount": 0,
- "unit": 0
}
]
}Performs full funding and unitisation of specified transactions. WARNING: This operation is only available in the Sandbox environment and should not be used in production.
| ids | Array of integers <int64> unique [ items <int64 > ] |
{- "ids": [
- 0
]
}Creates a daily unit price for investment options in the Sandbox environment only. This endpoint is for testing purposes and will not work in production.
| investment_option_id | integer <int64> |
| unit_price | number <double> |
| unit_price_buy | number <double> |
| unit_price_sell | number <double> |
| price_date | string <date> |
| price_effective_time | string |
{- "investment_option_id": 0,
- "unit_price": 0,
- "unit_price_buy": 0,
- "unit_price_sell": 0,
- "price_date": "2019-08-24",
- "price_effective_time": "string"
}Application instructions can be funded through Direct Debit or Manual funding methods. Invoices are generated for manually funded transactions to track and process payments.
Invoice Generated Webhook Example:
{
"webhookId": "db594772-4b79-41f9-9d7b-6436e11e32bf",
"type": "invoice.generated",
"title": "Invoice is issued by administrator",
"body": {
"invoiceCode": "INV-3-20211202-002"
},
"publishedAt": "2021-12-20T00:03:03.552897Z"
}Updates the paid amount for an invoice using its reference code. Requires payment amount in the request body. Returns updated invoice details including new payment status and remaining balance.
| invoiceCode required | string |
| paidAmount | number <double> |
{- "paidAmount": 0
}Some products on the Cache platform charge Accountholders:
That money is charged to the Accountholder personally (ie it is not charged to the Fund as a whole). We call this a 'Subscription' and we refer to the amounts charged as 'Subscription Fees'.
Investor Subscription Created Webhook Example:
{
"webhookId": "d2fb18df-52c0-4a21-bc5a-533ab574cc68",
"type": "investor.subscription.created",
"title": "Subscription for Investor was created",
"body": {
"externalAccountId": "431638446828",
"investorId": 5
},
"publishedAt": "2022-01-20T09:07:06.118100Z"
}Payment Accepted Webhook Example:
{
"webhookId": "db1cf05d-b886-4389-9d59-59e4b9054710",
"type": "payment.accepted.subscription",
"title": "Payment Success: approved (attempt 1 out of 3)",
"body": {
"externalAccountId": "431637232492",
"investorId": 2,
"maxPaymentAttempt": 3,
"paymentAttempt": 1,
"paymentSum": 0.15
},
"publishedAt": "2022-02-09T13:59:58.498958Z"
}Payment Failed Webhook Example:
{
"webhookId": "db0b708d-e3b2-4119-ab3d-d0b9d4fdff9e",
"type": "payment.failed.subscription",
"title": "Payment Failed: voided (invalid_bsb_number)",
"body": {
"externalAccountId": "431637232492",
"investorId": 2,
"paymentSum": 5.5
},
"publishedAt": "2021-11-25T07:34:57.631854Z"
}Payment Refused Webhook Example:
{
"webhookId": "db0b708d-e3b2-4119-ab3d-d0b9d4fdff9e",
"type": "payment.refused.subscription",
"title": "Payment Refused: declined",
"body": {
"externalAccountId": "431637232492",
"investorId": 2,
"paymentSum": 5.5
},
"publishedAt": "2021-11-25T07:34:57.631854Z"
}This endpoint calculates subscription fees based on the provided settings and holdings data. The calculation takes into account the investment amount, fee period, and other relevant parameters specified in the request.
| investorId required | integer <int64> |
required | object (SubscriptionConfigsDto) |
required | object (SubscriptionHoldingsInfoDto) |
{- "configs": {
- "enabled": true,
- "thresholdPeriodDays": 1,
- "thresholdTotalHoldings": 100,
- "waterfallCalculationsEnabled": true,
- "fundingSource": "INVESTOR_BANKING",
- "bracketConfigs": [
- {
- "rule": "TOTAL_HOLDINGS_AMOUNT",
- "priorityOrder": 0,
- "bracketMin": 0,
- "bracketMax": 1000,
- "chargeAmountFixed": 2,
- "chargeAmountPercentage": 0.02
}
], - "value": true
}, - "holdingDetails": {
- "cycleStart": "string",
- "holdings": [
- {
- "investmentOptionId": 0,
- "holdingDate": "string",
- "holdingValue": 0
}
], - "value": true
}
}This endpoint retrieves information relating to the Subscription Fee Period that the Investor is currently in (including dates and estimated fee amount).The API shall throw exception "No holding available for this period" if the investor doesn't have any cleared holdings.
| investorId required | integer <int64> |
Updates the status of an investor's subscription payment to successful. This operation is typically called after receiving a successful payment confirmation from the payment gateway. The operation will update both the payment record and the associated subscription billing status.
| investorId required | integer <int64> |
| cachePaymentId required | integer <int64> |
Retrieves a paginated list of subscription payment details for a specific investor. The results include payment status, amount, dates, and associated subscription information. Results can be filtered and sorted using pagination parameters.
| investorId required | integer <int64> |
required | object (PageDto) |
The Cache system produces different reports. When a report is generated, the system will publish the following webhook
Report Generate Success Webhook Example:
{
"webhookId": "d13f0ef5-47fd-4992-b6d1-906e6ab608d2",
"type": "report.generate.success",
"title": " Generate Success",
"body": {
"reportCreatedAt": "2025-06-05T07:56:50.403166Z",
"reportJobId": 134,
"reportTotalCount": 5,
"reportType": "TRANSACTION_CONFIRMATION"
},
"publishedAt": "2022-06-10T05:51:44.760508Z"
} Retrieves a list of available reports for the specified account. Reports can be filtered by type and date range. Available report types:
| accountId required | integer <int64> |
| reportType | string Enum: "FOOTER" "ACCOUNT_PERIODIC_STATEMENT" "ACCOUNT_HOLDING_STATEMENT" "TRANSACTION_CONFIRMATION" "DISTRIBUTION_STATEMENT" "ACCOUNT_TRANSACTION_STATEMENT" "TAX_STATEMENT" |
| fromDate | string <date> |
| toDate | string <date> |
Downloads a specific report in PDF format for the given account and report job ID. An optional custom filename can be specified for the downloaded file.
| accountId required | integer <int64> |
| jobId required | integer <int64> |
| saveFileName | string |